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.5.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
887          -fprofile-reproducible=[multithreaded|parallel-runs|serial]
888          -fsanitize=STYLE  -fsanitize-recover  -fsanitize-recover=STYLE
889          -fasan-shadow-offset=NUMBER  -fsanitize-sections=S1,S2,...
890          -fsanitize-undefined-trap-on-error  -fbounds-check
891          -fcf-protection=[full|branch|return|none|check]
892          -fstack-protector  -fstack-protector-all  -fstack-protector-strong
893          -fstack-protector-explicit  -fstack-check
894          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
895          -fno-stack-limit  -fsplit-stack
896          -fvtable-verify=[std|preinit|none]
897          -fvtv-counts  -fvtv-debug
898          -finstrument-functions
899          -finstrument-functions-exclude-function-list=SYM,SYM,...
900          -finstrument-functions-exclude-file-list=FILE,FILE,...
901
902_Preprocessor Options_
903     *Note Options Controlling the Preprocessor: Preprocessor Options.
904          -AQUESTION=ANSWER
905          -A-QUESTION[=ANSWER]
906          -C  -CC  -DMACRO[=DEFN]
907          -dD  -dI  -dM  -dN  -dU
908          -fdebug-cpp  -fdirectives-only  -fdollars-in-identifiers
909          -fexec-charset=CHARSET  -fextended-identifiers
910          -finput-charset=CHARSET  -fmacro-prefix-map=OLD=NEW
911          -fmax-include-depth=DEPTH
912          -fno-canonical-system-headers  -fpch-deps  -fpch-preprocess
913          -fpreprocessed  -ftabstop=WIDTH  -ftrack-macro-expansion
914          -fwide-exec-charset=CHARSET  -fworking-directory
915          -H  -imacros FILE  -include FILE
916          -M  -MD  -MF  -MG  -MM  -MMD  -MP  -MQ  -MT
917          -no-integrated-cpp  -P  -pthread  -remap
918          -traditional  -traditional-cpp  -trigraphs
919          -UMACRO  -undef
920          -Wp,OPTION  -Xpreprocessor OPTION
921
922_Assembler Options_
923     *Note Passing Options to the Assembler: Assembler Options.
924          -Wa,OPTION  -Xassembler OPTION
925
926_Linker Options_
927     *Note Options for Linking: Link Options.
928          OBJECT-FILE-NAME  -fuse-ld=LINKER  -lLIBRARY
929          -nostartfiles  -nodefaultlibs  -nolibc  -nostdlib
930          -e ENTRY  --entry=ENTRY
931          -pie  -pthread  -r  -rdynamic
932          -s  -static  -static-pie  -static-libgcc  -static-libstdc++
933          -static-libasan  -static-libtsan  -static-liblsan  -static-libubsan
934          -shared  -shared-libgcc  -symbolic
935          -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
936          -u SYMBOL  -z KEYWORD
937
938_Directory Options_
939     *Note Options for Directory Search: Directory Options.
940          -BPREFIX  -IDIR  -I-
941          -idirafter DIR
942          -imacros FILE  -imultilib DIR
943          -iplugindir=DIR  -iprefix FILE
944          -iquote DIR  -isysroot DIR  -isystem DIR
945          -iwithprefix DIR  -iwithprefixbefore DIR
946          -LDIR  -no-canonical-prefixes  --no-sysroot-suffix
947          -nostdinc  -nostdinc++  --sysroot=DIR
948
949_Code Generation Options_
950     *Note Options for Code Generation Conventions: Code Gen Options.
951          -fcall-saved-REG  -fcall-used-REG
952          -ffixed-REG  -fexceptions
953          -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
954          -fasynchronous-unwind-tables
955          -fno-gnu-unique
956          -finhibit-size-directive  -fcommon  -fno-ident
957          -fpcc-struct-return  -fpic  -fPIC  -fpie  -fPIE  -fno-plt
958          -fno-jump-tables
959          -frecord-gcc-switches
960          -freg-struct-return  -fshort-enums  -fshort-wchar
961          -fverbose-asm  -fpack-struct[=N]
962          -fleading-underscore  -ftls-model=MODEL
963          -fstack-reuse=REUSE_LEVEL
964          -ftrampolines  -ftrapv  -fwrapv
965          -fvisibility=[default|internal|hidden|protected]
966          -fstrict-volatile-bitfields  -fsync-libcalls
967
968_Developer Options_
969     *Note GCC Developer Options: Developer Options.
970          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
971          -dumpfullversion  -fcallgraph-info[=su,da]
972          -fchecking  -fchecking=N
973          -fdbg-cnt-list   -fdbg-cnt=COUNTER-VALUE-LIST
974          -fdisable-ipa-PASS_NAME
975          -fdisable-rtl-PASS_NAME
976          -fdisable-rtl-PASS-NAME=RANGE-LIST
977          -fdisable-tree-PASS_NAME
978          -fdisable-tree-PASS-NAME=RANGE-LIST
979          -fdump-debug  -fdump-earlydebug
980          -fdump-noaddr  -fdump-unnumbered  -fdump-unnumbered-links
981          -fdump-final-insns[=FILE]
982          -fdump-ipa-all  -fdump-ipa-cgraph  -fdump-ipa-inline
983          -fdump-lang-all
984          -fdump-lang-SWITCH
985          -fdump-lang-SWITCH-OPTIONS
986          -fdump-lang-SWITCH-OPTIONS=FILENAME
987          -fdump-passes
988          -fdump-rtl-PASS  -fdump-rtl-PASS=FILENAME
989          -fdump-statistics
990          -fdump-tree-all
991          -fdump-tree-SWITCH
992          -fdump-tree-SWITCH-OPTIONS
993          -fdump-tree-SWITCH-OPTIONS=FILENAME
994          -fcompare-debug[=OPTS]  -fcompare-debug-second
995          -fenable-KIND-PASS
996          -fenable-KIND-PASS=RANGE-LIST
997          -fira-verbose=N
998          -flto-report  -flto-report-wpa  -fmem-report-wpa
999          -fmem-report  -fpre-ipa-mem-report  -fpost-ipa-mem-report
1000          -fopt-info  -fopt-info-OPTIONS[=FILE]
1001          -fprofile-report
1002          -frandom-seed=STRING  -fsched-verbose=N
1003          -fsel-sched-verbose  -fsel-sched-dump-cfg  -fsel-sched-pipelining-verbose
1004          -fstats  -fstack-usage  -ftime-report  -ftime-report-details
1005          -fvar-tracking-assignments-toggle  -gtoggle
1006          -print-file-name=LIBRARY  -print-libgcc-file-name
1007          -print-multi-directory  -print-multi-lib  -print-multi-os-directory
1008          -print-prog-name=PROGRAM  -print-search-dirs  -Q
1009          -print-sysroot  -print-sysroot-headers-suffix
1010          -save-temps  -save-temps=cwd  -save-temps=obj  -time[=FILE]
1011
1012_Machine-Dependent Options_
1013     *Note Machine-Dependent Options: Submodel Options.
1014
1015     _AArch64 Options_
1016          -mabi=NAME  -mbig-endian  -mlittle-endian
1017          -mgeneral-regs-only
1018          -mcmodel=tiny  -mcmodel=small  -mcmodel=large
1019          -mstrict-align  -mno-strict-align
1020          -momit-leaf-frame-pointer
1021          -mtls-dialect=desc  -mtls-dialect=traditional
1022          -mtls-size=SIZE
1023          -mfix-cortex-a53-835769  -mfix-cortex-a53-843419
1024          -mlow-precision-recip-sqrt  -mlow-precision-sqrt  -mlow-precision-div
1025          -mpc-relative-literal-loads
1026          -msign-return-address=SCOPE
1027          -mbranch-protection=NONE|STANDARD|PAC-RET[+LEAF
1028          +B-KEY]|BTI
1029          -mharden-sls=OPTS
1030          -march=NAME  -mcpu=NAME  -mtune=NAME
1031          -moverride=STRING  -mverbose-cost-dump
1032          -mstack-protector-guard=GUARD -mstack-protector-guard-reg=SYSREG
1033          -mstack-protector-guard-offset=OFFSET -mtrack-speculation
1034          -moutline-atomics
1035
1036     _Adapteva Epiphany Options_
1037          -mhalf-reg-file  -mprefer-short-insn-regs
1038          -mbranch-cost=NUM  -mcmove  -mnops=NUM  -msoft-cmpsf
1039          -msplit-lohi  -mpost-inc  -mpost-modify  -mstack-offset=NUM
1040          -mround-nearest  -mlong-calls  -mshort-calls  -msmall16
1041          -mfp-mode=MODE  -mvect-double  -max-vect-align=NUM
1042          -msplit-vecmove-early  -m1reg-REG
1043
1044     _AMD GCN Options_
1045          -march=GPU -mtune=GPU -mstack-size=BYTES
1046
1047     _ARC Options_
1048          -mbarrel-shifter  -mjli-always
1049          -mcpu=CPU  -mA6  -mARC600  -mA7  -mARC700
1050          -mdpfp  -mdpfp-compact  -mdpfp-fast  -mno-dpfp-lrsr
1051          -mea  -mno-mpy  -mmul32x16  -mmul64  -matomic
1052          -mnorm  -mspfp  -mspfp-compact  -mspfp-fast  -msimd  -msoft-float  -mswap
1053          -mcrc  -mdsp-packa  -mdvbf  -mlock  -mmac-d16  -mmac-24  -mrtsc  -mswape
1054          -mtelephony  -mxy  -misize  -mannotate-align  -marclinux  -marclinux_prof
1055          -mlong-calls  -mmedium-calls  -msdata  -mirq-ctrl-saved
1056          -mrgf-banked-regs  -mlpc-width=WIDTH  -G NUM
1057          -mvolatile-cache  -mtp-regno=REGNO
1058          -malign-call  -mauto-modify-reg  -mbbit-peephole  -mno-brcc
1059          -mcase-vector-pcrel  -mcompact-casesi  -mno-cond-exec  -mearly-cbranchsi
1060          -mexpand-adddi  -mindexed-loads  -mlra  -mlra-priority-none
1061          -mlra-priority-compact mlra-priority-noncompact  -mmillicode
1062          -mmixed-code  -mq-class  -mRcq  -mRcw  -msize-level=LEVEL
1063          -mtune=CPU  -mmultcost=NUM  -mcode-density-frame
1064          -munalign-prob-threshold=PROBABILITY  -mmpy-option=MULTO
1065          -mdiv-rem  -mcode-density  -mll64  -mfpu=FPU  -mrf16  -mbranch-index
1066
1067     _ARM Options_
1068          -mapcs-frame  -mno-apcs-frame
1069          -mabi=NAME
1070          -mapcs-stack-check  -mno-apcs-stack-check
1071          -mapcs-reentrant  -mno-apcs-reentrant
1072          -mgeneral-regs-only
1073          -msched-prolog  -mno-sched-prolog
1074          -mlittle-endian  -mbig-endian
1075          -mbe8  -mbe32
1076          -mfloat-abi=NAME
1077          -mfp16-format=NAME
1078          -mthumb-interwork  -mno-thumb-interwork
1079          -mcpu=NAME  -march=NAME  -mfpu=NAME
1080          -mtune=NAME  -mprint-tune-info
1081          -mstructure-size-boundary=N
1082          -mabort-on-noreturn
1083          -mlong-calls  -mno-long-calls
1084          -msingle-pic-base  -mno-single-pic-base
1085          -mpic-register=REG
1086          -mnop-fun-dllimport
1087          -mpoke-function-name
1088          -mthumb  -marm  -mflip-thumb
1089          -mtpcs-frame  -mtpcs-leaf-frame
1090          -mcaller-super-interworking  -mcallee-super-interworking
1091          -mtp=NAME  -mtls-dialect=DIALECT
1092          -mword-relocations
1093          -mfix-cortex-m3-ldrd
1094          -munaligned-access
1095          -mneon-for-64bits
1096          -mslow-flash-data
1097          -masm-syntax-unified
1098          -mrestrict-it
1099          -mverbose-cost-dump
1100          -mpure-code
1101          -mcmse
1102          -mfix-cmse-cve-2021-35465
1103          -mfdpic
1104
1105     _AVR Options_
1106          -mmcu=MCU  -mabsdata  -maccumulate-args
1107          -mbranch-cost=COST
1108          -mcall-prologues  -mgas-isr-prologues  -mint8
1109          -mdouble=BITS -mlong-double=BITS
1110          -mn_flash=SIZE  -mno-interrupts
1111          -mmain-is-OS_task  -mrelax  -mrmw  -mstrict-X  -mtiny-stack
1112          -mfract-convert-truncate
1113          -mshort-calls  -nodevicelib  -nodevicespecs
1114          -Waddr-space-convert  -Wmisspelled-isr
1115
1116     _Blackfin Options_
1117          -mcpu=CPU[-SIREVISION]
1118          -msim  -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
1119          -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
1120          -mlow-64k  -mno-low64k  -mstack-check-l1  -mid-shared-library
1121          -mno-id-shared-library  -mshared-library-id=N
1122          -mleaf-id-shared-library  -mno-leaf-id-shared-library
1123          -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
1124          -mfast-fp  -minline-plt  -mmulticore  -mcorea  -mcoreb  -msdram
1125          -micplb
1126
1127     _C6X Options_
1128          -mbig-endian  -mlittle-endian  -march=CPU
1129          -msim  -msdata=SDATA-TYPE
1130
1131     _CRIS Options_
1132          -mcpu=CPU  -march=CPU  -mtune=CPU
1133          -mmax-stack-frame=N  -melinux-stacksize=N
1134          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
1135          -mstack-align  -mdata-align  -mconst-align
1136          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
1137          -melf  -maout  -melinux  -mlinux  -sim  -sim2
1138          -mmul-bug-workaround  -mno-mul-bug-workaround
1139
1140     _CR16 Options_
1141          -mmac
1142          -mcr16cplus  -mcr16c
1143          -msim  -mint32  -mbit-ops
1144          -mdata-model=MODEL
1145
1146     _C-SKY Options_
1147          -march=ARCH  -mcpu=CPU
1148          -mbig-endian  -EB  -mlittle-endian  -EL
1149          -mhard-float  -msoft-float  -mfpu=FPU  -mdouble-float  -mfdivdu
1150          -melrw  -mistack  -mmp  -mcp  -mcache  -msecurity  -mtrust
1151          -mdsp  -medsp  -mvdsp
1152          -mdiv  -msmart  -mhigh-registers  -manchor
1153          -mpushpop  -mmultiple-stld  -mconstpool  -mstack-size  -mccrt
1154          -mbranch-cost=N  -mcse-cc  -msched-prolog
1155
1156     _Darwin Options_
1157          -all_load  -allowable_client  -arch  -arch_errors_fatal
1158          -arch_only  -bind_at_load  -bundle  -bundle_loader
1159          -client_name  -compatibility_version  -current_version
1160          -dead_strip
1161          -dependency-file  -dylib_file  -dylinker_install_name
1162          -dynamic  -dynamiclib  -exported_symbols_list
1163          -filelist  -flat_namespace  -force_cpusubtype_ALL
1164          -force_flat_namespace  -headerpad_max_install_names
1165          -iframework
1166          -image_base  -init  -install_name  -keep_private_externs
1167          -multi_module  -multiply_defined  -multiply_defined_unused
1168          -noall_load   -no_dead_strip_inits_and_terms
1169          -nofixprebinding  -nomultidefs  -noprebind  -noseglinkedit
1170          -pagezero_size  -prebind  -prebind_all_twolevel_modules
1171          -private_bundle  -read_only_relocs  -sectalign
1172          -sectobjectsymbols  -whyload  -seg1addr
1173          -sectcreate  -sectobjectsymbols  -sectorder
1174          -segaddr  -segs_read_only_addr  -segs_read_write_addr
1175          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
1176          -segprot  -segs_read_only_addr  -segs_read_write_addr
1177          -single_module  -static  -sub_library  -sub_umbrella
1178          -twolevel_namespace  -umbrella  -undefined
1179          -unexported_symbols_list  -weak_reference_mismatches
1180          -whatsloaded  -F  -gused  -gfull  -mmacosx-version-min=VERSION
1181          -mkernel  -mone-byte-bool
1182
1183     _DEC Alpha Options_
1184          -mno-fp-regs  -msoft-float
1185          -mieee  -mieee-with-inexact  -mieee-conformant
1186          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
1187          -mtrap-precision=MODE  -mbuild-constants
1188          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
1189          -mbwx  -mmax  -mfix  -mcix
1190          -mfloat-vax  -mfloat-ieee
1191          -mexplicit-relocs  -msmall-data  -mlarge-data
1192          -msmall-text  -mlarge-text
1193          -mmemory-latency=TIME
1194
1195     _eBPF Options_
1196          -mbig-endian -mlittle-endian -mkernel=VERSION
1197          -mframe-limit=BYTES -mxbpf
1198
1199     _FR30 Options_
1200          -msmall-model  -mno-lsim
1201
1202     _FT32 Options_
1203          -msim  -mlra  -mnodiv  -mft32b  -mcompress  -mnopm
1204
1205     _FRV Options_
1206          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
1207          -mhard-float  -msoft-float
1208          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
1209          -mdouble  -mno-double
1210          -mmedia  -mno-media  -mmuladd  -mno-muladd
1211          -mfdpic  -minline-plt  -mgprel-ro  -multilib-library-pic
1212          -mlinked-fp  -mlong-calls  -malign-labels
1213          -mlibrary-pic  -macc-4  -macc-8
1214          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
1215          -moptimize-membar  -mno-optimize-membar
1216          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
1217          -mvliw-branch  -mno-vliw-branch
1218          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
1219          -mno-nested-cond-exec  -mtomcat-stats
1220          -mTLS  -mtls
1221          -mcpu=CPU
1222
1223     _GNU/Linux Options_
1224          -mglibc  -muclibc  -mmusl  -mbionic  -mandroid
1225          -tno-android-cc  -tno-android-ld
1226
1227     _H8/300 Options_
1228          -mrelax  -mh  -ms  -mn  -mexr  -mno-exr  -mint32  -malign-300
1229
1230     _HPPA Options_
1231          -march=ARCHITECTURE-TYPE
1232          -mcaller-copies  -mdisable-fpregs  -mdisable-indexing
1233          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
1234          -mfixed-range=REGISTER-RANGE
1235          -mjump-in-delay  -mlinker-opt  -mlong-calls
1236          -mlong-load-store  -mno-disable-fpregs
1237          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
1238          -mno-jump-in-delay  -mno-long-load-store
1239          -mno-portable-runtime  -mno-soft-float
1240          -mno-space-regs  -msoft-float  -mpa-risc-1-0
1241          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
1242          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
1243          -munix=UNIX-STD  -nolibdld  -static  -threads
1244
1245     _IA-64 Options_
1246          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
1247          -mvolatile-asm-stop  -mregister-names  -msdata  -mno-sdata
1248          -mconstant-gp  -mauto-pic  -mfused-madd
1249          -minline-float-divide-min-latency
1250          -minline-float-divide-max-throughput
1251          -mno-inline-float-divide
1252          -minline-int-divide-min-latency
1253          -minline-int-divide-max-throughput
1254          -mno-inline-int-divide
1255          -minline-sqrt-min-latency  -minline-sqrt-max-throughput
1256          -mno-inline-sqrt
1257          -mdwarf2-asm  -mearly-stop-bits
1258          -mfixed-range=REGISTER-RANGE  -mtls-size=TLS-SIZE
1259          -mtune=CPU-TYPE  -milp32  -mlp64
1260          -msched-br-data-spec  -msched-ar-data-spec  -msched-control-spec
1261          -msched-br-in-data-spec  -msched-ar-in-data-spec  -msched-in-control-spec
1262          -msched-spec-ldc  -msched-spec-control-ldc
1263          -msched-prefer-non-data-spec-insns  -msched-prefer-non-control-spec-insns
1264          -msched-stop-bits-after-every-cycle  -msched-count-spec-in-critical-path
1265          -msel-sched-dont-check-control-spec  -msched-fp-mem-deps-zero-cost
1266          -msched-max-memory-insns-hard-limit  -msched-max-memory-insns=MAX-INSNS
1267
1268     _LM32 Options_
1269          -mbarrel-shift-enabled  -mdivide-enabled  -mmultiply-enabled
1270          -msign-extend-enabled  -muser-enabled
1271
1272     _M32R/D Options_
1273          -m32r2  -m32rx  -m32r
1274          -mdebug
1275          -malign-loops  -mno-align-loops
1276          -missue-rate=NUMBER
1277          -mbranch-cost=NUMBER
1278          -mmodel=CODE-SIZE-MODEL-TYPE
1279          -msdata=SDATA-TYPE
1280          -mno-flush-func  -mflush-func=NAME
1281          -mno-flush-trap  -mflush-trap=NUMBER
1282          -G NUM
1283
1284     _M32C Options_
1285          -mcpu=CPU  -msim  -memregs=NUMBER
1286
1287     _M680x0 Options_
1288          -march=ARCH  -mcpu=CPU  -mtune=TUNE
1289          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
1290          -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
1291          -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
1292          -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
1293          -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
1294          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
1295          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
1296          -mxgot  -mno-xgot  -mlong-jump-table-offsets
1297
1298     _MCore Options_
1299          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
1300          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
1301          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
1302          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
1303          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
1304
1305     _MeP Options_
1306          -mabsdiff  -mall-opts  -maverage  -mbased=N  -mbitops
1307          -mc=N  -mclip  -mconfig=NAME  -mcop  -mcop32  -mcop64  -mivc2
1308          -mdc  -mdiv  -meb  -mel  -mio-volatile  -ml  -mleadz  -mm  -mminmax
1309          -mmult  -mno-opts  -mrepeat  -ms  -msatur  -msdram  -msim  -msimnovec  -mtf
1310          -mtiny=N
1311
1312     _MicroBlaze Options_
1313          -msoft-float  -mhard-float  -msmall-divides  -mcpu=CPU
1314          -mmemcpy  -mxl-soft-mul  -mxl-soft-div  -mxl-barrel-shift
1315          -mxl-pattern-compare  -mxl-stack-check  -mxl-gp-opt  -mno-clearbss
1316          -mxl-multiply-high  -mxl-float-convert  -mxl-float-sqrt
1317          -mbig-endian  -mlittle-endian  -mxl-reorder  -mxl-mode-APP-MODEL
1318          -mpic-data-is-text-relative
1319
1320     _MIPS Options_
1321          -EL  -EB  -march=ARCH  -mtune=ARCH
1322          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5
1323          -mips32r6  -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6
1324          -mips16  -mno-mips16  -mflip-mips16
1325          -minterlink-compressed  -mno-interlink-compressed
1326          -minterlink-mips16  -mno-interlink-mips16
1327          -mabi=ABI  -mabicalls  -mno-abicalls
1328          -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
1329          -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64  -mhard-float  -msoft-float
1330          -mno-float  -msingle-float  -mdouble-float
1331          -modd-spreg  -mno-odd-spreg
1332          -mabs=MODE  -mnan=ENCODING
1333          -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
1334          -mmcu  -mmno-mcu
1335          -meva  -mno-eva
1336          -mvirt  -mno-virt
1337          -mxpa  -mno-xpa
1338          -mcrc  -mno-crc
1339          -mginv  -mno-ginv
1340          -mmicromips  -mno-micromips
1341          -mmsa  -mno-msa
1342          -mloongson-mmi  -mno-loongson-mmi
1343          -mloongson-ext  -mno-loongson-ext
1344          -mloongson-ext2  -mno-loongson-ext2
1345          -mfpu=FPU-TYPE
1346          -msmartmips  -mno-smartmips
1347          -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
1348          -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
1349          -mlong64  -mlong32  -msym32  -mno-sym32
1350          -GNUM  -mlocal-sdata  -mno-local-sdata
1351          -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
1352          -membedded-data  -mno-embedded-data
1353          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
1354          -mcode-readable=SETTING
1355          -msplit-addresses  -mno-split-addresses
1356          -mexplicit-relocs  -mno-explicit-relocs
1357          -mcheck-zero-division  -mno-check-zero-division
1358          -mdivide-traps  -mdivide-breaks
1359          -mload-store-pairs  -mno-load-store-pairs
1360          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
1361          -mmad  -mno-mad  -mimadd  -mno-imadd  -mfused-madd  -mno-fused-madd  -nocpp
1362          -mfix-24k  -mno-fix-24k
1363          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
1364          -mfix-r5900  -mno-fix-r5900
1365          -mfix-r10000  -mno-fix-r10000  -mfix-rm7000  -mno-fix-rm7000
1366          -mfix-vr4120  -mno-fix-vr4120
1367          -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
1368          -mflush-func=FUNC  -mno-flush-func
1369          -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
1370          -mcompact-branches=POLICY
1371          -mfp-exceptions  -mno-fp-exceptions
1372          -mvr4130-align  -mno-vr4130-align  -msynci  -mno-synci
1373          -mlxc1-sxc1  -mno-lxc1-sxc1  -mmadd4  -mno-madd4
1374          -mrelax-pic-calls  -mno-relax-pic-calls  -mmcount-ra-address
1375          -mframe-header-opt  -mno-frame-header-opt
1376
1377     _MMIX Options_
1378          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
1379          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
1380          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
1381          -mno-base-addresses  -msingle-exit  -mno-single-exit
1382
1383     _MN10300 Options_
1384          -mmult-bug  -mno-mult-bug
1385          -mno-am33  -mam33  -mam33-2  -mam34
1386          -mtune=CPU-TYPE
1387          -mreturn-pointer-on-d0
1388          -mno-crt0  -mrelax  -mliw  -msetlb
1389
1390     _Moxie Options_
1391          -meb  -mel  -mmul.x  -mno-crt0
1392
1393     _MSP430 Options_
1394          -msim  -masm-hex  -mmcu=  -mcpu=  -mlarge  -msmall  -mrelax
1395          -mwarn-mcu
1396          -mcode-region=  -mdata-region=
1397          -msilicon-errata=  -msilicon-errata-warn=
1398          -mhwmult=  -minrt  -mtiny-printf
1399
1400     _NDS32 Options_
1401          -mbig-endian  -mlittle-endian
1402          -mreduced-regs  -mfull-regs
1403          -mcmov  -mno-cmov
1404          -mext-perf  -mno-ext-perf
1405          -mext-perf2  -mno-ext-perf2
1406          -mext-string  -mno-ext-string
1407          -mv3push  -mno-v3push
1408          -m16bit  -mno-16bit
1409          -misr-vector-size=NUM
1410          -mcache-block-size=NUM
1411          -march=ARCH
1412          -mcmodel=CODE-MODEL
1413          -mctor-dtor  -mrelax
1414
1415     _Nios II Options_
1416          -G NUM  -mgpopt=OPTION  -mgpopt  -mno-gpopt
1417          -mgprel-sec=REGEXP  -mr0rel-sec=REGEXP
1418          -mel  -meb
1419          -mno-bypass-cache  -mbypass-cache
1420          -mno-cache-volatile  -mcache-volatile
1421          -mno-fast-sw-div  -mfast-sw-div
1422          -mhw-mul  -mno-hw-mul  -mhw-mulx  -mno-hw-mulx  -mno-hw-div  -mhw-div
1423          -mcustom-INSN=N  -mno-custom-INSN
1424          -mcustom-fpu-cfg=NAME
1425          -mhal  -msmallc  -msys-crt0=NAME  -msys-lib=NAME
1426          -march=ARCH  -mbmx  -mno-bmx  -mcdx  -mno-cdx
1427
1428     _Nvidia PTX Options_
1429          -m32  -m64  -mmainkernel  -moptimize
1430
1431     _OpenRISC Options_
1432          -mboard=NAME  -mnewlib  -mhard-mul  -mhard-div
1433          -msoft-mul  -msoft-div
1434          -msoft-float  -mhard-float  -mdouble-float -munordered-float
1435          -mcmov  -mror  -mrori  -msext  -msfimm  -mshftimm
1436
1437     _PDP-11 Options_
1438          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
1439          -mint32  -mno-int16  -mint16  -mno-int32
1440          -msplit  -munix-asm  -mdec-asm  -mgnu-asm  -mlra
1441
1442     _picoChip Options_
1443          -mae=AE_TYPE  -mvliw-lookahead=N
1444          -msymbol-as-address  -mno-inefficient-warnings
1445
1446     _PowerPC Options_ See RS/6000 and PowerPC Options.
1447
1448     _PRU Options_
1449          -mmcu=MCU  -minrt  -mno-relax  -mloop
1450          -mabi=VARIANT
1451
1452     _RISC-V Options_
1453          -mbranch-cost=N-INSTRUCTION
1454          -mplt  -mno-plt
1455          -mabi=ABI-STRING
1456          -mfdiv  -mno-fdiv
1457          -mdiv  -mno-div
1458          -march=ISA-STRING
1459          -mtune=PROCESSOR-STRING
1460          -mpreferred-stack-boundary=NUM
1461          -msmall-data-limit=N-BYTES
1462          -msave-restore  -mno-save-restore
1463          -mstrict-align  -mno-strict-align
1464          -mcmodel=medlow  -mcmodel=medany
1465          -mexplicit-relocs  -mno-explicit-relocs
1466          -mrelax  -mno-relax
1467          -mriscv-attribute  -mmo-riscv-attribute
1468          -malign-data=TYPE
1469
1470     _RL78 Options_
1471          -msim  -mmul=none  -mmul=g13  -mmul=g14  -mallregs
1472          -mcpu=g10  -mcpu=g13  -mcpu=g14  -mg10  -mg13  -mg14
1473          -m64bit-doubles  -m32bit-doubles  -msave-mduc-in-interrupts
1474
1475     _RS/6000 and PowerPC Options_
1476          -mcpu=CPU-TYPE
1477          -mtune=CPU-TYPE
1478          -mcmodel=CODE-MODEL
1479          -mpowerpc64
1480          -maltivec  -mno-altivec
1481          -mpowerpc-gpopt  -mno-powerpc-gpopt
1482          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
1483          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mpopcntd  -mno-popcntd
1484          -mfprnd  -mno-fprnd
1485          -mcmpb  -mno-cmpb  -mhard-dfp  -mno-hard-dfp
1486          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
1487          -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
1488          -malign-power  -malign-natural
1489          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
1490          -mupdate  -mno-update
1491          -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
1492          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
1493          -mstrict-align  -mno-strict-align  -mrelocatable
1494          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
1495          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
1496          -mdynamic-no-pic  -mswdiv  -msingle-pic-base
1497          -mprioritize-restricted-insns=PRIORITY
1498          -msched-costly-dep=DEPENDENCE_TYPE
1499          -minsert-sched-nops=SCHEME
1500          -mcall-aixdesc  -mcall-eabi  -mcall-freebsd
1501          -mcall-linux  -mcall-netbsd  -mcall-openbsd
1502          -mcall-sysv  -mcall-sysv-eabi  -mcall-sysv-noeabi
1503          -mtraceback=TRACEBACK_TYPE
1504          -maix-struct-return  -msvr4-struct-return
1505          -mabi=ABI-TYPE  -msecure-plt  -mbss-plt
1506          -mlongcall  -mno-longcall  -mpltseq  -mno-pltseq
1507          -mblock-move-inline-limit=NUM
1508          -mblock-compare-inline-limit=NUM
1509          -mblock-compare-inline-loop-limit=NUM
1510          -mstring-compare-inline-limit=NUM
1511          -misel  -mno-isel
1512          -mvrsave  -mno-vrsave
1513          -mmulhw  -mno-mulhw
1514          -mdlmzb  -mno-dlmzb
1515          -mprototype  -mno-prototype
1516          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
1517          -msdata=OPT  -mreadonly-in-sdata  -mvxworks  -G NUM
1518          -mrecip  -mrecip=OPT  -mno-recip  -mrecip-precision
1519          -mno-recip-precision
1520          -mveclibabi=TYPE  -mfriz  -mno-friz
1521          -mpointers-to-nested-functions  -mno-pointers-to-nested-functions
1522          -msave-toc-indirect  -mno-save-toc-indirect
1523          -mpower8-fusion  -mno-mpower8-fusion  -mpower8-vector  -mno-power8-vector
1524          -mcrypto  -mno-crypto  -mhtm  -mno-htm
1525          -mquad-memory  -mno-quad-memory
1526          -mquad-memory-atomic  -mno-quad-memory-atomic
1527          -mcompat-align-parm  -mno-compat-align-parm
1528          -mfloat128  -mno-float128  -mfloat128-hardware  -mno-float128-hardware
1529          -mgnu-attribute  -mno-gnu-attribute
1530          -mstack-protector-guard=GUARD -mstack-protector-guard-reg=REG
1531          -mstack-protector-guard-offset=OFFSET -mprefixed -mno-prefixed
1532          -mpcrel -mno-pcrel -mmma -mno-mmma
1533
1534     _RX Options_
1535          -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
1536          -mcpu=
1537          -mbig-endian-data  -mlittle-endian-data
1538          -msmall-data
1539          -msim  -mno-sim
1540          -mas100-syntax  -mno-as100-syntax
1541          -mrelax
1542          -mmax-constant-size=
1543          -mint-register=
1544          -mpid
1545          -mallow-string-insns  -mno-allow-string-insns
1546          -mjsr
1547          -mno-warn-multiple-fast-interrupts
1548          -msave-acc-in-interrupts
1549
1550     _S/390 and zSeries Options_
1551          -mtune=CPU-TYPE  -march=CPU-TYPE
1552          -mhard-float  -msoft-float  -mhard-dfp  -mno-hard-dfp
1553          -mlong-double-64  -mlong-double-128
1554          -mbackchain  -mno-backchain  -mpacked-stack  -mno-packed-stack
1555          -msmall-exec  -mno-small-exec  -mmvcle  -mno-mvcle
1556          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
1557          -mhtm  -mvx  -mzvector
1558          -mtpf-trace  -mno-tpf-trace  -mtpf-trace-skip  -mno-tpf-trace-skip
1559          -mfused-madd  -mno-fused-madd
1560          -mwarn-framesize  -mwarn-dynamicstack  -mstack-size  -mstack-guard
1561          -mhotpatch=HALFWORDS,HALFWORDS
1562
1563     _Score Options_
1564          -meb  -mel
1565          -mnhwloop
1566          -muls
1567          -mmac
1568          -mscore5  -mscore5u  -mscore7  -mscore7d
1569
1570     _SH Options_
1571          -m1  -m2  -m2e
1572          -m2a-nofpu  -m2a-single-only  -m2a-single  -m2a
1573          -m3  -m3e
1574          -m4-nofpu  -m4-single-only  -m4-single  -m4
1575          -m4a-nofpu  -m4a-single-only  -m4a-single  -m4a  -m4al
1576          -mb  -ml  -mdalign  -mrelax
1577          -mbigtable  -mfmovd  -mrenesas  -mno-renesas  -mnomacsave
1578          -mieee  -mno-ieee  -mbitops  -misize  -minline-ic_invalidate  -mpadstruct
1579          -mprefergot  -musermode  -multcost=NUMBER  -mdiv=STRATEGY
1580          -mdivsi3_libfunc=NAME  -mfixed-range=REGISTER-RANGE
1581          -maccumulate-outgoing-args
1582          -matomic-model=ATOMIC-MODEL
1583          -mbranch-cost=NUM  -mzdcbranch  -mno-zdcbranch
1584          -mcbranch-force-delay-slot
1585          -mfused-madd  -mno-fused-madd  -mfsca  -mno-fsca  -mfsrra  -mno-fsrra
1586          -mpretend-cmove  -mtas
1587
1588     _Solaris 2 Options_
1589          -mclear-hwcap  -mno-clear-hwcap  -mimpure-text  -mno-impure-text
1590          -pthreads
1591
1592     _SPARC Options_
1593          -mcpu=CPU-TYPE
1594          -mtune=CPU-TYPE
1595          -mcmodel=CODE-MODEL
1596          -mmemory-model=MEM-MODEL
1597          -m32  -m64  -mapp-regs  -mno-app-regs
1598          -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat
1599          -mfpu  -mno-fpu  -mhard-float  -msoft-float
1600          -mhard-quad-float  -msoft-quad-float
1601          -mstack-bias  -mno-stack-bias
1602          -mstd-struct-return  -mno-std-struct-return
1603          -munaligned-doubles  -mno-unaligned-doubles
1604          -muser-mode  -mno-user-mode
1605          -mv8plus  -mno-v8plus  -mvis  -mno-vis
1606          -mvis2  -mno-vis2  -mvis3  -mno-vis3
1607          -mvis4  -mno-vis4  -mvis4b  -mno-vis4b
1608          -mcbcond  -mno-cbcond  -mfmaf  -mno-fmaf  -mfsmuld  -mno-fsmuld
1609          -mpopc  -mno-popc  -msubxc  -mno-subxc
1610          -mfix-at697f  -mfix-ut699  -mfix-ut700  -mfix-gr712rc
1611          -mlra  -mno-lra
1612
1613     _System V Options_
1614          -Qy  -Qn  -YP,PATHS  -Ym,DIR
1615
1616     _TILE-Gx Options_
1617          -mcpu=CPU  -m32  -m64  -mbig-endian  -mlittle-endian
1618          -mcmodel=CODE-MODEL
1619
1620     _TILEPro Options_
1621          -mcpu=CPU  -m32
1622
1623     _V850 Options_
1624          -mlong-calls  -mno-long-calls  -mep  -mno-ep
1625          -mprolog-function  -mno-prolog-function  -mspace
1626          -mtda=N  -msda=N  -mzda=N
1627          -mapp-regs  -mno-app-regs
1628          -mdisable-callt  -mno-disable-callt
1629          -mv850e2v3  -mv850e2  -mv850e1  -mv850es
1630          -mv850e  -mv850  -mv850e3v5
1631          -mloop
1632          -mrelax
1633          -mlong-jumps
1634          -msoft-float
1635          -mhard-float
1636          -mgcc-abi
1637          -mrh850-abi
1638          -mbig-switch
1639
1640     _VAX Options_
1641          -mg  -mgnu  -munix
1642
1643     _Visium Options_
1644          -mdebug  -msim  -mfpu  -mno-fpu  -mhard-float  -msoft-float
1645          -mcpu=CPU-TYPE  -mtune=CPU-TYPE  -msv-mode  -muser-mode
1646
1647     _VMS Options_
1648          -mvms-return-codes  -mdebug-main=PREFIX  -mmalloc64
1649          -mpointer-size=SIZE
1650
1651     _VxWorks Options_
1652          -mrtp  -non-static  -Bstatic  -Bdynamic
1653          -Xbind-lazy  -Xbind-now
1654
1655     _x86 Options_
1656          -mtune=CPU-TYPE  -march=CPU-TYPE
1657          -mtune-ctrl=FEATURE-LIST  -mdump-tune-features  -mno-default
1658          -mfpmath=UNIT
1659          -masm=DIALECT  -mno-fancy-math-387
1660          -mno-fp-ret-in-387  -m80387  -mhard-float  -msoft-float
1661          -mno-wide-multiply  -mrtd  -malign-double
1662          -mpreferred-stack-boundary=NUM
1663          -mincoming-stack-boundary=NUM
1664          -mcld  -mcx16  -msahf  -mmovbe  -mcrc32
1665          -mrecip  -mrecip=OPT
1666          -mvzeroupper  -mprefer-avx128  -mprefer-vector-width=OPT
1667          -mmmx  -msse  -msse2  -msse3  -mssse3  -msse4.1  -msse4.2  -msse4  -mavx
1668          -mavx2  -mavx512f  -mavx512pf  -mavx512er  -mavx512cd  -mavx512vl
1669          -mavx512bw  -mavx512dq  -mavx512ifma  -mavx512vbmi  -msha  -maes
1670          -mpclmul  -mfsgsbase  -mrdrnd  -mf16c  -mfma  -mpconfig  -mwbnoinvd
1671          -mptwrite  -mprefetchwt1  -mclflushopt  -mclwb  -mxsavec  -mxsaves
1672          -msse4a  -m3dnow  -m3dnowa  -mpopcnt  -mabm  -mbmi  -mtbm  -mfma4  -mxop
1673          -madx  -mlzcnt  -mbmi2  -mfxsr  -mxsave  -mxsaveopt  -mrtm  -mhle  -mlwp
1674          -mmwaitx  -mclzero  -mpku  -mthreads  -mgfni  -mvaes  -mwaitpkg
1675          -mshstk -mmanual-endbr -mforce-indirect-call  -mavx512vbmi2 -mavx512bf16 -menqcmd
1676          -mvpclmulqdq  -mavx512bitalg  -mmovdiri  -mmovdir64b  -mavx512vpopcntdq
1677          -mavx5124fmaps  -mavx512vnni  -mavx5124vnniw  -mprfchw  -mrdpid
1678          -mrdseed  -msgx -mavx512vp2intersect
1679          -mcldemote  -mms-bitfields  -mno-align-stringops  -minline-all-stringops
1680          -minline-stringops-dynamically  -mstringop-strategy=ALG
1681          -mmemcpy-strategy=STRATEGY  -mmemset-strategy=STRATEGY
1682          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
1683          -m96bit-long-double  -mlong-double-64  -mlong-double-80  -mlong-double-128
1684          -mregparm=NUM  -msseregparm
1685          -mveclibabi=TYPE  -mvect8-ret-in-mem
1686          -mpc32  -mpc64  -mpc80  -mstackrealign
1687          -momit-leaf-frame-pointer  -mno-red-zone  -mno-tls-direct-seg-refs
1688          -mcmodel=CODE-MODEL  -mabi=NAME  -maddress-mode=MODE
1689          -m32  -m64  -mx32  -m16  -miamcu  -mlarge-data-threshold=NUM
1690          -msse2avx  -mfentry  -mrecord-mcount  -mnop-mcount  -m8bit-idiv
1691          -minstrument-return=TYPE -mfentry-name=NAME -mfentry-section=NAME
1692          -mavx256-split-unaligned-load  -mavx256-split-unaligned-store
1693          -malign-data=TYPE  -mstack-protector-guard=GUARD
1694          -mstack-protector-guard-reg=REG
1695          -mstack-protector-guard-offset=OFFSET
1696          -mstack-protector-guard-symbol=SYMBOL
1697          -mgeneral-regs-only  -mcall-ms2sysv-xlogues
1698          -mindirect-branch=CHOICE  -mfunction-return=CHOICE
1699          -mindirect-branch-register
1700
1701     _x86 Windows Options_
1702          -mconsole  -mcygwin  -mno-cygwin  -mdll
1703          -mnop-fun-dllimport  -mthread
1704          -municode  -mwin32  -mwindows  -fno-set-stack-executable
1705
1706     _Xstormy16 Options_
1707          -msim
1708
1709     _Xtensa Options_
1710          -mconst16  -mno-const16
1711          -mfused-madd  -mno-fused-madd
1712          -mforce-no-pic
1713          -mserialize-volatile  -mno-serialize-volatile
1714          -mtext-section-literals  -mno-text-section-literals
1715          -mauto-litpools  -mno-auto-litpools
1716          -mtarget-align  -mno-target-align
1717          -mlongcalls  -mno-longcalls
1718
1719     _zSeries Options_ See S/390 and zSeries Options.
1720
1721
1722File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1723
17243.2 Options Controlling the Kind of Output
1725==========================================
1726
1727Compilation can involve up to four stages: preprocessing, compilation
1728proper, assembly and linking, always in that order.  GCC is capable of
1729preprocessing and compiling several files either into several assembler
1730input files, or into one assembler input file; then each assembler input
1731file produces an object file, and linking combines all the object files
1732(those newly compiled, and those specified as input) into an executable
1733file.
1734
1735 For any given input file, the file name suffix determines what kind of
1736compilation is done:
1737
1738'FILE.c'
1739     C source code that must be preprocessed.
1740
1741'FILE.i'
1742     C source code that should not be preprocessed.
1743
1744'FILE.ii'
1745     C++ source code that should not be preprocessed.
1746
1747'FILE.m'
1748     Objective-C source code.  Note that you must link with the
1749     'libobjc' library to make an Objective-C program work.
1750
1751'FILE.mi'
1752     Objective-C source code that should not be preprocessed.
1753
1754'FILE.mm'
1755'FILE.M'
1756     Objective-C++ source code.  Note that you must link with the
1757     'libobjc' library to make an Objective-C++ program work.  Note that
1758     '.M' refers to a literal capital M.
1759
1760'FILE.mii'
1761     Objective-C++ source code that should not be preprocessed.
1762
1763'FILE.h'
1764     C, C++, Objective-C or Objective-C++ header file to be turned into
1765     a precompiled header (default), or C, C++ header file to be turned
1766     into an Ada spec (via the '-fdump-ada-spec' switch).
1767
1768'FILE.cc'
1769'FILE.cp'
1770'FILE.cxx'
1771'FILE.cpp'
1772'FILE.CPP'
1773'FILE.c++'
1774'FILE.C'
1775     C++ source code that must be preprocessed.  Note that in '.cxx',
1776     the last two letters must both be literally 'x'.  Likewise, '.C'
1777     refers to a literal capital C.
1778
1779'FILE.mm'
1780'FILE.M'
1781     Objective-C++ source code that must be preprocessed.
1782
1783'FILE.mii'
1784     Objective-C++ source code that should not be preprocessed.
1785
1786'FILE.hh'
1787'FILE.H'
1788'FILE.hp'
1789'FILE.hxx'
1790'FILE.hpp'
1791'FILE.HPP'
1792'FILE.h++'
1793'FILE.tcc'
1794     C++ header file to be turned into a precompiled header or Ada spec.
1795
1796'FILE.f'
1797'FILE.for'
1798'FILE.ftn'
1799     Fixed form Fortran source code that should not be preprocessed.
1800
1801'FILE.F'
1802'FILE.FOR'
1803'FILE.fpp'
1804'FILE.FPP'
1805'FILE.FTN'
1806     Fixed form Fortran source code that must be preprocessed (with the
1807     traditional preprocessor).
1808
1809'FILE.f90'
1810'FILE.f95'
1811'FILE.f03'
1812'FILE.f08'
1813     Free form Fortran source code that should not be preprocessed.
1814
1815'FILE.F90'
1816'FILE.F95'
1817'FILE.F03'
1818'FILE.F08'
1819     Free form Fortran source code that must be preprocessed (with the
1820     traditional preprocessor).
1821
1822'FILE.go'
1823     Go source code.
1824
1825'FILE.brig'
1826     BRIG files (binary representation of HSAIL).
1827
1828'FILE.d'
1829     D source code.
1830
1831'FILE.di'
1832     D interface file.
1833
1834'FILE.dd'
1835     D documentation code (Ddoc).
1836
1837'FILE.ads'
1838     Ada source code file that contains a library unit declaration (a
1839     declaration of a package, subprogram, or generic, or a generic
1840     instantiation), or a library unit renaming declaration (a package,
1841     generic, or subprogram renaming declaration).  Such files are also
1842     called "specs".
1843
1844'FILE.adb'
1845     Ada source code file containing a library unit body (a subprogram
1846     or package body).  Such files are also called "bodies".
1847
1848'FILE.s'
1849     Assembler code.
1850
1851'FILE.S'
1852'FILE.sx'
1853     Assembler code that must be preprocessed.
1854
1855'OTHER'
1856     An object file to be fed straight into linking.  Any file name with
1857     no recognized suffix is treated this way.
1858
1859 You can specify the input language explicitly with the '-x' option:
1860
1861'-x LANGUAGE'
1862     Specify explicitly the LANGUAGE for the following input files
1863     (rather than letting the compiler choose a default based on the
1864     file name suffix).  This option applies to all following input
1865     files until the next '-x' option.  Possible values for LANGUAGE
1866     are:
1867          c  c-header  cpp-output
1868          c++  c++-header  c++-cpp-output
1869          objective-c  objective-c-header  objective-c-cpp-output
1870          objective-c++ objective-c++-header objective-c++-cpp-output
1871          assembler  assembler-with-cpp
1872          ada
1873          d
1874          f77  f77-cpp-input f95  f95-cpp-input
1875          go
1876          brig
1877
1878'-x none'
1879     Turn off any specification of a language, so that subsequent files
1880     are handled according to their file name suffixes (as they are if
1881     '-x' has not been used at all).
1882
1883 If you only want some of the stages of compilation, you can use '-x'
1884(or filename suffixes) to tell 'gcc' where to start, and one of the
1885options '-c', '-S', or '-E' to say where 'gcc' is to stop.  Note that
1886some combinations (for example, '-x cpp-output -E') instruct 'gcc' to do
1887nothing at all.
1888
1889'-c'
1890     Compile or assemble the source files, but do not link.  The linking
1891     stage simply is not done.  The ultimate output is in the form of an
1892     object file for each source file.
1893
1894     By default, the object file name for a source file is made by
1895     replacing the suffix '.c', '.i', '.s', etc., with '.o'.
1896
1897     Unrecognized input files, not requiring compilation or assembly,
1898     are ignored.
1899
1900'-S'
1901     Stop after the stage of compilation proper; do not assemble.  The
1902     output is in the form of an assembler code file for each
1903     non-assembler input file specified.
1904
1905     By default, the assembler file name for a source file is made by
1906     replacing the suffix '.c', '.i', etc., with '.s'.
1907
1908     Input files that don't require compilation are ignored.
1909
1910'-E'
1911     Stop after the preprocessing stage; do not run the compiler proper.
1912     The output is in the form of preprocessed source code, which is
1913     sent to the standard output.
1914
1915     Input files that don't require preprocessing are ignored.
1916
1917'-o FILE'
1918     Place output in file FILE.  This applies to whatever sort of output
1919     is being produced, whether it be an executable file, an object
1920     file, an assembler file or preprocessed C code.
1921
1922     If '-o' is not specified, the default is to put an executable file
1923     in 'a.out', the object file for 'SOURCE.SUFFIX' in 'SOURCE.o', its
1924     assembler file in 'SOURCE.s', a precompiled header file in
1925     'SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1926     output.
1927
1928'-v'
1929     Print (on standard error output) the commands executed to run the
1930     stages of compilation.  Also print the version number of the
1931     compiler driver program and of the preprocessor and the compiler
1932     proper.
1933
1934'-###'
1935     Like '-v' except the commands are not executed and arguments are
1936     quoted unless they contain only alphanumeric characters or './-_'.
1937     This is useful for shell scripts to capture the driver-generated
1938     command lines.
1939
1940'--help'
1941     Print (on the standard output) a description of the command-line
1942     options understood by 'gcc'.  If the '-v' option is also specified
1943     then '--help' is also passed on to the various processes invoked by
1944     'gcc', so that they can display the command-line options they
1945     accept.  If the '-Wextra' option has also been specified (prior to
1946     the '--help' option), then command-line options that have no
1947     documentation associated with them are also displayed.
1948
1949'--target-help'
1950     Print (on the standard output) a description of target-specific
1951     command-line options for each tool.  For some targets extra
1952     target-specific information may also be printed.
1953
1954'--help={CLASS|[^]QUALIFIER}[,...]'
1955     Print (on the standard output) a description of the command-line
1956     options understood by the compiler that fit into all specified
1957     classes and qualifiers.  These are the supported classes:
1958
1959     'optimizers'
1960          Display all of the optimization options supported by the
1961          compiler.
1962
1963     'warnings'
1964          Display all of the options controlling warning messages
1965          produced by the compiler.
1966
1967     'target'
1968          Display target-specific options.  Unlike the '--target-help'
1969          option however, target-specific options of the linker and
1970          assembler are not displayed.  This is because those tools do
1971          not currently support the extended '--help=' syntax.
1972
1973     'params'
1974          Display the values recognized by the '--param' option.
1975
1976     LANGUAGE
1977          Display the options supported for LANGUAGE, where LANGUAGE is
1978          the name of one of the languages supported in this version of
1979          GCC.  If an option is supported by all languages, one needs to
1980          select 'common' class.
1981
1982     'common'
1983          Display the options that are common to all languages.
1984
1985     These are the supported qualifiers:
1986
1987     'undocumented'
1988          Display only those options that are undocumented.
1989
1990     'joined'
1991          Display options taking an argument that appears after an equal
1992          sign in the same continuous piece of text, such as:
1993          '--help=target'.
1994
1995     'separate'
1996          Display options taking an argument that appears as a separate
1997          word following the original option, such as: '-o output-file'.
1998
1999     Thus for example to display all the undocumented target-specific
2000     switches supported by the compiler, use:
2001
2002          --help=target,undocumented
2003
2004     The sense of a qualifier can be inverted by prefixing it with the
2005     '^' character, so for example to display all binary warning options
2006     (i.e., ones that are either on or off and that do not take an
2007     argument) that have a description, use:
2008
2009          --help=warnings,^joined,^undocumented
2010
2011     The argument to '--help=' should not consist solely of inverted
2012     qualifiers.
2013
2014     Combining several classes is possible, although this usually
2015     restricts the output so much that there is nothing to display.  One
2016     case where it does work, however, is when one of the classes is
2017     TARGET.  For example, to display all the target-specific
2018     optimization options, use:
2019
2020          --help=target,optimizers
2021
2022     The '--help=' option can be repeated on the command line.  Each
2023     successive use displays its requested class of options, skipping
2024     those that have already been displayed.  If '--help' is also
2025     specified anywhere on the command line then this takes precedence
2026     over any '--help=' option.
2027
2028     If the '-Q' option appears on the command line before the '--help='
2029     option, then the descriptive text displayed by '--help=' is
2030     changed.  Instead of describing the displayed options, an
2031     indication is given as to whether the option is enabled, disabled
2032     or set to a specific value (assuming that the compiler knows this
2033     at the point where the '--help=' option is used).
2034
2035     Here is a truncated example from the ARM port of 'gcc':
2036
2037            % gcc -Q -mabi=2 --help=target -c
2038            The following options are target specific:
2039            -mabi=                                2
2040            -mabort-on-noreturn                   [disabled]
2041            -mapcs                                [disabled]
2042
2043     The output is sensitive to the effects of previous command-line
2044     options, so for example it is possible to find out which
2045     optimizations are enabled at '-O2' by using:
2046
2047          -Q -O2 --help=optimizers
2048
2049     Alternatively you can discover which binary optimizations are
2050     enabled by '-O3' by using:
2051
2052          gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
2053          gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
2054          diff /tmp/O2-opts /tmp/O3-opts | grep enabled
2055
2056'--version'
2057     Display the version number and copyrights of the invoked GCC.
2058
2059'-pass-exit-codes'
2060     Normally the 'gcc' program exits with the code of 1 if any phase of
2061     the compiler returns a non-success return code.  If you specify
2062     '-pass-exit-codes', the 'gcc' program instead returns with the
2063     numerically highest error produced by any phase returning an error
2064     indication.  The C, C++, and Fortran front ends return 4 if an
2065     internal compiler error is encountered.
2066
2067'-pipe'
2068     Use pipes rather than temporary files for communication between the
2069     various stages of compilation.  This fails to work on some systems
2070     where the assembler is unable to read from a pipe; but the GNU
2071     assembler has no trouble.
2072
2073'-specs=FILE'
2074     Process FILE after the compiler reads in the standard 'specs' file,
2075     in order to override the defaults which the 'gcc' driver program
2076     uses when determining what switches to pass to 'cc1', 'cc1plus',
2077     'as', 'ld', etc.  More than one '-specs=FILE' can be specified on
2078     the command line, and they are processed in order, from left to
2079     right.  *Note Spec Files::, for information about the format of the
2080     FILE.
2081
2082'-wrapper'
2083     Invoke all subcommands under a wrapper program.  The name of the
2084     wrapper program and its parameters are passed as a comma separated
2085     list.
2086
2087          gcc -c t.c -wrapper gdb,--args
2088
2089     This invokes all subprograms of 'gcc' under 'gdb --args', thus the
2090     invocation of 'cc1' is 'gdb --args cc1 ...'.
2091
2092'-ffile-prefix-map=OLD=NEW'
2093     When compiling files residing in directory 'OLD', record any
2094     references to them in the result of the compilation as if the files
2095     resided in directory 'NEW' instead.  Specifying this option is
2096     equivalent to specifying all the individual '-f*-prefix-map'
2097     options.  This can be used to make reproducible builds that are
2098     location independent.  See also '-fmacro-prefix-map' and
2099     '-fdebug-prefix-map'.
2100
2101'-fplugin=NAME.so'
2102     Load the plugin code in file NAME.so, assumed to be a shared object
2103     to be dlopen'd by the compiler.  The base name of the shared object
2104     file is used to identify the plugin for the purposes of argument
2105     parsing (See '-fplugin-arg-NAME-KEY=VALUE' below).  Each plugin
2106     should define the callback functions specified in the Plugins API.
2107
2108'-fplugin-arg-NAME-KEY=VALUE'
2109     Define an argument called KEY with a value of VALUE for the plugin
2110     called NAME.
2111
2112'-fdump-ada-spec[-slim]'
2113     For C and C++ source and include files, generate corresponding Ada
2114     specs.  *Note (gnat_ugn)Generating Ada Bindings for C and C++
2115     headers::, which provides detailed documentation on this feature.
2116
2117'-fada-spec-parent=UNIT'
2118     In conjunction with '-fdump-ada-spec[-slim]' above, generate Ada
2119     specs as child units of parent UNIT.
2120
2121'-fdump-go-spec=FILE'
2122     For input files in any language, generate corresponding Go
2123     declarations in FILE.  This generates Go 'const', 'type', 'var',
2124     and 'func' declarations which may be a useful way to start writing
2125     a Go interface to code written in some other language.
2126
2127'@FILE'
2128     Read command-line options from FILE.  The options read are inserted
2129     in place of the original @FILE option.  If FILE does not exist, or
2130     cannot be read, then the option will be treated literally, and not
2131     removed.
2132
2133     Options in FILE are separated by whitespace.  A whitespace
2134     character may be included in an option by surrounding the entire
2135     option in either single or double quotes.  Any character (including
2136     a backslash) may be included by prefixing the character to be
2137     included with a backslash.  The FILE may itself contain additional
2138     @FILE options; any such options will be processed recursively.
2139
2140
2141File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
2142
21433.3 Compiling C++ Programs
2144==========================
2145
2146C++ source files conventionally use one of the suffixes '.C', '.cc',
2147'.cpp', '.CPP', '.c++', '.cp', or '.cxx'; C++ header files often use
2148'.hh', '.hpp', '.H', or (for shared template code) '.tcc'; and
2149preprocessed C++ files use the suffix '.ii'.  GCC recognizes files with
2150these names and compiles them as C++ programs even if you call the
2151compiler the same way as for compiling C programs (usually with the name
2152'gcc').
2153
2154 However, the use of 'gcc' does not add the C++ library.  'g++' is a
2155program that calls GCC and automatically specifies linking against the
2156C++ library.  It treats '.c', '.h' and '.i' files as C++ source files
2157instead of C source files unless '-x' is used.  This program is also
2158useful when precompiling a C header file with a '.h' extension for use
2159in C++ compilations.  On many systems, 'g++' is also installed with the
2160name 'c++'.
2161
2162 When you compile C++ programs, you may specify many of the same
2163command-line options that you use for compiling programs in any
2164language; or command-line options meaningful for C and related
2165languages; or options that are meaningful only for C++ programs.  *Note
2166Options Controlling C Dialect: C Dialect Options, for explanations of
2167options for languages related to C.  *Note Options Controlling C++
2168Dialect: C++ Dialect Options, for explanations of options that are
2169meaningful only for C++ programs.
2170
2171
2172File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
2173
21743.4 Options Controlling C Dialect
2175=================================
2176
2177The following options control the dialect of C (or languages derived
2178from C, such as C++, Objective-C and Objective-C++) that the compiler
2179accepts:
2180
2181'-ansi'
2182     In C mode, this is equivalent to '-std=c90'.  In C++ mode, it is
2183     equivalent to '-std=c++98'.
2184
2185     This turns off certain features of GCC that are incompatible with
2186     ISO C90 (when compiling C code), or of standard C++ (when compiling
2187     C++ code), such as the 'asm' and 'typeof' keywords, and predefined
2188     macros such as 'unix' and 'vax' that identify the type of system
2189     you are using.  It also enables the undesirable and rarely used ISO
2190     trigraph feature.  For the C compiler, it disables recognition of
2191     C++ style '//' comments as well as the 'inline' keyword.
2192
2193     The alternate keywords '__asm__', '__extension__', '__inline__' and
2194     '__typeof__' continue to work despite '-ansi'.  You would not want
2195     to use them in an ISO C program, of course, but it is useful to put
2196     them in header files that might be included in compilations done
2197     with '-ansi'.  Alternate predefined macros such as '__unix__' and
2198     '__vax__' are also available, with or without '-ansi'.
2199
2200     The '-ansi' option does not cause non-ISO programs to be rejected
2201     gratuitously.  For that, '-Wpedantic' is required in addition to
2202     '-ansi'.  *Note Warning Options::.
2203
2204     The macro '__STRICT_ANSI__' is predefined when the '-ansi' option
2205     is used.  Some header files may notice this macro and refrain from
2206     declaring certain functions or defining certain macros that the ISO
2207     standard doesn't call for; this is to avoid interfering with any
2208     programs that might use these names for other things.
2209
2210     Functions that are normally built in but do not have semantics
2211     defined by ISO C (such as 'alloca' and 'ffs') are not built-in
2212     functions when '-ansi' is used.  *Note Other built-in functions
2213     provided by GCC: Other Builtins, for details of the functions
2214     affected.
2215
2216'-std='
2217     Determine the language standard.  *Note Language Standards
2218     Supported by GCC: Standards, for details of these standard
2219     versions.  This option is currently only supported when compiling C
2220     or C++.
2221
2222     The compiler can accept several base standards, such as 'c90' or
2223     'c++98', and GNU dialects of those standards, such as 'gnu90' or
2224     'gnu++98'.  When a base standard is specified, the compiler accepts
2225     all programs following that standard plus those using GNU
2226     extensions that do not contradict it.  For example, '-std=c90'
2227     turns off certain features of GCC that are incompatible with ISO
2228     C90, such as the 'asm' and 'typeof' keywords, but not other GNU
2229     extensions that do not have a meaning in ISO C90, such as omitting
2230     the middle term of a '?:' expression.  On the other hand, when a
2231     GNU dialect of a standard is specified, all features supported by
2232     the compiler are enabled, even when those features change the
2233     meaning of the base standard.  As a result, some strict-conforming
2234     programs may be rejected.  The particular standard is used by
2235     '-Wpedantic' to identify which features are GNU extensions given
2236     that version of the standard.  For example '-std=gnu90 -Wpedantic'
2237     warns about C++ style '//' comments, while '-std=gnu99 -Wpedantic'
2238     does not.
2239
2240     A value for this option must be provided; possible values are
2241
2242     'c90'
2243     'c89'
2244     'iso9899:1990'
2245          Support all ISO C90 programs (certain GNU extensions that
2246          conflict with ISO C90 are disabled).  Same as '-ansi' for C
2247          code.
2248
2249     'iso9899:199409'
2250          ISO C90 as modified in amendment 1.
2251
2252     'c99'
2253     'c9x'
2254     'iso9899:1999'
2255     'iso9899:199x'
2256          ISO C99.  This standard is substantially completely supported,
2257          modulo bugs and floating-point issues (mainly but not entirely
2258          relating to optional C99 features from Annexes F and G). See
2259          <http://gcc.gnu.org/c99status.html> for more information.  The
2260          names 'c9x' and 'iso9899:199x' are deprecated.
2261
2262     'c11'
2263     'c1x'
2264     'iso9899:2011'
2265          ISO C11, the 2011 revision of the ISO C standard.  This
2266          standard is substantially completely supported, modulo bugs,
2267          floating-point issues (mainly but not entirely relating to
2268          optional C11 features from Annexes F and G) and the optional
2269          Annexes K (Bounds-checking interfaces) and L (Analyzability).
2270          The name 'c1x' is deprecated.
2271
2272     'c17'
2273     'c18'
2274     'iso9899:2017'
2275     'iso9899:2018'
2276          ISO C17, the 2017 revision of the ISO C standard (published in
2277          2018).  This standard is same as C11 except for corrections of
2278          defects (all of which are also applied with '-std=c11') and a
2279          new value of '__STDC_VERSION__', and so is supported to the
2280          same extent as C11.
2281
2282     'c2x'
2283          The next version of the ISO C standard, still under
2284          development.  The support for this version is experimental and
2285          incomplete.
2286
2287     'gnu90'
2288     'gnu89'
2289          GNU dialect of ISO C90 (including some C99 features).
2290
2291     'gnu99'
2292     'gnu9x'
2293          GNU dialect of ISO C99.  The name 'gnu9x' is deprecated.
2294
2295     'gnu11'
2296     'gnu1x'
2297          GNU dialect of ISO C11.  The name 'gnu1x' is deprecated.
2298
2299     'gnu17'
2300     'gnu18'
2301          GNU dialect of ISO C17.  This is the default for C code.
2302
2303     'gnu2x'
2304          The next version of the ISO C standard, still under
2305          development, plus GNU extensions.  The support for this
2306          version is experimental and incomplete.
2307
2308     'c++98'
2309     'c++03'
2310          The 1998 ISO C++ standard plus the 2003 technical corrigendum
2311          and some additional defect reports.  Same as '-ansi' for C++
2312          code.
2313
2314     'gnu++98'
2315     'gnu++03'
2316          GNU dialect of '-std=c++98'.
2317
2318     'c++11'
2319     'c++0x'
2320          The 2011 ISO C++ standard plus amendments.  The name 'c++0x'
2321          is deprecated.
2322
2323     'gnu++11'
2324     'gnu++0x'
2325          GNU dialect of '-std=c++11'.  The name 'gnu++0x' is
2326          deprecated.
2327
2328     'c++14'
2329     'c++1y'
2330          The 2014 ISO C++ standard plus amendments.  The name 'c++1y'
2331          is deprecated.
2332
2333     'gnu++14'
2334     'gnu++1y'
2335          GNU dialect of '-std=c++14'.  This is the default for C++
2336          code.  The name 'gnu++1y' is deprecated.
2337
2338     'c++17'
2339     'c++1z'
2340          The 2017 ISO C++ standard plus amendments.  The name 'c++1z'
2341          is deprecated.
2342
2343     'gnu++17'
2344     'gnu++1z'
2345          GNU dialect of '-std=c++17'.  The name 'gnu++1z' is
2346          deprecated.
2347
2348     'c++20'
2349     'c++2a'
2350          The next revision of the ISO C++ standard, planned for 2020.
2351          Support is highly experimental, and will almost certainly
2352          change in incompatible ways in future releases.
2353
2354     'gnu++20'
2355     'gnu++2a'
2356          GNU dialect of '-std=c++20'.  Support is highly experimental,
2357          and will almost certainly change in incompatible ways in
2358          future releases.
2359
2360'-fgnu89-inline'
2361     The option '-fgnu89-inline' tells GCC to use the traditional GNU
2362     semantics for 'inline' functions when in C99 mode.  *Note An Inline
2363     Function is As Fast As a Macro: Inline.  Using this option is
2364     roughly equivalent to adding the 'gnu_inline' function attribute to
2365     all inline functions (*note Function Attributes::).
2366
2367     The option '-fno-gnu89-inline' explicitly tells GCC to use the C99
2368     semantics for 'inline' when in C99 or gnu99 mode (i.e., it
2369     specifies the default behavior).  This option is not supported in
2370     '-std=c90' or '-std=gnu90' mode.
2371
2372     The preprocessor macros '__GNUC_GNU_INLINE__' and
2373     '__GNUC_STDC_INLINE__' may be used to check which semantics are in
2374     effect for 'inline' functions.  *Note (cpp)Common Predefined
2375     Macros::.
2376
2377'-fpermitted-flt-eval-methods=STYLE'
2378     ISO/IEC TS 18661-3 defines new permissible values for
2379     'FLT_EVAL_METHOD' that indicate that operations and constants with
2380     a semantic type that is an interchange or extended format should be
2381     evaluated to the precision and range of that type.  These new
2382     values are a superset of those permitted under C99/C11, which does
2383     not specify the meaning of other positive values of
2384     'FLT_EVAL_METHOD'.  As such, code conforming to C11 may not have
2385     been written expecting the possibility of the new values.
2386
2387     '-fpermitted-flt-eval-methods' specifies whether the compiler
2388     should allow only the values of 'FLT_EVAL_METHOD' specified in
2389     C99/C11, or the extended set of values specified in ISO/IEC TS
2390     18661-3.
2391
2392     STYLE is either 'c11' or 'ts-18661-3' as appropriate.
2393
2394     The default when in a standards compliant mode ('-std=c11' or
2395     similar) is '-fpermitted-flt-eval-methods=c11'.  The default when
2396     in a GNU dialect ('-std=gnu11' or similar) is
2397     '-fpermitted-flt-eval-methods=ts-18661-3'.
2398
2399'-aux-info FILENAME'
2400     Output to the given filename prototyped declarations for all
2401     functions declared and/or defined in a translation unit, including
2402     those in header files.  This option is silently ignored in any
2403     language other than C.
2404
2405     Besides declarations, the file indicates, in comments, the origin
2406     of each declaration (source file and line), whether the declaration
2407     was implicit, prototyped or unprototyped ('I', 'N' for new or 'O'
2408     for old, respectively, in the first character after the line number
2409     and the colon), and whether it came from a declaration or a
2410     definition ('C' or 'F', respectively, in the following character).
2411     In the case of function definitions, a K&R-style list of arguments
2412     followed by their declarations is also provided, inside comments,
2413     after the declaration.
2414
2415'-fallow-parameterless-variadic-functions'
2416     Accept variadic functions without named parameters.
2417
2418     Although it is possible to define such a function, this is not very
2419     useful as it is not possible to read the arguments.  This is only
2420     supported for C as this construct is allowed by C++.
2421
2422'-fno-asm'
2423     Do not recognize 'asm', 'inline' or 'typeof' as a keyword, so that
2424     code can use these words as identifiers.  You can use the keywords
2425     '__asm__', '__inline__' and '__typeof__' instead.  '-ansi' implies
2426     '-fno-asm'.
2427
2428     In C++, this switch only affects the 'typeof' keyword, since 'asm'
2429     and 'inline' are standard keywords.  You may want to use the
2430     '-fno-gnu-keywords' flag instead, which has the same effect.  In
2431     C99 mode ('-std=c99' or '-std=gnu99'), this switch only affects the
2432     'asm' and 'typeof' keywords, since 'inline' is a standard keyword
2433     in ISO C99.
2434
2435'-fno-builtin'
2436'-fno-builtin-FUNCTION'
2437     Don't recognize built-in functions that do not begin with
2438     '__builtin_' as prefix.  *Note Other built-in functions provided by
2439     GCC: Other Builtins, for details of the functions affected,
2440     including those which are not built-in functions when '-ansi' or
2441     '-std' options for strict ISO C conformance are used because they
2442     do not have an ISO standard meaning.
2443
2444     GCC normally generates special code to handle certain built-in
2445     functions more efficiently; for instance, calls to 'alloca' may
2446     become single instructions which adjust the stack directly, and
2447     calls to 'memcpy' may become inline copy loops.  The resulting code
2448     is often both smaller and faster, but since the function calls no
2449     longer appear as such, you cannot set a breakpoint on those calls,
2450     nor can you change the behavior of the functions by linking with a
2451     different library.  In addition, when a function is recognized as a
2452     built-in function, GCC may use information about that function to
2453     warn about problems with calls to that function, or to generate
2454     more efficient code, even if the resulting code still contains
2455     calls to that function.  For example, warnings are given with
2456     '-Wformat' for bad calls to 'printf' when 'printf' is built in and
2457     'strlen' is known not to modify global memory.
2458
2459     With the '-fno-builtin-FUNCTION' option only the built-in function
2460     FUNCTION is disabled.  FUNCTION must not begin with '__builtin_'.
2461     If a function is named that is not built-in in this version of GCC,
2462     this option is ignored.  There is no corresponding
2463     '-fbuiltin-FUNCTION' option; if you wish to enable built-in
2464     functions selectively when using '-fno-builtin' or
2465     '-ffreestanding', you may define macros such as:
2466
2467          #define abs(n)          __builtin_abs ((n))
2468          #define strcpy(d, s)    __builtin_strcpy ((d), (s))
2469
2470'-fgimple'
2471
2472     Enable parsing of function definitions marked with '__GIMPLE'.
2473     This is an experimental feature that allows unit testing of GIMPLE
2474     passes.
2475
2476'-fhosted'
2477
2478     Assert that compilation targets a hosted environment.  This implies
2479     '-fbuiltin'.  A hosted environment is one in which the entire
2480     standard library is available, and in which 'main' has a return
2481     type of 'int'.  Examples are nearly everything except a kernel.
2482     This is equivalent to '-fno-freestanding'.
2483
2484'-ffreestanding'
2485
2486     Assert that compilation targets a freestanding environment.  This
2487     implies '-fno-builtin'.  A freestanding environment is one in which
2488     the standard library may not exist, and program startup may not
2489     necessarily be at 'main'.  The most obvious example is an OS
2490     kernel.  This is equivalent to '-fno-hosted'.
2491
2492     *Note Language Standards Supported by GCC: Standards, for details
2493     of freestanding and hosted environments.
2494
2495'-fopenacc'
2496     Enable handling of OpenACC directives '#pragma acc' in C/C++ and
2497     '!$acc' in Fortran.  When '-fopenacc' is specified, the compiler
2498     generates accelerated code according to the OpenACC Application
2499     Programming Interface v2.6 <https://www.openacc.org>.  This option
2500     implies '-pthread', and thus is only supported on targets that have
2501     support for '-pthread'.
2502
2503'-fopenacc-dim=GEOM'
2504     Specify default compute dimensions for parallel offload regions
2505     that do not explicitly specify.  The GEOM value is a triple of
2506     ':'-separated sizes, in order 'gang', 'worker' and, 'vector'.  A
2507     size can be omitted, to use a target-specific default value.
2508
2509'-fopenmp'
2510     Enable handling of OpenMP directives '#pragma omp' in C/C++ and
2511     '!$omp' in Fortran.  When '-fopenmp' is specified, the compiler
2512     generates parallel code according to the OpenMP Application Program
2513     Interface v4.5 <https://www.openmp.org>.  This option implies
2514     '-pthread', and thus is only supported on targets that have support
2515     for '-pthread'.  '-fopenmp' implies '-fopenmp-simd'.
2516
2517'-fopenmp-simd'
2518     Enable handling of OpenMP's SIMD directives with '#pragma omp' in
2519     C/C++ and '!$omp' in Fortran.  Other OpenMP directives are ignored.
2520
2521'-fgnu-tm'
2522     When the option '-fgnu-tm' is specified, the compiler generates
2523     code for the Linux variant of Intel's current Transactional Memory
2524     ABI specification document (Revision 1.1, May 6 2009).  This is an
2525     experimental feature whose interface may change in future versions
2526     of GCC, as the official specification changes.  Please note that
2527     not all architectures are supported for this feature.
2528
2529     For more information on GCC's support for transactional memory,
2530     *Note The GNU Transactional Memory Library: (libitm)Enabling
2531     libitm.
2532
2533     Note that the transactional memory feature is not supported with
2534     non-call exceptions ('-fnon-call-exceptions').
2535
2536'-fms-extensions'
2537     Accept some non-standard constructs used in Microsoft header files.
2538
2539     In C++ code, this allows member names in structures to be similar
2540     to previous types declarations.
2541
2542          typedef int UOW;
2543          struct ABC {
2544            UOW UOW;
2545          };
2546
2547     Some cases of unnamed fields in structures and unions are only
2548     accepted with this option.  *Note Unnamed struct/union fields
2549     within structs/unions: Unnamed Fields, for details.
2550
2551     Note that this option is off for all targets except for x86 targets
2552     using ms-abi.
2553
2554'-fplan9-extensions'
2555     Accept some non-standard constructs used in Plan 9 code.
2556
2557     This enables '-fms-extensions', permits passing pointers to
2558     structures with anonymous fields to functions that expect pointers
2559     to elements of the type of the field, and permits referring to
2560     anonymous fields declared using a typedef.  *Note Unnamed
2561     struct/union fields within structs/unions: Unnamed Fields, for
2562     details.  This is only supported for C, not C++.
2563
2564'-fcond-mismatch'
2565     Allow conditional expressions with mismatched types in the second
2566     and third arguments.  The value of such an expression is void.
2567     This option is not supported for C++.
2568
2569'-flax-vector-conversions'
2570     Allow implicit conversions between vectors with differing numbers
2571     of elements and/or incompatible element types.  This option should
2572     not be used for new code.
2573
2574'-funsigned-char'
2575     Let the type 'char' be unsigned, like 'unsigned char'.
2576
2577     Each kind of machine has a default for what 'char' should be.  It
2578     is either like 'unsigned char' by default or like 'signed char' by
2579     default.
2580
2581     Ideally, a portable program should always use 'signed char' or
2582     'unsigned char' when it depends on the signedness of an object.
2583     But many programs have been written to use plain 'char' and expect
2584     it to be signed, or expect it to be unsigned, depending on the
2585     machines they were written for.  This option, and its inverse, let
2586     you make such a program work with the opposite default.
2587
2588     The type 'char' is always a distinct type from each of 'signed
2589     char' or 'unsigned char', even though its behavior is always just
2590     like one of those two.
2591
2592'-fsigned-char'
2593     Let the type 'char' be signed, like 'signed char'.
2594
2595     Note that this is equivalent to '-fno-unsigned-char', which is the
2596     negative form of '-funsigned-char'.  Likewise, the option
2597     '-fno-signed-char' is equivalent to '-funsigned-char'.
2598
2599'-fsigned-bitfields'
2600'-funsigned-bitfields'
2601'-fno-signed-bitfields'
2602'-fno-unsigned-bitfields'
2603     These options control whether a bit-field is signed or unsigned,
2604     when the declaration does not use either 'signed' or 'unsigned'.
2605     By default, such a bit-field is signed, because this is consistent:
2606     the basic integer types such as 'int' are signed types.
2607
2608'-fsso-struct=ENDIANNESS'
2609     Set the default scalar storage order of structures and unions to
2610     the specified endianness.  The accepted values are 'big-endian',
2611     'little-endian' and 'native' for the native endianness of the
2612     target (the default).  This option is not supported for C++.
2613
2614     *Warning:* the '-fsso-struct' switch causes GCC to generate code
2615     that is not binary compatible with code generated without it if the
2616     specified endianness is not the native endianness of the target.
2617
2618
2619File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
2620
26213.5 Options Controlling C++ Dialect
2622===================================
2623
2624This section describes the command-line options that are only meaningful
2625for C++ programs.  You can also use most of the GNU compiler options
2626regardless of what language your program is in.  For example, you might
2627compile a file 'firstClass.C' like this:
2628
2629     g++ -g -fstrict-enums -O -c firstClass.C
2630
2631In this example, only '-fstrict-enums' is an option meant only for C++
2632programs; you can use the other options with any language supported by
2633GCC.
2634
2635 Some options for compiling C programs, such as '-std', are also
2636relevant for C++ programs.  *Note Options Controlling C Dialect: C
2637Dialect Options.
2638
2639 Here is a list of options that are _only_ for compiling C++ programs:
2640
2641'-fabi-version=N'
2642     Use version N of the C++ ABI.  The default is version 0.
2643
2644     Version 0 refers to the version conforming most closely to the C++
2645     ABI specification.  Therefore, the ABI obtained using version 0
2646     will change in different versions of G++ as ABI bugs are fixed.
2647
2648     Version 1 is the version of the C++ ABI that first appeared in G++
2649     3.2.
2650
2651     Version 2 is the version of the C++ ABI that first appeared in G++
2652     3.4, and was the default through G++ 4.9.
2653
2654     Version 3 corrects an error in mangling a constant address as a
2655     template argument.
2656
2657     Version 4, which first appeared in G++ 4.5, implements a standard
2658     mangling for vector types.
2659
2660     Version 5, which first appeared in G++ 4.6, corrects the mangling
2661     of attribute const/volatile on function pointer types, decltype of
2662     a plain decl, and use of a function parameter in the declaration of
2663     another parameter.
2664
2665     Version 6, which first appeared in G++ 4.7, corrects the promotion
2666     behavior of C++11 scoped enums and the mangling of template
2667     argument packs, const/static_cast, prefix ++ and -, and a class
2668     scope function used as a template argument.
2669
2670     Version 7, which first appeared in G++ 4.8, that treats nullptr_t
2671     as a builtin type and corrects the mangling of lambdas in default
2672     argument scope.
2673
2674     Version 8, which first appeared in G++ 4.9, corrects the
2675     substitution behavior of function types with
2676     function-cv-qualifiers.
2677
2678     Version 9, which first appeared in G++ 5.2, corrects the alignment
2679     of 'nullptr_t'.
2680
2681     Version 10, which first appeared in G++ 6.1, adds mangling of
2682     attributes that affect type identity, such as ia32 calling
2683     convention attributes (e.g. 'stdcall').
2684
2685     Version 11, which first appeared in G++ 7, corrects the mangling of
2686     sizeof...  expressions and operator names.  For multiple entities
2687     with the same name within a function, that are declared in
2688     different scopes, the mangling now changes starting with the
2689     twelfth occurrence.  It also implies '-fnew-inheriting-ctors'.
2690
2691     Version 12, which first appeared in G++ 8, corrects the calling
2692     conventions for empty classes on the x86_64 target and for classes
2693     with only deleted copy/move constructors.  It accidentally changes
2694     the calling convention for classes with a deleted copy constructor
2695     and a trivial move constructor.
2696
2697     Version 13, which first appeared in G++ 8.2, fixes the accidental
2698     change in version 12.
2699
2700     Version 14, which first appeared in G++ 10, corrects the mangling
2701     of the nullptr expression.
2702
2703     See also '-Wabi'.
2704
2705'-fabi-compat-version=N'
2706     On targets that support strong aliases, G++ works around mangling
2707     changes by creating an alias with the correct mangled name when
2708     defining a symbol with an incorrect mangled name.  This switch
2709     specifies which ABI version to use for the alias.
2710
2711     With '-fabi-version=0' (the default), this defaults to 11 (GCC 7
2712     compatibility).  If another ABI version is explicitly selected,
2713     this defaults to 0.  For compatibility with GCC versions 3.2
2714     through 4.9, use '-fabi-compat-version=2'.
2715
2716     If this option is not provided but '-Wabi=N' is, that version is
2717     used for compatibility aliases.  If this option is provided along
2718     with '-Wabi' (without the version), the version from this option is
2719     used for the warning.
2720
2721'-fno-access-control'
2722     Turn off all access checking.  This switch is mainly useful for
2723     working around bugs in the access control code.
2724
2725'-faligned-new'
2726     Enable support for C++17 'new' of types that require more alignment
2727     than 'void* ::operator new(std::size_t)' provides.  A numeric
2728     argument such as '-faligned-new=32' can be used to specify how much
2729     alignment (in bytes) is provided by that function, but few users
2730     will need to override the default of 'alignof(std::max_align_t)'.
2731
2732     This flag is enabled by default for '-std=c++17'.
2733
2734'-fchar8_t'
2735'-fno-char8_t'
2736     Enable support for 'char8_t' as adopted for C++2a.  This includes
2737     the addition of a new 'char8_t' fundamental type, changes to the
2738     types of UTF-8 string and character literals, new signatures for
2739     user-defined literals, associated standard library updates, and new
2740     '__cpp_char8_t' and '__cpp_lib_char8_t' feature test macros.
2741
2742     This option enables functions to be overloaded for ordinary and
2743     UTF-8 strings:
2744
2745          int f(const char *);    // #1
2746          int f(const char8_t *); // #2
2747          int v1 = f("text");     // Calls #1
2748          int v2 = f(u8"text");   // Calls #2
2749
2750     and introduces new signatures for user-defined literals:
2751
2752          int operator""_udl1(char8_t);
2753          int v3 = u8'x'_udl1;
2754          int operator""_udl2(const char8_t*, std::size_t);
2755          int v4 = u8"text"_udl2;
2756          template<typename T, T...> int operator""_udl3();
2757          int v5 = u8"text"_udl3;
2758
2759     The change to the types of UTF-8 string and character literals
2760     introduces incompatibilities with ISO C++11 and later standards.
2761     For example, the following code is well-formed under ISO C++11, but
2762     is ill-formed when '-fchar8_t' is specified.
2763
2764          char ca[] = u8"xx";     // error: char-array initialized from wide
2765                                  //        string
2766          const char *cp = u8"xx";// error: invalid conversion from
2767                                  //        `const char8_t*' to `const char*'
2768          int f(const char*);
2769          auto v = f(u8"xx");     // error: invalid conversion from
2770                                  //        `const char8_t*' to `const char*'
2771          std::string s{u8"xx"};  // error: no matching function for call to
2772                                  //        `std::basic_string<char>::basic_string()'
2773          using namespace std::literals;
2774          s = u8"xx"s;            // error: conversion from
2775                                  //        `basic_string<char8_t>' to non-scalar
2776                                  //        type `basic_string<char>' requested
2777
2778'-fcheck-new'
2779     Check that the pointer returned by 'operator new' is non-null
2780     before attempting to modify the storage allocated.  This check is
2781     normally unnecessary because the C++ standard specifies that
2782     'operator new' only returns '0' if it is declared 'throw()', in
2783     which case the compiler always checks the return value even without
2784     this option.  In all other cases, when 'operator new' has a
2785     non-empty exception specification, memory exhaustion is signalled
2786     by throwing 'std::bad_alloc'.  See also 'new (nothrow)'.
2787
2788'-fconcepts'
2789'-fconcepts-ts'
2790     Below '-std=c++2a', '-fconcepts' enables support for the C++
2791     Extensions for Concepts Technical Specification, ISO 19217 (2015).
2792
2793     With '-std=c++2a' and above, Concepts are part of the language
2794     standard, so '-fconcepts' defaults to on.  But the standard
2795     specification of Concepts differs significantly from the TS, so
2796     some constructs that were allowed in the TS but didn't make it into
2797     the standard can still be enabled by '-fconcepts-ts'.
2798
2799'-fconstexpr-depth=N'
2800     Set the maximum nested evaluation depth for C++11 constexpr
2801     functions to N.  A limit is needed to detect endless recursion
2802     during constant expression evaluation.  The minimum specified by
2803     the standard is 512.
2804
2805'-fconstexpr-cache-depth=N'
2806     Set the maximum level of nested evaluation depth for C++11
2807     constexpr functions that will be cached to N.  This is a heuristic
2808     that trades off compilation speed (when the cache avoids repeated
2809     calculations) against memory consumption (when the cache grows very
2810     large from highly recursive evaluations).  The default is 8.  Very
2811     few users are likely to want to adjust it, but if your code does
2812     heavy constexpr calculations you might want to experiment to find
2813     which value works best for you.
2814
2815'-fconstexpr-loop-limit=N'
2816     Set the maximum number of iterations for a loop in C++14 constexpr
2817     functions to N.  A limit is needed to detect infinite loops during
2818     constant expression evaluation.  The default is 262144 (1<<18).
2819
2820'-fconstexpr-ops-limit=N'
2821     Set the maximum number of operations during a single constexpr
2822     evaluation.  Even when number of iterations of a single loop is
2823     limited with the above limit, if there are several nested loops and
2824     each of them has many iterations but still smaller than the above
2825     limit, or if in a body of some loop or even outside of a loop too
2826     many expressions need to be evaluated, the resulting constexpr
2827     evaluation might take too long.  The default is 33554432 (1<<25).
2828
2829'-fcoroutines'
2830     Enable support for the C++ coroutines extension (experimental).
2831
2832'-fno-elide-constructors'
2833     The C++ standard allows an implementation to omit creating a
2834     temporary that is only used to initialize another object of the
2835     same type.  Specifying this option disables that optimization, and
2836     forces G++ to call the copy constructor in all cases.  This option
2837     also causes G++ to call trivial member functions which otherwise
2838     would be expanded inline.
2839
2840     In C++17, the compiler is required to omit these temporaries, but
2841     this option still affects trivial member functions.
2842
2843'-fno-enforce-eh-specs'
2844     Don't generate code to check for violation of exception
2845     specifications at run time.  This option violates the C++ standard,
2846     but may be useful for reducing code size in production builds, much
2847     like defining 'NDEBUG'.  This does not give user code permission to
2848     throw exceptions in violation of the exception specifications; the
2849     compiler still optimizes based on the specifications, so throwing
2850     an unexpected exception results in undefined behavior at run time.
2851
2852'-fextern-tls-init'
2853'-fno-extern-tls-init'
2854     The C++11 and OpenMP standards allow 'thread_local' and
2855     'threadprivate' variables to have dynamic (runtime) initialization.
2856     To support this, any use of such a variable goes through a wrapper
2857     function that performs any necessary initialization.  When the use
2858     and definition of the variable are in the same translation unit,
2859     this overhead can be optimized away, but when the use is in a
2860     different translation unit there is significant overhead even if
2861     the variable doesn't actually need dynamic initialization.  If the
2862     programmer can be sure that no use of the variable in a
2863     non-defining TU needs to trigger dynamic initialization (either
2864     because the variable is statically initialized, or a use of the
2865     variable in the defining TU will be executed before any uses in
2866     another TU), they can avoid this overhead with the
2867     '-fno-extern-tls-init' option.
2868
2869     On targets that support symbol aliases, the default is
2870     '-fextern-tls-init'.  On targets that do not support symbol
2871     aliases, the default is '-fno-extern-tls-init'.
2872
2873'-fno-gnu-keywords'
2874     Do not recognize 'typeof' as a keyword, so that code can use this
2875     word as an identifier.  You can use the keyword '__typeof__'
2876     instead.  This option is implied by the strict ISO C++ dialects:
2877     '-ansi', '-std=c++98', '-std=c++11', etc.
2878
2879'-fno-implicit-templates'
2880     Never emit code for non-inline templates that are instantiated
2881     implicitly (i.e. by use); only emit code for explicit
2882     instantiations.  If you use this option, you must take care to
2883     structure your code to include all the necessary explicit
2884     instantiations to avoid getting undefined symbols at link time.
2885     *Note Template Instantiation::, for more information.
2886
2887'-fno-implicit-inline-templates'
2888     Don't emit code for implicit instantiations of inline templates,
2889     either.  The default is to handle inlines differently so that
2890     compiles with and without optimization need the same set of
2891     explicit instantiations.
2892
2893'-fno-implement-inlines'
2894     To save space, do not emit out-of-line copies of inline functions
2895     controlled by '#pragma implementation'.  This causes linker errors
2896     if these functions are not inlined everywhere they are called.
2897
2898'-fms-extensions'
2899     Disable Wpedantic warnings about constructs used in MFC, such as
2900     implicit int and getting a pointer to member function via
2901     non-standard syntax.
2902
2903'-fnew-inheriting-ctors'
2904     Enable the P0136 adjustment to the semantics of C++11 constructor
2905     inheritance.  This is part of C++17 but also considered to be a
2906     Defect Report against C++11 and C++14.  This flag is enabled by
2907     default unless '-fabi-version=10' or lower is specified.
2908
2909'-fnew-ttp-matching'
2910     Enable the P0522 resolution to Core issue 150, template template
2911     parameters and default arguments: this allows a template with
2912     default template arguments as an argument for a template template
2913     parameter with fewer template parameters.  This flag is enabled by
2914     default for '-std=c++17'.
2915
2916'-fno-nonansi-builtins'
2917     Disable built-in declarations of functions that are not mandated by
2918     ANSI/ISO C.  These include 'ffs', 'alloca', '_exit', 'index',
2919     'bzero', 'conjf', and other related functions.
2920
2921'-fnothrow-opt'
2922     Treat a 'throw()' exception specification as if it were a
2923     'noexcept' specification to reduce or eliminate the text size
2924     overhead relative to a function with no exception specification.
2925     If the function has local variables of types with non-trivial
2926     destructors, the exception specification actually makes the
2927     function smaller because the EH cleanups for those variables can be
2928     optimized away.  The semantic effect is that an exception thrown
2929     out of a function with such an exception specification results in a
2930     call to 'terminate' rather than 'unexpected'.
2931
2932'-fno-operator-names'
2933     Do not treat the operator name keywords 'and', 'bitand', 'bitor',
2934     'compl', 'not', 'or' and 'xor' as synonyms as keywords.
2935
2936'-fno-optional-diags'
2937     Disable diagnostics that the standard says a compiler does not need
2938     to issue.  Currently, the only such diagnostic issued by G++ is the
2939     one for a name having multiple meanings within a class.
2940
2941'-fpermissive'
2942     Downgrade some diagnostics about nonconformant code from errors to
2943     warnings.  Thus, using '-fpermissive' allows some nonconforming
2944     code to compile.
2945
2946'-fno-pretty-templates'
2947     When an error message refers to a specialization of a function
2948     template, the compiler normally prints the signature of the
2949     template followed by the template arguments and any typedefs or
2950     typenames in the signature (e.g. 'void f(T) [with T = int]' rather
2951     than 'void f(int)') so that it's clear which template is involved.
2952     When an error message refers to a specialization of a class
2953     template, the compiler omits any template arguments that match the
2954     default template arguments for that template.  If either of these
2955     behaviors make it harder to understand the error message rather
2956     than easier, you can use '-fno-pretty-templates' to disable them.
2957
2958'-fno-rtti'
2959     Disable generation of information about every class with virtual
2960     functions for use by the C++ run-time type identification features
2961     ('dynamic_cast' and 'typeid').  If you don't use those parts of the
2962     language, you can save some space by using this flag.  Note that
2963     exception handling uses the same information, but G++ generates it
2964     as needed.  The 'dynamic_cast' operator can still be used for casts
2965     that do not require run-time type information, i.e. casts to 'void
2966     *' or to unambiguous base classes.
2967
2968     Mixing code compiled with '-frtti' with that compiled with
2969     '-fno-rtti' may not work.  For example, programs may fail to link
2970     if a class compiled with '-fno-rtti' is used as a base for a class
2971     compiled with '-frtti'.
2972
2973'-fsized-deallocation'
2974     Enable the built-in global declarations
2975          void operator delete (void *, std::size_t) noexcept;
2976          void operator delete[] (void *, std::size_t) noexcept;
2977     as introduced in C++14.  This is useful for user-defined
2978     replacement deallocation functions that, for example, use the size
2979     of the object to make deallocation faster.  Enabled by default
2980     under '-std=c++14' and above.  The flag '-Wsized-deallocation'
2981     warns about places that might want to add a definition.
2982
2983'-fstrict-enums'
2984     Allow the compiler to optimize using the assumption that a value of
2985     enumerated type can only be one of the values of the enumeration
2986     (as defined in the C++ standard; basically, a value that can be
2987     represented in the minimum number of bits needed to represent all
2988     the enumerators).  This assumption may not be valid if the program
2989     uses a cast to convert an arbitrary integer value to the enumerated
2990     type.
2991
2992'-fstrong-eval-order'
2993     Evaluate member access, array subscripting, and shift expressions
2994     in left-to-right order, and evaluate assignment in right-to-left
2995     order, as adopted for C++17.  Enabled by default with '-std=c++17'.
2996     '-fstrong-eval-order=some' enables just the ordering of member
2997     access and shift expressions, and is the default without
2998     '-std=c++17'.
2999
3000'-ftemplate-backtrace-limit=N'
3001     Set the maximum number of template instantiation notes for a single
3002     warning or error to N.  The default value is 10.
3003
3004'-ftemplate-depth=N'
3005     Set the maximum instantiation depth for template classes to N.  A
3006     limit on the template instantiation depth is needed to detect
3007     endless recursions during template class instantiation.  ANSI/ISO
3008     C++ conforming programs must not rely on a maximum depth greater
3009     than 17 (changed to 1024 in C++11).  The default value is 900, as
3010     the compiler can run out of stack space before hitting 1024 in some
3011     situations.
3012
3013'-fno-threadsafe-statics'
3014     Do not emit the extra code to use the routines specified in the C++
3015     ABI for thread-safe initialization of local statics.  You can use
3016     this option to reduce code size slightly in code that doesn't need
3017     to be thread-safe.
3018
3019'-fuse-cxa-atexit'
3020     Register destructors for objects with static storage duration with
3021     the '__cxa_atexit' function rather than the 'atexit' function.
3022     This option is required for fully standards-compliant handling of
3023     static destructors, but only works if your C library supports
3024     '__cxa_atexit'.
3025
3026'-fno-use-cxa-get-exception-ptr'
3027     Don't use the '__cxa_get_exception_ptr' runtime routine.  This
3028     causes 'std::uncaught_exception' to be incorrect, but is necessary
3029     if the runtime routine is not available.
3030
3031'-fvisibility-inlines-hidden'
3032     This switch declares that the user does not attempt to compare
3033     pointers to inline functions or methods where the addresses of the
3034     two functions are taken in different shared objects.
3035
3036     The effect of this is that GCC may, effectively, mark inline
3037     methods with '__attribute__ ((visibility ("hidden")))' so that they
3038     do not appear in the export table of a DSO and do not require a PLT
3039     indirection when used within the DSO.  Enabling this option can
3040     have a dramatic effect on load and link times of a DSO as it
3041     massively reduces the size of the dynamic export table when the
3042     library makes heavy use of templates.
3043
3044     The behavior of this switch is not quite the same as marking the
3045     methods as hidden directly, because it does not affect static
3046     variables local to the function or cause the compiler to deduce
3047     that the function is defined in only one shared object.
3048
3049     You may mark a method as having a visibility explicitly to negate
3050     the effect of the switch for that method.  For example, if you do
3051     want to compare pointers to a particular inline method, you might
3052     mark it as having default visibility.  Marking the enclosing class
3053     with explicit visibility has no effect.
3054
3055     Explicitly instantiated inline methods are unaffected by this
3056     option as their linkage might otherwise cross a shared library
3057     boundary.  *Note Template Instantiation::.
3058
3059'-fvisibility-ms-compat'
3060     This flag attempts to use visibility settings to make GCC's C++
3061     linkage model compatible with that of Microsoft Visual Studio.
3062
3063     The flag makes these changes to GCC's linkage model:
3064
3065       1. It sets the default visibility to 'hidden', like
3066          '-fvisibility=hidden'.
3067
3068       2. Types, but not their members, are not hidden by default.
3069
3070       3. The One Definition Rule is relaxed for types without explicit
3071          visibility specifications that are defined in more than one
3072          shared object: those declarations are permitted if they are
3073          permitted when this option is not used.
3074
3075     In new code it is better to use '-fvisibility=hidden' and export
3076     those classes that are intended to be externally visible.
3077     Unfortunately it is possible for code to rely, perhaps
3078     accidentally, on the Visual Studio behavior.
3079
3080     Among the consequences of these changes are that static data
3081     members of the same type with the same name but defined in
3082     different shared objects are different, so changing one does not
3083     change the other; and that pointers to function members defined in
3084     different shared objects may not compare equal.  When this flag is
3085     given, it is a violation of the ODR to define types with the same
3086     name differently.
3087
3088'-fno-weak'
3089     Do not use weak symbol support, even if it is provided by the
3090     linker.  By default, G++ uses weak symbols if they are available.
3091     This option exists only for testing, and should not be used by
3092     end-users; it results in inferior code and has no benefits.  This
3093     option may be removed in a future release of G++.
3094
3095'-fext-numeric-literals (C++ and Objective-C++ only)'
3096     Accept imaginary, fixed-point, or machine-defined literal number
3097     suffixes as GNU extensions.  When this option is turned off these
3098     suffixes are treated as C++11 user-defined literal numeric
3099     suffixes.  This is on by default for all pre-C++11 dialects and all
3100     GNU dialects: '-std=c++98', '-std=gnu++98', '-std=gnu++11',
3101     '-std=gnu++14'.  This option is off by default for ISO C++11
3102     onwards ('-std=c++11', ...).
3103
3104'-nostdinc++'
3105     Do not search for header files in the standard directories specific
3106     to C++, but do still search the other standard directories.  (This
3107     option is used when building the C++ library.)
3108
3109 In addition, these warning options have meanings only for C++ programs:
3110
3111'-Wabi-tag (C++ and Objective-C++ only)'
3112     Warn when a type with an ABI tag is used in a context that does not
3113     have that ABI tag.  See *note C++ Attributes:: for more information
3114     about ABI tags.
3115
3116'-Wcomma-subscript (C++ and Objective-C++ only)'
3117     Warn about uses of a comma expression within a subscripting
3118     expression.  This usage was deprecated in C++2a.  However, a comma
3119     expression wrapped in '( )' is not deprecated.  Example:
3120
3121          void f(int *a, int b, int c) {
3122              a[b,c];     // deprecated
3123              a[(b,c)];   // OK
3124          }
3125
3126     Enabled by default with '-std=c++2a'.
3127
3128'-Wctor-dtor-privacy (C++ and Objective-C++ only)'
3129     Warn when a class seems unusable because all the constructors or
3130     destructors in that class are private, and it has neither friends
3131     nor public static member functions.  Also warn if there are no
3132     non-private methods, and there's at least one private member
3133     function that isn't a constructor or destructor.
3134
3135'-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
3136     Warn when 'delete' is used to destroy an instance of a class that
3137     has virtual functions and non-virtual destructor.  It is unsafe to
3138     delete an instance of a derived class through a pointer to a base
3139     class if the base class does not have a virtual destructor.  This
3140     warning is enabled by '-Wall'.
3141
3142'-Wdeprecated-copy (C++ and Objective-C++ only)'
3143     Warn that the implicit declaration of a copy constructor or copy
3144     assignment operator is deprecated if the class has a user-provided
3145     copy constructor or copy assignment operator, in C++11 and up.
3146     This warning is enabled by '-Wextra'.  With
3147     '-Wdeprecated-copy-dtor', also deprecate if the class has a
3148     user-provided destructor.
3149
3150'-Wno-init-list-lifetime (C++ and Objective-C++ only)'
3151     Do not warn about uses of 'std::initializer_list' that are likely
3152     to result in dangling pointers.  Since the underlying array for an
3153     'initializer_list' is handled like a normal C++ temporary object,
3154     it is easy to inadvertently keep a pointer to the array past the
3155     end of the array's lifetime.  For example:
3156
3157        * If a function returns a temporary 'initializer_list', or a
3158          local 'initializer_list' variable, the array's lifetime ends
3159          at the end of the return statement, so the value returned has
3160          a dangling pointer.
3161
3162        * If a new-expression creates an 'initializer_list', the array
3163          only lives until the end of the enclosing full-expression, so
3164          the 'initializer_list' in the heap has a dangling pointer.
3165
3166        * When an 'initializer_list' variable is assigned from a
3167          brace-enclosed initializer list, the temporary array created
3168          for the right side of the assignment only lives until the end
3169          of the full-expression, so at the next statement the
3170          'initializer_list' variable has a dangling pointer.
3171
3172               // li's initial underlying array lives as long as li
3173               std::initializer_list<int> li = { 1,2,3 };
3174               // assignment changes li to point to a temporary array
3175               li = { 4, 5 };
3176               // now the temporary is gone and li has a dangling pointer
3177               int i = li.begin()[0] // undefined behavior
3178
3179        * When a list constructor stores the 'begin' pointer from the
3180          'initializer_list' argument, this doesn't extend the lifetime
3181          of the array, so if a class variable is constructed from a
3182          temporary 'initializer_list', the pointer is left dangling by
3183          the end of the variable declaration statement.
3184
3185'-Wno-literal-suffix (C++ and Objective-C++ only)'
3186     Do not warn when a string or character literal is followed by a
3187     ud-suffix which does not begin with an underscore.  As a conforming
3188     extension, GCC treats such suffixes as separate preprocessing
3189     tokens in order to maintain backwards compatibility with code that
3190     uses formatting macros from '<inttypes.h>'.  For example:
3191
3192          #define __STDC_FORMAT_MACROS
3193          #include <inttypes.h>
3194          #include <stdio.h>
3195
3196          int main() {
3197            int64_t i64 = 123;
3198            printf("My int64: %" PRId64"\n", i64);
3199          }
3200
3201     In this case, 'PRId64' is treated as a separate preprocessing
3202     token.
3203
3204     This option also controls warnings when a user-defined literal
3205     operator is declared with a literal suffix identifier that doesn't
3206     begin with an underscore.  Literal suffix identifiers that don't
3207     begin with an underscore are reserved for future standardization.
3208
3209     These warnings are enabled by default.
3210
3211'-Wno-narrowing (C++ and Objective-C++ only)'
3212     For C++11 and later standards, narrowing conversions are diagnosed
3213     by default, as required by the standard.  A narrowing conversion
3214     from a constant produces an error, and a narrowing conversion from
3215     a non-constant produces a warning, but '-Wno-narrowing' suppresses
3216     the diagnostic.  Note that this does not affect the meaning of
3217     well-formed code; narrowing conversions are still considered
3218     ill-formed in SFINAE contexts.
3219
3220     With '-Wnarrowing' in C++98, warn when a narrowing conversion
3221     prohibited by C++11 occurs within '{ }', e.g.
3222
3223          int i = { 2.2 }; // error: narrowing from double to int
3224
3225     This flag is included in '-Wall' and '-Wc++11-compat'.
3226
3227'-Wnoexcept (C++ and Objective-C++ only)'
3228     Warn when a noexcept-expression evaluates to false because of a
3229     call to a function that does not have a non-throwing exception
3230     specification (i.e.  'throw()' or 'noexcept') but is known by the
3231     compiler to never throw an exception.
3232
3233'-Wnoexcept-type (C++ and Objective-C++ only)'
3234     Warn if the C++17 feature making 'noexcept' part of a function type
3235     changes the mangled name of a symbol relative to C++14.  Enabled by
3236     '-Wabi' and '-Wc++17-compat'.
3237
3238     As an example:
3239
3240          template <class T> void f(T t) { t(); };
3241          void g() noexcept;
3242          void h() { f(g); }
3243
3244     In C++14, 'f' calls 'f<void(*)()>', but in C++17 it calls
3245     'f<void(*)()noexcept>'.
3246
3247'-Wclass-memaccess (C++ and Objective-C++ only)'
3248     Warn when the destination of a call to a raw memory function such
3249     as 'memset' or 'memcpy' is an object of class type, and when
3250     writing into such an object might bypass the class non-trivial or
3251     deleted constructor or copy assignment, violate const-correctness
3252     or encapsulation, or corrupt virtual table pointers.  Modifying the
3253     representation of such objects may violate invariants maintained by
3254     member functions of the class.  For example, the call to 'memset'
3255     below is undefined because it modifies a non-trivial class object
3256     and is, therefore, diagnosed.  The safe way to either initialize or
3257     clear the storage of objects of such types is by using the
3258     appropriate constructor or assignment operator, if one is
3259     available.
3260          std::string str = "abc";
3261          memset (&str, 0, sizeof str);
3262     The '-Wclass-memaccess' option is enabled by '-Wall'.  Explicitly
3263     casting the pointer to the class object to 'void *' or to a type
3264     that can be safely accessed by the raw memory function suppresses
3265     the warning.
3266
3267'-Wnon-virtual-dtor (C++ and Objective-C++ only)'
3268     Warn when a class has virtual functions and an accessible
3269     non-virtual destructor itself or in an accessible polymorphic base
3270     class, in which case it is possible but unsafe to delete an
3271     instance of a derived class through a pointer to the class itself
3272     or base class.  This warning is automatically enabled if '-Weffc++'
3273     is specified.
3274
3275'-Wregister (C++ and Objective-C++ only)'
3276     Warn on uses of the 'register' storage class specifier, except when
3277     it is part of the GNU *note Explicit Register Variables::
3278     extension.  The use of the 'register' keyword as storage class
3279     specifier has been deprecated in C++11 and removed in C++17.
3280     Enabled by default with '-std=c++17'.
3281
3282'-Wreorder (C++ and Objective-C++ only)'
3283     Warn when the order of member initializers given in the code does
3284     not match the order in which they must be executed.  For instance:
3285
3286          struct A {
3287            int i;
3288            int j;
3289            A(): j (0), i (1) { }
3290          };
3291
3292     The compiler rearranges the member initializers for 'i' and 'j' to
3293     match the declaration order of the members, emitting a warning to
3294     that effect.  This warning is enabled by '-Wall'.
3295
3296'-Wno-pessimizing-move (C++ and Objective-C++ only)'
3297     This warning warns when a call to 'std::move' prevents copy
3298     elision.  A typical scenario when copy elision can occur is when
3299     returning in a function with a class return type, when the
3300     expression being returned is the name of a non-volatile automatic
3301     object, and is not a function parameter, and has the same type as
3302     the function return type.
3303
3304          struct T {
3305          ...
3306          };
3307          T fn()
3308          {
3309            T t;
3310            ...
3311            return std::move (t);
3312          }
3313
3314     But in this example, the 'std::move' call prevents copy elision.
3315
3316     This warning is enabled by '-Wall'.
3317
3318'-Wno-redundant-move (C++ and Objective-C++ only)'
3319     This warning warns about redundant calls to 'std::move'; that is,
3320     when a move operation would have been performed even without the
3321     'std::move' call.  This happens because the compiler is forced to
3322     treat the object as if it were an rvalue in certain situations such
3323     as returning a local variable, where copy elision isn't applicable.
3324     Consider:
3325
3326          struct T {
3327          ...
3328          };
3329          T fn(T t)
3330          {
3331            ...
3332            return std::move (t);
3333          }
3334
3335     Here, the 'std::move' call is redundant.  Because G++ implements
3336     Core Issue 1579, another example is:
3337
3338          struct T { // convertible to U
3339          ...
3340          };
3341          struct U {
3342          ...
3343          };
3344          U fn()
3345          {
3346            T t;
3347            ...
3348            return std::move (t);
3349          }
3350     In this example, copy elision isn't applicable because the type of
3351     the expression being returned and the function return type differ,
3352     yet G++ treats the return value as if it were designated by an
3353     rvalue.
3354
3355     This warning is enabled by '-Wextra'.
3356
3357'-Wredundant-tags (C++ and Objective-C++ only)'
3358     Warn about redundant class-key and enum-key in references to class
3359     types and enumerated types in contexts where the key can be
3360     eliminated without causing an ambiguity.  For example:
3361
3362          struct foo;
3363          struct foo *p;   // warn that keyword struct can be eliminated
3364
3365     On the other hand, in this example there is no warning:
3366
3367          struct foo;
3368          void foo ();   // "hides" struct foo
3369          void bar (struct foo&);  // no warning, keyword struct is necessary
3370
3371'-Wno-subobject-linkage (C++ and Objective-C++ only)'
3372     Do not warn if a class type has a base or a field whose type uses
3373     the anonymous namespace or depends on a type with no linkage.  If a
3374     type A depends on a type B with no or internal linkage, defining it
3375     in multiple translation units would be an ODR violation because the
3376     meaning of B is different in each translation unit.  If A only
3377     appears in a single translation unit, the best way to silence the
3378     warning is to give it internal linkage by putting it in an
3379     anonymous namespace as well.  The compiler doesn't give this
3380     warning for types defined in the main .C file, as those are
3381     unlikely to have multiple definitions.  '-Wsubobject-linkage' is
3382     enabled by default.
3383
3384'-Weffc++ (C++ and Objective-C++ only)'
3385     Warn about violations of the following style guidelines from Scott
3386     Meyers' 'Effective C++' series of books:
3387
3388        * Define a copy constructor and an assignment operator for
3389          classes with dynamically-allocated memory.
3390
3391        * Prefer initialization to assignment in constructors.
3392
3393        * Have 'operator=' return a reference to '*this'.
3394
3395        * Don't try to return a reference when you must return an
3396          object.
3397
3398        * Distinguish between prefix and postfix forms of increment and
3399          decrement operators.
3400
3401        * Never overload '&&', '||', or ','.
3402
3403     This option also enables '-Wnon-virtual-dtor', which is also one of
3404     the effective C++ recommendations.  However, the check is extended
3405     to warn about the lack of virtual destructor in accessible
3406     non-polymorphic bases classes too.
3407
3408     When selecting this option, be aware that the standard library
3409     headers do not obey all of these guidelines; use 'grep -v' to
3410     filter out those warnings.
3411
3412'-Wstrict-null-sentinel (C++ and Objective-C++ only)'
3413     Warn about the use of an uncasted 'NULL' as sentinel.  When
3414     compiling only with GCC this is a valid sentinel, as 'NULL' is
3415     defined to '__null'.  Although it is a null pointer constant rather
3416     than a null pointer, it is guaranteed to be of the same size as a
3417     pointer.  But this use is not portable across different compilers.
3418
3419'-Wno-non-template-friend (C++ and Objective-C++ only)'
3420     Disable warnings when non-template friend functions are declared
3421     within a template.  In very old versions of GCC that predate
3422     implementation of the ISO standard, declarations such as 'friend
3423     int foo(int)', where the name of the friend is an unqualified-id,
3424     could be interpreted as a particular specialization of a template
3425     function; the warning exists to diagnose compatibility problems,
3426     and is enabled by default.
3427
3428'-Wold-style-cast (C++ and Objective-C++ only)'
3429     Warn if an old-style (C-style) cast to a non-void type is used
3430     within a C++ program.  The new-style casts ('dynamic_cast',
3431     'static_cast', 'reinterpret_cast', and 'const_cast') are less
3432     vulnerable to unintended effects and much easier to search for.
3433
3434'-Woverloaded-virtual (C++ and Objective-C++ only)'
3435     Warn when a function declaration hides virtual functions from a
3436     base class.  For example, in:
3437
3438          struct A {
3439            virtual void f();
3440          };
3441
3442          struct B: public A {
3443            void f(int);
3444          };
3445
3446     the 'A' class version of 'f' is hidden in 'B', and code like:
3447
3448          B* b;
3449          b->f();
3450
3451     fails to compile.
3452
3453'-Wno-pmf-conversions (C++ and Objective-C++ only)'
3454     Disable the diagnostic for converting a bound pointer to member
3455     function to a plain pointer.
3456
3457'-Wsign-promo (C++ and Objective-C++ only)'
3458     Warn when overload resolution chooses a promotion from unsigned or
3459     enumerated type to a signed type, over a conversion to an unsigned
3460     type of the same size.  Previous versions of G++ tried to preserve
3461     unsignedness, but the standard mandates the current behavior.
3462
3463'-Wtemplates (C++ and Objective-C++ only)'
3464     Warn when a primary template declaration is encountered.  Some
3465     coding rules disallow templates, and this may be used to enforce
3466     that rule.  The warning is inactive inside a system header file,
3467     such as the STL, so one can still use the STL. One may also
3468     instantiate or specialize templates.
3469
3470'-Wmismatched-tags (C++ and Objective-C++ only)'
3471     Warn for declarations of structs, classes, and class templates and
3472     their specializations with a class-key that does not match either
3473     the definition or the first declaration if no definition is
3474     provided.
3475
3476     For example, the declaration of 'struct Object' in the argument
3477     list of 'draw' triggers the warning.  To avoid it, either remove
3478     the redundant class-key 'struct' or replace it with 'class' to
3479     match its definition.
3480          class Object {
3481          public:
3482            virtual ~Object () = 0;
3483          };
3484          void draw (struct Object*);
3485
3486     It is not wrong to declare a class with the class-key 'struct' as
3487     the example above shows.  The '-Wmismatched-tags' option is
3488     intended to help achieve a consistent style of class declarations.
3489     In code that is intended to be portable to Windows-based compilers
3490     the warning helps prevent unresolved references due to the
3491     difference in the mangling of symbols declared with different
3492     class-keys.  The option can be used either on its own or in
3493     conjunction with '-Wredundant-tags'.
3494
3495'-Wmultiple-inheritance (C++ and Objective-C++ only)'
3496     Warn when a class is defined with multiple direct base classes.
3497     Some coding rules disallow multiple inheritance, and this may be
3498     used to enforce that rule.  The warning is inactive inside a system
3499     header file, such as the STL, so one can still use the STL. One may
3500     also define classes that indirectly use multiple inheritance.
3501
3502'-Wvirtual-inheritance'
3503     Warn when a class is defined with a virtual direct base class.
3504     Some coding rules disallow multiple inheritance, and this may be
3505     used to enforce that rule.  The warning is inactive inside a system
3506     header file, such as the STL, so one can still use the STL. One may
3507     also define classes that indirectly use virtual inheritance.
3508
3509'-Wno-virtual-move-assign'
3510     Suppress warnings about inheriting from a virtual base with a
3511     non-trivial C++11 move assignment operator.  This is dangerous
3512     because if the virtual base is reachable along more than one path,
3513     it is moved multiple times, which can mean both objects end up in
3514     the moved-from state.  If the move assignment operator is written
3515     to avoid moving from a moved-from object, this warning can be
3516     disabled.
3517
3518'-Wnamespaces'
3519     Warn when a namespace definition is opened.  Some coding rules
3520     disallow namespaces, and this may be used to enforce that rule.
3521     The warning is inactive inside a system header file, such as the
3522     STL, so one can still use the STL. One may also use using
3523     directives and qualified names.
3524
3525'-Wno-terminate (C++ and Objective-C++ only)'
3526     Disable the warning about a throw-expression that will immediately
3527     result in a call to 'terminate'.
3528
3529'-Wno-class-conversion (C++ and Objective-C++ only)'
3530     Do not warn when a conversion function converts an object to the
3531     same type, to a base class of that type, or to void; such a
3532     conversion function will never be called.
3533
3534'-Wvolatile (C++ and Objective-C++ only)'
3535     Warn about deprecated uses of the 'volatile' qualifier.  This
3536     includes postfix and prefix '++' and '--' expressions of
3537     'volatile'-qualified types, using simple assignments where the left
3538     operand is a 'volatile'-qualified non-class type for their value,
3539     compound assignments where the left operand is a
3540     'volatile'-qualified non-class type, 'volatile'-qualified function
3541     return type, 'volatile'-qualified parameter type, and structured
3542     bindings of a 'volatile'-qualified type.  This usage was deprecated
3543     in C++20.
3544
3545     Enabled by default with '-std=c++2a'.
3546
3547'-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
3548     Warn when a literal '0' is used as null pointer constant.  This can
3549     be useful to facilitate the conversion to 'nullptr' in C++11.
3550
3551'-Waligned-new'
3552     Warn about a new-expression of a type that requires greater
3553     alignment than the 'alignof(std::max_align_t)' but uses an
3554     allocation function without an explicit alignment parameter.  This
3555     option is enabled by '-Wall'.
3556
3557     Normally this only warns about global allocation functions, but
3558     '-Waligned-new=all' also warns about class member allocation
3559     functions.
3560
3561'-Wno-placement-new'
3562'-Wplacement-new=N'
3563     Warn about placement new expressions with undefined behavior, such
3564     as constructing an object in a buffer that is smaller than the type
3565     of the object.  For example, the placement new expression below is
3566     diagnosed because it attempts to construct an array of 64 integers
3567     in a buffer only 64 bytes large.
3568          char buf [64];
3569          new (buf) int[64];
3570     This warning is enabled by default.
3571
3572     '-Wplacement-new=1'
3573          This is the default warning level of '-Wplacement-new'.  At
3574          this level the warning is not issued for some strictly
3575          undefined constructs that GCC allows as extensions for
3576          compatibility with legacy code.  For example, the following
3577          'new' expression is not diagnosed at this level even though it
3578          has undefined behavior according to the C++ standard because
3579          it writes past the end of the one-element array.
3580               struct S { int n, a[1]; };
3581               S *s = (S *)malloc (sizeof *s + 31 * sizeof s->a[0]);
3582               new (s->a)int [32]();
3583
3584     '-Wplacement-new=2'
3585          At this level, in addition to diagnosing all the same
3586          constructs as at level 1, a diagnostic is also issued for
3587          placement new expressions that construct an object in the last
3588          member of structure whose type is an array of a single element
3589          and whose size is less than the size of the object being
3590          constructed.  While the previous example would be diagnosed,
3591          the following construct makes use of the flexible member array
3592          extension to avoid the warning at level 2.
3593               struct S { int n, a[]; };
3594               S *s = (S *)malloc (sizeof *s + 32 * sizeof s->a[0]);
3595               new (s->a)int [32]();
3596
3597'-Wcatch-value'
3598'-Wcatch-value=N (C++ and Objective-C++ only)'
3599     Warn about catch handlers that do not catch via reference.  With
3600     '-Wcatch-value=1' (or '-Wcatch-value' for short) warn about
3601     polymorphic class types that are caught by value.  With
3602     '-Wcatch-value=2' warn about all class types that are caught by
3603     value.  With '-Wcatch-value=3' warn about all types that are not
3604     caught by reference.  '-Wcatch-value' is enabled by '-Wall'.
3605
3606'-Wconditionally-supported (C++ and Objective-C++ only)'
3607     Warn for conditionally-supported (C++11 [intro.defs]) constructs.
3608
3609'-Wno-delete-incomplete (C++ and Objective-C++ only)'
3610     Do not warn when deleting a pointer to incomplete type, which may
3611     cause undefined behavior at runtime.  This warning is enabled by
3612     default.
3613
3614'-Wextra-semi (C++, Objective-C++ only)'
3615     Warn about redundant semicolons after in-class function
3616     definitions.
3617
3618'-Wno-inaccessible-base (C++, Objective-C++ only)'
3619     This option controls warnings when a base class is inaccessible in
3620     a class derived from it due to ambiguity.  The warning is enabled
3621     by default.  Note that the warning for ambiguous virtual bases is
3622     enabled by the '-Wextra' option.
3623          struct A { int a; };
3624
3625          struct B : A { };
3626
3627          struct C : B, A { };
3628
3629'-Wno-inherited-variadic-ctor'
3630     Suppress warnings about use of C++11 inheriting constructors when
3631     the base class inherited from has a C variadic constructor; the
3632     warning is on by default because the ellipsis is not inherited.
3633
3634'-Wno-invalid-offsetof (C++ and Objective-C++ only)'
3635     Suppress warnings from applying the 'offsetof' macro to a non-POD
3636     type.  According to the 2014 ISO C++ standard, applying 'offsetof'
3637     to a non-standard-layout type is undefined.  In existing C++
3638     implementations, however, 'offsetof' typically gives meaningful
3639     results.  This flag is for users who are aware that they are
3640     writing nonportable code and who have deliberately chosen to ignore
3641     the warning about it.
3642
3643     The restrictions on 'offsetof' may be relaxed in a future version
3644     of the C++ standard.
3645
3646'-Wsized-deallocation (C++ and Objective-C++ only)'
3647     Warn about a definition of an unsized deallocation function
3648          void operator delete (void *) noexcept;
3649          void operator delete[] (void *) noexcept;
3650     without a definition of the corresponding sized deallocation
3651     function
3652          void operator delete (void *, std::size_t) noexcept;
3653          void operator delete[] (void *, std::size_t) noexcept;
3654     or vice versa.  Enabled by '-Wextra' along with
3655     '-fsized-deallocation'.
3656
3657'-Wsuggest-final-types'
3658     Warn about types with virtual methods where code quality would be
3659     improved if the type were declared with the C++11 'final'
3660     specifier, or, if possible, declared in an anonymous namespace.
3661     This allows GCC to more aggressively devirtualize the polymorphic
3662     calls.  This warning is more effective with link-time optimization,
3663     where the information about the class hierarchy graph is more
3664     complete.
3665
3666'-Wsuggest-final-methods'
3667     Warn about virtual methods where code quality would be improved if
3668     the method were declared with the C++11 'final' specifier, or, if
3669     possible, its type were declared in an anonymous namespace or with
3670     the 'final' specifier.  This warning is more effective with
3671     link-time optimization, where the information about the class
3672     hierarchy graph is more complete.  It is recommended to first
3673     consider suggestions of '-Wsuggest-final-types' and then rebuild
3674     with new annotations.
3675
3676'-Wsuggest-override'
3677     Warn about overriding virtual functions that are not marked with
3678     the 'override' keyword.
3679
3680'-Wuseless-cast (C++ and Objective-C++ only)'
3681     Warn when an expression is casted to its own type.
3682
3683'-Wno-conversion-null (C++ and Objective-C++ only)'
3684     Do not warn for conversions between 'NULL' and non-pointer types.
3685     '-Wconversion-null' is enabled by default.
3686
3687
3688File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Diagnostic Message Formatting Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
3689
36903.6 Options Controlling Objective-C and Objective-C++ Dialects
3691==============================================================
3692
3693(NOTE: This manual does not describe the Objective-C and Objective-C++
3694languages themselves.  *Note Language Standards Supported by GCC:
3695Standards, for references.)
3696
3697 This section describes the command-line options that are only
3698meaningful for Objective-C and Objective-C++ programs.  You can also use
3699most of the language-independent GNU compiler options.  For example, you
3700might compile a file 'some_class.m' like this:
3701
3702     gcc -g -fgnu-runtime -O -c some_class.m
3703
3704In this example, '-fgnu-runtime' is an option meant only for Objective-C
3705and Objective-C++ programs; you can use the other options with any
3706language supported by GCC.
3707
3708 Note that since Objective-C is an extension of the C language,
3709Objective-C compilations may also use options specific to the C
3710front-end (e.g., '-Wtraditional').  Similarly, Objective-C++
3711compilations may use C++-specific options (e.g., '-Wabi').
3712
3713 Here is a list of options that are _only_ for compiling Objective-C and
3714Objective-C++ programs:
3715
3716'-fconstant-string-class=CLASS-NAME'
3717     Use CLASS-NAME as the name of the class to instantiate for each
3718     literal string specified with the syntax '@"..."'.  The default
3719     class name is 'NXConstantString' if the GNU runtime is being used,
3720     and 'NSConstantString' if the NeXT runtime is being used (see
3721     below).  The '-fconstant-cfstrings' option, if also present,
3722     overrides the '-fconstant-string-class' setting and cause '@"..."'
3723     literals to be laid out as constant CoreFoundation strings.
3724
3725'-fgnu-runtime'
3726     Generate object code compatible with the standard GNU Objective-C
3727     runtime.  This is the default for most types of systems.
3728
3729'-fnext-runtime'
3730     Generate output compatible with the NeXT runtime.  This is the
3731     default for NeXT-based systems, including Darwin and Mac OS X.  The
3732     macro '__NEXT_RUNTIME__' is predefined if (and only if) this option
3733     is used.
3734
3735'-fno-nil-receivers'
3736     Assume that all Objective-C message dispatches ('[receiver
3737     message:arg]') in this translation unit ensure that the receiver is
3738     not 'nil'.  This allows for more efficient entry points in the
3739     runtime to be used.  This option is only available in conjunction
3740     with the NeXT runtime and ABI version 0 or 1.
3741
3742'-fobjc-abi-version=N'
3743     Use version N of the Objective-C ABI for the selected runtime.
3744     This option is currently supported only for the NeXT runtime.  In
3745     that case, Version 0 is the traditional (32-bit) ABI without
3746     support for properties and other Objective-C 2.0 additions.
3747     Version 1 is the traditional (32-bit) ABI with support for
3748     properties and other Objective-C 2.0 additions.  Version 2 is the
3749     modern (64-bit) ABI. If nothing is specified, the default is
3750     Version 0 on 32-bit target machines, and Version 2 on 64-bit target
3751     machines.
3752
3753'-fobjc-call-cxx-cdtors'
3754     For each Objective-C class, check if any of its instance variables
3755     is a C++ object with a non-trivial default constructor.  If so,
3756     synthesize a special '- (id) .cxx_construct' instance method which
3757     runs non-trivial default constructors on any such instance
3758     variables, in order, and then return 'self'.  Similarly, check if
3759     any instance variable is a C++ object with a non-trivial
3760     destructor, and if so, synthesize a special '- (void)
3761     .cxx_destruct' method which runs all such default destructors, in
3762     reverse order.
3763
3764     The '- (id) .cxx_construct' and '- (void) .cxx_destruct' methods
3765     thusly generated only operate on instance variables declared in the
3766     current Objective-C class, and not those inherited from
3767     superclasses.  It is the responsibility of the Objective-C runtime
3768     to invoke all such methods in an object's inheritance hierarchy.
3769     The '- (id) .cxx_construct' methods are invoked by the runtime
3770     immediately after a new object instance is allocated; the '- (void)
3771     .cxx_destruct' methods are invoked immediately before the runtime
3772     deallocates an object instance.
3773
3774     As of this writing, only the NeXT runtime on Mac OS X 10.4 and
3775     later has support for invoking the '- (id) .cxx_construct' and '-
3776     (void) .cxx_destruct' methods.
3777
3778'-fobjc-direct-dispatch'
3779     Allow fast jumps to the message dispatcher.  On Darwin this is
3780     accomplished via the comm page.
3781
3782'-fobjc-exceptions'
3783     Enable syntactic support for structured exception handling in
3784     Objective-C, similar to what is offered by C++.  This option is
3785     required to use the Objective-C keywords '@try', '@throw',
3786     '@catch', '@finally' and '@synchronized'.  This option is available
3787     with both the GNU runtime and the NeXT runtime (but not available
3788     in conjunction with the NeXT runtime on Mac OS X 10.2 and earlier).
3789
3790'-fobjc-gc'
3791     Enable garbage collection (GC) in Objective-C and Objective-C++
3792     programs.  This option is only available with the NeXT runtime; the
3793     GNU runtime has a different garbage collection implementation that
3794     does not require special compiler flags.
3795
3796'-fobjc-nilcheck'
3797     For the NeXT runtime with version 2 of the ABI, check for a nil
3798     receiver in method invocations before doing the actual method call.
3799     This is the default and can be disabled using '-fno-objc-nilcheck'.
3800     Class methods and super calls are never checked for nil in this way
3801     no matter what this flag is set to.  Currently this flag does
3802     nothing when the GNU runtime, or an older version of the NeXT
3803     runtime ABI, is used.
3804
3805'-fobjc-std=objc1'
3806     Conform to the language syntax of Objective-C 1.0, the language
3807     recognized by GCC 4.0.  This only affects the Objective-C additions
3808     to the C/C++ language; it does not affect conformance to C/C++
3809     standards, which is controlled by the separate C/C++ dialect option
3810     flags.  When this option is used with the Objective-C or
3811     Objective-C++ compiler, any Objective-C syntax that is not
3812     recognized by GCC 4.0 is rejected.  This is useful if you need to
3813     make sure that your Objective-C code can be compiled with older
3814     versions of GCC.
3815
3816'-freplace-objc-classes'
3817     Emit a special marker instructing 'ld(1)' not to statically link in
3818     the resulting object file, and allow 'dyld(1)' to load it in at run
3819     time instead.  This is used in conjunction with the
3820     Fix-and-Continue debugging mode, where the object file in question
3821     may be recompiled and dynamically reloaded in the course of program
3822     execution, without the need to restart the program itself.
3823     Currently, Fix-and-Continue functionality is only available in
3824     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
3825
3826'-fzero-link'
3827     When compiling for the NeXT runtime, the compiler ordinarily
3828     replaces calls to 'objc_getClass("...")' (when the name of the
3829     class is known at compile time) with static class references that
3830     get initialized at load time, which improves run-time performance.
3831     Specifying the '-fzero-link' flag suppresses this behavior and
3832     causes calls to 'objc_getClass("...")' to be retained.  This is
3833     useful in Zero-Link debugging mode, since it allows for individual
3834     class implementations to be modified during program execution.  The
3835     GNU runtime currently always retains calls to
3836     'objc_get_class("...")' regardless of command-line options.
3837
3838'-fno-local-ivars'
3839     By default instance variables in Objective-C can be accessed as if
3840     they were local variables from within the methods of the class
3841     they're declared in.  This can lead to shadowing between instance
3842     variables and other variables declared either locally inside a
3843     class method or globally with the same name.  Specifying the
3844     '-fno-local-ivars' flag disables this behavior thus avoiding
3845     variable shadowing issues.
3846
3847'-fivar-visibility=[public|protected|private|package]'
3848     Set the default instance variable visibility to the specified
3849     option so that instance variables declared outside the scope of any
3850     access modifier directives default to the specified visibility.
3851
3852'-gen-decls'
3853     Dump interface declarations for all classes seen in the source file
3854     to a file named 'SOURCENAME.decl'.
3855
3856'-Wassign-intercept (Objective-C and Objective-C++ only)'
3857     Warn whenever an Objective-C assignment is being intercepted by the
3858     garbage collector.
3859
3860'-Wno-property-assign-default (Objective-C and Objective-C++ only)'
3861     Do not warn if a property for an Objective-C object has no assign
3862     semantics specified.
3863
3864'-Wno-protocol (Objective-C and Objective-C++ only)'
3865     If a class is declared to implement a protocol, a warning is issued
3866     for every method in the protocol that is not implemented by the
3867     class.  The default behavior is to issue a warning for every method
3868     not explicitly implemented in the class, even if a method
3869     implementation is inherited from the superclass.  If you use the
3870     '-Wno-protocol' option, then methods inherited from the superclass
3871     are considered to be implemented, and no warning is issued for
3872     them.
3873
3874'-Wselector (Objective-C and Objective-C++ only)'
3875     Warn if multiple methods of different types for the same selector
3876     are found during compilation.  The check is performed on the list
3877     of methods in the final stage of compilation.  Additionally, a
3878     check is performed for each selector appearing in a
3879     '@selector(...)' expression, and a corresponding method for that
3880     selector has been found during compilation.  Because these checks
3881     scan the method table only at the end of compilation, these
3882     warnings are not produced if the final stage of compilation is not
3883     reached, for example because an error is found during compilation,
3884     or because the '-fsyntax-only' option is being used.
3885
3886'-Wstrict-selector-match (Objective-C and Objective-C++ only)'
3887     Warn if multiple methods with differing argument and/or return
3888     types are found for a given selector when attempting to send a
3889     message using this selector to a receiver of type 'id' or 'Class'.
3890     When this flag is off (which is the default behavior), the compiler
3891     omits such warnings if any differences found are confined to types
3892     that share the same size and alignment.
3893
3894'-Wundeclared-selector (Objective-C and Objective-C++ only)'
3895     Warn if a '@selector(...)' expression referring to an undeclared
3896     selector is found.  A selector is considered undeclared if no
3897     method with that name has been declared before the '@selector(...)'
3898     expression, either explicitly in an '@interface' or '@protocol'
3899     declaration, or implicitly in an '@implementation' section.  This
3900     option always performs its checks as soon as a '@selector(...)'
3901     expression is found, while '-Wselector' only performs its checks in
3902     the final stage of compilation.  This also enforces the coding
3903     style convention that methods and selectors must be declared before
3904     being used.
3905
3906'-print-objc-runtime-info'
3907     Generate C header describing the largest structure that is passed
3908     by value, if any.
3909
3910
3911File: gcc.info,  Node: Diagnostic Message Formatting Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
3912
39133.7 Options to Control Diagnostic Messages Formatting
3914=====================================================
3915
3916Traditionally, diagnostic messages have been formatted irrespective of
3917the output device's aspect (e.g. its width, ...).  You can use the
3918options described below to control the formatting algorithm for
3919diagnostic messages, e.g. how many characters per line, how often source
3920location information should be reported.  Note that some language front
3921ends may not honor these options.
3922
3923'-fmessage-length=N'
3924     Try to format error messages so that they fit on lines of about N
3925     characters.  If N is zero, then no line-wrapping is done; each
3926     error message appears on a single line.  This is the default for
3927     all front ends.
3928
3929     Note - this option also affects the display of the '#error' and
3930     '#warning' pre-processor directives, and the 'deprecated'
3931     function/type/variable attribute.  It does not however affect the
3932     'pragma GCC warning' and 'pragma GCC error' pragmas.
3933
3934'-fdiagnostics-show-location=once'
3935     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3936     messages reporter to emit source location information _once_; that
3937     is, in case the message is too long to fit on a single physical
3938     line and has to be wrapped, the source location won't be emitted
3939     (as prefix) again, over and over, in subsequent continuation lines.
3940     This is the default behavior.
3941
3942'-fdiagnostics-show-location=every-line'
3943     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3944     messages reporter to emit the same source location information (as
3945     prefix) for physical lines that result from the process of breaking
3946     a message which is too long to fit on a single line.
3947
3948'-fdiagnostics-color[=WHEN]'
3949'-fno-diagnostics-color'
3950     Use color in diagnostics.  WHEN is 'never', 'always', or 'auto'.
3951     The default depends on how the compiler has been configured, it can
3952     be any of the above WHEN options or also 'never' if 'GCC_COLORS'
3953     environment variable isn't present in the environment, and 'auto'
3954     otherwise.  'auto' makes GCC use color only when the standard error
3955     is a terminal, and when not executing in an emacs shell.  The forms
3956     '-fdiagnostics-color' and '-fno-diagnostics-color' are aliases for
3957     '-fdiagnostics-color=always' and '-fdiagnostics-color=never',
3958     respectively.
3959
3960     The colors are defined by the environment variable 'GCC_COLORS'.
3961     Its value is a colon-separated list of capabilities and Select
3962     Graphic Rendition (SGR) substrings.  SGR commands are interpreted
3963     by the terminal or terminal emulator.  (See the section in the
3964     documentation of your text terminal for permitted values and their
3965     meanings as character attributes.)  These substring values are
3966     integers in decimal representation and can be concatenated with
3967     semicolons.  Common values to concatenate include '1' for bold, '4'
3968     for underline, '5' for blink, '7' for inverse, '39' for default
3969     foreground color, '30' to '37' for foreground colors, '90' to '97'
3970     for 16-color mode foreground colors, '38;5;0' to '38;5;255' for
3971     88-color and 256-color modes foreground colors, '49' for default
3972     background color, '40' to '47' for background colors, '100' to
3973     '107' for 16-color mode background colors, and '48;5;0' to
3974     '48;5;255' for 88-color and 256-color modes background colors.
3975
3976     The default 'GCC_COLORS' is
3977          error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
3978          quote=01:path=01;36:fixit-insert=32:fixit-delete=31:\
3979          diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
3980          type-diff=01;32
3981     where '01;31' is bold red, '01;35' is bold magenta, '01;36' is bold
3982     cyan, '32' is green, '34' is blue, '01' is bold, and '31' is red.
3983     Setting 'GCC_COLORS' to the empty string disables colors.
3984     Supported capabilities are as follows.
3985
3986     'error='
3987          SGR substring for error: markers.
3988
3989     'warning='
3990          SGR substring for warning: markers.
3991
3992     'note='
3993          SGR substring for note: markers.
3994
3995     'path='
3996          SGR substring for colorizing paths of control-flow events as
3997          printed via '-fdiagnostics-path-format=', such as the
3998          identifiers of individual events and lines indicating
3999          interprocedural calls and returns.
4000
4001     'range1='
4002          SGR substring for first additional range.
4003
4004     'range2='
4005          SGR substring for second additional range.
4006
4007     'locus='
4008          SGR substring for location information, 'file:line' or
4009          'file:line:column' etc.
4010
4011     'quote='
4012          SGR substring for information printed within quotes.
4013
4014     'fixit-insert='
4015          SGR substring for fix-it hints suggesting text to be inserted
4016          or replaced.
4017
4018     'fixit-delete='
4019          SGR substring for fix-it hints suggesting text to be deleted.
4020
4021     'diff-filename='
4022          SGR substring for filename headers within generated patches.
4023
4024     'diff-hunk='
4025          SGR substring for the starts of hunks within generated
4026          patches.
4027
4028     'diff-delete='
4029          SGR substring for deleted lines within generated patches.
4030
4031     'diff-insert='
4032          SGR substring for inserted lines within generated patches.
4033
4034     'type-diff='
4035          SGR substring for highlighting mismatching types within
4036          template arguments in the C++ frontend.
4037
4038'-fdiagnostics-urls[=WHEN]'
4039     Use escape sequences to embed URLs in diagnostics.  For example,
4040     when '-fdiagnostics-show-option' emits text showing the
4041     command-line option controlling a diagnostic, embed a URL for
4042     documentation of that option.
4043
4044     WHEN is 'never', 'always', or 'auto'.  'auto' makes GCC use URL
4045     escape sequences only when the standard error is a terminal, and
4046     when not executing in an emacs shell or any graphical terminal
4047     which is known to be incompatible with this feature, see below.
4048
4049     The default depends on how the compiler has been configured.  It
4050     can be any of the above WHEN options.
4051
4052     GCC can also be configured (via the
4053     '--with-diagnostics-urls=auto-if-env' configure-time option) so
4054     that the default is affected by environment variables.  Under such
4055     a configuration, GCC defaults to using 'auto' if either 'GCC_URLS'
4056     or 'TERM_URLS' environment variables are present and non-empty in
4057     the environment of the compiler, or 'never' if neither are.
4058
4059     However, even with '-fdiagnostics-urls=always' the behavior is
4060     dependent on those environment variables: If 'GCC_URLS' is set to
4061     empty or 'no', do not embed URLs in diagnostics.  If set to 'st',
4062     URLs use ST escape sequences.  If set to 'bel', the default, URLs
4063     use BEL escape sequences.  Any other non-empty value enables the
4064     feature.  If 'GCC_URLS' is not set, use 'TERM_URLS' as a fallback.
4065     Note: ST is an ANSI escape sequence, string terminator 'ESC \', BEL
4066     is an ASCII character, CTRL-G that usually sounds like a beep.
4067
4068     At this time GCC tries to detect also a few terminals that are
4069     known to not implement the URL feature, and have bugs or at least
4070     had bugs in some versions that are still in use, where the URL
4071     escapes are likely to misbehave, i.e.  print garbage on the screen.
4072     That list is currently xfce4-terminal, certain known to be buggy
4073     gnome-terminal versions, the linux console, and mingw.  This check
4074     can be skipped with the '-fdiagnostics-urls=always'.
4075
4076'-fno-diagnostics-show-option'
4077     By default, each diagnostic emitted includes text indicating the
4078     command-line option that directly controls the diagnostic (if such
4079     an option is known to the diagnostic machinery).  Specifying the
4080     '-fno-diagnostics-show-option' flag suppresses that behavior.
4081
4082'-fno-diagnostics-show-caret'
4083     By default, each diagnostic emitted includes the original source
4084     line and a caret '^' indicating the column.  This option suppresses
4085     this information.  The source line is truncated to N characters, if
4086     the '-fmessage-length=n' option is given.  When the output is done
4087     to the terminal, the width is limited to the width given by the
4088     'COLUMNS' environment variable or, if not set, to the terminal
4089     width.
4090
4091'-fno-diagnostics-show-labels'
4092     By default, when printing source code (via
4093     '-fdiagnostics-show-caret'), diagnostics can label ranges of source
4094     code with pertinent information, such as the types of expressions:
4095
4096              printf ("foo %s bar", long_i + long_j);
4097                           ~^       ~~~~~~~~~~~~~~~
4098                            |              |
4099                            char *         long int
4100
4101     This option suppresses the printing of these labels (in the example
4102     above, the vertical bars and the "char *" and "long int" text).
4103
4104'-fno-diagnostics-show-cwe'
4105     Diagnostic messages can optionally have an associated CWE
4106     (https://cwe.mitre.org/index.html) identifier.  GCC itself only
4107     provides such metadata for some of the '-fanalyzer' diagnostics.
4108     GCC plugins may also provide diagnostics with such metadata.  By
4109     default, if this information is present, it will be printed with
4110     the diagnostic.  This option suppresses the printing of this
4111     metadata.
4112
4113'-fno-diagnostics-show-line-numbers'
4114     By default, when printing source code (via
4115     '-fdiagnostics-show-caret'), a left margin is printed, showing line
4116     numbers.  This option suppresses this left margin.
4117
4118'-fdiagnostics-minimum-margin-width=WIDTH'
4119     This option controls the minimum width of the left margin printed
4120     by '-fdiagnostics-show-line-numbers'.  It defaults to 6.
4121
4122'-fdiagnostics-parseable-fixits'
4123     Emit fix-it hints in a machine-parseable format, suitable for
4124     consumption by IDEs.  For each fix-it, a line will be printed after
4125     the relevant diagnostic, starting with the string "fix-it:".  For
4126     example:
4127
4128          fix-it:"test.c":{45:3-45:21}:"gtk_widget_show_all"
4129
4130     The location is expressed as a half-open range, expressed as a
4131     count of bytes, starting at byte 1 for the initial column.  In the
4132     above example, bytes 3 through 20 of line 45 of "test.c" are to be
4133     replaced with the given string:
4134
4135          00000000011111111112222222222
4136          12345678901234567890123456789
4137            gtk_widget_showall (dlg);
4138            ^^^^^^^^^^^^^^^^^^
4139            gtk_widget_show_all
4140
4141     The filename and replacement string escape backslash as "\\", tab
4142     as "\t", newline as "\n", double quotes as "\"", non-printable
4143     characters as octal (e.g.  vertical tab as "\013").
4144
4145     An empty replacement string indicates that the given range is to be
4146     removed.  An empty range (e.g.  "45:3-45:3") indicates that the
4147     string is to be inserted at the given position.
4148
4149'-fdiagnostics-generate-patch'
4150     Print fix-it hints to stderr in unified diff format, after any
4151     diagnostics are printed.  For example:
4152
4153          --- test.c
4154          +++ test.c
4155          @ -42,5 +42,5 @
4156
4157           void show_cb(GtkDialog *dlg)
4158           {
4159          -  gtk_widget_showall(dlg);
4160          +  gtk_widget_show_all(dlg);
4161           }
4162
4163
4164     The diff may or may not be colorized, following the same rules as
4165     for diagnostics (see '-fdiagnostics-color').
4166
4167'-fdiagnostics-show-template-tree'
4168
4169     In the C++ frontend, when printing diagnostics showing mismatching
4170     template types, such as:
4171
4172            could not convert 'std::map<int, std::vector<double> >()'
4173              from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
4174
4175     the '-fdiagnostics-show-template-tree' flag enables printing a
4176     tree-like structure showing the common and differing parts of the
4177     types, such as:
4178
4179            map<
4180              [...],
4181              vector<
4182                [double != float]>>
4183
4184     The parts that differ are highlighted with color ("double" and
4185     "float" in this case).
4186
4187'-fno-elide-type'
4188     By default when the C++ frontend prints diagnostics showing
4189     mismatching template types, common parts of the types are printed
4190     as "[...]"  to simplify the error message.  For example:
4191
4192            could not convert 'std::map<int, std::vector<double> >()'
4193              from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
4194
4195     Specifying the '-fno-elide-type' flag suppresses that behavior.
4196     This flag also affects the output of the
4197     '-fdiagnostics-show-template-tree' flag.
4198
4199'-fdiagnostics-path-format=KIND'
4200     Specify how to print paths of control-flow events for diagnostics
4201     that have such a path associated with them.
4202
4203     KIND is 'none', 'separate-events', or 'inline-events', the default.
4204
4205     'none' means to not print diagnostic paths.
4206
4207     'separate-events' means to print a separate "note" diagnostic for
4208     each event within the diagnostic.  For example:
4209
4210          test.c:29:5: error: passing NULL as argument 1 to 'PyList_Append' which requires a non-NULL parameter
4211          test.c:25:10: note: (1) when 'PyList_New' fails, returning NULL
4212          test.c:27:3: note: (2) when 'i < count'
4213          test.c:29:5: note: (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
4214
4215     'inline-events' means to print the events "inline" within the
4216     source code.  This view attempts to consolidate the events into
4217     runs of sufficiently-close events, printing them as labelled ranges
4218     within the source.
4219
4220     For example, the same events as above might be printed as:
4221
4222            'test': events 1-3
4223              |
4224              |   25 |   list = PyList_New(0);
4225              |      |          ^~~~~~~~~~~~~
4226              |      |          |
4227              |      |          (1) when 'PyList_New' fails, returning NULL
4228              |   26 |
4229              |   27 |   for (i = 0; i < count; i++) {
4230              |      |   ~~~
4231              |      |   |
4232              |      |   (2) when 'i < count'
4233              |   28 |     item = PyLong_FromLong(random());
4234              |   29 |     PyList_Append(list, item);
4235              |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~
4236              |      |     |
4237              |      |     (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
4238              |
4239
4240     Interprocedural control flow is shown by grouping the events by
4241     stack frame, and using indentation to show how stack frames are
4242     nested, pushed, and popped.
4243
4244     For example:
4245
4246            'test': events 1-2
4247              |
4248              |  133 | {
4249              |      | ^
4250              |      | |
4251              |      | (1) entering 'test'
4252              |  134 |   boxed_int *obj = make_boxed_int (i);
4253              |      |                    ~~~~~~~~~~~~~~~~~~
4254              |      |                    |
4255              |      |                    (2) calling 'make_boxed_int'
4256              |
4257              +--> 'make_boxed_int': events 3-4
4258                     |
4259                     |  120 | {
4260                     |      | ^
4261                     |      | |
4262                     |      | (3) entering 'make_boxed_int'
4263                     |  121 |   boxed_int *result = (boxed_int *)wrapped_malloc (sizeof (boxed_int));
4264                     |      |                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4265                     |      |                                    |
4266                     |      |                                    (4) calling 'wrapped_malloc'
4267                     |
4268                     +--> 'wrapped_malloc': events 5-6
4269                            |
4270                            |    7 | {
4271                            |      | ^
4272                            |      | |
4273                            |      | (5) entering 'wrapped_malloc'
4274                            |    8 |   return malloc (size);
4275                            |      |          ~~~~~~~~~~~~~
4276                            |      |          |
4277                            |      |          (6) calling 'malloc'
4278                            |
4279              <-------------+
4280              |
4281           'test': event 7
4282              |
4283              |  138 |   free_boxed_int (obj);
4284              |      |   ^~~~~~~~~~~~~~~~~~~~
4285              |      |   |
4286              |      |   (7) calling 'free_boxed_int'
4287              |
4288          (etc)
4289
4290'-fdiagnostics-show-path-depths'
4291     This option provides additional information when printing
4292     control-flow paths associated with a diagnostic.
4293
4294     If this is option is provided then the stack depth will be printed
4295     for each run of events within
4296     '-fdiagnostics-path-format=separate-events'.
4297
4298     This is intended for use by GCC developers and plugin developers
4299     when debugging diagnostics that report interprocedural control
4300     flow.
4301
4302'-fno-show-column'
4303     Do not print column numbers in diagnostics.  This may be necessary
4304     if diagnostics are being scanned by a program that does not
4305     understand the column numbers, such as 'dejagnu'.
4306
4307'-fdiagnostics-format=FORMAT'
4308     Select a different format for printing diagnostics.  FORMAT is
4309     'text' or 'json'.  The default is 'text'.
4310
4311     The 'json' format consists of a top-level JSON array containing
4312     JSON objects representing the diagnostics.
4313
4314     The JSON is emitted as one line, without formatting; the examples
4315     below have been formatted for clarity.
4316
4317     Diagnostics can have child diagnostics.  For example, this error
4318     and note:
4319
4320          misleading-indentation.c:15:3: warning: this 'if' clause does not
4321            guard... [-Wmisleading-indentation]
4322             15 |   if (flag)
4323                |   ^~
4324          misleading-indentation.c:17:5: note: ...this statement, but the latter
4325            is misleadingly indented as if it were guarded by the 'if'
4326             17 |     y = 2;
4327                |     ^
4328
4329     might be printed in JSON form (after formatting) like this:
4330
4331          [
4332              {
4333                  "kind": "warning",
4334                  "locations": [
4335                      {
4336                          "caret": {
4337                              "column": 3,
4338                              "file": "misleading-indentation.c",
4339                              "line": 15
4340                          },
4341                          "finish": {
4342                              "column": 4,
4343                              "file": "misleading-indentation.c",
4344                              "line": 15
4345                          }
4346                      }
4347                  ],
4348                  "message": "this \u2018if\u2019 clause does not guard...",
4349                  "option": "-Wmisleading-indentation",
4350                  "option_url": "https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmisleading-indentation",
4351                  "children": [
4352                      {
4353                          "kind": "note",
4354                          "locations": [
4355                              {
4356                                  "caret": {
4357                                      "column": 5,
4358                                      "file": "misleading-indentation.c",
4359                                      "line": 17
4360                                  }
4361                              }
4362                          ],
4363                          "message": "...this statement, but the latter is ..."
4364                      }
4365                  ]
4366              },
4367              ...
4368          ]
4369
4370     where the 'note' is a child of the 'warning'.
4371
4372     A diagnostic has a 'kind'.  If this is 'warning', then there is an
4373     'option' key describing the command-line option controlling the
4374     warning.
4375
4376     A diagnostic can contain zero or more locations.  Each location has
4377     up to three positions within it: a 'caret' position and optional
4378     'start' and 'finish' positions.  A location can also have an
4379     optional 'label' string.  For example, this error:
4380
4381          bad-binary-ops.c:64:23: error: invalid operands to binary + (have 'S' {aka
4382             'struct s'} and 'T' {aka 'struct t'})
4383             64 |   return callee_4a () + callee_4b ();
4384                |          ~~~~~~~~~~~~ ^ ~~~~~~~~~~~~
4385                |          |              |
4386                |          |              T {aka struct t}
4387                |          S {aka struct s}
4388
4389     has three locations.  Its primary location is at the "+" token at
4390     column 23.  It has two secondary locations, describing the left and
4391     right-hand sides of the expression, which have labels.  It might be
4392     printed in JSON form as:
4393
4394              {
4395                  "children": [],
4396                  "kind": "error",
4397                  "locations": [
4398                      {
4399                          "caret": {
4400                              "column": 23, "file": "bad-binary-ops.c", "line": 64
4401                          }
4402                      },
4403                      {
4404                          "caret": {
4405                              "column": 10, "file": "bad-binary-ops.c", "line": 64
4406                          },
4407                          "finish": {
4408                              "column": 21, "file": "bad-binary-ops.c", "line": 64
4409                          },
4410                          "label": "S {aka struct s}"
4411                      },
4412                      {
4413                          "caret": {
4414                              "column": 25, "file": "bad-binary-ops.c", "line": 64
4415                          },
4416                          "finish": {
4417                              "column": 36, "file": "bad-binary-ops.c", "line": 64
4418                          },
4419                          "label": "T {aka struct t}"
4420                      }
4421                  ],
4422                  "message": "invalid operands to binary + ..."
4423              }
4424
4425     If a diagnostic contains fix-it hints, it has a 'fixits' array,
4426     consisting of half-open intervals, similar to the output of
4427     '-fdiagnostics-parseable-fixits'.  For example, this diagnostic
4428     with a replacement fix-it hint:
4429
4430          demo.c:8:15: error: 'struct s' has no member named 'colour'; did you
4431            mean 'color'?
4432              8 |   return ptr->colour;
4433                |               ^~~~~~
4434                |               color
4435
4436     might be printed in JSON form as:
4437
4438              {
4439                  "children": [],
4440                  "fixits": [
4441                      {
4442                          "next": {
4443                              "column": 21,
4444                              "file": "demo.c",
4445                              "line": 8
4446                          },
4447                          "start": {
4448                              "column": 15,
4449                              "file": "demo.c",
4450                              "line": 8
4451                          },
4452                          "string": "color"
4453                      }
4454                  ],
4455                  "kind": "error",
4456                  "locations": [
4457                      {
4458                          "caret": {
4459                              "column": 15,
4460                              "file": "demo.c",
4461                              "line": 8
4462                          },
4463                          "finish": {
4464                              "column": 20,
4465                              "file": "demo.c",
4466                              "line": 8
4467                          }
4468                      }
4469                  ],
4470                  "message": "\u2018struct s\u2019 has no member named ..."
4471              }
4472
4473     where the fix-it hint suggests replacing the text from 'start' up
4474     to but not including 'next' with 'string''s value.  Deletions are
4475     expressed via an empty value for 'string', insertions by having
4476     'start' equal 'next'.
4477
4478     If the diagnostic has a path of control-flow events associated with
4479     it, it has a 'path' array of objects representing the events.  Each
4480     event object has a 'description' string, a 'location' object, along
4481     with a 'function' string and a 'depth' number for representing
4482     interprocedural paths.  The 'function' represents the current
4483     function at that event, and the 'depth' represents the stack depth
4484     relative to some baseline: the higher, the more frames are within
4485     the stack.
4486
4487     For example, the intraprocedural example shown for
4488     '-fdiagnostics-path-format=' might have this JSON for its path:
4489
4490              "path": [
4491                  {
4492                      "depth": 0,
4493                      "description": "when 'PyList_New' fails, returning NULL",
4494                      "function": "test",
4495                      "location": {
4496                          "column": 10,
4497                          "file": "test.c",
4498                          "line": 25
4499                      }
4500                  },
4501                  {
4502                      "depth": 0,
4503                      "description": "when 'i < count'",
4504                      "function": "test",
4505                      "location": {
4506                          "column": 3,
4507                          "file": "test.c",
4508                          "line": 27
4509                      }
4510                  },
4511                  {
4512                      "depth": 0,
4513                      "description": "when calling 'PyList_Append', passing NULL from (1) as argument 1",
4514                      "function": "test",
4515                      "location": {
4516                          "column": 5,
4517                          "file": "test.c",
4518                          "line": 29
4519                      }
4520                  }
4521              ]
4522
4523
4524File: gcc.info,  Node: Warning Options,  Next: Static Analyzer Options,  Prev: Diagnostic Message Formatting Options,  Up: Invoking GCC
4525
45263.8 Options to Request or Suppress Warnings
4527===========================================
4528
4529Warnings are diagnostic messages that report constructions that are not
4530inherently erroneous but that are risky or suggest there may have been
4531an error.
4532
4533 The following language-independent options do not enable specific
4534warnings but control the kinds of diagnostics produced by GCC.
4535
4536'-fsyntax-only'
4537     Check the code for syntax errors, but don't do anything beyond
4538     that.
4539
4540'-fmax-errors=N'
4541     Limits the maximum number of error messages to N, at which point
4542     GCC bails out rather than attempting to continue processing the
4543     source code.  If N is 0 (the default), there is no limit on the
4544     number of error messages produced.  If '-Wfatal-errors' is also
4545     specified, then '-Wfatal-errors' takes precedence over this option.
4546
4547'-w'
4548     Inhibit all warning messages.
4549
4550'-Werror'
4551     Make all warnings into errors.
4552
4553'-Werror='
4554     Make the specified warning into an error.  The specifier for a
4555     warning is appended; for example '-Werror=switch' turns the
4556     warnings controlled by '-Wswitch' into errors.  This switch takes a
4557     negative form, to be used to negate '-Werror' for specific
4558     warnings; for example '-Wno-error=switch' makes '-Wswitch' warnings
4559     not be errors, even when '-Werror' is in effect.
4560
4561     The warning message for each controllable warning includes the
4562     option that controls the warning.  That option can then be used
4563     with '-Werror=' and '-Wno-error=' as described above.  (Printing of
4564     the option in the warning message can be disabled using the
4565     '-fno-diagnostics-show-option' flag.)
4566
4567     Note that specifying '-Werror='FOO automatically implies '-W'FOO.
4568     However, '-Wno-error='FOO does not imply anything.
4569
4570'-Wfatal-errors'
4571     This option causes the compiler to abort compilation on the first
4572     error occurred rather than trying to keep going and printing
4573     further error messages.
4574
4575 You can request many specific warnings with options beginning with
4576'-W', for example '-Wimplicit' to request warnings on implicit
4577declarations.  Each of these specific warning options also has a
4578negative form beginning '-Wno-' to turn off warnings; for example,
4579'-Wno-implicit'.  This manual lists only one of the two forms, whichever
4580is not the default.  For further language-specific options also refer to
4581*note C++ Dialect Options:: and *note Objective-C and Objective-C++
4582Dialect Options::.  Additional warnings can be produced by enabling the
4583static analyzer; *Note Static Analyzer Options::.
4584
4585 Some options, such as '-Wall' and '-Wextra', turn on other options,
4586such as '-Wunused', which may turn on further options, such as
4587'-Wunused-value'.  The combined effect of positive and negative forms is
4588that more specific options have priority over less specific ones,
4589independently of their position in the command-line.  For options of the
4590same specificity, the last one takes effect.  Options enabled or
4591disabled via pragmas (*note Diagnostic Pragmas::) take effect as if they
4592appeared at the end of the command-line.
4593
4594 When an unrecognized warning option is requested (e.g.,
4595'-Wunknown-warning'), GCC emits a diagnostic stating that the option is
4596not recognized.  However, if the '-Wno-' form is used, the behavior is
4597slightly different: no diagnostic is produced for '-Wno-unknown-warning'
4598unless other diagnostics are being produced.  This allows the use of new
4599'-Wno-' options with old compilers, but if something goes wrong, the
4600compiler warns that an unrecognized option is present.
4601
4602 The effectiveness of some warnings depends on optimizations also being
4603enabled.  For example '-Wsuggest-final-types' is more effective with
4604link-time optimization and '-Wmaybe-uninitialized' does not warn at all
4605unless optimization is enabled.
4606
4607'-Wpedantic'
4608'-pedantic'
4609     Issue all the warnings demanded by strict ISO C and ISO C++; reject
4610     all programs that use forbidden extensions, and some other programs
4611     that do not follow ISO C and ISO C++.  For ISO C, follows the
4612     version of the ISO C standard specified by any '-std' option used.
4613
4614     Valid ISO C and ISO C++ programs should compile properly with or
4615     without this option (though a rare few require '-ansi' or a '-std'
4616     option specifying the required version of ISO C).  However, without
4617     this option, certain GNU extensions and traditional C and C++
4618     features are supported as well.  With this option, they are
4619     rejected.
4620
4621     '-Wpedantic' does not cause warning messages for use of the
4622     alternate keywords whose names begin and end with '__'.  This
4623     alternate format can also be used to disable warnings for non-ISO
4624     '__intN' types, i.e.  '__intN__'.  Pedantic warnings are also
4625     disabled in the expression that follows '__extension__'.  However,
4626     only system header files should use these escape routes;
4627     application programs should avoid them.  *Note Alternate
4628     Keywords::.
4629
4630     Some users try to use '-Wpedantic' to check programs for strict ISO
4631     C conformance.  They soon find that it does not do quite what they
4632     want: it finds some non-ISO practices, but not all--only those for
4633     which ISO C _requires_ a diagnostic, and some others for which
4634     diagnostics have been added.
4635
4636     A feature to report any failure to conform to ISO C might be useful
4637     in some instances, but would require considerable additional work
4638     and would be quite different from '-Wpedantic'.  We don't have
4639     plans to support such a feature in the near future.
4640
4641     Where the standard specified with '-std' represents a GNU extended
4642     dialect of C, such as 'gnu90' or 'gnu99', there is a corresponding
4643     "base standard", the version of ISO C on which the GNU extended
4644     dialect is based.  Warnings from '-Wpedantic' are given where they
4645     are required by the base standard.  (It does not make sense for
4646     such warnings to be given only for features not in the specified
4647     GNU C dialect, since by definition the GNU dialects of C include
4648     all features the compiler supports with the given option, and there
4649     would be nothing to warn about.)
4650
4651'-pedantic-errors'
4652     Give an error whenever the "base standard" (see '-Wpedantic')
4653     requires a diagnostic, in some cases where there is undefined
4654     behavior at compile-time and in some other cases that do not
4655     prevent compilation of programs that are valid according to the
4656     standard.  This is not equivalent to '-Werror=pedantic', since
4657     there are errors enabled by this option and not enabled by the
4658     latter and vice versa.
4659
4660'-Wall'
4661     This enables all the warnings about constructions that some users
4662     consider questionable, and that are easy to avoid (or modify to
4663     prevent the warning), even in conjunction with macros.  This also
4664     enables some language-specific warnings described in *note C++
4665     Dialect Options:: and *note Objective-C and Objective-C++ Dialect
4666     Options::.
4667
4668     '-Wall' turns on the following warning flags:
4669
4670          -Waddress
4671          -Warray-bounds=1 (only with -O2)
4672          -Wbool-compare
4673          -Wbool-operation
4674          -Wc++11-compat  -Wc++14-compat
4675          -Wcatch-value (C++ and Objective-C++ only)
4676          -Wchar-subscripts
4677          -Wcomment
4678          -Wduplicate-decl-specifier (C and Objective-C only)
4679          -Wenum-compare (in C/ObjC; this is on by default in C++)
4680          -Wenum-conversion in C/ObjC;
4681          -Wformat
4682          -Wformat-overflow
4683          -Wformat-truncation
4684          -Wint-in-bool-context
4685          -Wimplicit (C and Objective-C only)
4686          -Wimplicit-int (C and Objective-C only)
4687          -Wimplicit-function-declaration (C and Objective-C only)
4688          -Winit-self (only for C++)
4689          -Wlogical-not-parentheses
4690          -Wmain (only for C/ObjC and unless -ffreestanding)
4691          -Wmaybe-uninitialized
4692          -Wmemset-elt-size
4693          -Wmemset-transposed-args
4694          -Wmisleading-indentation (only for C/C++)
4695          -Wmissing-attributes
4696          -Wmissing-braces (only for C/ObjC)
4697          -Wmultistatement-macros
4698          -Wnarrowing (only for C++)
4699          -Wnonnull
4700          -Wnonnull-compare
4701          -Wopenmp-simd
4702          -Wparentheses
4703          -Wpessimizing-move (only for C++)
4704          -Wpointer-sign
4705          -Wreorder
4706          -Wrestrict
4707          -Wreturn-type
4708          -Wsequence-point
4709          -Wsign-compare (only in C++)
4710          -Wsizeof-pointer-div
4711          -Wsizeof-pointer-memaccess
4712          -Wstrict-aliasing
4713          -Wstrict-overflow=1
4714          -Wswitch
4715          -Wtautological-compare
4716          -Wtrigraphs
4717          -Wuninitialized
4718          -Wunknown-pragmas
4719          -Wunused-function
4720          -Wunused-label
4721          -Wunused-value
4722          -Wunused-variable
4723          -Wvolatile-register-var
4724          -Wzero-length-bounds
4725
4726     Note that some warning flags are not implied by '-Wall'.  Some of
4727     them warn about constructions that users generally do not consider
4728     questionable, but which occasionally you might wish to check for;
4729     others warn about constructions that are necessary or hard to avoid
4730     in some cases, and there is no simple way to modify the code to
4731     suppress the warning.  Some of them are enabled by '-Wextra' but
4732     many of them must be enabled individually.
4733
4734'-Wextra'
4735     This enables some extra warning flags that are not enabled by
4736     '-Wall'.  (This option used to be called '-W'.  The older name is
4737     still supported, but the newer name is more descriptive.)
4738
4739          -Wclobbered
4740          -Wcast-function-type
4741          -Wdeprecated-copy (C++ only)
4742          -Wempty-body
4743          -Wignored-qualifiers
4744          -Wimplicit-fallthrough=3
4745          -Wmissing-field-initializers
4746          -Wmissing-parameter-type (C only)
4747          -Wold-style-declaration (C only)
4748          -Woverride-init
4749          -Wsign-compare (C only)
4750          -Wstring-compare
4751          -Wredundant-move (only for C++)
4752          -Wtype-limits
4753          -Wuninitialized
4754          -Wshift-negative-value (in C++11 to C++17 and in C99 and newer)
4755          -Wunused-parameter (only with -Wunused or -Wall)
4756          -Wunused-but-set-parameter (only with -Wunused or -Wall)
4757
4758     The option '-Wextra' also prints warning messages for the following
4759     cases:
4760
4761        * A pointer is compared against integer zero with '<', '<=',
4762          '>', or '>='.
4763
4764        * (C++ only) An enumerator and a non-enumerator both appear in a
4765          conditional expression.
4766
4767        * (C++ only) Ambiguous virtual bases.
4768
4769        * (C++ only) Subscripting an array that has been declared
4770          'register'.
4771
4772        * (C++ only) Taking the address of a variable that has been
4773          declared 'register'.
4774
4775        * (C++ only) A base class is not initialized in the copy
4776          constructor of a derived class.
4777
4778'-Wabi (C, Objective-C, C++ and Objective-C++ only)'
4779
4780     Warn about code affected by ABI changes.  This includes code that
4781     may not be compatible with the vendor-neutral C++ ABI as well as
4782     the psABI for the particular target.
4783
4784     Since G++ now defaults to updating the ABI with each major release,
4785     normally '-Wabi' warns only about C++ ABI compatibility problems if
4786     there is a check added later in a release series for an ABI issue
4787     discovered since the initial release.  '-Wabi' warns about more
4788     things if an older ABI version is selected (with
4789     '-fabi-version=N').
4790
4791     '-Wabi' can also be used with an explicit version number to warn
4792     about C++ ABI compatibility with a particular '-fabi-version'
4793     level, e.g. '-Wabi=2' to warn about changes relative to
4794     '-fabi-version=2'.
4795
4796     If an explicit version number is provided and
4797     '-fabi-compat-version' is not specified, the version number from
4798     this option is used for compatibility aliases.  If no explicit
4799     version number is provided with this option, but
4800     '-fabi-compat-version' is specified, that version number is used
4801     for C++ ABI warnings.
4802
4803     Although an effort has been made to warn about all such cases,
4804     there are probably some cases that are not warned about, even
4805     though G++ is generating incompatible code.  There may also be
4806     cases where warnings are emitted even though the code that is
4807     generated is compatible.
4808
4809     You should rewrite your code to avoid these warnings if you are
4810     concerned about the fact that code generated by G++ may not be
4811     binary compatible with code generated by other compilers.
4812
4813     Known incompatibilities in '-fabi-version=2' (which was the default
4814     from GCC 3.4 to 4.9) include:
4815
4816        * A template with a non-type template parameter of reference
4817          type was mangled incorrectly:
4818               extern int N;
4819               template <int &> struct S {};
4820               void n (S<N>) {2}
4821
4822          This was fixed in '-fabi-version=3'.
4823
4824        * SIMD vector types declared using '__attribute ((vector_size))'
4825          were mangled in a non-standard way that does not allow for
4826          overloading of functions taking vectors of different sizes.
4827
4828          The mangling was changed in '-fabi-version=4'.
4829
4830        * '__attribute ((const))' and 'noreturn' were mangled as type
4831          qualifiers, and 'decltype' of a plain declaration was folded
4832          away.
4833
4834          These mangling issues were fixed in '-fabi-version=5'.
4835
4836        * Scoped enumerators passed as arguments to a variadic function
4837          are promoted like unscoped enumerators, causing 'va_arg' to
4838          complain.  On most targets this does not actually affect the
4839          parameter passing ABI, as there is no way to pass an argument
4840          smaller than 'int'.
4841
4842          Also, the ABI changed the mangling of template argument packs,
4843          'const_cast', 'static_cast', prefix increment/decrement, and a
4844          class scope function used as a template argument.
4845
4846          These issues were corrected in '-fabi-version=6'.
4847
4848        * Lambdas in default argument scope were mangled incorrectly,
4849          and the ABI changed the mangling of 'nullptr_t'.
4850
4851          These issues were corrected in '-fabi-version=7'.
4852
4853        * When mangling a function type with function-cv-qualifiers, the
4854          un-qualified function type was incorrectly treated as a
4855          substitution candidate.
4856
4857          This was fixed in '-fabi-version=8', the default for GCC 5.1.
4858
4859        * 'decltype(nullptr)' incorrectly had an alignment of 1, leading
4860          to unaligned accesses.  Note that this did not affect the ABI
4861          of a function with a 'nullptr_t' parameter, as parameters have
4862          a minimum alignment.
4863
4864          This was fixed in '-fabi-version=9', the default for GCC 5.2.
4865
4866        * Target-specific attributes that affect the identity of a type,
4867          such as ia32 calling conventions on a function type (stdcall,
4868          regparm, etc.), did not affect the mangled name, leading to
4869          name collisions when function pointers were used as template
4870          arguments.
4871
4872          This was fixed in '-fabi-version=10', the default for GCC 6.1.
4873
4874     This option also enables warnings about psABI-related changes.  The
4875     known psABI changes at this point include:
4876
4877        * For SysV/x86-64, unions with 'long double' members are passed
4878          in memory as specified in psABI. Prior to GCC 4.4, this was
4879          not the case.  For example:
4880
4881               union U {
4882                 long double ld;
4883                 int i;
4884               };
4885
4886          'union U' is now always passed in memory.
4887
4888'-Wchar-subscripts'
4889     Warn if an array subscript has type 'char'.  This is a common cause
4890     of error, as programmers often forget that this type is signed on
4891     some machines.  This warning is enabled by '-Wall'.
4892
4893'-Wno-coverage-mismatch'
4894     Warn if feedback profiles do not match when using the
4895     '-fprofile-use' option.  If a source file is changed between
4896     compiling with '-fprofile-generate' and with '-fprofile-use', the
4897     files with the profile feedback can fail to match the source file
4898     and GCC cannot use the profile feedback information.  By default,
4899     this warning is enabled and is treated as an error.
4900     '-Wno-coverage-mismatch' can be used to disable the warning or
4901     '-Wno-error=coverage-mismatch' can be used to disable the error.
4902     Disabling the error for this warning can result in poorly optimized
4903     code and is useful only in the case of very minor changes such as
4904     bug fixes to an existing code-base.  Completely disabling the
4905     warning is not recommended.
4906
4907'-Wno-cpp'
4908     (C, Objective-C, C++, Objective-C++ and Fortran only) Suppress
4909     warning messages emitted by '#warning' directives.
4910
4911'-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
4912     Give a warning when a value of type 'float' is implicitly promoted
4913     to 'double'.  CPUs with a 32-bit "single-precision" floating-point
4914     unit implement 'float' in hardware, but emulate 'double' in
4915     software.  On such a machine, doing computations using 'double'
4916     values is much more expensive because of the overhead required for
4917     software emulation.
4918
4919     It is easy to accidentally do computations with 'double' because
4920     floating-point literals are implicitly of type 'double'.  For
4921     example, in:
4922          float area(float radius)
4923          {
4924             return 3.14159 * radius * radius;
4925          }
4926     the compiler performs the entire computation with 'double' because
4927     the floating-point literal is a 'double'.
4928
4929'-Wduplicate-decl-specifier (C and Objective-C only)'
4930     Warn if a declaration has duplicate 'const', 'volatile', 'restrict'
4931     or '_Atomic' specifier.  This warning is enabled by '-Wall'.
4932
4933'-Wformat'
4934'-Wformat=N'
4935     Check calls to 'printf' and 'scanf', etc., to make sure that the
4936     arguments supplied have types appropriate to the format string
4937     specified, and that the conversions specified in the format string
4938     make sense.  This includes standard functions, and others specified
4939     by format attributes (*note Function Attributes::), in the
4940     'printf', 'scanf', 'strftime' and 'strfmon' (an X/Open extension,
4941     not in the C standard) families (or other target-specific
4942     families).  Which functions are checked without format attributes
4943     having been specified depends on the standard version selected, and
4944     such checks of functions without the attribute specified are
4945     disabled by '-ffreestanding' or '-fno-builtin'.
4946
4947     The formats are checked against the format features supported by
4948     GNU libc version 2.2.  These include all ISO C90 and C99 features,
4949     as well as features from the Single Unix Specification and some BSD
4950     and GNU extensions.  Other library implementations may not support
4951     all these features; GCC does not support warning about features
4952     that go beyond a particular library's limitations.  However, if
4953     '-Wpedantic' is used with '-Wformat', warnings are given about
4954     format features not in the selected standard version (but not for
4955     'strfmon' formats, since those are not in any version of the C
4956     standard).  *Note Options Controlling C Dialect: C Dialect Options.
4957
4958     '-Wformat=1'
4959     '-Wformat'
4960          Option '-Wformat' is equivalent to '-Wformat=1', and
4961          '-Wno-format' is equivalent to '-Wformat=0'.  Since '-Wformat'
4962          also checks for null format arguments for several functions,
4963          '-Wformat' also implies '-Wnonnull'.  Some aspects of this
4964          level of format checking can be disabled by the options:
4965          '-Wno-format-contains-nul', '-Wno-format-extra-args', and
4966          '-Wno-format-zero-length'.  '-Wformat' is enabled by '-Wall'.
4967
4968     '-Wformat=2'
4969          Enable '-Wformat' plus additional format checks.  Currently
4970          equivalent to '-Wformat -Wformat-nonliteral -Wformat-security
4971          -Wformat-y2k'.
4972
4973'-Wno-format-contains-nul'
4974     If '-Wformat' is specified, do not warn about format strings that
4975     contain NUL bytes.
4976
4977'-Wno-format-extra-args'
4978     If '-Wformat' is specified, do not warn about excess arguments to a
4979     'printf' or 'scanf' format function.  The C standard specifies that
4980     such arguments are ignored.
4981
4982     Where the unused arguments lie between used arguments that are
4983     specified with '$' operand number specifications, normally warnings
4984     are still given, since the implementation could not know what type
4985     to pass to 'va_arg' to skip the unused arguments.  However, in the
4986     case of 'scanf' formats, this option suppresses the warning if the
4987     unused arguments are all pointers, since the Single Unix
4988     Specification says that such unused arguments are allowed.
4989
4990'-Wformat-overflow'
4991'-Wformat-overflow=LEVEL'
4992     Warn about calls to formatted input/output functions such as
4993     'sprintf' and 'vsprintf' that might overflow the destination
4994     buffer.  When the exact number of bytes written by a format
4995     directive cannot be determined at compile-time it is estimated
4996     based on heuristics that depend on the LEVEL argument and on
4997     optimization.  While enabling optimization will in most cases
4998     improve the accuracy of the warning, it may also result in false
4999     positives.
5000
5001     '-Wformat-overflow'
5002     '-Wformat-overflow=1'
5003          Level 1 of '-Wformat-overflow' enabled by '-Wformat' employs a
5004          conservative approach that warns only about calls that most
5005          likely overflow the buffer.  At this level, numeric arguments
5006          to format directives with unknown values are assumed to have
5007          the value of one, and strings of unknown length to be empty.
5008          Numeric arguments that are known to be bounded to a subrange
5009          of their type, or string arguments whose output is bounded
5010          either by their directive's precision or by a finite set of
5011          string literals, are assumed to take on the value within the
5012          range that results in the most bytes on output.  For example,
5013          the call to 'sprintf' below is diagnosed because even with
5014          both A and B equal to zero, the terminating NUL character
5015          (''\0'') appended by the function to the destination buffer
5016          will be written past its end.  Increasing the size of the
5017          buffer by a single byte is sufficient to avoid the warning,
5018          though it may not be sufficient to avoid the overflow.
5019
5020               void f (int a, int b)
5021               {
5022                 char buf [13];
5023                 sprintf (buf, "a = %i, b = %i\n", a, b);
5024               }
5025
5026     '-Wformat-overflow=2'
5027          Level 2 warns also about calls that might overflow the
5028          destination buffer given an argument of sufficient length or
5029          magnitude.  At level 2, unknown numeric arguments are assumed
5030          to have the minimum representable value for signed types with
5031          a precision greater than 1, and the maximum representable
5032          value otherwise.  Unknown string arguments whose length cannot
5033          be assumed to be bounded either by the directive's precision,
5034          or by a finite set of string literals they may evaluate to, or
5035          the character array they may point to, are assumed to be 1
5036          character long.
5037
5038          At level 2, the call in the example above is again diagnosed,
5039          but this time because with A equal to a 32-bit 'INT_MIN' the
5040          first '%i' directive will write some of its digits beyond the
5041          end of the destination buffer.  To make the call safe
5042          regardless of the values of the two variables, the size of the
5043          destination buffer must be increased to at least 34 bytes.
5044          GCC includes the minimum size of the buffer in an
5045          informational note following the warning.
5046
5047          An alternative to increasing the size of the destination
5048          buffer is to constrain the range of formatted values.  The
5049          maximum length of string arguments can be bounded by
5050          specifying the precision in the format directive.  When
5051          numeric arguments of format directives can be assumed to be
5052          bounded by less than the precision of their type, choosing an
5053          appropriate length modifier to the format specifier will
5054          reduce the required buffer size.  For example, if A and B in
5055          the example above can be assumed to be within the precision of
5056          the 'short int' type then using either the '%hi' format
5057          directive or casting the argument to 'short' reduces the
5058          maximum required size of the buffer to 24 bytes.
5059
5060               void f (int a, int b)
5061               {
5062                 char buf [23];
5063                 sprintf (buf, "a = %hi, b = %i\n", a, (short)b);
5064               }
5065
5066'-Wno-format-zero-length'
5067     If '-Wformat' is specified, do not warn about zero-length formats.
5068     The C standard specifies that zero-length formats are allowed.
5069
5070'-Wformat-nonliteral'
5071     If '-Wformat' is specified, also warn if the format string is not a
5072     string literal and so cannot be checked, unless the format function
5073     takes its format arguments as a 'va_list'.
5074
5075'-Wformat-security'
5076     If '-Wformat' is specified, also warn about uses of format
5077     functions that represent possible security problems.  At present,
5078     this warns about calls to 'printf' and 'scanf' functions where the
5079     format string is not a string literal and there are no format
5080     arguments, as in 'printf (foo);'.  This may be a security hole if
5081     the format string came from untrusted input and contains '%n'.
5082     (This is currently a subset of what '-Wformat-nonliteral' warns
5083     about, but in future warnings may be added to '-Wformat-security'
5084     that are not included in '-Wformat-nonliteral'.)
5085
5086'-Wformat-signedness'
5087     If '-Wformat' is specified, also warn if the format string requires
5088     an unsigned argument and the argument is signed and vice versa.
5089
5090'-Wformat-truncation'
5091'-Wformat-truncation=LEVEL'
5092     Warn about calls to formatted input/output functions such as
5093     'snprintf' and 'vsnprintf' that might result in output truncation.
5094     When the exact number of bytes written by a format directive cannot
5095     be determined at compile-time it is estimated based on heuristics
5096     that depend on the LEVEL argument and on optimization.  While
5097     enabling optimization will in most cases improve the accuracy of
5098     the warning, it may also result in false positives.  Except as
5099     noted otherwise, the option uses the same logic
5100     '-Wformat-overflow'.
5101
5102     '-Wformat-truncation'
5103     '-Wformat-truncation=1'
5104          Level 1 of '-Wformat-truncation' enabled by '-Wformat' employs
5105          a conservative approach that warns only about calls to bounded
5106          functions whose return value is unused and that will most
5107          likely result in output truncation.
5108
5109     '-Wformat-truncation=2'
5110          Level 2 warns also about calls to bounded functions whose
5111          return value is used and that might result in truncation given
5112          an argument of sufficient length or magnitude.
5113
5114'-Wformat-y2k'
5115     If '-Wformat' is specified, also warn about 'strftime' formats that
5116     may yield only a two-digit year.
5117
5118'-Wnonnull'
5119     Warn about passing a null pointer for arguments marked as requiring
5120     a non-null value by the 'nonnull' function attribute.
5121
5122     '-Wnonnull' is included in '-Wall' and '-Wformat'.  It can be
5123     disabled with the '-Wno-nonnull' option.
5124
5125'-Wnonnull-compare'
5126     Warn when comparing an argument marked with the 'nonnull' function
5127     attribute against null inside the function.
5128
5129     '-Wnonnull-compare' is included in '-Wall'.  It can be disabled
5130     with the '-Wno-nonnull-compare' option.
5131
5132'-Wnull-dereference'
5133     Warn if the compiler detects paths that trigger erroneous or
5134     undefined behavior due to dereferencing a null pointer.  This
5135     option is only active when '-fdelete-null-pointer-checks' is
5136     active, which is enabled by optimizations in most targets.  The
5137     precision of the warnings depends on the optimization options used.
5138
5139'-Winit-self (C, C++, Objective-C and Objective-C++ only)'
5140     Warn about uninitialized variables that are initialized with
5141     themselves.  Note this option can only be used with the
5142     '-Wuninitialized' option.
5143
5144     For example, GCC warns about 'i' being uninitialized in the
5145     following snippet only when '-Winit-self' has been specified:
5146          int f()
5147          {
5148            int i = i;
5149            return i;
5150          }
5151
5152     This warning is enabled by '-Wall' in C++.
5153
5154'-Wno-implicit-int (C and Objective-C only)'
5155     This option controls warnings when a declaration does not specify a
5156     type.  This warning is enabled by default in C99 and later dialects
5157     of C, and also by '-Wall'.
5158
5159'-Wno-implicit-function-declaration (C and Objective-C only)'
5160     This option controls warnings when a function is used before being
5161     declared.  This warning is enabled by default in C99 and later
5162     dialects of C, and also by '-Wall'.  The warning is made into an
5163     error by '-pedantic-errors'.
5164
5165'-Wimplicit (C and Objective-C only)'
5166     Same as '-Wimplicit-int' and '-Wimplicit-function-declaration'.
5167     This warning is enabled by '-Wall'.
5168
5169'-Wimplicit-fallthrough'
5170     '-Wimplicit-fallthrough' is the same as '-Wimplicit-fallthrough=3'
5171     and '-Wno-implicit-fallthrough' is the same as
5172     '-Wimplicit-fallthrough=0'.
5173
5174'-Wimplicit-fallthrough=N'
5175     Warn when a switch case falls through.  For example:
5176
5177          switch (cond)
5178            {
5179            case 1:
5180              a = 1;
5181              break;
5182            case 2:
5183              a = 2;
5184            case 3:
5185              a = 3;
5186              break;
5187            }
5188
5189     This warning does not warn when the last statement of a case cannot
5190     fall through, e.g.  when there is a return statement or a call to
5191     function declared with the noreturn attribute.
5192     '-Wimplicit-fallthrough=' also takes into account control flow
5193     statements, such as ifs, and only warns when appropriate.  E.g.
5194
5195          switch (cond)
5196            {
5197            case 1:
5198              if (i > 3) {
5199                bar (5);
5200                break;
5201              } else if (i < 1) {
5202                bar (0);
5203              } else
5204                return;
5205            default:
5206              ...
5207            }
5208
5209     Since there are occasions where a switch case fall through is
5210     desirable, GCC provides an attribute, '__attribute__
5211     ((fallthrough))', that is to be used along with a null statement to
5212     suppress this warning that would normally occur:
5213
5214          switch (cond)
5215            {
5216            case 1:
5217              bar (0);
5218              __attribute__ ((fallthrough));
5219            default:
5220              ...
5221            }
5222
5223     C++17 provides a standard way to suppress the
5224     '-Wimplicit-fallthrough' warning using '[[fallthrough]];' instead
5225     of the GNU attribute.  In C++11 or C++14 users can use
5226     '[[gnu::fallthrough]];', which is a GNU extension.  Instead of
5227     these attributes, it is also possible to add a fallthrough comment
5228     to silence the warning.  The whole body of the C or C++ style
5229     comment should match the given regular expressions listed below.
5230     The option argument N specifies what kind of comments are accepted:
5231
5232        * '-Wimplicit-fallthrough=0' disables the warning altogether.
5233
5234        * '-Wimplicit-fallthrough=1' matches '.*' regular expression,
5235          any comment is used as fallthrough comment.
5236
5237        * '-Wimplicit-fallthrough=2' case insensitively matches
5238          '.*falls?[ \t-]*thr(ough|u).*' regular expression.
5239
5240        * '-Wimplicit-fallthrough=3' case sensitively matches one of the
5241          following regular expressions:
5242
5243             * '-fallthrough'
5244
5245             * '@fallthrough@'
5246
5247             * 'lint -fallthrough[ \t]*'
5248
5249             * '[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?
5250               FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?'
5251
5252             * '[ \t.!]*(Else,? |Intentional(ly)? )?
5253               Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?'
5254
5255             * '[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?
5256               fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?'
5257
5258        * '-Wimplicit-fallthrough=4' case sensitively matches one of the
5259          following regular expressions:
5260
5261             * '-fallthrough'
5262
5263             * '@fallthrough@'
5264
5265             * 'lint -fallthrough[ \t]*'
5266
5267             * '[ \t]*FALLTHR(OUGH|U)[ \t]*'
5268
5269        * '-Wimplicit-fallthrough=5' doesn't recognize any comments as
5270          fallthrough comments, only attributes disable the warning.
5271
5272     The comment needs to be followed after optional whitespace and
5273     other comments by 'case' or 'default' keywords or by a user label
5274     that precedes some 'case' or 'default' label.
5275
5276          switch (cond)
5277            {
5278            case 1:
5279              bar (0);
5280              /* FALLTHRU */
5281            default:
5282              ...
5283            }
5284
5285     The '-Wimplicit-fallthrough=3' warning is enabled by '-Wextra'.
5286
5287'-Wno-if-not-aligned (C, C++, Objective-C and Objective-C++ only)'
5288     Control if warnings triggered by the 'warn_if_not_aligned'
5289     attribute should be issued.  These warnings are enabled by default.
5290
5291'-Wignored-qualifiers (C and C++ only)'
5292     Warn if the return type of a function has a type qualifier such as
5293     'const'.  For ISO C such a type qualifier has no effect, since the
5294     value returned by a function is not an lvalue.  For C++, the
5295     warning is only emitted for scalar types or 'void'.  ISO C
5296     prohibits qualified 'void' return types on function definitions, so
5297     such return types always receive a warning even without this
5298     option.
5299
5300     This warning is also enabled by '-Wextra'.
5301
5302'-Wno-ignored-attributes (C and C++ only)'
5303     This option controls warnings when an attribute is ignored.  This
5304     is different from the '-Wattributes' option in that it warns
5305     whenever the compiler decides to drop an attribute, not that the
5306     attribute is either unknown, used in a wrong place, etc.  This
5307     warning is enabled by default.
5308
5309'-Wmain'
5310     Warn if the type of 'main' is suspicious.  'main' should be a
5311     function with external linkage, returning int, taking either zero
5312     arguments, two, or three arguments of appropriate types.  This
5313     warning is enabled by default in C++ and is enabled by either
5314     '-Wall' or '-Wpedantic'.
5315
5316'-Wmisleading-indentation (C and C++ only)'
5317     Warn when the indentation of the code does not reflect the block
5318     structure.  Specifically, a warning is issued for 'if', 'else',
5319     'while', and 'for' clauses with a guarded statement that does not
5320     use braces, followed by an unguarded statement with the same
5321     indentation.
5322
5323     In the following example, the call to "bar" is misleadingly
5324     indented as if it were guarded by the "if" conditional.
5325
5326            if (some_condition ())
5327              foo ();
5328              bar ();  /* Gotcha: this is not guarded by the "if".  */
5329
5330     In the case of mixed tabs and spaces, the warning uses the
5331     '-ftabstop=' option to determine if the statements line up
5332     (defaulting to 8).
5333
5334     The warning is not issued for code involving multiline preprocessor
5335     logic such as the following example.
5336
5337            if (flagA)
5338              foo (0);
5339          #if SOME_CONDITION_THAT_DOES_NOT_HOLD
5340            if (flagB)
5341          #endif
5342              foo (1);
5343
5344     The warning is not issued after a '#line' directive, since this
5345     typically indicates autogenerated code, and no assumptions can be
5346     made about the layout of the file that the directive references.
5347
5348     This warning is enabled by '-Wall' in C and C++.
5349
5350'-Wmissing-attributes'
5351     Warn when a declaration of a function is missing one or more
5352     attributes that a related function is declared with and whose
5353     absence may adversely affect the correctness or efficiency of
5354     generated code.  For example, the warning is issued for
5355     declarations of aliases that use attributes to specify less
5356     restrictive requirements than those of their targets.  This
5357     typically represents a potential optimization opportunity.  By
5358     contrast, the '-Wattribute-alias=2' option controls warnings issued
5359     when the alias is more restrictive than the target, which could
5360     lead to incorrect code generation.  Attributes considered include
5361     'alloc_align', 'alloc_size', 'cold', 'const', 'hot', 'leaf',
5362     'malloc', 'nonnull', 'noreturn', 'nothrow', 'pure',
5363     'returns_nonnull', and 'returns_twice'.
5364
5365     In C++, the warning is issued when an explicit specialization of a
5366     primary template declared with attribute 'alloc_align',
5367     'alloc_size', 'assume_aligned', 'format', 'format_arg', 'malloc',
5368     or 'nonnull' is declared without it.  Attributes 'deprecated',
5369     'error', and 'warning' suppress the warning.  (*note Function
5370     Attributes::).
5371
5372     You can use the 'copy' attribute to apply the same set of
5373     attributes to a declaration as that on another declaration without
5374     explicitly enumerating the attributes.  This attribute can be
5375     applied to declarations of functions (*note Common Function
5376     Attributes::), variables (*note Common Variable Attributes::), or
5377     types (*note Common Type Attributes::).
5378
5379     '-Wmissing-attributes' is enabled by '-Wall'.
5380
5381     For example, since the declaration of the primary function template
5382     below makes use of both attribute 'malloc' and 'alloc_size' the
5383     declaration of the explicit specialization of the template is
5384     diagnosed because it is missing one of the attributes.
5385
5386          template <class T>
5387          T* __attribute__ ((malloc, alloc_size (1)))
5388          allocate (size_t);
5389
5390          template <>
5391          void* __attribute__ ((malloc))   // missing alloc_size
5392          allocate<void> (size_t);
5393
5394'-Wmissing-braces'
5395     Warn if an aggregate or union initializer is not fully bracketed.
5396     In the following example, the initializer for 'a' is not fully
5397     bracketed, but that for 'b' is fully bracketed.
5398
5399          int a[2][2] = { 0, 1, 2, 3 };
5400          int b[2][2] = { { 0, 1 }, { 2, 3 } };
5401
5402     This warning is enabled by '-Wall'.
5403
5404'-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
5405     Warn if a user-supplied include directory does not exist.
5406
5407'-Wno-missing-profile'
5408     This option controls warnings if feedback profiles are missing when
5409     using the '-fprofile-use' option.  This option diagnoses those
5410     cases where a new function or a new file is added between compiling
5411     with '-fprofile-generate' and with '-fprofile-use', without
5412     regenerating the profiles.  In these cases, the profile feedback
5413     data files do not contain any profile feedback information for the
5414     newly added function or file respectively.  Also, in the case when
5415     profile count data (.gcda) files are removed, GCC cannot use any
5416     profile feedback information.  In all these cases, warnings are
5417     issued to inform you that a profile generation step is due.
5418     Ignoring the warning can result in poorly optimized code.
5419     '-Wno-missing-profile' can be used to disable the warning, but this
5420     is not recommended and should be done only when non-existent
5421     profile data is justified.
5422
5423'-Wmultistatement-macros'
5424     Warn about unsafe multiple statement macros that appear to be
5425     guarded by a clause such as 'if', 'else', 'for', 'switch', or
5426     'while', in which only the first statement is actually guarded
5427     after the macro is expanded.
5428
5429     For example:
5430
5431          #define DOIT x++; y++
5432          if (c)
5433            DOIT;
5434
5435     will increment 'y' unconditionally, not just when 'c' holds.  The
5436     can usually be fixed by wrapping the macro in a do-while loop:
5437          #define DOIT do { x++; y++; } while (0)
5438          if (c)
5439            DOIT;
5440
5441     This warning is enabled by '-Wall' in C and C++.
5442
5443'-Wparentheses'
5444     Warn if parentheses are omitted in certain contexts, such as when
5445     there is an assignment in a context where a truth value is
5446     expected, or when operators are nested whose precedence people
5447     often get confused about.
5448
5449     Also warn if a comparison like 'x<=y<=z' appears; this is
5450     equivalent to '(x<=y ? 1 : 0) <= z', which is a different
5451     interpretation from that of ordinary mathematical notation.
5452
5453     Also warn for dangerous uses of the GNU extension to '?:' with
5454     omitted middle operand.  When the condition in the '?': operator is
5455     a boolean expression, the omitted value is always 1.  Often
5456     programmers expect it to be a value computed inside the conditional
5457     expression instead.
5458
5459     For C++ this also warns for some cases of unnecessary parentheses
5460     in declarations, which can indicate an attempt at a function call
5461     instead of a declaration:
5462          {
5463            // Declares a local variable called mymutex.
5464            std::unique_lock<std::mutex> (mymutex);
5465            // User meant std::unique_lock<std::mutex> lock (mymutex);
5466          }
5467
5468     This warning is enabled by '-Wall'.
5469
5470'-Wsequence-point'
5471     Warn about code that may have undefined semantics because of
5472     violations of sequence point rules in the C and C++ standards.
5473
5474     The C and C++ standards define the order in which expressions in a
5475     C/C++ program are evaluated in terms of "sequence points", which
5476     represent a partial ordering between the execution of parts of the
5477     program: those executed before the sequence point, and those
5478     executed after it.  These occur after the evaluation of a full
5479     expression (one which is not part of a larger expression), after
5480     the evaluation of the first operand of a '&&', '||', '? :' or ','
5481     (comma) operator, before a function is called (but after the
5482     evaluation of its arguments and the expression denoting the called
5483     function), and in certain other places.  Other than as expressed by
5484     the sequence point rules, the order of evaluation of subexpressions
5485     of an expression is not specified.  All these rules describe only a
5486     partial order rather than a total order, since, for example, if two
5487     functions are called within one expression with no sequence point
5488     between them, the order in which the functions are called is not
5489     specified.  However, the standards committee have ruled that
5490     function calls do not overlap.
5491
5492     It is not specified when between sequence points modifications to
5493     the values of objects take effect.  Programs whose behavior depends
5494     on this have undefined behavior; the C and C++ standards specify
5495     that "Between the previous and next sequence point an object shall
5496     have its stored value modified at most once by the evaluation of an
5497     expression.  Furthermore, the prior value shall be read only to
5498     determine the value to be stored.".  If a program breaks these
5499     rules, the results on any particular implementation are entirely
5500     unpredictable.
5501
5502     Examples of code with undefined behavior are 'a = a++;', 'a[n] =
5503     b[n++]' and 'a[i++] = i;'.  Some more complicated cases are not
5504     diagnosed by this option, and it may give an occasional false
5505     positive result, but in general it has been found fairly effective
5506     at detecting this sort of problem in programs.
5507
5508     The C++17 standard will define the order of evaluation of operands
5509     in more cases: in particular it requires that the right-hand side
5510     of an assignment be evaluated before the left-hand side, so the
5511     above examples are no longer undefined.  But this option will still
5512     warn about them, to help people avoid writing code that is
5513     undefined in C and earlier revisions of C++.
5514
5515     The standard is worded confusingly, therefore there is some debate
5516     over the precise meaning of the sequence point rules in subtle
5517     cases.  Links to discussions of the problem, including proposed
5518     formal definitions, may be found on the GCC readings page, at
5519     <http://gcc.gnu.org/readings.html>.
5520
5521     This warning is enabled by '-Wall' for C and C++.
5522
5523'-Wno-return-local-addr'
5524     Do not warn about returning a pointer (or in C++, a reference) to a
5525     variable that goes out of scope after the function returns.
5526
5527'-Wreturn-type'
5528     Warn whenever a function is defined with a return type that
5529     defaults to 'int'.  Also warn about any 'return' statement with no
5530     return value in a function whose return type is not 'void' (falling
5531     off the end of the function body is considered returning without a
5532     value).
5533
5534     For C only, warn about a 'return' statement with an expression in a
5535     function whose return type is 'void', unless the expression type is
5536     also 'void'.  As a GNU extension, the latter case is accepted
5537     without a warning unless '-Wpedantic' is used.  Attempting to use
5538     the return value of a non-'void' function other than 'main' that
5539     flows off the end by reaching the closing curly brace that
5540     terminates the function is undefined.
5541
5542     Unlike in C, in C++, flowing off the end of a non-'void' function
5543     other than 'main' results in undefined behavior even when the value
5544     of the function is not used.
5545
5546     This warning is enabled by default in C++ and by '-Wall' otherwise.
5547
5548'-Wno-shift-count-negative'
5549     Controls warnings if a shift count is negative.  This warning is
5550     enabled by default.
5551
5552'-Wno-shift-count-overflow'
5553     Controls warnings if a shift count is greater than or equal to the
5554     bit width of the type.  This warning is enabled by default.
5555
5556'-Wshift-negative-value'
5557     Warn if left shifting a negative value.  This warning is enabled by
5558     '-Wextra' in C99 (and newer) and C++11 to C++17 modes.
5559
5560'-Wno-shift-overflow'
5561'-Wshift-overflow=N'
5562     These options control warnings about left shift overflows.
5563
5564     '-Wshift-overflow=1'
5565          This is the warning level of '-Wshift-overflow' and is enabled
5566          by default in C99 and C++11 modes (and newer).  This warning
5567          level does not warn about left-shifting 1 into the sign bit.
5568          (However, in C, such an overflow is still rejected in contexts
5569          where an integer constant expression is required.)  No warning
5570          is emitted in C++2A mode (and newer), as signed left shifts
5571          always wrap.
5572
5573     '-Wshift-overflow=2'
5574          This warning level also warns about left-shifting 1 into the
5575          sign bit, unless C++14 mode (or newer) is active.
5576
5577'-Wswitch'
5578     Warn whenever a 'switch' statement has an index of enumerated type
5579     and lacks a 'case' for one or more of the named codes of that
5580     enumeration.  (The presence of a 'default' label prevents this
5581     warning.)  'case' labels outside the enumeration range also provoke
5582     warnings when this option is used (even if there is a 'default'
5583     label).  This warning is enabled by '-Wall'.
5584
5585'-Wswitch-default'
5586     Warn whenever a 'switch' statement does not have a 'default' case.
5587
5588'-Wswitch-enum'
5589     Warn whenever a 'switch' statement has an index of enumerated type
5590     and lacks a 'case' for one or more of the named codes of that
5591     enumeration.  'case' labels outside the enumeration range also
5592     provoke warnings when this option is used.  The only difference
5593     between '-Wswitch' and this option is that this option gives a
5594     warning about an omitted enumeration code even if there is a
5595     'default' label.
5596
5597'-Wno-switch-bool'
5598     Do not warn when a 'switch' statement has an index of boolean type
5599     and the case values are outside the range of a boolean type.  It is
5600     possible to suppress this warning by casting the controlling
5601     expression to a type other than 'bool'.  For example:
5602          switch ((int) (a == 4))
5603            {
5604            ...
5605            }
5606     This warning is enabled by default for C and C++ programs.
5607
5608'-Wno-switch-outside-range'
5609     This option controls warnings when a 'switch' case has a value that
5610     is outside of its respective type range.  This warning is enabled
5611     by default for C and C++ programs.
5612
5613'-Wno-switch-unreachable'
5614     Do not warn when a 'switch' statement contains statements between
5615     the controlling expression and the first case label, which will
5616     never be executed.  For example:
5617          switch (cond)
5618            {
5619             i = 15;
5620            ...
5621             case 5:
5622            ...
5623            }
5624     '-Wswitch-unreachable' does not warn if the statement between the
5625     controlling expression and the first case label is just a
5626     declaration:
5627          switch (cond)
5628            {
5629             int i;
5630            ...
5631             case 5:
5632             i = 5;
5633            ...
5634            }
5635     This warning is enabled by default for C and C++ programs.
5636
5637'-Wsync-nand (C and C++ only)'
5638     Warn when '__sync_fetch_and_nand' and '__sync_nand_and_fetch'
5639     built-in functions are used.  These functions changed semantics in
5640     GCC 4.4.
5641
5642'-Wunused-but-set-parameter'
5643     Warn whenever a function parameter is assigned to, but otherwise
5644     unused (aside from its declaration).
5645
5646     To suppress this warning use the 'unused' attribute (*note Variable
5647     Attributes::).
5648
5649     This warning is also enabled by '-Wunused' together with '-Wextra'.
5650
5651'-Wunused-but-set-variable'
5652     Warn whenever a local variable is assigned to, but otherwise unused
5653     (aside from its declaration).  This warning is enabled by '-Wall'.
5654
5655     To suppress this warning use the 'unused' attribute (*note Variable
5656     Attributes::).
5657
5658     This warning is also enabled by '-Wunused', which is enabled by
5659     '-Wall'.
5660
5661'-Wunused-function'
5662     Warn whenever a static function is declared but not defined or a
5663     non-inline static function is unused.  This warning is enabled by
5664     '-Wall'.
5665
5666'-Wunused-label'
5667     Warn whenever a label is declared but not used.  This warning is
5668     enabled by '-Wall'.
5669
5670     To suppress this warning use the 'unused' attribute (*note Variable
5671     Attributes::).
5672
5673'-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
5674     Warn when a typedef locally defined in a function is not used.
5675     This warning is enabled by '-Wall'.
5676
5677'-Wunused-parameter'
5678     Warn whenever a function parameter is unused aside from its
5679     declaration.
5680
5681     To suppress this warning use the 'unused' attribute (*note Variable
5682     Attributes::).
5683
5684'-Wno-unused-result'
5685     Do not warn if a caller of a function marked with attribute
5686     'warn_unused_result' (*note Function Attributes::) does not use its
5687     return value.  The default is '-Wunused-result'.
5688
5689'-Wunused-variable'
5690     Warn whenever a local or static variable is unused aside from its
5691     declaration.  This option implies '-Wunused-const-variable=1' for
5692     C, but not for C++.  This warning is enabled by '-Wall'.
5693
5694     To suppress this warning use the 'unused' attribute (*note Variable
5695     Attributes::).
5696
5697'-Wunused-const-variable'
5698'-Wunused-const-variable=N'
5699     Warn whenever a constant static variable is unused aside from its
5700     declaration.  '-Wunused-const-variable=1' is enabled by
5701     '-Wunused-variable' for C, but not for C++.  In C this declares
5702     variable storage, but in C++ this is not an error since const
5703     variables take the place of '#define's.
5704
5705     To suppress this warning use the 'unused' attribute (*note Variable
5706     Attributes::).
5707
5708     '-Wunused-const-variable=1'
5709          This is the warning level that is enabled by
5710          '-Wunused-variable' for C. It warns only about unused static
5711          const variables defined in the main compilation unit, but not
5712          about static const variables declared in any header included.
5713
5714     '-Wunused-const-variable=2'
5715          This warning level also warns for unused constant static
5716          variables in headers (excluding system headers).  This is the
5717          warning level of '-Wunused-const-variable' and must be
5718          explicitly requested since in C++ this isn't an error and in C
5719          it might be harder to clean up all headers included.
5720
5721'-Wunused-value'
5722     Warn whenever a statement computes a result that is explicitly not
5723     used.  To suppress this warning cast the unused expression to
5724     'void'.  This includes an expression-statement or the left-hand
5725     side of a comma expression that contains no side effects.  For
5726     example, an expression such as 'x[i,j]' causes a warning, while
5727     'x[(void)i,j]' does not.
5728
5729     This warning is enabled by '-Wall'.
5730
5731'-Wunused'
5732     All the above '-Wunused' options combined.
5733
5734     In order to get a warning about an unused function parameter, you
5735     must either specify '-Wextra -Wunused' (note that '-Wall' implies
5736     '-Wunused'), or separately specify '-Wunused-parameter'.
5737
5738'-Wuninitialized'
5739     Warn if an automatic variable is used without first being
5740     initialized.  In C++, warn if a non-static reference or non-static
5741     'const' member appears in a class without constructors.
5742
5743     If you want to warn about code that uses the uninitialized value of
5744     the variable in its own initializer, use the '-Winit-self' option.
5745
5746     These warnings occur for individual uninitialized elements of
5747     structure, union or array variables as well as for variables that
5748     are uninitialized as a whole.  They do not occur for variables or
5749     elements declared 'volatile'.  Because these warnings depend on
5750     optimization, the exact variables or elements for which there are
5751     warnings depend on the precise optimization options and version of
5752     GCC used.
5753
5754     Note that there may be no warning about a variable that is used
5755     only to compute a value that itself is never used, because such
5756     computations may be deleted by data flow analysis before the
5757     warnings are printed.
5758
5759'-Wno-invalid-memory-model'
5760     This option controls warnings for invocations of *note __atomic
5761     Builtins::, *note __sync Builtins::, and the C11 atomic generic
5762     functions with a memory consistency argument that is either invalid
5763     for the operation or outside the range of values of the
5764     'memory_order' enumeration.  For example, since the
5765     '__atomic_store' and '__atomic_store_n' built-ins are only defined
5766     for the relaxed, release, and sequentially consistent memory orders
5767     the following code is diagnosed:
5768
5769          void store (int *i)
5770          {
5771            __atomic_store_n (i, 0, memory_order_consume);
5772          }
5773
5774     '-Winvalid-memory-model' is enabled by default.
5775
5776'-Wmaybe-uninitialized'
5777     For an automatic (i.e. local) variable, if there exists a path from
5778     the function entry to a use of the variable that is initialized,
5779     but there exist some other paths for which the variable is not
5780     initialized, the compiler emits a warning if it cannot prove the
5781     uninitialized paths are not executed at run time.
5782
5783     These warnings are only possible in optimizing compilation, because
5784     otherwise GCC does not keep track of the state of variables.
5785
5786     These warnings are made optional because GCC may not be able to
5787     determine when the code is correct in spite of appearing to have an
5788     error.  Here is one example of how this can happen:
5789
5790          {
5791            int x;
5792            switch (y)
5793              {
5794              case 1: x = 1;
5795                break;
5796              case 2: x = 4;
5797                break;
5798              case 3: x = 5;
5799              }
5800            foo (x);
5801          }
5802
5803     If the value of 'y' is always 1, 2 or 3, then 'x' is always
5804     initialized, but GCC doesn't know this.  To suppress the warning,
5805     you need to provide a default case with assert(0) or similar code.
5806
5807     This option also warns when a non-volatile automatic variable might
5808     be changed by a call to 'longjmp'.  The compiler sees only the
5809     calls to 'setjmp'.  It cannot know where 'longjmp' will be called;
5810     in fact, a signal handler could call it at any point in the code.
5811     As a result, you may get a warning even when there is in fact no
5812     problem because 'longjmp' cannot in fact be called at the place
5813     that would cause a problem.
5814
5815     Some spurious warnings can be avoided if you declare all the
5816     functions you use that never return as 'noreturn'.  *Note Function
5817     Attributes::.
5818
5819     This warning is enabled by '-Wall' or '-Wextra'.
5820
5821'-Wunknown-pragmas'
5822     Warn when a '#pragma' directive is encountered that is not
5823     understood by GCC.  If this command-line option is used, warnings
5824     are even issued for unknown pragmas in system header files.  This
5825     is not the case if the warnings are only enabled by the '-Wall'
5826     command-line option.
5827
5828'-Wno-pragmas'
5829     Do not warn about misuses of pragmas, such as incorrect parameters,
5830     invalid syntax, or conflicts between pragmas.  See also
5831     '-Wunknown-pragmas'.
5832
5833'-Wno-prio-ctor-dtor'
5834     Do not warn if a priority from 0 to 100 is used for constructor or
5835     destructor.  The use of constructor and destructor attributes allow
5836     you to assign a priority to the constructor/destructor to control
5837     its order of execution before 'main' is called or after it returns.
5838     The priority values must be greater than 100 as the compiler
5839     reserves priority values between 0-100 for the implementation.
5840
5841'-Wstrict-aliasing'
5842     This option is only active when '-fstrict-aliasing' is active.  It
5843     warns about code that might break the strict aliasing rules that
5844     the compiler is using for optimization.  The warning does not catch
5845     all cases, but does attempt to catch the more common pitfalls.  It
5846     is included in '-Wall'.  It is equivalent to '-Wstrict-aliasing=3'
5847
5848'-Wstrict-aliasing=n'
5849     This option is only active when '-fstrict-aliasing' is active.  It
5850     warns about code that might break the strict aliasing rules that
5851     the compiler is using for optimization.  Higher levels correspond
5852     to higher accuracy (fewer false positives).  Higher levels also
5853     correspond to more effort, similar to the way '-O' works.
5854     '-Wstrict-aliasing' is equivalent to '-Wstrict-aliasing=3'.
5855
5856     Level 1: Most aggressive, quick, least accurate.  Possibly useful
5857     when higher levels do not warn but '-fstrict-aliasing' still breaks
5858     the code, as it has very few false negatives.  However, it has many
5859     false positives.  Warns for all pointer conversions between
5860     possibly incompatible types, even if never dereferenced.  Runs in
5861     the front end only.
5862
5863     Level 2: Aggressive, quick, not too precise.  May still have many
5864     false positives (not as many as level 1 though), and few false
5865     negatives (but possibly more than level 1).  Unlike level 1, it
5866     only warns when an address is taken.  Warns about incomplete types.
5867     Runs in the front end only.
5868
5869     Level 3 (default for '-Wstrict-aliasing'): Should have very few
5870     false positives and few false negatives.  Slightly slower than
5871     levels 1 or 2 when optimization is enabled.  Takes care of the
5872     common pun+dereference pattern in the front end:
5873     '*(int*)&some_float'.  If optimization is enabled, it also runs in
5874     the back end, where it deals with multiple statement cases using
5875     flow-sensitive points-to information.  Only warns when the
5876     converted pointer is dereferenced.  Does not warn about incomplete
5877     types.
5878
5879'-Wstrict-overflow'
5880'-Wstrict-overflow=N'
5881     This option is only active when signed overflow is undefined.  It
5882     warns about cases where the compiler optimizes based on the
5883     assumption that signed overflow does not occur.  Note that it does
5884     not warn about all cases where the code might overflow: it only
5885     warns about cases where the compiler implements some optimization.
5886     Thus this warning depends on the optimization level.
5887
5888     An optimization that assumes that signed overflow does not occur is
5889     perfectly safe if the values of the variables involved are such
5890     that overflow never does, in fact, occur.  Therefore this warning
5891     can easily give a false positive: a warning about code that is not
5892     actually a problem.  To help focus on important issues, several
5893     warning levels are defined.  No warnings are issued for the use of
5894     undefined signed overflow when estimating how many iterations a
5895     loop requires, in particular when determining whether a loop will
5896     be executed at all.
5897
5898     '-Wstrict-overflow=1'
5899          Warn about cases that are both questionable and easy to avoid.
5900          For example the compiler simplifies 'x + 1 > x' to '1'.  This
5901          level of '-Wstrict-overflow' is enabled by '-Wall'; higher
5902          levels are not, and must be explicitly requested.
5903
5904     '-Wstrict-overflow=2'
5905          Also warn about other cases where a comparison is simplified
5906          to a constant.  For example: 'abs (x) >= 0'.  This can only be
5907          simplified when signed integer overflow is undefined, because
5908          'abs (INT_MIN)' overflows to 'INT_MIN', which is less than
5909          zero.  '-Wstrict-overflow' (with no level) is the same as
5910          '-Wstrict-overflow=2'.
5911
5912     '-Wstrict-overflow=3'
5913          Also warn about other cases where a comparison is simplified.
5914          For example: 'x + 1 > 1' is simplified to 'x > 0'.
5915
5916     '-Wstrict-overflow=4'
5917          Also warn about other simplifications not covered by the above
5918          cases.  For example: '(x * 10) / 5' is simplified to 'x * 2'.
5919
5920     '-Wstrict-overflow=5'
5921          Also warn about cases where the compiler reduces the magnitude
5922          of a constant involved in a comparison.  For example: 'x + 2 >
5923          y' is simplified to 'x + 1 >= y'.  This is reported only at
5924          the highest warning level because this simplification applies
5925          to many comparisons, so this warning level gives a very large
5926          number of false positives.
5927
5928'-Wstring-compare'
5929     Warn for calls to 'strcmp' and 'strncmp' whose result is determined
5930     to be either zero or non-zero in tests for such equality owing to
5931     the length of one argument being greater than the size of the array
5932     the other argument is stored in (or the bound in the case of
5933     'strncmp').  Such calls could be mistakes.  For example, the call
5934     to 'strcmp' below is diagnosed because its result is necessarily
5935     non-zero irrespective of the contents of the array 'a'.
5936
5937          extern char a[4];
5938          void f (char *d)
5939          {
5940            strcpy (d, "string");
5941            ...
5942            if (0 == strcmp (a, d))   // cannot be true
5943              puts ("a and d are the same");
5944          }
5945
5946     '-Wstring-compare' is enabled by '-Wextra'.
5947
5948'-Wstringop-overflow'
5949'-Wstringop-overflow=TYPE'
5950     Warn for calls to string manipulation functions such as 'memcpy'
5951     and 'strcpy' that are determined to overflow the destination
5952     buffer.  The optional argument is one greater than the type of
5953     Object Size Checking to perform to determine the size of the
5954     destination.  *Note Object Size Checking::.  The argument is
5955     meaningful only for functions that operate on character arrays but
5956     not for raw memory functions like 'memcpy' which always make use of
5957     Object Size type-0.  The option also warns for calls that specify a
5958     size in excess of the largest possible object or at most 'SIZE_MAX
5959     / 2' bytes.  The option produces the best results with optimization
5960     enabled but can detect a small subset of simple buffer overflows
5961     even without optimization in calls to the GCC built-in functions
5962     like '__builtin_memcpy' that correspond to the standard functions.
5963     In any case, the option warns about just a subset of buffer
5964     overflows detected by the corresponding overflow checking
5965     built-ins.  For example, the option issues a warning for the
5966     'strcpy' call below because it copies at least 5 characters (the
5967     string '"blue"' including the terminating NUL) into the buffer of
5968     size 4.
5969
5970          enum Color { blue, purple, yellow };
5971          const char* f (enum Color clr)
5972          {
5973            static char buf [4];
5974            const char *str;
5975            switch (clr)
5976              {
5977                case blue: str = "blue"; break;
5978                case purple: str = "purple"; break;
5979                case yellow: str = "yellow"; break;
5980              }
5981
5982            return strcpy (buf, str);   // warning here
5983          }
5984
5985     Option '-Wstringop-overflow=2' is enabled by default.
5986
5987     '-Wstringop-overflow'
5988     '-Wstringop-overflow=1'
5989          The '-Wstringop-overflow=1' option uses type-zero Object Size
5990          Checking to determine the sizes of destination objects.  This
5991          is the default setting of the option.  At this setting the
5992          option does not warn for writes past the end of subobjects of
5993          larger objects accessed by pointers unless the size of the
5994          largest surrounding object is known.  When the destination may
5995          be one of several objects it is assumed to be the largest one
5996          of them.  On Linux systems, when optimization is enabled at
5997          this setting the option warns for the same code as when the
5998          '_FORTIFY_SOURCE' macro is defined to a non-zero value.
5999
6000     '-Wstringop-overflow=2'
6001          The '-Wstringop-overflow=2' option uses type-one Object Size
6002          Checking to determine the sizes of destination objects.  At
6003          this setting the option warna about overflows when writing to
6004          members of the largest complete objects whose exact size is
6005          known.  However, it does not warn for excessive writes to the
6006          same members of unknown objects referenced by pointers since
6007          they may point to arrays containing unknown numbers of
6008          elements.
6009
6010     '-Wstringop-overflow=3'
6011          The '-Wstringop-overflow=3' option uses type-two Object Size
6012          Checking to determine the sizes of destination objects.  At
6013          this setting the option warns about overflowing the smallest
6014          object or data member.  This is the most restrictive setting
6015          of the option that may result in warnings for safe code.
6016
6017     '-Wstringop-overflow=4'
6018          The '-Wstringop-overflow=4' option uses type-three Object Size
6019          Checking to determine the sizes of destination objects.  At
6020          this setting the option warns about overflowing any data
6021          members, and when the destination is one of several objects it
6022          uses the size of the largest of them to decide whether to
6023          issue a warning.  Similarly to '-Wstringop-overflow=3' this
6024          setting of the option may result in warnings for benign code.
6025
6026'-Wno-stringop-truncation'
6027     Do not warn for calls to bounded string manipulation functions such
6028     as 'strncat', 'strncpy', and 'stpncpy' that may either truncate the
6029     copied string or leave the destination unchanged.
6030
6031     In the following example, the call to 'strncat' specifies a bound
6032     that is less than the length of the source string.  As a result,
6033     the copy of the source will be truncated and so the call is
6034     diagnosed.  To avoid the warning use 'bufsize - strlen (buf) - 1)'
6035     as the bound.
6036
6037          void append (char *buf, size_t bufsize)
6038          {
6039            strncat (buf, ".txt", 3);
6040          }
6041
6042     As another example, the following call to 'strncpy' results in
6043     copying to 'd' just the characters preceding the terminating NUL,
6044     without appending the NUL to the end.  Assuming the result of
6045     'strncpy' is necessarily a NUL-terminated string is a common
6046     mistake, and so the call is diagnosed.  To avoid the warning when
6047     the result is not expected to be NUL-terminated, call 'memcpy'
6048     instead.
6049
6050          void copy (char *d, const char *s)
6051          {
6052            strncpy (d, s, strlen (s));
6053          }
6054
6055     In the following example, the call to 'strncpy' specifies the size
6056     of the destination buffer as the bound.  If the length of the
6057     source string is equal to or greater than this size the result of
6058     the copy will not be NUL-terminated.  Therefore, the call is also
6059     diagnosed.  To avoid the warning, specify 'sizeof buf - 1' as the
6060     bound and set the last element of the buffer to 'NUL'.
6061
6062          void copy (const char *s)
6063          {
6064            char buf[80];
6065            strncpy (buf, s, sizeof buf);
6066            ...
6067          }
6068
6069     In situations where a character array is intended to store a
6070     sequence of bytes with no terminating 'NUL' such an array may be
6071     annotated with attribute 'nonstring' to avoid this warning.  Such
6072     arrays, however, are not suitable arguments to functions that
6073     expect 'NUL'-terminated strings.  To help detect accidental misuses
6074     of such arrays GCC issues warnings unless it can prove that the use
6075     is safe.  *Note Common Variable Attributes::.
6076
6077'-Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]'
6078     Warn for cases where adding an attribute may be beneficial.  The
6079     attributes currently supported are listed below.
6080
6081     '-Wsuggest-attribute=pure'
6082     '-Wsuggest-attribute=const'
6083     '-Wsuggest-attribute=noreturn'
6084     '-Wmissing-noreturn'
6085     '-Wsuggest-attribute=malloc'
6086
6087          Warn about functions that might be candidates for attributes
6088          'pure', 'const' or 'noreturn' or 'malloc'.  The compiler only
6089          warns for functions visible in other compilation units or (in
6090          the case of 'pure' and 'const') if it cannot prove that the
6091          function returns normally.  A function returns normally if it
6092          doesn't contain an infinite loop or return abnormally by
6093          throwing, calling 'abort' or trapping.  This analysis requires
6094          option '-fipa-pure-const', which is enabled by default at '-O'
6095          and higher.  Higher optimization levels improve the accuracy
6096          of the analysis.
6097
6098     '-Wsuggest-attribute=format'
6099     '-Wmissing-format-attribute'
6100
6101          Warn about function pointers that might be candidates for
6102          'format' attributes.  Note these are only possible candidates,
6103          not absolute ones.  GCC guesses that function pointers with
6104          'format' attributes that are used in assignment,
6105          initialization, parameter passing or return statements should
6106          have a corresponding 'format' attribute in the resulting type.
6107          I.e. the left-hand side of the assignment or initialization,
6108          the type of the parameter variable, or the return type of the
6109          containing function respectively should also have a 'format'
6110          attribute to avoid the warning.
6111
6112          GCC also warns about function definitions that might be
6113          candidates for 'format' attributes.  Again, these are only
6114          possible candidates.  GCC guesses that 'format' attributes
6115          might be appropriate for any function that calls a function
6116          like 'vprintf' or 'vscanf', but this might not always be the
6117          case, and some functions for which 'format' attributes are
6118          appropriate may not be detected.
6119
6120     '-Wsuggest-attribute=cold'
6121
6122          Warn about functions that might be candidates for 'cold'
6123          attribute.  This is based on static detection and generally
6124          only warns about functions which always leads to a call to
6125          another 'cold' function such as wrappers of C++ 'throw' or
6126          fatal error reporting functions leading to 'abort'.
6127
6128'-Walloc-zero'
6129     Warn about calls to allocation functions decorated with attribute
6130     'alloc_size' that specify zero bytes, including those to the
6131     built-in forms of the functions 'aligned_alloc', 'alloca',
6132     'calloc', 'malloc', and 'realloc'.  Because the behavior of these
6133     functions when called with a zero size differs among
6134     implementations (and in the case of 'realloc' has been deprecated)
6135     relying on it may result in subtle portability bugs and should be
6136     avoided.
6137
6138'-Walloc-size-larger-than=BYTE-SIZE'
6139     Warn about calls to functions decorated with attribute 'alloc_size'
6140     that attempt to allocate objects larger than the specified number
6141     of bytes, or where the result of the size computation in an integer
6142     type with infinite precision would exceed the value of
6143     'PTRDIFF_MAX' on the target.
6144     '-Walloc-size-larger-than=''PTRDIFF_MAX' is enabled by default.
6145     Warnings controlled by the option can be disabled either by
6146     specifying BYTE-SIZE of 'SIZE_MAX' or more or by
6147     '-Wno-alloc-size-larger-than'.  *Note Function Attributes::.
6148
6149'-Wno-alloc-size-larger-than'
6150     Disable '-Walloc-size-larger-than=' warnings.  The option is
6151     equivalent to '-Walloc-size-larger-than=''SIZE_MAX' or larger.
6152
6153'-Walloca'
6154     This option warns on all uses of 'alloca' in the source.
6155
6156'-Walloca-larger-than=BYTE-SIZE'
6157     This option warns on calls to 'alloca' with an integer argument
6158     whose value is either zero, or that is not bounded by a controlling
6159     predicate that limits its value to at most BYTE-SIZE.  It also
6160     warns for calls to 'alloca' where the bound value is unknown.
6161     Arguments of non-integer types are considered unbounded even if
6162     they appear to be constrained to the expected range.
6163
6164     For example, a bounded case of 'alloca' could be:
6165
6166          void func (size_t n)
6167          {
6168            void *p;
6169            if (n <= 1000)
6170              p = alloca (n);
6171            else
6172              p = malloc (n);
6173            f (p);
6174          }
6175
6176     In the above example, passing '-Walloca-larger-than=1000' would not
6177     issue a warning because the call to 'alloca' is known to be at most
6178     1000 bytes.  However, if '-Walloca-larger-than=500' were passed,
6179     the compiler would emit a warning.
6180
6181     Unbounded uses, on the other hand, are uses of 'alloca' with no
6182     controlling predicate constraining its integer argument.  For
6183     example:
6184
6185          void func ()
6186          {
6187            void *p = alloca (n);
6188            f (p);
6189          }
6190
6191     If '-Walloca-larger-than=500' were passed, the above would trigger
6192     a warning, but this time because of the lack of bounds checking.
6193
6194     Note, that even seemingly correct code involving signed integers
6195     could cause a warning:
6196
6197          void func (signed int n)
6198          {
6199            if (n < 500)
6200              {
6201                p = alloca (n);
6202                f (p);
6203              }
6204          }
6205
6206     In the above example, N could be negative, causing a larger than
6207     expected argument to be implicitly cast into the 'alloca' call.
6208
6209     This option also warns when 'alloca' is used in a loop.
6210
6211     '-Walloca-larger-than=''PTRDIFF_MAX' is enabled by default but is
6212     usually only effective when '-ftree-vrp' is active (default for
6213     '-O2' and above).
6214
6215     See also '-Wvla-larger-than=''byte-size'.
6216
6217'-Wno-alloca-larger-than'
6218     Disable '-Walloca-larger-than=' warnings.  The option is equivalent
6219     to '-Walloca-larger-than=''SIZE_MAX' or larger.
6220
6221'-Warith-conversion'
6222     Do warn about implicit conversions from arithmetic operations even
6223     when conversion of the operands to the same type cannot change
6224     their values.  This affects warnings from '-Wconversion',
6225     '-Wfloat-conversion', and '-Wsign-conversion'.
6226
6227          void f (char c, int i)
6228          {
6229            c = c + i; // warns with -Wconversion
6230            c = c + 1; // only warns with -Warith-conversion
6231          }
6232
6233'-Warray-bounds'
6234'-Warray-bounds=N'
6235     This option is only active when '-ftree-vrp' is active (default for
6236     '-O2' and above).  It warns about subscripts to arrays that are
6237     always out of bounds.  This warning is enabled by '-Wall'.
6238
6239     '-Warray-bounds=1'
6240          This is the warning level of '-Warray-bounds' and is enabled
6241          by '-Wall'; higher levels are not, and must be explicitly
6242          requested.
6243
6244     '-Warray-bounds=2'
6245          This warning level also warns about out of bounds access for
6246          arrays at the end of a struct and for arrays accessed through
6247          pointers.  This warning level may give a larger number of
6248          false positives and is deactivated by default.
6249
6250'-Wattribute-alias=N'
6251'-Wno-attribute-alias'
6252     Warn about declarations using the 'alias' and similar attributes
6253     whose target is incompatible with the type of the alias.  *Note
6254     Declaring Attributes of Functions: Function Attributes.
6255
6256     '-Wattribute-alias=1'
6257          The default warning level of the '-Wattribute-alias' option
6258          diagnoses incompatibilities between the type of the alias
6259          declaration and that of its target.  Such incompatibilities
6260          are typically indicative of bugs.
6261
6262     '-Wattribute-alias=2'
6263
6264          At this level '-Wattribute-alias' also diagnoses cases where
6265          the attributes of the alias declaration are more restrictive
6266          than the attributes applied to its target.  These mismatches
6267          can potentially result in incorrect code generation.  In other
6268          cases they may be benign and could be resolved simply by
6269          adding the missing attribute to the target.  For comparison,
6270          see the '-Wmissing-attributes' option, which controls
6271          diagnostics when the alias declaration is less restrictive
6272          than the target, rather than more restrictive.
6273
6274          Attributes considered include 'alloc_align', 'alloc_size',
6275          'cold', 'const', 'hot', 'leaf', 'malloc', 'nonnull',
6276          'noreturn', 'nothrow', 'pure', 'returns_nonnull', and
6277          'returns_twice'.
6278
6279     '-Wattribute-alias' is equivalent to '-Wattribute-alias=1'.  This
6280     is the default.  You can disable these warnings with either
6281     '-Wno-attribute-alias' or '-Wattribute-alias=0'.
6282
6283'-Wbool-compare'
6284     Warn about boolean expression compared with an integer value
6285     different from 'true'/'false'.  For instance, the following
6286     comparison is always false:
6287          int n = 5;
6288          ...
6289          if ((n > 1) == 2) { ... }
6290     This warning is enabled by '-Wall'.
6291
6292'-Wbool-operation'
6293     Warn about suspicious operations on expressions of a boolean type.
6294     For instance, bitwise negation of a boolean is very likely a bug in
6295     the program.  For C, this warning also warns about incrementing or
6296     decrementing a boolean, which rarely makes sense.  (In C++,
6297     decrementing a boolean is always invalid.  Incrementing a boolean
6298     is invalid in C++17, and deprecated otherwise.)
6299
6300     This warning is enabled by '-Wall'.
6301
6302'-Wduplicated-branches'
6303     Warn when an if-else has identical branches.  This warning detects
6304     cases like
6305          if (p != NULL)
6306            return 0;
6307          else
6308            return 0;
6309     It doesn't warn when both branches contain just a null statement.
6310     This warning also warn for conditional operators:
6311            int i = x ? *p : *p;
6312
6313'-Wduplicated-cond'
6314     Warn about duplicated conditions in an if-else-if chain.  For
6315     instance, warn for the following code:
6316          if (p->q != NULL) { ... }
6317          else if (p->q != NULL) { ... }
6318
6319'-Wframe-address'
6320     Warn when the '__builtin_frame_address' or
6321     '__builtin_return_address' is called with an argument greater than
6322     0.  Such calls may return indeterminate values or crash the
6323     program.  The warning is included in '-Wall'.
6324
6325'-Wno-discarded-qualifiers (C and Objective-C only)'
6326     Do not warn if type qualifiers on pointers are being discarded.
6327     Typically, the compiler warns if a 'const char *' variable is
6328     passed to a function that takes a 'char *' parameter.  This option
6329     can be used to suppress such a warning.
6330
6331'-Wno-discarded-array-qualifiers (C and Objective-C only)'
6332     Do not warn if type qualifiers on arrays which are pointer targets
6333     are being discarded.  Typically, the compiler warns if a 'const int
6334     (*)[]' variable is passed to a function that takes a 'int (*)[]'
6335     parameter.  This option can be used to suppress such a warning.
6336
6337'-Wno-incompatible-pointer-types (C and Objective-C only)'
6338     Do not warn when there is a conversion between pointers that have
6339     incompatible types.  This warning is for cases not covered by
6340     '-Wno-pointer-sign', which warns for pointer argument passing or
6341     assignment with different signedness.
6342
6343'-Wno-int-conversion (C and Objective-C only)'
6344     Do not warn about incompatible integer to pointer and pointer to
6345     integer conversions.  This warning is about implicit conversions;
6346     for explicit conversions the warnings '-Wno-int-to-pointer-cast'
6347     and '-Wno-pointer-to-int-cast' may be used.
6348
6349'-Wzero-length-bounds'
6350     Warn about accesses to elements of zero-length array members that
6351     might overlap other members of the same object.  Declaring interior
6352     zero-length arrays is discouraged because accesses to them are
6353     undefined.  See *Note Zero Length::.
6354
6355     For example, the first two stores in function 'bad' are diagnosed
6356     because the array elements overlap the subsequent members 'b' and
6357     'c'.  The third store is diagnosed by '-Warray-bounds' because it
6358     is beyond the bounds of the enclosing object.
6359
6360          struct X { int a[0]; int b, c; };
6361          struct X x;
6362
6363          void bad (void)
6364          {
6365            x.a[0] = 0;   // -Wzero-length-bounds
6366            x.a[1] = 1;   // -Wzero-length-bounds
6367            x.a[2] = 2;   // -Warray-bounds
6368          }
6369
6370     Option '-Wzero-length-bounds' is enabled by '-Warray-bounds'.
6371
6372'-Wno-div-by-zero'
6373     Do not warn about compile-time integer division by zero.
6374     Floating-point division by zero is not warned about, as it can be a
6375     legitimate way of obtaining infinities and NaNs.
6376
6377'-Wsystem-headers'
6378     Print warning messages for constructs found in system header files.
6379     Warnings from system headers are normally suppressed, on the
6380     assumption that they usually do not indicate real problems and
6381     would only make the compiler output harder to read.  Using this
6382     command-line option tells GCC to emit warnings from system headers
6383     as if they occurred in user code.  However, note that using '-Wall'
6384     in conjunction with this option does _not_ warn about unknown
6385     pragmas in system headers--for that, '-Wunknown-pragmas' must also
6386     be used.
6387
6388'-Wtautological-compare'
6389     Warn if a self-comparison always evaluates to true or false.  This
6390     warning detects various mistakes such as:
6391          int i = 1;
6392          ...
6393          if (i > i) { ... }
6394
6395     This warning also warns about bitwise comparisons that always
6396     evaluate to true or false, for instance:
6397          if ((a & 16) == 10) { ... }
6398     will always be false.
6399
6400     This warning is enabled by '-Wall'.
6401
6402'-Wtrampolines'
6403     Warn about trampolines generated for pointers to nested functions.
6404     A trampoline is a small piece of data or code that is created at
6405     run time on the stack when the address of a nested function is
6406     taken, and is used to call the nested function indirectly.  For
6407     some targets, it is made up of data only and thus requires no
6408     special treatment.  But, for most targets, it is made up of code
6409     and thus requires the stack to be made executable in order for the
6410     program to work properly.
6411
6412'-Wfloat-equal'
6413     Warn if floating-point values are used in equality comparisons.
6414
6415     The idea behind this is that sometimes it is convenient (for the
6416     programmer) to consider floating-point values as approximations to
6417     infinitely precise real numbers.  If you are doing this, then you
6418     need to compute (by analyzing the code, or in some other way) the
6419     maximum or likely maximum error that the computation introduces,
6420     and allow for it when performing comparisons (and when producing
6421     output, but that's a different problem).  In particular, instead of
6422     testing for equality, you should check to see whether the two
6423     values have ranges that overlap; and this is done with the
6424     relational operators, so equality comparisons are probably
6425     mistaken.
6426
6427'-Wtraditional (C and Objective-C only)'
6428     Warn about certain constructs that behave differently in
6429     traditional and ISO C.  Also warn about ISO C constructs that have
6430     no traditional C equivalent, and/or problematic constructs that
6431     should be avoided.
6432
6433        * Macro parameters that appear within string literals in the
6434          macro body.  In traditional C macro replacement takes place
6435          within string literals, but in ISO C it does not.
6436
6437        * In traditional C, some preprocessor directives did not exist.
6438          Traditional preprocessors only considered a line to be a
6439          directive if the '#' appeared in column 1 on the line.
6440          Therefore '-Wtraditional' warns about directives that
6441          traditional C understands but ignores because the '#' does not
6442          appear as the first character on the line.  It also suggests
6443          you hide directives like '#pragma' not understood by
6444          traditional C by indenting them.  Some traditional
6445          implementations do not recognize '#elif', so this option
6446          suggests avoiding it altogether.
6447
6448        * A function-like macro that appears without arguments.
6449
6450        * The unary plus operator.
6451
6452        * The 'U' integer constant suffix, or the 'F' or 'L'
6453          floating-point constant suffixes.  (Traditional C does support
6454          the 'L' suffix on integer constants.)  Note, these suffixes
6455          appear in macros defined in the system headers of most modern
6456          systems, e.g. the '_MIN'/'_MAX' macros in '<limits.h>'.  Use
6457          of these macros in user code might normally lead to spurious
6458          warnings, however GCC's integrated preprocessor has enough
6459          context to avoid warning in these cases.
6460
6461        * A function declared external in one block and then used after
6462          the end of the block.
6463
6464        * A 'switch' statement has an operand of type 'long'.
6465
6466        * A non-'static' function declaration follows a 'static' one.
6467          This construct is not accepted by some traditional C
6468          compilers.
6469
6470        * The ISO type of an integer constant has a different width or
6471          signedness from its traditional type.  This warning is only
6472          issued if the base of the constant is ten.  I.e. hexadecimal
6473          or octal values, which typically represent bit patterns, are
6474          not warned about.
6475
6476        * Usage of ISO string concatenation is detected.
6477
6478        * Initialization of automatic aggregates.
6479
6480        * Identifier conflicts with labels.  Traditional C lacks a
6481          separate namespace for labels.
6482
6483        * Initialization of unions.  If the initializer is zero, the
6484          warning is omitted.  This is done under the assumption that
6485          the zero initializer in user code appears conditioned on e.g.
6486          '__STDC__' to avoid missing initializer warnings and relies on
6487          default initialization to zero in the traditional C case.
6488
6489        * Conversions by prototypes between fixed/floating-point values
6490          and vice versa.  The absence of these prototypes when
6491          compiling with traditional C causes serious problems.  This is
6492          a subset of the possible conversion warnings; for the full set
6493          use '-Wtraditional-conversion'.
6494
6495        * Use of ISO C style function definitions.  This warning
6496          intentionally is _not_ issued for prototype declarations or
6497          variadic functions because these ISO C features appear in your
6498          code when using libiberty's traditional C compatibility
6499          macros, 'PARAMS' and 'VPARAMS'.  This warning is also bypassed
6500          for nested functions because that feature is already a GCC
6501          extension and thus not relevant to traditional C
6502          compatibility.
6503
6504'-Wtraditional-conversion (C and Objective-C only)'
6505     Warn if a prototype causes a type conversion that is different from
6506     what would happen to the same argument in the absence of a
6507     prototype.  This includes conversions of fixed point to floating
6508     and vice versa, and conversions changing the width or signedness of
6509     a fixed-point argument except when the same as the default
6510     promotion.
6511
6512'-Wdeclaration-after-statement (C and Objective-C only)'
6513     Warn when a declaration is found after a statement in a block.
6514     This construct, known from C++, was introduced with ISO C99 and is
6515     by default allowed in GCC.  It is not supported by ISO C90.  *Note
6516     Mixed Declarations::.
6517
6518'-Wshadow'
6519     Warn whenever a local variable or type declaration shadows another
6520     variable, parameter, type, class member (in C++), or instance
6521     variable (in Objective-C) or whenever a built-in function is
6522     shadowed.  Note that in C++, the compiler warns if a local variable
6523     shadows an explicit typedef, but not if it shadows a
6524     struct/class/enum.  If this warning is enabled, it includes also
6525     all instances of local shadowing.  This means that
6526     '-Wno-shadow=local' and '-Wno-shadow=compatible-local' are ignored
6527     when '-Wshadow' is used.  Same as '-Wshadow=global'.
6528
6529'-Wno-shadow-ivar (Objective-C only)'
6530     Do not warn whenever a local variable shadows an instance variable
6531     in an Objective-C method.
6532
6533'-Wshadow=global'
6534     Warn for any shadowing.  Same as '-Wshadow'.
6535
6536'-Wshadow=local'
6537     Warn when a local variable shadows another local variable or
6538     parameter.
6539
6540'-Wshadow=compatible-local'
6541     Warn when a local variable shadows another local variable or
6542     parameter whose type is compatible with that of the shadowing
6543     variable.  In C++, type compatibility here means the type of the
6544     shadowing variable can be converted to that of the shadowed
6545     variable.  The creation of this flag (in addition to
6546     '-Wshadow=local') is based on the idea that when a local variable
6547     shadows another one of incompatible type, it is most likely
6548     intentional, not a bug or typo, as shown in the following example:
6549
6550          for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i)
6551          {
6552            for (int i = 0; i < N; ++i)
6553            {
6554              ...
6555            }
6556            ...
6557          }
6558
6559     Since the two variable 'i' in the example above have incompatible
6560     types, enabling only '-Wshadow=compatible-local' does not emit a
6561     warning.  Because their types are incompatible, if a programmer
6562     accidentally uses one in place of the other, type checking is
6563     expected to catch that and emit an error or warning.  Use of this
6564     flag instead of '-Wshadow=local' can possibly reduce the number of
6565     warnings triggered by intentional shadowing.  Note that this also
6566     means that shadowing 'const char *i' by 'char *i' does not emit a
6567     warning.
6568
6569     This warning is also enabled by '-Wshadow=local'.
6570
6571'-Wlarger-than=BYTE-SIZE'
6572     Warn whenever an object is defined whose size exceeds BYTE-SIZE.
6573     '-Wlarger-than=''PTRDIFF_MAX' is enabled by default.  Warnings
6574     controlled by the option can be disabled either by specifying
6575     BYTE-SIZE of 'SIZE_MAX' or more or by '-Wno-larger-than'.
6576
6577'-Wno-larger-than'
6578     Disable '-Wlarger-than=' warnings.  The option is equivalent to
6579     '-Wlarger-than=''SIZE_MAX' or larger.
6580
6581'-Wframe-larger-than=BYTE-SIZE'
6582     Warn if the size of a function frame exceeds BYTE-SIZE.  The
6583     computation done to determine the stack frame size is approximate
6584     and not conservative.  The actual requirements may be somewhat
6585     greater than BYTE-SIZE even if you do not get a warning.  In
6586     addition, any space allocated via 'alloca', variable-length arrays,
6587     or related constructs is not included by the compiler when
6588     determining whether or not to issue a warning.
6589     '-Wframe-larger-than=''PTRDIFF_MAX' is enabled by default.
6590     Warnings controlled by the option can be disabled either by
6591     specifying BYTE-SIZE of 'SIZE_MAX' or more or by
6592     '-Wno-frame-larger-than'.
6593
6594'-Wno-frame-larger-than'
6595     Disable '-Wframe-larger-than=' warnings.  The option is equivalent
6596     to '-Wframe-larger-than=''SIZE_MAX' or larger.
6597
6598'-Wno-free-nonheap-object'
6599     Do not warn when attempting to free an object that was not
6600     allocated on the heap.
6601
6602'-Wstack-usage=BYTE-SIZE'
6603     Warn if the stack usage of a function might exceed BYTE-SIZE.  The
6604     computation done to determine the stack usage is conservative.  Any
6605     space allocated via 'alloca', variable-length arrays, or related
6606     constructs is included by the compiler when determining whether or
6607     not to issue a warning.
6608
6609     The message is in keeping with the output of '-fstack-usage'.
6610
6611        * If the stack usage is fully static but exceeds the specified
6612          amount, it's:
6613
6614                 warning: stack usage is 1120 bytes
6615        * If the stack usage is (partly) dynamic but bounded, it's:
6616
6617                 warning: stack usage might be 1648 bytes
6618        * If the stack usage is (partly) dynamic and not bounded, it's:
6619
6620                 warning: stack usage might be unbounded
6621
6622     '-Wstack-usage=''PTRDIFF_MAX' is enabled by default.  Warnings
6623     controlled by the option can be disabled either by specifying
6624     BYTE-SIZE of 'SIZE_MAX' or more or by '-Wno-stack-usage'.
6625
6626'-Wno-stack-usage'
6627     Disable '-Wstack-usage=' warnings.  The option is equivalent to
6628     '-Wstack-usage=''SIZE_MAX' or larger.
6629
6630'-Wunsafe-loop-optimizations'
6631     Warn if the loop cannot be optimized because the compiler cannot
6632     assume anything on the bounds of the loop indices.  With
6633     '-funsafe-loop-optimizations' warn if the compiler makes such
6634     assumptions.
6635
6636'-Wno-pedantic-ms-format (MinGW targets only)'
6637     When used in combination with '-Wformat' and '-pedantic' without
6638     GNU extensions, this option disables the warnings about non-ISO
6639     'printf' / 'scanf' format width specifiers 'I32', 'I64', and 'I'
6640     used on Windows targets, which depend on the MS runtime.
6641
6642'-Wpointer-arith'
6643     Warn about anything that depends on the "size of" a function type
6644     or of 'void'.  GNU C assigns these types a size of 1, for
6645     convenience in calculations with 'void *' pointers and pointers to
6646     functions.  In C++, warn also when an arithmetic operation involves
6647     'NULL'.  This warning is also enabled by '-Wpedantic'.
6648
6649'-Wno-pointer-compare'
6650     Do not warn if a pointer is compared with a zero character
6651     constant.  This usually means that the pointer was meant to be
6652     dereferenced.  For example:
6653
6654          const char *p = foo ();
6655          if (p == '\0')
6656            return 42;
6657
6658     Note that the code above is invalid in C++11.
6659
6660     This warning is enabled by default.
6661
6662'-Wtype-limits'
6663     Warn if a comparison is always true or always false due to the
6664     limited range of the data type, but do not warn for constant
6665     expressions.  For example, warn if an unsigned variable is compared
6666     against zero with '<' or '>='.  This warning is also enabled by
6667     '-Wextra'.
6668
6669'-Wabsolute-value (C and Objective-C only)'
6670     Warn for calls to standard functions that compute the absolute
6671     value of an argument when a more appropriate standard function is
6672     available.  For example, calling 'abs(3.14)' triggers the warning
6673     because the appropriate function to call to compute the absolute
6674     value of a double argument is 'fabs'.  The option also triggers
6675     warnings when the argument in a call to such a function has an
6676     unsigned type.  This warning can be suppressed with an explicit
6677     type cast and it is also enabled by '-Wextra'.
6678
6679'-Wcomment'
6680'-Wcomments'
6681     Warn whenever a comment-start sequence '/*' appears in a '/*'
6682     comment, or whenever a backslash-newline appears in a '//' comment.
6683     This warning is enabled by '-Wall'.
6684
6685'-Wtrigraphs'
6686     Warn if any trigraphs are encountered that might change the meaning
6687     of the program.  Trigraphs within comments are not warned about,
6688     except those that would form escaped newlines.
6689
6690     This option is implied by '-Wall'.  If '-Wall' is not given, this
6691     option is still enabled unless trigraphs are enabled.  To get
6692     trigraph conversion without warnings, but get the other '-Wall'
6693     warnings, use '-trigraphs -Wall -Wno-trigraphs'.
6694
6695'-Wundef'
6696     Warn if an undefined identifier is evaluated in an '#if' directive.
6697     Such identifiers are replaced with zero.
6698
6699'-Wexpansion-to-defined'
6700     Warn whenever 'defined' is encountered in the expansion of a macro
6701     (including the case where the macro is expanded by an '#if'
6702     directive).  Such usage is not portable.  This warning is also
6703     enabled by '-Wpedantic' and '-Wextra'.
6704
6705'-Wunused-macros'
6706     Warn about macros defined in the main file that are unused.  A
6707     macro is "used" if it is expanded or tested for existence at least
6708     once.  The preprocessor also warns if the macro has not been used
6709     at the time it is redefined or undefined.
6710
6711     Built-in macros, macros defined on the command line, and macros
6712     defined in include files are not warned about.
6713
6714     _Note:_ If a macro is actually used, but only used in skipped
6715     conditional blocks, then the preprocessor reports it as unused.  To
6716     avoid the warning in such a case, you might improve the scope of
6717     the macro's definition by, for example, moving it into the first
6718     skipped block.  Alternatively, you could provide a dummy use with
6719     something like:
6720
6721          #if defined the_macro_causing_the_warning
6722          #endif
6723
6724'-Wno-endif-labels'
6725     Do not warn whenever an '#else' or an '#endif' are followed by
6726     text.  This sometimes happens in older programs with code of the
6727     form
6728
6729          #if FOO
6730          ...
6731          #else FOO
6732          ...
6733          #endif FOO
6734
6735     The second and third 'FOO' should be in comments.  This warning is
6736     on by default.
6737
6738'-Wbad-function-cast (C and Objective-C only)'
6739     Warn when a function call is cast to a non-matching type.  For
6740     example, warn if a call to a function returning an integer type is
6741     cast to a pointer type.
6742
6743'-Wc90-c99-compat (C and Objective-C only)'
6744     Warn about features not present in ISO C90, but present in ISO C99.
6745     For instance, warn about use of variable length arrays, 'long long'
6746     type, 'bool' type, compound literals, designated initializers, and
6747     so on.  This option is independent of the standards mode.  Warnings
6748     are disabled in the expression that follows '__extension__'.
6749
6750'-Wc99-c11-compat (C and Objective-C only)'
6751     Warn about features not present in ISO C99, but present in ISO C11.
6752     For instance, warn about use of anonymous structures and unions,
6753     '_Atomic' type qualifier, '_Thread_local' storage-class specifier,
6754     '_Alignas' specifier, 'Alignof' operator, '_Generic' keyword, and
6755     so on.  This option is independent of the standards mode.  Warnings
6756     are disabled in the expression that follows '__extension__'.
6757
6758'-Wc11-c2x-compat (C and Objective-C only)'
6759     Warn about features not present in ISO C11, but present in ISO C2X.
6760     For instance, warn about omitting the string in '_Static_assert',
6761     use of '[[]]' syntax for attributes, use of decimal floating-point
6762     types, and so on.  This option is independent of the standards
6763     mode.  Warnings are disabled in the expression that follows
6764     '__extension__'.
6765
6766'-Wc++-compat (C and Objective-C only)'
6767     Warn about ISO C constructs that are outside of the common subset
6768     of ISO C and ISO C++, e.g. request for implicit conversion from
6769     'void *' to a pointer to non-'void' type.
6770
6771'-Wc++11-compat (C++ and Objective-C++ only)'
6772     Warn about C++ constructs whose meaning differs between ISO C++
6773     1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
6774     keywords in ISO C++ 2011.  This warning turns on '-Wnarrowing' and
6775     is enabled by '-Wall'.
6776
6777'-Wc++14-compat (C++ and Objective-C++ only)'
6778     Warn about C++ constructs whose meaning differs between ISO C++
6779     2011 and ISO C++ 2014.  This warning is enabled by '-Wall'.
6780
6781'-Wc++17-compat (C++ and Objective-C++ only)'
6782     Warn about C++ constructs whose meaning differs between ISO C++
6783     2014 and ISO C++ 2017.  This warning is enabled by '-Wall'.
6784
6785'-Wc++20-compat (C++ and Objective-C++ only)'
6786     Warn about C++ constructs whose meaning differs between ISO C++
6787     2017 and ISO C++ 2020.  This warning is enabled by '-Wall'.
6788
6789'-Wcast-qual'
6790     Warn whenever a pointer is cast so as to remove a type qualifier
6791     from the target type.  For example, warn if a 'const char *' is
6792     cast to an ordinary 'char *'.
6793
6794     Also warn when making a cast that introduces a type qualifier in an
6795     unsafe way.  For example, casting 'char **' to 'const char **' is
6796     unsafe, as in this example:
6797
6798            /* p is char ** value.  */
6799            const char **q = (const char **) p;
6800            /* Assignment of readonly string to const char * is OK.  */
6801            *q = "string";
6802            /* Now char** pointer points to read-only memory.  */
6803            **p = 'b';
6804
6805'-Wcast-align'
6806     Warn whenever a pointer is cast such that the required alignment of
6807     the target is increased.  For example, warn if a 'char *' is cast
6808     to an 'int *' on machines where integers can only be accessed at
6809     two- or four-byte boundaries.
6810
6811'-Wcast-align=strict'
6812     Warn whenever a pointer is cast such that the required alignment of
6813     the target is increased.  For example, warn if a 'char *' is cast
6814     to an 'int *' regardless of the target machine.
6815
6816'-Wcast-function-type'
6817     Warn when a function pointer is cast to an incompatible function
6818     pointer.  In a cast involving function types with a variable
6819     argument list only the types of initial arguments that are provided
6820     are considered.  Any parameter of pointer-type matches any other
6821     pointer-type.  Any benign differences in integral types are
6822     ignored, like 'int' vs. 'long' on ILP32 targets.  Likewise type
6823     qualifiers are ignored.  The function type 'void (*) (void)' is
6824     special and matches everything, which can be used to suppress this
6825     warning.  In a cast involving pointer to member types this warning
6826     warns whenever the type cast is changing the pointer to member
6827     type.  This warning is enabled by '-Wextra'.
6828
6829'-Wwrite-strings'
6830     When compiling C, give string constants the type 'const
6831     char[LENGTH]' so that copying the address of one into a non-'const'
6832     'char *' pointer produces a warning.  These warnings help you find
6833     at compile time code that can try to write into a string constant,
6834     but only if you have been very careful about using 'const' in
6835     declarations and prototypes.  Otherwise, it is just a nuisance.
6836     This is why we did not make '-Wall' request these warnings.
6837
6838     When compiling C++, warn about the deprecated conversion from
6839     string literals to 'char *'.  This warning is enabled by default
6840     for C++ programs.
6841
6842'-Wclobbered'
6843     Warn for variables that might be changed by 'longjmp' or 'vfork'.
6844     This warning is also enabled by '-Wextra'.
6845
6846'-Wconversion'
6847     Warn for implicit conversions that may alter a value.  This
6848     includes conversions between real and integer, like 'abs (x)' when
6849     'x' is 'double'; conversions between signed and unsigned, like
6850     'unsigned ui = -1'; and conversions to smaller types, like 'sqrtf
6851     (M_PI)'.  Do not warn for explicit casts like 'abs ((int) x)' and
6852     'ui = (unsigned) -1', or if the value is not changed by the
6853     conversion like in 'abs (2.0)'.  Warnings about conversions between
6854     signed and unsigned integers can be disabled by using
6855     '-Wno-sign-conversion'.
6856
6857     For C++, also warn for confusing overload resolution for
6858     user-defined conversions; and conversions that never use a type
6859     conversion operator: conversions to 'void', the same type, a base
6860     class or a reference to them.  Warnings about conversions between
6861     signed and unsigned integers are disabled by default in C++ unless
6862     '-Wsign-conversion' is explicitly enabled.
6863
6864     Warnings about conversion from arithmetic on a small type back to
6865     that type are only given with '-Warith-conversion'.
6866
6867'-Wdangling-else'
6868     Warn about constructions where there may be confusion to which 'if'
6869     statement an 'else' branch belongs.  Here is an example of such a
6870     case:
6871
6872          {
6873            if (a)
6874              if (b)
6875                foo ();
6876            else
6877              bar ();
6878          }
6879
6880     In C/C++, every 'else' branch belongs to the innermost possible
6881     'if' statement, which in this example is 'if (b)'.  This is often
6882     not what the programmer expected, as illustrated in the above
6883     example by indentation the programmer chose.  When there is the
6884     potential for this confusion, GCC issues a warning when this flag
6885     is specified.  To eliminate the warning, add explicit braces around
6886     the innermost 'if' statement so there is no way the 'else' can
6887     belong to the enclosing 'if'.  The resulting code looks like this:
6888
6889          {
6890            if (a)
6891              {
6892                if (b)
6893                  foo ();
6894                else
6895                  bar ();
6896              }
6897          }
6898
6899     This warning is enabled by '-Wparentheses'.
6900
6901'-Wdate-time'
6902     Warn when macros '__TIME__', '__DATE__' or '__TIMESTAMP__' are
6903     encountered as they might prevent bit-wise-identical reproducible
6904     compilations.
6905
6906'-Wempty-body'
6907     Warn if an empty body occurs in an 'if', 'else' or 'do while'
6908     statement.  This warning is also enabled by '-Wextra'.
6909
6910'-Wno-endif-labels'
6911     Do not warn about stray tokens after '#else' and '#endif'.
6912
6913'-Wenum-compare'
6914     Warn about a comparison between values of different enumerated
6915     types.  In C++ enumerated type mismatches in conditional
6916     expressions are also diagnosed and the warning is enabled by
6917     default.  In C this warning is enabled by '-Wall'.
6918
6919'-Wenum-conversion (C, Objective-C only)'
6920     Warn when a value of enumerated type is implicitly converted to a
6921     different enumerated type.  This warning is enabled by '-Wextra'.
6922
6923'-Wjump-misses-init (C, Objective-C only)'
6924     Warn if a 'goto' statement or a 'switch' statement jumps forward
6925     across the initialization of a variable, or jumps backward to a
6926     label after the variable has been initialized.  This only warns
6927     about variables that are initialized when they are declared.  This
6928     warning is only supported for C and Objective-C; in C++ this sort
6929     of branch is an error in any case.
6930
6931     '-Wjump-misses-init' is included in '-Wc++-compat'.  It can be
6932     disabled with the '-Wno-jump-misses-init' option.
6933
6934'-Wsign-compare'
6935     Warn when a comparison between signed and unsigned values could
6936     produce an incorrect result when the signed value is converted to
6937     unsigned.  In C++, this warning is also enabled by '-Wall'.  In C,
6938     it is also enabled by '-Wextra'.
6939
6940'-Wsign-conversion'
6941     Warn for implicit conversions that may change the sign of an
6942     integer value, like assigning a signed integer expression to an
6943     unsigned integer variable.  An explicit cast silences the warning.
6944     In C, this option is enabled also by '-Wconversion'.
6945
6946'-Wfloat-conversion'
6947     Warn for implicit conversions that reduce the precision of a real
6948     value.  This includes conversions from real to integer, and from
6949     higher precision real to lower precision real values.  This option
6950     is also enabled by '-Wconversion'.
6951
6952'-Wno-scalar-storage-order'
6953     Do not warn on suspicious constructs involving reverse scalar
6954     storage order.
6955
6956'-Wsizeof-pointer-div'
6957     Warn for suspicious divisions of two sizeof expressions that divide
6958     the pointer size by the element size, which is the usual way to
6959     compute the array size but won't work out correctly with pointers.
6960     This warning warns e.g. about 'sizeof (ptr) / sizeof (ptr[0])' if
6961     'ptr' is not an array, but a pointer.  This warning is enabled by
6962     '-Wall'.
6963
6964'-Wsizeof-pointer-memaccess'
6965     Warn for suspicious length parameters to certain string and memory
6966     built-in functions if the argument uses 'sizeof'.  This warning
6967     triggers for example for 'memset (ptr, 0, sizeof (ptr));' if 'ptr'
6968     is not an array, but a pointer, and suggests a possible fix, or
6969     about 'memcpy (&foo, ptr, sizeof (&foo));'.
6970     '-Wsizeof-pointer-memaccess' also warns about calls to bounded
6971     string copy functions like 'strncat' or 'strncpy' that specify as
6972     the bound a 'sizeof' expression of the source array.  For example,
6973     in the following function the call to 'strncat' specifies the size
6974     of the source string as the bound.  That is almost certainly a
6975     mistake and so the call is diagnosed.
6976          void make_file (const char *name)
6977          {
6978            char path[PATH_MAX];
6979            strncpy (path, name, sizeof path - 1);
6980            strncat (path, ".text", sizeof ".text");
6981            ...
6982          }
6983
6984     The '-Wsizeof-pointer-memaccess' option is enabled by '-Wall'.
6985
6986'-Wno-sizeof-array-argument'
6987     Do not warn when the 'sizeof' operator is applied to a parameter
6988     that is declared as an array in a function definition.  This
6989     warning is enabled by default for C and C++ programs.
6990
6991'-Wmemset-elt-size'
6992     Warn for suspicious calls to the 'memset' built-in function, if the
6993     first argument references an array, and the third argument is a
6994     number equal to the number of elements, but not equal to the size
6995     of the array in memory.  This indicates that the user has omitted a
6996     multiplication by the element size.  This warning is enabled by
6997     '-Wall'.
6998
6999'-Wmemset-transposed-args'
7000     Warn for suspicious calls to the 'memset' built-in function where
7001     the second argument is not zero and the third argument is zero.
7002     For example, the call 'memset (buf, sizeof buf, 0)' is diagnosed
7003     because 'memset (buf, 0, sizeof buf)' was meant instead.  The
7004     diagnostic is only emitted if the third argument is a literal zero.
7005     Otherwise, if it is an expression that is folded to zero, or a cast
7006     of zero to some type, it is far less likely that the arguments have
7007     been mistakenly transposed and no warning is emitted.  This warning
7008     is enabled by '-Wall'.
7009
7010'-Waddress'
7011     Warn about suspicious uses of memory addresses.  These include
7012     using the address of a function in a conditional expression, such
7013     as 'void func(void); if (func)', and comparisons against the memory
7014     address of a string literal, such as 'if (x == "abc")'.  Such uses
7015     typically indicate a programmer error: the address of a function
7016     always evaluates to true, so their use in a conditional usually
7017     indicate that the programmer forgot the parentheses in a function
7018     call; and comparisons against string literals result in unspecified
7019     behavior and are not portable in C, so they usually indicate that
7020     the programmer intended to use 'strcmp'.  This warning is enabled
7021     by '-Wall'.
7022
7023'-Wno-address-of-packed-member'
7024     Do not warn when the address of packed member of struct or union is
7025     taken, which usually results in an unaligned pointer value.  This
7026     is enabled by default.
7027
7028'-Wlogical-op'
7029     Warn about suspicious uses of logical operators in expressions.
7030     This includes using logical operators in contexts where a bit-wise
7031     operator is likely to be expected.  Also warns when the operands of
7032     a logical operator are the same:
7033          extern int a;
7034          if (a < 0 && a < 0) { ... }
7035
7036'-Wlogical-not-parentheses'
7037     Warn about logical not used on the left hand side operand of a
7038     comparison.  This option does not warn if the right operand is
7039     considered to be a boolean expression.  Its purpose is to detect
7040     suspicious code like the following:
7041          int a;
7042          ...
7043          if (!a > 1) { ... }
7044
7045     It is possible to suppress the warning by wrapping the LHS into
7046     parentheses:
7047          if ((!a) > 1) { ... }
7048
7049     This warning is enabled by '-Wall'.
7050
7051'-Waggregate-return'
7052     Warn if any functions that return structures or unions are defined
7053     or called.  (In languages where you can return an array, this also
7054     elicits a warning.)
7055
7056'-Wno-aggressive-loop-optimizations'
7057     Warn if in a loop with constant number of iterations the compiler
7058     detects undefined behavior in some statement during one or more of
7059     the iterations.
7060
7061'-Wno-attributes'
7062     Do not warn if an unexpected '__attribute__' is used, such as
7063     unrecognized attributes, function attributes applied to variables,
7064     etc.  This does not stop errors for incorrect use of supported
7065     attributes.
7066
7067'-Wno-builtin-declaration-mismatch'
7068     Warn if a built-in function is declared with an incompatible
7069     signature or as a non-function, or when a built-in function
7070     declared with a type that does not include a prototype is called
7071     with arguments whose promoted types do not match those expected by
7072     the function.  When '-Wextra' is specified, also warn when a
7073     built-in function that takes arguments is declared without a
7074     prototype.  The '-Wbuiltin-declaration-mismatch' warning is enabled
7075     by default.  To avoid the warning include the appropriate header to
7076     bring the prototypes of built-in functions into scope.
7077
7078     For example, the call to 'memset' below is diagnosed by the warning
7079     because the function expects a value of type 'size_t' as its
7080     argument but the type of '32' is 'int'.  With '-Wextra', the
7081     declaration of the function is diagnosed as well.
7082          extern void* memset ();
7083          void f (void *d)
7084          {
7085            memset (d, '\0', 32);
7086          }
7087
7088'-Wno-builtin-macro-redefined'
7089     Do not warn if certain built-in macros are redefined.  This
7090     suppresses warnings for redefinition of '__TIMESTAMP__',
7091     '__TIME__', '__DATE__', '__FILE__', and '__BASE_FILE__'.
7092
7093'-Wstrict-prototypes (C and Objective-C only)'
7094     Warn if a function is declared or defined without specifying the
7095     argument types.  (An old-style function definition is permitted
7096     without a warning if preceded by a declaration that specifies the
7097     argument types.)
7098
7099'-Wold-style-declaration (C and Objective-C only)'
7100     Warn for obsolescent usages, according to the C Standard, in a
7101     declaration.  For example, warn if storage-class specifiers like
7102     'static' are not the first things in a declaration.  This warning
7103     is also enabled by '-Wextra'.
7104
7105'-Wold-style-definition (C and Objective-C only)'
7106     Warn if an old-style function definition is used.  A warning is
7107     given even if there is a previous prototype.  A definition using
7108     '()' is not considered an old-style definition in C2X mode, because
7109     it is equivalent to '(void)' in that case, but is considered an
7110     old-style definition for older standards.
7111
7112'-Wmissing-parameter-type (C and Objective-C only)'
7113     A function parameter is declared without a type specifier in
7114     K&R-style functions:
7115
7116          void foo(bar) { }
7117
7118     This warning is also enabled by '-Wextra'.
7119
7120'-Wmissing-prototypes (C and Objective-C only)'
7121     Warn if a global function is defined without a previous prototype
7122     declaration.  This warning is issued even if the definition itself
7123     provides a prototype.  Use this option to detect global functions
7124     that do not have a matching prototype declaration in a header file.
7125     This option is not valid for C++ because all function declarations
7126     provide prototypes and a non-matching declaration declares an
7127     overload rather than conflict with an earlier declaration.  Use
7128     '-Wmissing-declarations' to detect missing declarations in C++.
7129
7130'-Wmissing-declarations'
7131     Warn if a global function is defined without a previous
7132     declaration.  Do so even if the definition itself provides a
7133     prototype.  Use this option to detect global functions that are not
7134     declared in header files.  In C, no warnings are issued for
7135     functions with previous non-prototype declarations; use
7136     '-Wmissing-prototypes' to detect missing prototypes.  In C++, no
7137     warnings are issued for function templates, or for inline
7138     functions, or for functions in anonymous namespaces.
7139
7140'-Wmissing-field-initializers'
7141     Warn if a structure's initializer has some fields missing.  For
7142     example, the following code causes such a warning, because 'x.h' is
7143     implicitly zero:
7144
7145          struct s { int f, g, h; };
7146          struct s x = { 3, 4 };
7147
7148     This option does not warn about designated initializers, so the
7149     following modification does not trigger a warning:
7150
7151          struct s { int f, g, h; };
7152          struct s x = { .f = 3, .g = 4 };
7153
7154     In C this option does not warn about the universal zero initializer
7155     '{ 0 }':
7156
7157          struct s { int f, g, h; };
7158          struct s x = { 0 };
7159
7160     Likewise, in C++ this option does not warn about the empty { }
7161     initializer, for example:
7162
7163          struct s { int f, g, h; };
7164          s x = { };
7165
7166     This warning is included in '-Wextra'.  To get other '-Wextra'
7167     warnings without this one, use '-Wextra
7168     -Wno-missing-field-initializers'.
7169
7170'-Wno-multichar'
7171     Do not warn if a multicharacter constant (''FOOF'') is used.
7172     Usually they indicate a typo in the user's code, as they have
7173     implementation-defined values, and should not be used in portable
7174     code.
7175
7176'-Wnormalized=[none|id|nfc|nfkc]'
7177     In ISO C and ISO C++, two identifiers are different if they are
7178     different sequences of characters.  However, sometimes when
7179     characters outside the basic ASCII character set are used, you can
7180     have two different character sequences that look the same.  To
7181     avoid confusion, the ISO 10646 standard sets out some
7182     "normalization rules" which when applied ensure that two sequences
7183     that look the same are turned into the same sequence.  GCC can warn
7184     you if you are using identifiers that have not been normalized;
7185     this option controls that warning.
7186
7187     There are four levels of warning supported by GCC.  The default is
7188     '-Wnormalized=nfc', which warns about any identifier that is not in
7189     the ISO 10646 "C" normalized form, "NFC". NFC is the recommended
7190     form for most uses.  It is equivalent to '-Wnormalized'.
7191
7192     Unfortunately, there are some characters allowed in identifiers by
7193     ISO C and ISO C++ that, when turned into NFC, are not allowed in
7194     identifiers.  That is, there's no way to use these symbols in
7195     portable ISO C or C++ and have all your identifiers in NFC.
7196     '-Wnormalized=id' suppresses the warning for these characters.  It
7197     is hoped that future versions of the standards involved will
7198     correct this, which is why this option is not the default.
7199
7200     You can switch the warning off for all characters by writing
7201     '-Wnormalized=none' or '-Wno-normalized'.  You should only do this
7202     if you are using some other normalization scheme (like "D"),
7203     because otherwise you can easily create bugs that are literally
7204     impossible to see.
7205
7206     Some characters in ISO 10646 have distinct meanings but look
7207     identical in some fonts or display methodologies, especially once
7208     formatting has been applied.  For instance '\u207F', "SUPERSCRIPT
7209     LATIN SMALL LETTER N", displays just like a regular 'n' that has
7210     been placed in a superscript.  ISO 10646 defines the "NFKC"
7211     normalization scheme to convert all these into a standard form as
7212     well, and GCC warns if your code is not in NFKC if you use
7213     '-Wnormalized=nfkc'.  This warning is comparable to warning about
7214     every identifier that contains the letter O because it might be
7215     confused with the digit 0, and so is not the default, but may be
7216     useful as a local coding convention if the programming environment
7217     cannot be fixed to display these characters distinctly.
7218
7219'-Wno-attribute-warning'
7220     Do not warn about usage of functions (*note Function Attributes::)
7221     declared with 'warning' attribute.  By default, this warning is
7222     enabled.  '-Wno-attribute-warning' can be used to disable the
7223     warning or '-Wno-error=attribute-warning' can be used to disable
7224     the error when compiled with '-Werror' flag.
7225
7226'-Wno-deprecated'
7227     Do not warn about usage of deprecated features.  *Note Deprecated
7228     Features::.
7229
7230'-Wno-deprecated-declarations'
7231     Do not warn about uses of functions (*note Function Attributes::),
7232     variables (*note Variable Attributes::), and types (*note Type
7233     Attributes::) marked as deprecated by using the 'deprecated'
7234     attribute.
7235
7236'-Wno-overflow'
7237     Do not warn about compile-time overflow in constant expressions.
7238
7239'-Wno-odr'
7240     Warn about One Definition Rule violations during link-time
7241     optimization.  Enabled by default.
7242
7243'-Wopenmp-simd'
7244     Warn if the vectorizer cost model overrides the OpenMP simd
7245     directive set by user.  The '-fsimd-cost-model=unlimited' option
7246     can be used to relax the cost model.
7247
7248'-Woverride-init (C and Objective-C only)'
7249     Warn if an initialized field without side effects is overridden
7250     when using designated initializers (*note Designated Initializers:
7251     Designated Inits.).
7252
7253     This warning is included in '-Wextra'.  To get other '-Wextra'
7254     warnings without this one, use '-Wextra -Wno-override-init'.
7255
7256'-Wno-override-init-side-effects (C and Objective-C only)'
7257     Do not warn if an initialized field with side effects is overridden
7258     when using designated initializers (*note Designated Initializers:
7259     Designated Inits.).  This warning is enabled by default.
7260
7261'-Wpacked'
7262     Warn if a structure is given the packed attribute, but the packed
7263     attribute has no effect on the layout or size of the structure.
7264     Such structures may be mis-aligned for little benefit.  For
7265     instance, in this code, the variable 'f.x' in 'struct bar' is
7266     misaligned even though 'struct bar' does not itself have the packed
7267     attribute:
7268
7269          struct foo {
7270            int x;
7271            char a, b, c, d;
7272          } __attribute__((packed));
7273          struct bar {
7274            char z;
7275            struct foo f;
7276          };
7277
7278'-Wnopacked-bitfield-compat'
7279     The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' attribute on
7280     bit-fields of type 'char'.  This was fixed in GCC 4.4 but the
7281     change can lead to differences in the structure layout.  GCC
7282     informs you when the offset of such a field has changed in GCC 4.4.
7283     For example there is no longer a 4-bit padding between field 'a'
7284     and 'b' in this structure:
7285
7286          struct foo
7287          {
7288            char a:4;
7289            char b:8;
7290          } __attribute__ ((packed));
7291
7292     This warning is enabled by default.  Use
7293     '-Wno-packed-bitfield-compat' to disable this warning.
7294
7295'-Wpacked-not-aligned (C, C++, Objective-C and Objective-C++ only)'
7296     Warn if a structure field with explicitly specified alignment in a
7297     packed struct or union is misaligned.  For example, a warning will
7298     be issued on 'struct S', like, 'warning: alignment 1 of 'struct S'
7299     is less than 8', in this code:
7300
7301          struct __attribute__ ((aligned (8))) S8 { char a[8]; };
7302          struct __attribute__ ((packed)) S {
7303            struct S8 s8;
7304          };
7305
7306     This warning is enabled by '-Wall'.
7307
7308'-Wpadded'
7309     Warn if padding is included in a structure, either to align an
7310     element of the structure or to align the whole structure.
7311     Sometimes when this happens it is possible to rearrange the fields
7312     of the structure to reduce the padding and so make the structure
7313     smaller.
7314
7315'-Wredundant-decls'
7316     Warn if anything is declared more than once in the same scope, even
7317     in cases where multiple declaration is valid and changes nothing.
7318
7319'-Wrestrict'
7320     Warn when an object referenced by a 'restrict'-qualified parameter
7321     (or, in C++, a '__restrict'-qualified parameter) is aliased by
7322     another argument, or when copies between such objects overlap.  For
7323     example, the call to the 'strcpy' function below attempts to
7324     truncate the string by replacing its initial characters with the
7325     last four.  However, because the call writes the terminating NUL
7326     into 'a[4]', the copies overlap and the call is diagnosed.
7327
7328          void foo (void)
7329          {
7330            char a[] = "abcd1234";
7331            strcpy (a, a + 4);
7332            ...
7333          }
7334     The '-Wrestrict' option detects some instances of simple overlap
7335     even without optimization but works best at '-O2' and above.  It is
7336     included in '-Wall'.
7337
7338'-Wnested-externs (C and Objective-C only)'
7339     Warn if an 'extern' declaration is encountered within a function.
7340
7341'-Winline'
7342     Warn if a function that is declared as inline cannot be inlined.
7343     Even with this option, the compiler does not warn about failures to
7344     inline functions declared in system headers.
7345
7346     The compiler uses a variety of heuristics to determine whether or
7347     not to inline a function.  For example, the compiler takes into
7348     account the size of the function being inlined and the amount of
7349     inlining that has already been done in the current function.
7350     Therefore, seemingly insignificant changes in the source program
7351     can cause the warnings produced by '-Winline' to appear or
7352     disappear.
7353
7354'-Wint-in-bool-context'
7355     Warn for suspicious use of integer values where boolean values are
7356     expected, such as conditional expressions (?:) using non-boolean
7357     integer constants in boolean context, like 'if (a <= b ? 2 : 3)'.
7358     Or left shifting of signed integers in boolean context, like 'for
7359     (a = 0; 1 << a; a++);'.  Likewise for all kinds of multiplications
7360     regardless of the data type.  This warning is enabled by '-Wall'.
7361
7362'-Wno-int-to-pointer-cast'
7363     Suppress warnings from casts to pointer type of an integer of a
7364     different size.  In C++, casting to a pointer type of smaller size
7365     is an error.  'Wint-to-pointer-cast' is enabled by default.
7366
7367'-Wno-pointer-to-int-cast (C and Objective-C only)'
7368     Suppress warnings from casts from a pointer to an integer type of a
7369     different size.
7370
7371'-Winvalid-pch'
7372     Warn if a precompiled header (*note Precompiled Headers::) is found
7373     in the search path but cannot be used.
7374
7375'-Wlong-long'
7376     Warn if 'long long' type is used.  This is enabled by either
7377     '-Wpedantic' or '-Wtraditional' in ISO C90 and C++98 modes.  To
7378     inhibit the warning messages, use '-Wno-long-long'.
7379
7380'-Wvariadic-macros'
7381     Warn if variadic macros are used in ISO C90 mode, or if the GNU
7382     alternate syntax is used in ISO C99 mode.  This is enabled by
7383     either '-Wpedantic' or '-Wtraditional'.  To inhibit the warning
7384     messages, use '-Wno-variadic-macros'.
7385
7386'-Wno-varargs'
7387     Do not warn upon questionable usage of the macros used to handle
7388     variable arguments like 'va_start'.  These warnings are enabled by
7389     default.
7390
7391'-Wvector-operation-performance'
7392     Warn if vector operation is not implemented via SIMD capabilities
7393     of the architecture.  Mainly useful for the performance tuning.
7394     Vector operation can be implemented 'piecewise', which means that
7395     the scalar operation is performed on every vector element; 'in
7396     parallel', which means that the vector operation is implemented
7397     using scalars of wider type, which normally is more performance
7398     efficient; and 'as a single scalar', which means that vector fits
7399     into a scalar type.
7400
7401'-Wvla'
7402     Warn if a variable-length array is used in the code.  '-Wno-vla'
7403     prevents the '-Wpedantic' warning of the variable-length array.
7404
7405'-Wvla-larger-than=BYTE-SIZE'
7406     If this option is used, the compiler warns for declarations of
7407     variable-length arrays whose size is either unbounded, or bounded
7408     by an argument that allows the array size to exceed BYTE-SIZE
7409     bytes.  This is similar to how '-Walloca-larger-than='BYTE-SIZE
7410     works, but with variable-length arrays.
7411
7412     Note that GCC may optimize small variable-length arrays of a known
7413     value into plain arrays, so this warning may not get triggered for
7414     such arrays.
7415
7416     '-Wvla-larger-than=''PTRDIFF_MAX' is enabled by default but is
7417     typically only effective when '-ftree-vrp' is active (default for
7418     '-O2' and above).
7419
7420     See also '-Walloca-larger-than=BYTE-SIZE'.
7421
7422'-Wno-vla-larger-than'
7423     Disable '-Wvla-larger-than=' warnings.  The option is equivalent to
7424     '-Wvla-larger-than=''SIZE_MAX' or larger.
7425
7426'-Wvolatile-register-var'
7427     Warn if a register variable is declared volatile.  The volatile
7428     modifier does not inhibit all optimizations that may eliminate
7429     reads and/or writes to register variables.  This warning is enabled
7430     by '-Wall'.
7431
7432'-Wdisabled-optimization'
7433     Warn if a requested optimization pass is disabled.  This warning
7434     does not generally indicate that there is anything wrong with your
7435     code; it merely indicates that GCC's optimizers are unable to
7436     handle the code effectively.  Often, the problem is that your code
7437     is too big or too complex; GCC refuses to optimize programs when
7438     the optimization itself is likely to take inordinate amounts of
7439     time.
7440
7441'-Wpointer-sign (C and Objective-C only)'
7442     Warn for pointer argument passing or assignment with different
7443     signedness.  This option is only supported for C and Objective-C.
7444     It is implied by '-Wall' and by '-Wpedantic', which can be disabled
7445     with '-Wno-pointer-sign'.
7446
7447'-Wstack-protector'
7448     This option is only active when '-fstack-protector' is active.  It
7449     warns about functions that are not protected against stack
7450     smashing.
7451
7452'-Woverlength-strings'
7453     Warn about string constants that are longer than the "minimum
7454     maximum" length specified in the C standard.  Modern compilers
7455     generally allow string constants that are much longer than the
7456     standard's minimum limit, but very portable programs should avoid
7457     using longer strings.
7458
7459     The limit applies _after_ string constant concatenation, and does
7460     not count the trailing NUL.  In C90, the limit was 509 characters;
7461     in C99, it was raised to 4095.  C++98 does not specify a normative
7462     minimum maximum, so we do not diagnose overlength strings in C++.
7463
7464     This option is implied by '-Wpedantic', and can be disabled with
7465     '-Wno-overlength-strings'.
7466
7467'-Wunsuffixed-float-constants (C and Objective-C only)'
7468
7469     Issue a warning for any floating constant that does not have a
7470     suffix.  When used together with '-Wsystem-headers' it warns about
7471     such constants in system header files.  This can be useful when
7472     preparing code to use with the 'FLOAT_CONST_DECIMAL64' pragma from
7473     the decimal floating-point extension to C99.
7474
7475'-Wno-lto-type-mismatch'
7476
7477     During the link-time optimization, do not warn about type
7478     mismatches in global declarations from different compilation units.
7479     Requires '-flto' to be enabled.  Enabled by default.
7480
7481'-Wno-designated-init (C and Objective-C only)'
7482     Suppress warnings when a positional initializer is used to
7483     initialize a structure that has been marked with the
7484     'designated_init' attribute.
7485
7486'-Wno-hsa'
7487     Do not warn when HSAIL cannot be emitted for the compiled function
7488     or OpenMP construct.  These warnings are enabled by default.
7489
7490
7491File: gcc.info,  Node: Static Analyzer Options,  Next: Debugging Options,  Prev: Warning Options,  Up: Invoking GCC
7492
74933.9 Options That Control Static Analysis
7494========================================
7495
7496'-fanalyzer'
7497     This option enables an static analysis of program flow which looks
7498     for "interesting" interprocedural paths through the code, and
7499     issues warnings for problems found on them.
7500
7501     This analysis is much more expensive than other GCC warnings.
7502
7503     Enabling this option effectively enables the following warnings:
7504
7505
7506          -Wanalyzer-double-fclose
7507          -Wanalyzer-double-free
7508          -Wanalyzer-exposure-through-output-file
7509          -Wanalyzer-file-leak
7510          -Wanalyzer-free-of-non-heap
7511          -Wanalyzer-malloc-leak
7512          -Wanalyzer-possible-null-argument
7513          -Wanalyzer-possible-null-dereference
7514          -Wanalyzer-null-argument
7515          -Wanalyzer-null-dereference
7516          -Wanalyzer-stale-setjmp-buffer
7517          -Wanalyzer-tainted-array-index
7518          -Wanalyzer-unsafe-call-within-signal-handler
7519          -Wanalyzer-use-after-free
7520          -Wanalyzer-use-of-pointer-in-stale-stack-frame
7521
7522
7523     This option is only available if GCC was configured with analyzer
7524     support enabled.
7525
7526'-Wanalyzer-too-complex'
7527     If '-fanalyzer' is enabled, the analyzer uses various heuristics to
7528     attempt to explore the control flow and data flow in the program,
7529     but these can be defeated by sufficiently complicated code.
7530
7531     By default, the analysis silently stops if the code is too
7532     complicated for the analyzer to fully explore and it reaches an
7533     internal limit.  The '-Wanalyzer-too-complex' option warns if this
7534     occurs.
7535
7536'-Wno-analyzer-double-fclose'
7537     This warning requires '-fanalyzer', which enables it; use
7538     '-Wno-analyzer-double-fclose' to disable it.
7539
7540     This diagnostic warns for paths through the code in which a 'FILE
7541     *' can have 'fclose' called on it more than once.
7542
7543'-Wno-analyzer-double-free'
7544     This warning requires '-fanalyzer', which enables it; use
7545     '-Wno-analyzer-double-free' to disable it.
7546
7547     This diagnostic warns for paths through the code in which a pointer
7548     can have 'free' called on it more than once.
7549
7550'-Wno-analyzer-exposure-through-output-file'
7551     This warning requires '-fanalyzer', which enables it; use
7552     '-Wno-analyzer-exposure-through-output-file' to disable it.
7553
7554     This diagnostic warns for paths through the code in which a
7555     security-sensitive value is written to an output file (such as
7556     writing a password to a log file).
7557
7558'-Wno-analyzer-file-leak'
7559     This warning requires '-fanalyzer', which enables it; use
7560     '-Wno-analyzer-file-leak' to disable it.
7561
7562     This diagnostic warns for paths through the code in which a
7563     '<stdio.h>' 'FILE *' stream object is leaked.
7564
7565'-Wno-analyzer-free-of-non-heap'
7566     This warning requires '-fanalyzer', which enables it; use
7567     '-Wno-analyzer-free-of-non-heap' to disable it.
7568
7569     This diagnostic warns for paths through the code in which 'free' is
7570     called on a non-heap pointer (e.g.  an on-stack buffer, or a
7571     global).
7572
7573'-Wno-analyzer-malloc-leak'
7574     This warning requires '-fanalyzer', which enables it; use
7575     '-Wno-analyzer-malloc-leak' to disable it.
7576
7577     This diagnostic warns for paths through the code in which a pointer
7578     allocated via 'malloc' is leaked.
7579
7580'-Wno-analyzer-possible-null-argument'
7581     This warning requires '-fanalyzer', which enables it; use
7582     '-Wno-analyzer-possible-null-argument' to disable it.
7583
7584     This diagnostic warns for paths through the code in which a
7585     possibly-NULL value is passed to a function argument marked with
7586     '__attribute__((nonnull))' as requiring a non-NULL value.
7587
7588'-Wno-analyzer-possible-null-dereference'
7589     This warning requires '-fanalyzer', which enables it; use
7590     '-Wno-analyzer-possible-null-dereference' to disable it.
7591
7592     This diagnostic warns for paths through the code in which a
7593     possibly-NULL value is dereferenced.
7594
7595'-Wno-analyzer-null-argument'
7596     This warning requires '-fanalyzer', which enables it; use
7597     '-Wno-analyzer-null-argument' to disable it.
7598
7599     This diagnostic warns for paths through the code in which a value
7600     known to be NULL is passed to a function argument marked with
7601     '__attribute__((nonnull))' as requiring a non-NULL value.
7602
7603'-Wno-analyzer-null-dereference'
7604     This warning requires '-fanalyzer', which enables it; use
7605     '-Wno-analyzer-null-dereference' to disable it.
7606
7607     This diagnostic warns for paths through the code in which a value
7608     known to be NULL is dereferenced.
7609
7610'-Wno-analyzer-stale-setjmp-buffer'
7611     This warning requires '-fanalyzer', which enables it; use
7612     '-Wno-analyzer-stale-setjmp-buffer' to disable it.
7613
7614     This diagnostic warns for paths through the code in which 'longjmp'
7615     is called to rewind to a 'jmp_buf' relating to a 'setjmp' call in a
7616     function that has returned.
7617
7618     When 'setjmp' is called on a 'jmp_buf' to record a rewind location,
7619     it records the stack frame.  The stack frame becomes invalid when
7620     the function containing the 'setjmp' call returns.  Attempting to
7621     rewind to it via 'longjmp' would reference a stack frame that no
7622     longer exists, and likely lead to a crash (or worse).
7623
7624'-Wno-analyzer-tainted-array-index'
7625     This warning requires both '-fanalyzer' and
7626     '-fanalyzer-checker=taint' to enable it; use
7627     '-Wno-analyzer-tainted-array-index' to disable it.
7628
7629     This diagnostic warns for paths through the code in which a value
7630     that could be under an attacker's control is used as the index of
7631     an array access without being sanitized.
7632
7633'-Wno-analyzer-unsafe-call-within-signal-handler'
7634     This warning requires '-fanalyzer', which enables it; use
7635     '-Wno-analyzer-unsafe-call-within-signal-handler' to disable it.
7636
7637     This diagnostic warns for paths through the code in which a
7638     function known to be async-signal-unsafe (such as 'fprintf') is
7639     called from a signal handler.
7640
7641'-Wno-analyzer-use-after-free'
7642     This warning requires '-fanalyzer', which enables it; use
7643     '-Wno-analyzer-use-after-free' to disable it.
7644
7645     This diagnostic warns for paths through the code in which a pointer
7646     is used after 'free' is called on it.
7647
7648'-Wno-analyzer-use-of-pointer-in-stale-stack-frame'
7649     This warning requires '-fanalyzer', which enables it; use
7650     '-Wno-analyzer-use-of-pointer-in-stale-stack-frame' to disable it.
7651
7652     This diagnostic warns for paths through the code in which a pointer
7653     is dereferenced that points to a variable in a stale stack frame.
7654
7655 Pertinent parameters for controlling the exploration are: '--param
7656analyzer-bb-explosion-factor=VALUE', '--param
7657analyzer-max-enodes-per-program-point=VALUE', '--param
7658analyzer-max-recursion-depth=VALUE', and '--param
7659analyzer-min-snodes-for-call-summary=VALUE'.
7660
7661 The following options control the analyzer.
7662
7663'-fanalyzer-call-summaries'
7664     Simplify interprocedural analysis by computing the effect of
7665     certain calls, rather than exploring all paths through the function
7666     from callsite to each possible return.
7667
7668     If enabled, call summaries are only used for functions with more
7669     than one call site, and that are sufficiently complicated (as per
7670     '--param analyzer-min-snodes-for-call-summary=VALUE').
7671
7672'-fanalyzer-checker=NAME'
7673     Restrict the analyzer to run just the named checker, and enable it.
7674
7675     Some checkers are disabled by default (even with '-fanalyzer'),
7676     such as the 'taint' checker that implements
7677     '-Wanalyzer-tainted-array-index', and this option is required to
7678     enable them.
7679
7680'-fanalyzer-fine-grained'
7681     This option is intended for analyzer developers.
7682
7683     Internally the analyzer builds an "exploded graph" that combines
7684     control flow graphs with data flow information.
7685
7686     By default, an edge in this graph can contain the effects of a run
7687     of multiple statements within a basic block.  With
7688     '-fanalyzer-fine-grained', each statement gets its own edge.
7689
7690'-fanalyzer-show-duplicate-count'
7691     This option is intended for analyzer developers: if multiple
7692     diagnostics have been detected as being duplicates of each other,
7693     it emits a note when reporting the best diagnostic, giving the
7694     number of additional diagnostics that were suppressed by the
7695     deduplication logic.
7696
7697'-fno-analyzer-state-merge'
7698     This option is intended for analyzer developers.
7699
7700     By default the analyzer attempts to simplify analysis by merging
7701     sufficiently similar states at each program point as it builds its
7702     "exploded graph".  With '-fno-analyzer-state-merge' this merging
7703     can be suppressed, for debugging state-handling issues.
7704
7705'-fno-analyzer-state-purge'
7706     This option is intended for analyzer developers.
7707
7708     By default the analyzer attempts to simplify analysis by purging
7709     aspects of state at a program point that appear to no longer be
7710     relevant e.g.  the values of locals that aren't accessed later in
7711     the function and which aren't relevant to leak analysis.
7712
7713     With '-fno-analyzer-state-purge' this purging of state can be
7714     suppressed, for debugging state-handling issues.
7715
7716'-fanalyzer-transitivity'
7717     This option enables transitivity of constraints within the
7718     analyzer.
7719
7720'-fanalyzer-verbose-edges'
7721     This option is intended for analyzer developers.  It enables more
7722     verbose, lower-level detail in the descriptions of control flow
7723     within diagnostic paths.
7724
7725'-fanalyzer-verbose-state-changes'
7726     This option is intended for analyzer developers.  It enables more
7727     verbose, lower-level detail in the descriptions of events relating
7728     to state machines within diagnostic paths.
7729
7730'-fanalyzer-verbosity=LEVEL'
7731     This option controls the complexity of the control flow paths that
7732     are emitted for analyzer diagnostics.
7733
7734     The LEVEL can be one of:
7735
7736     '0'
7737          At this level, interprocedural call and return events are
7738          displayed, along with the most pertinent state-change events
7739          relating to a diagnostic.  For example, for a double-'free'
7740          diagnostic, both calls to 'free' will be shown.
7741
7742     '1'
7743          As per the previous level, but also show events for the entry
7744          to each function.
7745
7746     '2'
7747          As per the previous level, but also show events relating to
7748          control flow that are significant to triggering the issue
7749          (e.g.  "true path taken" at a conditional).
7750
7751          This level is the default.
7752
7753     '3'
7754          As per the previous level, but show all control flow events,
7755          not just significant ones.
7756
7757     '4'
7758          This level is intended for analyzer developers; it adds
7759          various other events intended for debugging the analyzer.
7760
7761'-fdump-analyzer'
7762     Dump internal details about what the analyzer is doing to
7763     'FILE.analyzer.txt'.  This option is overridden by
7764     '-fdump-analyzer-stderr'.
7765
7766'-fdump-analyzer-stderr'
7767     Dump internal details about what the analyzer is doing to stderr.
7768     This option overrides '-fdump-analyzer'.
7769
7770'-fdump-analyzer-callgraph'
7771     Dump a representation of the call graph suitable for viewing with
7772     GraphViz to 'FILE.callgraph.dot'.
7773
7774'-fdump-analyzer-exploded-graph'
7775     Dump a representation of the "exploded graph" suitable for viewing
7776     with GraphViz to 'FILE.eg.dot'.  Nodes are color-coded based on
7777     state-machine states to emphasize state changes.
7778
7779'-fdump-analyzer-exploded-nodes'
7780     Emit diagnostics showing where nodes in the "exploded graph" are in
7781     relation to the program source.
7782
7783'-fdump-analyzer-exploded-nodes-2'
7784     Dump a textual representation of the "exploded graph" to
7785     'FILE.eg.txt'.
7786
7787'-fdump-analyzer-exploded-nodes-3'
7788     Dump a textual representation of the "exploded graph" to one dump
7789     file per node, to 'FILE.eg-ID.txt'.  This is typically a large
7790     number of dump files.
7791
7792'-fdump-analyzer-state-purge'
7793     As per '-fdump-analyzer-supergraph', dump a representation of the
7794     "supergraph" suitable for viewing with GraphViz, but annotate the
7795     graph with information on what state will be purged at each node.
7796     The graph is written to 'FILE.state-purge.dot'.
7797
7798'-fdump-analyzer-supergraph'
7799     Dump representations of the "supergraph" suitable for viewing with
7800     GraphViz to 'FILE.supergraph.dot' and to 'FILE.supergraph-eg.dot'.
7801     These show all of the control flow graphs in the program, with
7802     interprocedural edges for calls and returns.  The second dump
7803     contains annotations showing nodes in the "exploded graph" and
7804     diagnostics associated with them.
7805
7806
7807File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Static Analyzer Options,  Up: Invoking GCC
7808
78093.10 Options for Debugging Your Program
7810=======================================
7811
7812To tell GCC to emit extra information for use by a debugger, in almost
7813all cases you need only to add '-g' to your other options.
7814
7815 GCC allows you to use '-g' with '-O'.  The shortcuts taken by optimized
7816code may occasionally be surprising: some variables you declared may not
7817exist at all; flow of control may briefly move where you did not expect
7818it; some statements may not be executed because they compute constant
7819results or their values are already at hand; some statements may execute
7820in different places because they have been moved out of loops.
7821Nevertheless it is possible to debug optimized output.  This makes it
7822reasonable to use the optimizer for programs that might have bugs.
7823
7824 If you are not using some other optimization option, consider using
7825'-Og' (*note Optimize Options::) with '-g'.  With no '-O' option at all,
7826some compiler passes that collect information useful for debugging do
7827not run at all, so that '-Og' may result in a better debugging
7828experience.
7829
7830'-g'
7831     Produce debugging information in the operating system's native
7832     format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
7833     debugging information.
7834
7835     On most systems that use stabs format, '-g' enables use of extra
7836     debugging information that only GDB can use; this extra information
7837     makes debugging work better in GDB but probably makes other
7838     debuggers crash or refuse to read the program.  If you want to
7839     control for certain whether to generate the extra information, use
7840     '-gstabs+', '-gstabs', '-gxcoff+', '-gxcoff', or '-gvms' (see
7841     below).
7842
7843'-ggdb'
7844     Produce debugging information for use by GDB.  This means to use
7845     the most expressive format available (DWARF, stabs, or the native
7846     format if neither of those are supported), including GDB extensions
7847     if at all possible.
7848
7849'-gdwarf'
7850'-gdwarf-VERSION'
7851     Produce debugging information in DWARF format (if that is
7852     supported).  The value of VERSION may be either 2, 3, 4 or 5; the
7853     default version for most targets is 4.  DWARF Version 5 is only
7854     experimental.
7855
7856     Note that with DWARF Version 2, some ports require and always use
7857     some non-conflicting DWARF 3 extensions in the unwind tables.
7858
7859     Version 4 may require GDB 7.0 and '-fvar-tracking-assignments' for
7860     maximum benefit.
7861
7862     GCC no longer supports DWARF Version 1, which is substantially
7863     different than Version 2 and later.  For historical reasons, some
7864     other DWARF-related options such as '-fno-dwarf2-cfi-asm') retain a
7865     reference to DWARF Version 2 in their names, but apply to all
7866     currently-supported versions of DWARF.
7867
7868'-gstabs'
7869     Produce debugging information in stabs format (if that is
7870     supported), without GDB extensions.  This is the format used by DBX
7871     on most BSD systems.  On MIPS, Alpha and System V Release 4 systems
7872     this option produces stabs debugging output that is not understood
7873     by DBX.  On System V Release 4 systems this option requires the GNU
7874     assembler.
7875
7876'-gstabs+'
7877     Produce debugging information in stabs format (if that is
7878     supported), using GNU extensions understood only by the GNU
7879     debugger (GDB).  The use of these extensions is likely to make
7880     other debuggers crash or refuse to read the program.
7881
7882'-gxcoff'
7883     Produce debugging information in XCOFF format (if that is
7884     supported).  This is the format used by the DBX debugger on IBM
7885     RS/6000 systems.
7886
7887'-gxcoff+'
7888     Produce debugging information in XCOFF format (if that is
7889     supported), using GNU extensions understood only by the GNU
7890     debugger (GDB).  The use of these extensions is likely to make
7891     other debuggers crash or refuse to read the program, and may cause
7892     assemblers other than the GNU assembler (GAS) to fail with an
7893     error.
7894
7895'-gvms'
7896     Produce debugging information in Alpha/VMS debug format (if that is
7897     supported).  This is the format used by DEBUG on Alpha/VMS systems.
7898
7899'-gLEVEL'
7900'-ggdbLEVEL'
7901'-gstabsLEVEL'
7902'-gxcoffLEVEL'
7903'-gvmsLEVEL'
7904     Request debugging information and also use LEVEL to specify how
7905     much information.  The default level is 2.
7906
7907     Level 0 produces no debug information at all.  Thus, '-g0' negates
7908     '-g'.
7909
7910     Level 1 produces minimal information, enough for making backtraces
7911     in parts of the program that you don't plan to debug.  This
7912     includes descriptions of functions and external variables, and line
7913     number tables, but no information about local variables.
7914
7915     Level 3 includes extra information, such as all the macro
7916     definitions present in the program.  Some debuggers support macro
7917     expansion when you use '-g3'.
7918
7919     If you use multiple '-g' options, with or without level numbers,
7920     the last such option is the one that is effective.
7921
7922     '-gdwarf' does not accept a concatenated debug level, to avoid
7923     confusion with '-gdwarf-LEVEL'.  Instead use an additional
7924     '-gLEVEL' option to change the debug level for DWARF.
7925
7926'-fno-eliminate-unused-debug-symbols'
7927     By default, no debug information is produced for symbols that are
7928     not actually used.  Use this option if you want debug information
7929     for all symbols.
7930
7931'-femit-class-debug-always'
7932     Instead of emitting debugging information for a C++ class in only
7933     one object file, emit it in all object files using the class.  This
7934     option should be used only with debuggers that are unable to handle
7935     the way GCC normally emits debugging information for classes
7936     because using this option increases the size of debugging
7937     information by as much as a factor of two.
7938
7939'-fno-merge-debug-strings'
7940     Direct the linker to not merge together strings in the debugging
7941     information that are identical in different object files.  Merging
7942     is not supported by all assemblers or linkers.  Merging decreases
7943     the size of the debug information in the output file at the cost of
7944     increasing link processing time.  Merging is enabled by default.
7945
7946'-fdebug-prefix-map=OLD=NEW'
7947     When compiling files residing in directory 'OLD', record debugging
7948     information describing them as if the files resided in directory
7949     'NEW' instead.  This can be used to replace a build-time path with
7950     an install-time path in the debug info.  It can also be used to
7951     change an absolute path to a relative path by using '.' for NEW.
7952     This can give more reproducible builds, which are location
7953     independent, but may require an extra command to tell GDB where to
7954     find the source files.  See also '-ffile-prefix-map'.
7955
7956'-fvar-tracking'
7957     Run variable tracking pass.  It computes where variables are stored
7958     at each position in code.  Better debugging information is then
7959     generated (if the debugging information format supports this
7960     information).
7961
7962     It is enabled by default when compiling with optimization ('-Os',
7963     '-O', '-O2', ...), debugging information ('-g') and the debug info
7964     format supports it.
7965
7966'-fvar-tracking-assignments'
7967     Annotate assignments to user variables early in the compilation and
7968     attempt to carry the annotations over throughout the compilation
7969     all the way to the end, in an attempt to improve debug information
7970     while optimizing.  Use of '-gdwarf-4' is recommended along with it.
7971
7972     It can be enabled even if var-tracking is disabled, in which case
7973     annotations are created and maintained, but discarded at the end.
7974     By default, this flag is enabled together with '-fvar-tracking',
7975     except when selective scheduling is enabled.
7976
7977'-gsplit-dwarf'
7978     Separate as much DWARF debugging information as possible into a
7979     separate output file with the extension '.dwo'.  This option allows
7980     the build system to avoid linking files with debug information.  To
7981     be useful, this option requires a debugger capable of reading
7982     '.dwo' files.
7983
7984'-gdescribe-dies'
7985     Add description attributes to some DWARF DIEs that have no name
7986     attribute, such as artificial variables, external references and
7987     call site parameter DIEs.
7988
7989'-gpubnames'
7990     Generate DWARF '.debug_pubnames' and '.debug_pubtypes' sections.
7991
7992'-ggnu-pubnames'
7993     Generate '.debug_pubnames' and '.debug_pubtypes' sections in a
7994     format suitable for conversion into a GDB index.  This option is
7995     only useful with a linker that can produce GDB index version 7.
7996
7997'-fdebug-types-section'
7998     When using DWARF Version 4 or higher, type DIEs can be put into
7999     their own '.debug_types' section instead of making them part of the
8000     '.debug_info' section.  It is more efficient to put them in a
8001     separate comdat section since the linker can then remove
8002     duplicates.  But not all DWARF consumers support '.debug_types'
8003     sections yet and on some objects '.debug_types' produces larger
8004     instead of smaller debugging information.
8005
8006'-grecord-gcc-switches'
8007'-gno-record-gcc-switches'
8008     This switch causes the command-line options used to invoke the
8009     compiler that may affect code generation to be appended to the
8010     DW_AT_producer attribute in DWARF debugging information.  The
8011     options are concatenated with spaces separating them from each
8012     other and from the compiler version.  It is enabled by default.
8013     See also '-frecord-gcc-switches' for another way of storing
8014     compiler options into the object file.
8015
8016'-gstrict-dwarf'
8017     Disallow using extensions of later DWARF standard version than
8018     selected with '-gdwarf-VERSION'.  On most targets using
8019     non-conflicting DWARF extensions from later standard versions is
8020     allowed.
8021
8022'-gno-strict-dwarf'
8023     Allow using extensions of later DWARF standard version than
8024     selected with '-gdwarf-VERSION'.
8025
8026'-gas-loc-support'
8027     Inform the compiler that the assembler supports '.loc' directives.
8028     It may then use them for the assembler to generate DWARF2+ line
8029     number tables.
8030
8031     This is generally desirable, because assembler-generated
8032     line-number tables are a lot more compact than those the compiler
8033     can generate itself.
8034
8035     This option will be enabled by default if, at GCC configure time,
8036     the assembler was found to support such directives.
8037
8038'-gno-as-loc-support'
8039     Force GCC to generate DWARF2+ line number tables internally, if
8040     DWARF2+ line number tables are to be generated.
8041
8042'-gas-locview-support'
8043     Inform the compiler that the assembler supports 'view' assignment
8044     and reset assertion checking in '.loc' directives.
8045
8046     This option will be enabled by default if, at GCC configure time,
8047     the assembler was found to support them.
8048
8049'-gno-as-locview-support'
8050     Force GCC to assign view numbers internally, if
8051     '-gvariable-location-views' are explicitly requested.
8052
8053'-gcolumn-info'
8054'-gno-column-info'
8055     Emit location column information into DWARF debugging information,
8056     rather than just file and line.  This option is enabled by default.
8057
8058'-gstatement-frontiers'
8059'-gno-statement-frontiers'
8060     This option causes GCC to create markers in the internal
8061     representation at the beginning of statements, and to keep them
8062     roughly in place throughout compilation, using them to guide the
8063     output of 'is_stmt' markers in the line number table.  This is
8064     enabled by default when compiling with optimization ('-Os', '-O',
8065     '-O2', ...), and outputting DWARF 2 debug information at the normal
8066     level.
8067
8068'-gvariable-location-views'
8069'-gvariable-location-views=incompat5'
8070'-gno-variable-location-views'
8071     Augment variable location lists with progressive view numbers
8072     implied from the line number table.  This enables debug information
8073     consumers to inspect state at certain points of the program, even
8074     if no instructions associated with the corresponding source
8075     locations are present at that point.  If the assembler lacks
8076     support for view numbers in line number tables, this will cause the
8077     compiler to emit the line number table, which generally makes them
8078     somewhat less compact.  The augmented line number tables and
8079     location lists are fully backward-compatible, so they can be
8080     consumed by debug information consumers that are not aware of these
8081     augmentations, but they won't derive any benefit from them either.
8082
8083     This is enabled by default when outputting DWARF 2 debug
8084     information at the normal level, as long as there is assembler
8085     support, '-fvar-tracking-assignments' is enabled and
8086     '-gstrict-dwarf' is not.  When assembler support is not available,
8087     this may still be enabled, but it will force GCC to output internal
8088     line number tables, and if '-ginternal-reset-location-views' is not
8089     enabled, that will most certainly lead to silently mismatching
8090     location views.
8091
8092     There is a proposed representation for view numbers that is not
8093     backward compatible with the location list format introduced in
8094     DWARF 5, that can be enabled with
8095     '-gvariable-location-views=incompat5'.  This option may be removed
8096     in the future, is only provided as a reference implementation of
8097     the proposed representation.  Debug information consumers are not
8098     expected to support this extended format, and they would be
8099     rendered unable to decode location lists using it.
8100
8101'-ginternal-reset-location-views'
8102'-gno-internal-reset-location-views'
8103     Attempt to determine location views that can be omitted from
8104     location view lists.  This requires the compiler to have very
8105     accurate insn length estimates, which isn't always the case, and it
8106     may cause incorrect view lists to be generated silently when using
8107     an assembler that does not support location view lists.  The GNU
8108     assembler will flag any such error as a 'view number mismatch'.
8109     This is only enabled on ports that define a reliable estimation
8110     function.
8111
8112'-ginline-points'
8113'-gno-inline-points'
8114     Generate extended debug information for inlined functions.
8115     Location view tracking markers are inserted at inlined entry
8116     points, so that address and view numbers can be computed and output
8117     in debug information.  This can be enabled independently of
8118     location views, in which case the view numbers won't be output, but
8119     it can only be enabled along with statement frontiers, and it is
8120     only enabled by default if location views are enabled.
8121
8122'-gz[=TYPE]'
8123     Produce compressed debug sections in DWARF format, if that is
8124     supported.  If TYPE is not given, the default type depends on the
8125     capabilities of the assembler and linker used.  TYPE may be one of
8126     'none' (don't compress debug sections), 'zlib' (use zlib
8127     compression in ELF gABI format), or 'zlib-gnu' (use zlib
8128     compression in traditional GNU format).  If the linker doesn't
8129     support writing compressed debug sections, the option is rejected.
8130     Otherwise, if the assembler does not support them, '-gz' is
8131     silently ignored when producing object files.
8132
8133'-femit-struct-debug-baseonly'
8134     Emit debug information for struct-like types only when the base
8135     name of the compilation source file matches the base name of file
8136     in which the struct is defined.
8137
8138     This option substantially reduces the size of debugging
8139     information, but at significant potential loss in type information
8140     to the debugger.  See '-femit-struct-debug-reduced' for a less
8141     aggressive option.  See '-femit-struct-debug-detailed' for more
8142     detailed control.
8143
8144     This option works only with DWARF debug output.
8145
8146'-femit-struct-debug-reduced'
8147     Emit debug information for struct-like types only when the base
8148     name of the compilation source file matches the base name of file
8149     in which the type is defined, unless the struct is a template or
8150     defined in a system header.
8151
8152     This option significantly reduces the size of debugging
8153     information, with some potential loss in type information to the
8154     debugger.  See '-femit-struct-debug-baseonly' for a more aggressive
8155     option.  See '-femit-struct-debug-detailed' for more detailed
8156     control.
8157
8158     This option works only with DWARF debug output.
8159
8160'-femit-struct-debug-detailed[=SPEC-LIST]'
8161     Specify the struct-like types for which the compiler generates
8162     debug information.  The intent is to reduce duplicate struct debug
8163     information between different object files within the same program.
8164
8165     This option is a detailed version of '-femit-struct-debug-reduced'
8166     and '-femit-struct-debug-baseonly', which serves for most needs.
8167
8168     A specification has the syntax
8169     ['dir:'|'ind:']['ord:'|'gen:']('any'|'sys'|'base'|'none')
8170
8171     The optional first word limits the specification to structs that
8172     are used directly ('dir:') or used indirectly ('ind:').  A struct
8173     type is used directly when it is the type of a variable, member.
8174     Indirect uses arise through pointers to structs.  That is, when use
8175     of an incomplete struct is valid, the use is indirect.  An example
8176     is 'struct one direct; struct two * indirect;'.
8177
8178     The optional second word limits the specification to ordinary
8179     structs ('ord:') or generic structs ('gen:').  Generic structs are
8180     a bit complicated to explain.  For C++, these are non-explicit
8181     specializations of template classes, or non-template classes within
8182     the above.  Other programming languages have generics, but
8183     '-femit-struct-debug-detailed' does not yet implement them.
8184
8185     The third word specifies the source files for those structs for
8186     which the compiler should emit debug information.  The values
8187     'none' and 'any' have the normal meaning.  The value 'base' means
8188     that the base of name of the file in which the type declaration
8189     appears must match the base of the name of the main compilation
8190     file.  In practice, this means that when compiling 'foo.c', debug
8191     information is generated for types declared in that file and
8192     'foo.h', but not other header files.  The value 'sys' means those
8193     types satisfying 'base' or declared in system or compiler headers.
8194
8195     You may need to experiment to determine the best settings for your
8196     application.
8197
8198     The default is '-femit-struct-debug-detailed=all'.
8199
8200     This option works only with DWARF debug output.
8201
8202'-fno-dwarf2-cfi-asm'
8203     Emit DWARF unwind info as compiler generated '.eh_frame' section
8204     instead of using GAS '.cfi_*' directives.
8205
8206'-fno-eliminate-unused-debug-types'
8207     Normally, when producing DWARF output, GCC avoids producing debug
8208     symbol output for types that are nowhere used in the source file
8209     being compiled.  Sometimes it is useful to have GCC emit debugging
8210     information for all types declared in a compilation unit,
8211     regardless of whether or not they are actually used in that
8212     compilation unit, for example if, in the debugger, you want to cast
8213     a value to a type that is not actually used in your program (but is
8214     declared).  More often, however, this results in a significant
8215     amount of wasted space.
8216
8217
8218File: gcc.info,  Node: Optimize Options,  Next: Instrumentation Options,  Prev: Debugging Options,  Up: Invoking GCC
8219
82203.11 Options That Control Optimization
8221======================================
8222
8223These options control various sorts of optimizations.
8224
8225 Without any optimization option, the compiler's goal is to reduce the
8226cost of compilation and to make debugging produce the expected results.
8227Statements are independent: if you stop the program with a breakpoint
8228between statements, you can then assign a new value to any variable or
8229change the program counter to any other statement in the function and
8230get exactly the results you expect from the source code.
8231
8232 Turning on optimization flags makes the compiler attempt to improve the
8233performance and/or code size at the expense of compilation time and
8234possibly the ability to debug the program.
8235
8236 The compiler performs optimization based on the knowledge it has of the
8237program.  Compiling multiple files at once to a single output file mode
8238allows the compiler to use information gained from all of the files when
8239compiling each of them.
8240
8241 Not all optimizations are controlled directly by a flag.  Only
8242optimizations that have a flag are listed in this section.
8243
8244 Most optimizations are completely disabled at '-O0' or if an '-O' level
8245is not set on the command line, even if individual optimization flags
8246are specified.  Similarly, '-Og' suppresses many optimization passes.
8247
8248 Depending on the target and how GCC was configured, a slightly
8249different set of optimizations may be enabled at each '-O' level than
8250those listed here.  You can invoke GCC with '-Q --help=optimizers' to
8251find out the exact set of optimizations that are enabled at each level.
8252*Note Overall Options::, for examples.
8253
8254'-O'
8255'-O1'
8256     Optimize.  Optimizing compilation takes somewhat more time, and a
8257     lot more memory for a large function.
8258
8259     With '-O', the compiler tries to reduce code size and execution
8260     time, without performing any optimizations that take a great deal
8261     of compilation time.
8262
8263     '-O' turns on the following optimization flags:
8264
8265          -fauto-inc-dec
8266          -fbranch-count-reg
8267          -fcombine-stack-adjustments
8268          -fcompare-elim
8269          -fcprop-registers
8270          -fdce
8271          -fdefer-pop
8272          -fdelayed-branch
8273          -fdse
8274          -fforward-propagate
8275          -fguess-branch-probability
8276          -fif-conversion
8277          -fif-conversion2
8278          -finline-functions-called-once
8279          -fipa-profile
8280          -fipa-pure-const
8281          -fipa-reference
8282          -fipa-reference-addressable
8283          -fmerge-constants
8284          -fmove-loop-invariants
8285          -fomit-frame-pointer
8286          -freorder-blocks
8287          -fshrink-wrap
8288          -fshrink-wrap-separate
8289          -fsplit-wide-types
8290          -fssa-backprop
8291          -fssa-phiopt
8292          -ftree-bit-ccp
8293          -ftree-ccp
8294          -ftree-ch
8295          -ftree-coalesce-vars
8296          -ftree-copy-prop
8297          -ftree-dce
8298          -ftree-dominator-opts
8299          -ftree-dse
8300          -ftree-forwprop
8301          -ftree-fre
8302          -ftree-phiprop
8303          -ftree-pta
8304          -ftree-scev-cprop
8305          -ftree-sink
8306          -ftree-slsr
8307          -ftree-sra
8308          -ftree-ter
8309          -funit-at-a-time
8310
8311'-O2'
8312     Optimize even more.  GCC performs nearly all supported
8313     optimizations that do not involve a space-speed tradeoff.  As
8314     compared to '-O', this option increases both compilation time and
8315     the performance of the generated code.
8316
8317     '-O2' turns on all optimization flags specified by '-O'.  It also
8318     turns on the following optimization flags:
8319
8320          -falign-functions  -falign-jumps
8321          -falign-labels  -falign-loops
8322          -fcaller-saves
8323          -fcode-hoisting
8324          -fcrossjumping
8325          -fcse-follow-jumps  -fcse-skip-blocks
8326          -fdelete-null-pointer-checks
8327          -fdevirtualize  -fdevirtualize-speculatively
8328          -fexpensive-optimizations
8329          -ffinite-loops
8330          -fgcse  -fgcse-lm
8331          -fhoist-adjacent-loads
8332          -finline-functions
8333          -finline-small-functions
8334          -findirect-inlining
8335          -fipa-bit-cp  -fipa-cp  -fipa-icf
8336          -fipa-ra  -fipa-sra  -fipa-vrp
8337          -fisolate-erroneous-paths-dereference
8338          -flra-remat
8339          -foptimize-sibling-calls
8340          -foptimize-strlen
8341          -fpartial-inlining
8342          -fpeephole2
8343          -freorder-blocks-algorithm=stc
8344          -freorder-blocks-and-partition  -freorder-functions
8345          -frerun-cse-after-loop
8346          -fschedule-insns  -fschedule-insns2
8347          -fsched-interblock  -fsched-spec
8348          -fstore-merging
8349          -fstrict-aliasing
8350          -fthread-jumps
8351          -ftree-builtin-call-dce
8352          -ftree-pre
8353          -ftree-switch-conversion  -ftree-tail-merge
8354          -ftree-vrp
8355
8356     Please note the warning under '-fgcse' about invoking '-O2' on
8357     programs that use computed gotos.
8358
8359'-O3'
8360     Optimize yet more.  '-O3' turns on all optimizations specified by
8361     '-O2' and also turns on the following optimization flags:
8362
8363          -fgcse-after-reload
8364          -fipa-cp-clone
8365          -floop-interchange
8366          -floop-unroll-and-jam
8367          -fpeel-loops
8368          -fpredictive-commoning
8369          -fsplit-loops
8370          -fsplit-paths
8371          -ftree-loop-distribution
8372          -ftree-loop-vectorize
8373          -ftree-partial-pre
8374          -ftree-slp-vectorize
8375          -funswitch-loops
8376          -fvect-cost-model
8377          -fvect-cost-model=dynamic
8378          -fversion-loops-for-strides
8379
8380'-O0'
8381     Reduce compilation time and make debugging produce the expected
8382     results.  This is the default.
8383
8384'-Os'
8385     Optimize for size.  '-Os' enables all '-O2' optimizations except
8386     those that often increase code size:
8387
8388          -falign-functions  -falign-jumps
8389          -falign-labels  -falign-loops
8390          -fprefetch-loop-arrays  -freorder-blocks-algorithm=stc
8391
8392     It also enables '-finline-functions', causes the compiler to tune
8393     for code size rather than execution speed, and performs further
8394     optimizations designed to reduce code size.
8395
8396'-Ofast'
8397     Disregard strict standards compliance.  '-Ofast' enables all '-O3'
8398     optimizations.  It also enables optimizations that are not valid
8399     for all standard-compliant programs.  It turns on '-ffast-math',
8400     '-fallow-store-data-races' and the Fortran-specific
8401     '-fstack-arrays', unless '-fmax-stack-var-size' is specified, and
8402     '-fno-protect-parens'.
8403
8404'-Og'
8405     Optimize debugging experience.  '-Og' should be the optimization
8406     level of choice for the standard edit-compile-debug cycle, offering
8407     a reasonable level of optimization while maintaining fast
8408     compilation and a good debugging experience.  It is a better choice
8409     than '-O0' for producing debuggable code because some compiler
8410     passes that collect debug information are disabled at '-O0'.
8411
8412     Like '-O0', '-Og' completely disables a number of optimization
8413     passes so that individual options controlling them have no effect.
8414     Otherwise '-Og' enables all '-O1' optimization flags except for
8415     those that may interfere with debugging:
8416
8417          -fbranch-count-reg  -fdelayed-branch
8418          -fdse  -fif-conversion  -fif-conversion2
8419          -finline-functions-called-once
8420          -fmove-loop-invariants  -fssa-phiopt
8421          -ftree-bit-ccp  -ftree-dse  -ftree-pta  -ftree-sra
8422
8423 If you use multiple '-O' options, with or without level numbers, the
8424last such option is the one that is effective.
8425
8426 Options of the form '-fFLAG' specify machine-independent flags.  Most
8427flags have both positive and negative forms; the negative form of
8428'-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
8429listed--the one you typically use.  You can figure out the other form by
8430either removing 'no-' or adding it.
8431
8432 The following options control specific optimizations.  They are either
8433activated by '-O' options or are related to ones that are.  You can use
8434the following flags in the rare cases when "fine-tuning" of
8435optimizations to be performed is desired.
8436
8437'-fno-defer-pop'
8438     For machines that must pop arguments after a function call, always
8439     pop the arguments as soon as each function returns.  At levels
8440     '-O1' and higher, '-fdefer-pop' is the default; this allows the
8441     compiler to let arguments accumulate on the stack for several
8442     function calls and pop them all at once.
8443
8444'-fforward-propagate'
8445     Perform a forward propagation pass on RTL.  The pass tries to
8446     combine two instructions and checks if the result can be
8447     simplified.  If loop unrolling is active, two passes are performed
8448     and the second is scheduled after loop unrolling.
8449
8450     This option is enabled by default at optimization levels '-O',
8451     '-O2', '-O3', '-Os'.
8452
8453'-ffp-contract=STYLE'
8454     '-ffp-contract=off' disables floating-point expression contraction.
8455     '-ffp-contract=fast' enables floating-point expression contraction
8456     such as forming of fused multiply-add operations if the target has
8457     native support for them.  '-ffp-contract=on' enables floating-point
8458     expression contraction if allowed by the language standard.  This
8459     is currently not implemented and treated equal to
8460     '-ffp-contract=off'.
8461
8462     The default is '-ffp-contract=fast'.
8463
8464'-fomit-frame-pointer'
8465     Omit the frame pointer in functions that don't need one.  This
8466     avoids the instructions to save, set up and restore the frame
8467     pointer; on many targets it also makes an extra register available.
8468
8469     On some targets this flag has no effect because the standard
8470     calling sequence always uses a frame pointer, so it cannot be
8471     omitted.
8472
8473     Note that '-fno-omit-frame-pointer' doesn't guarantee the frame
8474     pointer is used in all functions.  Several targets always omit the
8475     frame pointer in leaf functions.
8476
8477     Enabled by default at '-O' and higher.
8478
8479'-foptimize-sibling-calls'
8480     Optimize sibling and tail recursive calls.
8481
8482     Enabled at levels '-O2', '-O3', '-Os'.
8483
8484'-foptimize-strlen'
8485     Optimize various standard C string functions (e.g. 'strlen',
8486     'strchr' or 'strcpy') and their '_FORTIFY_SOURCE' counterparts into
8487     faster alternatives.
8488
8489     Enabled at levels '-O2', '-O3'.
8490
8491'-fno-inline'
8492     Do not expand any functions inline apart from those marked with the
8493     'always_inline' attribute.  This is the default when not
8494     optimizing.
8495
8496     Single functions can be exempted from inlining by marking them with
8497     the 'noinline' attribute.
8498
8499'-finline-small-functions'
8500     Integrate functions into their callers when their body is smaller
8501     than expected function call code (so overall size of program gets
8502     smaller).  The compiler heuristically decides which functions are
8503     simple enough to be worth integrating in this way.  This inlining
8504     applies to all functions, even those not declared inline.
8505
8506     Enabled at levels '-O2', '-O3', '-Os'.
8507
8508'-findirect-inlining'
8509     Inline also indirect calls that are discovered to be known at
8510     compile time thanks to previous inlining.  This option has any
8511     effect only when inlining itself is turned on by the
8512     '-finline-functions' or '-finline-small-functions' options.
8513
8514     Enabled at levels '-O2', '-O3', '-Os'.
8515
8516'-finline-functions'
8517     Consider all functions for inlining, even if they are not declared
8518     inline.  The compiler heuristically decides which functions are
8519     worth integrating in this way.
8520
8521     If all calls to a given function are integrated, and the function
8522     is declared 'static', then the function is normally not output as
8523     assembler code in its own right.
8524
8525     Enabled at levels '-O2', '-O3', '-Os'.  Also enabled by
8526     '-fprofile-use' and '-fauto-profile'.
8527
8528'-finline-functions-called-once'
8529     Consider all 'static' functions called once for inlining into their
8530     caller even if they are not marked 'inline'.  If a call to a given
8531     function is integrated, then the function is not output as
8532     assembler code in its own right.
8533
8534     Enabled at levels '-O1', '-O2', '-O3' and '-Os', but not '-Og'.
8535
8536'-fearly-inlining'
8537     Inline functions marked by 'always_inline' and functions whose body
8538     seems smaller than the function call overhead early before doing
8539     '-fprofile-generate' instrumentation and real inlining pass.  Doing
8540     so makes profiling significantly cheaper and usually inlining
8541     faster on programs having large chains of nested wrapper functions.
8542
8543     Enabled by default.
8544
8545'-fipa-sra'
8546     Perform interprocedural scalar replacement of aggregates, removal
8547     of unused parameters and replacement of parameters passed by
8548     reference by parameters passed by value.
8549
8550     Enabled at levels '-O2', '-O3' and '-Os'.
8551
8552'-finline-limit=N'
8553     By default, GCC limits the size of functions that can be inlined.
8554     This flag allows coarse control of this limit.  N is the size of
8555     functions that can be inlined in number of pseudo instructions.
8556
8557     Inlining is actually controlled by a number of parameters, which
8558     may be specified individually by using '--param NAME=VALUE'.  The
8559     '-finline-limit=N' option sets some of these parameters as follows:
8560
8561     'max-inline-insns-single'
8562          is set to N/2.
8563     'max-inline-insns-auto'
8564          is set to N/2.
8565
8566     See below for a documentation of the individual parameters
8567     controlling inlining and for the defaults of these parameters.
8568
8569     _Note:_ there may be no value to '-finline-limit' that results in
8570     default behavior.
8571
8572     _Note:_ pseudo instruction represents, in this particular context,
8573     an abstract measurement of function's size.  In no way does it
8574     represent a count of assembly instructions and as such its exact
8575     meaning might change from one release to an another.
8576
8577'-fno-keep-inline-dllexport'
8578     This is a more fine-grained version of '-fkeep-inline-functions',
8579     which applies only to functions that are declared using the
8580     'dllexport' attribute or declspec.  *Note Declaring Attributes of
8581     Functions: Function Attributes.
8582
8583'-fkeep-inline-functions'
8584     In C, emit 'static' functions that are declared 'inline' into the
8585     object file, even if the function has been inlined into all of its
8586     callers.  This switch does not affect functions using the 'extern
8587     inline' extension in GNU C90.  In C++, emit any and all inline
8588     functions into the object file.
8589
8590'-fkeep-static-functions'
8591     Emit 'static' functions into the object file, even if the function
8592     is never used.
8593
8594'-fkeep-static-consts'
8595     Emit variables declared 'static const' when optimization isn't
8596     turned on, even if the variables aren't referenced.
8597
8598     GCC enables this option by default.  If you want to force the
8599     compiler to check if a variable is referenced, regardless of
8600     whether or not optimization is turned on, use the
8601     '-fno-keep-static-consts' option.
8602
8603'-fmerge-constants'
8604     Attempt to merge identical constants (string constants and
8605     floating-point constants) across compilation units.
8606
8607     This option is the default for optimized compilation if the
8608     assembler and linker support it.  Use '-fno-merge-constants' to
8609     inhibit this behavior.
8610
8611     Enabled at levels '-O', '-O2', '-O3', '-Os'.
8612
8613'-fmerge-all-constants'
8614     Attempt to merge identical constants and identical variables.
8615
8616     This option implies '-fmerge-constants'.  In addition to
8617     '-fmerge-constants' this considers e.g. even constant initialized
8618     arrays or initialized constant variables with integral or
8619     floating-point types.  Languages like C or C++ require each
8620     variable, including multiple instances of the same variable in
8621     recursive calls, to have distinct locations, so using this option
8622     results in non-conforming behavior.
8623
8624'-fmodulo-sched'
8625     Perform swing modulo scheduling immediately before the first
8626     scheduling pass.  This pass looks at innermost loops and reorders
8627     their instructions by overlapping different iterations.
8628
8629'-fmodulo-sched-allow-regmoves'
8630     Perform more aggressive SMS-based modulo scheduling with register
8631     moves allowed.  By setting this flag certain anti-dependences edges
8632     are deleted, which triggers the generation of reg-moves based on
8633     the life-range analysis.  This option is effective only with
8634     '-fmodulo-sched' enabled.
8635
8636'-fno-branch-count-reg'
8637     Disable the optimization pass that scans for opportunities to use
8638     "decrement and branch" instructions on a count register instead of
8639     instruction sequences that decrement a register, compare it against
8640     zero, and then branch based upon the result.  This option is only
8641     meaningful on architectures that support such instructions, which
8642     include x86, PowerPC, IA-64 and S/390.  Note that the
8643     '-fno-branch-count-reg' option doesn't remove the decrement and
8644     branch instructions from the generated instruction stream
8645     introduced by other optimization passes.
8646
8647     The default is '-fbranch-count-reg' at '-O1' and higher, except for
8648     '-Og'.
8649
8650'-fno-function-cse'
8651     Do not put function addresses in registers; make each instruction
8652     that calls a constant function contain the function's address
8653     explicitly.
8654
8655     This option results in less efficient code, but some strange hacks
8656     that alter the assembler output may be confused by the
8657     optimizations performed when this option is not used.
8658
8659     The default is '-ffunction-cse'
8660
8661'-fno-zero-initialized-in-bss'
8662     If the target supports a BSS section, GCC by default puts variables
8663     that are initialized to zero into BSS.  This can save space in the
8664     resulting code.
8665
8666     This option turns off this behavior because some programs
8667     explicitly rely on variables going to the data section--e.g., so
8668     that the resulting executable can find the beginning of that
8669     section and/or make assumptions based on that.
8670
8671     The default is '-fzero-initialized-in-bss'.
8672
8673'-fthread-jumps'
8674     Perform optimizations that check to see if a jump branches to a
8675     location where another comparison subsumed by the first is found.
8676     If so, the first branch is redirected to either the destination of
8677     the second branch or a point immediately following it, depending on
8678     whether the condition is known to be true or false.
8679
8680     Enabled at levels '-O2', '-O3', '-Os'.
8681
8682'-fsplit-wide-types'
8683     When using a type that occupies multiple registers, such as 'long
8684     long' on a 32-bit system, split the registers apart and allocate
8685     them independently.  This normally generates better code for those
8686     types, but may make debugging more difficult.
8687
8688     Enabled at levels '-O', '-O2', '-O3', '-Os'.
8689
8690'-fsplit-wide-types-early'
8691     Fully split wide types early, instead of very late.  This option
8692     has no effect unless '-fsplit-wide-types' is turned on.
8693
8694     This is the default on some targets.
8695
8696'-fcse-follow-jumps'
8697     In common subexpression elimination (CSE), scan through jump
8698     instructions when the target of the jump is not reached by any
8699     other path.  For example, when CSE encounters an 'if' statement
8700     with an 'else' clause, CSE follows the jump when the condition
8701     tested is false.
8702
8703     Enabled at levels '-O2', '-O3', '-Os'.
8704
8705'-fcse-skip-blocks'
8706     This is similar to '-fcse-follow-jumps', but causes CSE to follow
8707     jumps that conditionally skip over blocks.  When CSE encounters a
8708     simple 'if' statement with no else clause, '-fcse-skip-blocks'
8709     causes CSE to follow the jump around the body of the 'if'.
8710
8711     Enabled at levels '-O2', '-O3', '-Os'.
8712
8713'-frerun-cse-after-loop'
8714     Re-run common subexpression elimination after loop optimizations
8715     are performed.
8716
8717     Enabled at levels '-O2', '-O3', '-Os'.
8718
8719'-fgcse'
8720     Perform a global common subexpression elimination pass.  This pass
8721     also performs global constant and copy propagation.
8722
8723     _Note:_ When compiling a program using computed gotos, a GCC
8724     extension, you may get better run-time performance if you disable
8725     the global common subexpression elimination pass by adding
8726     '-fno-gcse' to the command line.
8727
8728     Enabled at levels '-O2', '-O3', '-Os'.
8729
8730'-fgcse-lm'
8731     When '-fgcse-lm' is enabled, global common subexpression
8732     elimination attempts to move loads that are only killed by stores
8733     into themselves.  This allows a loop containing a load/store
8734     sequence to be changed to a load outside the loop, and a copy/store
8735     within the loop.
8736
8737     Enabled by default when '-fgcse' is enabled.
8738
8739'-fgcse-sm'
8740     When '-fgcse-sm' is enabled, a store motion pass is run after
8741     global common subexpression elimination.  This pass attempts to
8742     move stores out of loops.  When used in conjunction with
8743     '-fgcse-lm', loops containing a load/store sequence can be changed
8744     to a load before the loop and a store after the loop.
8745
8746     Not enabled at any optimization level.
8747
8748'-fgcse-las'
8749     When '-fgcse-las' is enabled, the global common subexpression
8750     elimination pass eliminates redundant loads that come after stores
8751     to the same memory location (both partial and full redundancies).
8752
8753     Not enabled at any optimization level.
8754
8755'-fgcse-after-reload'
8756     When '-fgcse-after-reload' is enabled, a redundant load elimination
8757     pass is performed after reload.  The purpose of this pass is to
8758     clean up redundant spilling.
8759
8760     Enabled by '-fprofile-use' and '-fauto-profile'.
8761
8762'-faggressive-loop-optimizations'
8763     This option tells the loop optimizer to use language constraints to
8764     derive bounds for the number of iterations of a loop.  This assumes
8765     that loop code does not invoke undefined behavior by for example
8766     causing signed integer overflows or out-of-bound array accesses.
8767     The bounds for the number of iterations of a loop are used to guide
8768     loop unrolling and peeling and loop exit test optimizations.  This
8769     option is enabled by default.
8770
8771'-funconstrained-commons'
8772     This option tells the compiler that variables declared in common
8773     blocks (e.g. Fortran) may later be overridden with longer trailing
8774     arrays.  This prevents certain optimizations that depend on knowing
8775     the array bounds.
8776
8777'-fcrossjumping'
8778     Perform cross-jumping transformation.  This transformation unifies
8779     equivalent code and saves code size.  The resulting code may or may
8780     not perform better than without cross-jumping.
8781
8782     Enabled at levels '-O2', '-O3', '-Os'.
8783
8784'-fauto-inc-dec'
8785     Combine increments or decrements of addresses with memory accesses.
8786     This pass is always skipped on architectures that do not have
8787     instructions to support this.  Enabled by default at '-O' and
8788     higher on architectures that support this.
8789
8790'-fdce'
8791     Perform dead code elimination (DCE) on RTL.  Enabled by default at
8792     '-O' and higher.
8793
8794'-fdse'
8795     Perform dead store elimination (DSE) on RTL.  Enabled by default at
8796     '-O' and higher.
8797
8798'-fif-conversion'
8799     Attempt to transform conditional jumps into branch-less
8800     equivalents.  This includes use of conditional moves, min, max, set
8801     flags and abs instructions, and some tricks doable by standard
8802     arithmetics.  The use of conditional execution on chips where it is
8803     available is controlled by '-fif-conversion2'.
8804
8805     Enabled at levels '-O', '-O2', '-O3', '-Os', but not with '-Og'.
8806
8807'-fif-conversion2'
8808     Use conditional execution (where available) to transform
8809     conditional jumps into branch-less equivalents.
8810
8811     Enabled at levels '-O', '-O2', '-O3', '-Os', but not with '-Og'.
8812
8813'-fdeclone-ctor-dtor'
8814     The C++ ABI requires multiple entry points for constructors and
8815     destructors: one for a base subobject, one for a complete object,
8816     and one for a virtual destructor that calls operator delete
8817     afterwards.  For a hierarchy with virtual bases, the base and
8818     complete variants are clones, which means two copies of the
8819     function.  With this option, the base and complete variants are
8820     changed to be thunks that call a common implementation.
8821
8822     Enabled by '-Os'.
8823
8824'-fdelete-null-pointer-checks'
8825     Assume that programs cannot safely dereference null pointers, and
8826     that no code or data element resides at address zero.  This option
8827     enables simple constant folding optimizations at all optimization
8828     levels.  In addition, other optimization passes in GCC use this
8829     flag to control global dataflow analyses that eliminate useless
8830     checks for null pointers; these assume that a memory access to
8831     address zero always results in a trap, so that if a pointer is
8832     checked after it has already been dereferenced, it cannot be null.
8833
8834     Note however that in some environments this assumption is not true.
8835     Use '-fno-delete-null-pointer-checks' to disable this optimization
8836     for programs that depend on that behavior.
8837
8838     This option is enabled by default on most targets.  On Nios II ELF,
8839     it defaults to off.  On AVR, CR16, and MSP430, this option is
8840     completely disabled.
8841
8842     Passes that use the dataflow information are enabled independently
8843     at different optimization levels.
8844
8845'-fdevirtualize'
8846     Attempt to convert calls to virtual functions to direct calls.
8847     This is done both within a procedure and interprocedurally as part
8848     of indirect inlining ('-findirect-inlining') and interprocedural
8849     constant propagation ('-fipa-cp').  Enabled at levels '-O2', '-O3',
8850     '-Os'.
8851
8852'-fdevirtualize-speculatively'
8853     Attempt to convert calls to virtual functions to speculative direct
8854     calls.  Based on the analysis of the type inheritance graph,
8855     determine for a given call the set of likely targets.  If the set
8856     is small, preferably of size 1, change the call into a conditional
8857     deciding between direct and indirect calls.  The speculative calls
8858     enable more optimizations, such as inlining.  When they seem
8859     useless after further optimization, they are converted back into
8860     original form.
8861
8862'-fdevirtualize-at-ltrans'
8863     Stream extra information needed for aggressive devirtualization
8864     when running the link-time optimizer in local transformation mode.
8865     This option enables more devirtualization but significantly
8866     increases the size of streamed data.  For this reason it is
8867     disabled by default.
8868
8869'-fexpensive-optimizations'
8870     Perform a number of minor optimizations that are relatively
8871     expensive.
8872
8873     Enabled at levels '-O2', '-O3', '-Os'.
8874
8875'-free'
8876     Attempt to remove redundant extension instructions.  This is
8877     especially helpful for the x86-64 architecture, which implicitly
8878     zero-extends in 64-bit registers after writing to their lower
8879     32-bit half.
8880
8881     Enabled for Alpha, AArch64 and x86 at levels '-O2', '-O3', '-Os'.
8882
8883'-fno-lifetime-dse'
8884     In C++ the value of an object is only affected by changes within
8885     its lifetime: when the constructor begins, the object has an
8886     indeterminate value, and any changes during the lifetime of the
8887     object are dead when the object is destroyed.  Normally dead store
8888     elimination will take advantage of this; if your code relies on the
8889     value of the object storage persisting beyond the lifetime of the
8890     object, you can use this flag to disable this optimization.  To
8891     preserve stores before the constructor starts (e.g. because your
8892     operator new clears the object storage) but still treat the object
8893     as dead after the destructor, you can use '-flifetime-dse=1'.  The
8894     default behavior can be explicitly selected with
8895     '-flifetime-dse=2'.  '-flifetime-dse=0' is equivalent to
8896     '-fno-lifetime-dse'.
8897
8898'-flive-range-shrinkage'
8899     Attempt to decrease register pressure through register live range
8900     shrinkage.  This is helpful for fast processors with small or
8901     moderate size register sets.
8902
8903'-fira-algorithm=ALGORITHM'
8904     Use the specified coloring algorithm for the integrated register
8905     allocator.  The ALGORITHM argument can be 'priority', which
8906     specifies Chow's priority coloring, or 'CB', which specifies
8907     Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
8908     implemented for all architectures, but for those targets that do
8909     support it, it is the default because it generates better code.
8910
8911'-fira-region=REGION'
8912     Use specified regions for the integrated register allocator.  The
8913     REGION argument should be one of the following:
8914
8915     'all'
8916          Use all loops as register allocation regions.  This can give
8917          the best results for machines with a small and/or irregular
8918          register set.
8919
8920     'mixed'
8921          Use all loops except for loops with small register pressure as
8922          the regions.  This value usually gives the best results in
8923          most cases and for most architectures, and is enabled by
8924          default when compiling with optimization for speed ('-O',
8925          '-O2', ...).
8926
8927     'one'
8928          Use all functions as a single region.  This typically results
8929          in the smallest code size, and is enabled by default for '-Os'
8930          or '-O0'.
8931
8932'-fira-hoist-pressure'
8933     Use IRA to evaluate register pressure in the code hoisting pass for
8934     decisions to hoist expressions.  This option usually results in
8935     smaller code, but it can slow the compiler down.
8936
8937     This option is enabled at level '-Os' for all targets.
8938
8939'-fira-loop-pressure'
8940     Use IRA to evaluate register pressure in loops for decisions to
8941     move loop invariants.  This option usually results in generation of
8942     faster and smaller code on machines with large register files (>=
8943     32 registers), but it can slow the compiler down.
8944
8945     This option is enabled at level '-O3' for some targets.
8946
8947'-fno-ira-share-save-slots'
8948     Disable sharing of stack slots used for saving call-used hard
8949     registers living through a call.  Each hard register gets a
8950     separate stack slot, and as a result function stack frames are
8951     larger.
8952
8953'-fno-ira-share-spill-slots'
8954     Disable sharing of stack slots allocated for pseudo-registers.
8955     Each pseudo-register that does not get a hard register gets a
8956     separate stack slot, and as a result function stack frames are
8957     larger.
8958
8959'-flra-remat'
8960     Enable CFG-sensitive rematerialization in LRA. Instead of loading
8961     values of spilled pseudos, LRA tries to rematerialize (recalculate)
8962     values if it is profitable.
8963
8964     Enabled at levels '-O2', '-O3', '-Os'.
8965
8966'-fdelayed-branch'
8967     If supported for the target machine, attempt to reorder
8968     instructions to exploit instruction slots available after delayed
8969     branch instructions.
8970
8971     Enabled at levels '-O', '-O2', '-O3', '-Os', but not at '-Og'.
8972
8973'-fschedule-insns'
8974     If supported for the target machine, attempt to reorder
8975     instructions to eliminate execution stalls due to required data
8976     being unavailable.  This helps machines that have slow floating
8977     point or memory load instructions by allowing other instructions to
8978     be issued until the result of the load or floating-point
8979     instruction is required.
8980
8981     Enabled at levels '-O2', '-O3'.
8982
8983'-fschedule-insns2'
8984     Similar to '-fschedule-insns', but requests an additional pass of
8985     instruction scheduling after register allocation has been done.
8986     This is especially useful on machines with a relatively small
8987     number of registers and where memory load instructions take more
8988     than one cycle.
8989
8990     Enabled at levels '-O2', '-O3', '-Os'.
8991
8992'-fno-sched-interblock'
8993     Disable instruction scheduling across basic blocks, which is
8994     normally enabled when scheduling before register allocation, i.e.
8995     with '-fschedule-insns' or at '-O2' or higher.
8996
8997'-fno-sched-spec'
8998     Disable speculative motion of non-load instructions, which is
8999     normally enabled when scheduling before register allocation, i.e.
9000     with '-fschedule-insns' or at '-O2' or higher.
9001
9002'-fsched-pressure'
9003     Enable register pressure sensitive insn scheduling before register
9004     allocation.  This only makes sense when scheduling before register
9005     allocation is enabled, i.e. with '-fschedule-insns' or at '-O2' or
9006     higher.  Usage of this option can improve the generated code and
9007     decrease its size by preventing register pressure increase above
9008     the number of available hard registers and subsequent spills in
9009     register allocation.
9010
9011'-fsched-spec-load'
9012     Allow speculative motion of some load instructions.  This only
9013     makes sense when scheduling before register allocation, i.e. with
9014     '-fschedule-insns' or at '-O2' or higher.
9015
9016'-fsched-spec-load-dangerous'
9017     Allow speculative motion of more load instructions.  This only
9018     makes sense when scheduling before register allocation, i.e. with
9019     '-fschedule-insns' or at '-O2' or higher.
9020
9021'-fsched-stalled-insns'
9022'-fsched-stalled-insns=N'
9023     Define how many insns (if any) can be moved prematurely from the
9024     queue of stalled insns into the ready list during the second
9025     scheduling pass.  '-fno-sched-stalled-insns' means that no insns
9026     are moved prematurely, '-fsched-stalled-insns=0' means there is no
9027     limit on how many queued insns can be moved prematurely.
9028     '-fsched-stalled-insns' without a value is equivalent to
9029     '-fsched-stalled-insns=1'.
9030
9031'-fsched-stalled-insns-dep'
9032'-fsched-stalled-insns-dep=N'
9033     Define how many insn groups (cycles) are examined for a dependency
9034     on a stalled insn that is a candidate for premature removal from
9035     the queue of stalled insns.  This has an effect only during the
9036     second scheduling pass, and only if '-fsched-stalled-insns' is
9037     used.  '-fno-sched-stalled-insns-dep' is equivalent to
9038     '-fsched-stalled-insns-dep=0'.  '-fsched-stalled-insns-dep' without
9039     a value is equivalent to '-fsched-stalled-insns-dep=1'.
9040
9041'-fsched2-use-superblocks'
9042     When scheduling after register allocation, use superblock
9043     scheduling.  This allows motion across basic block boundaries,
9044     resulting in faster schedules.  This option is experimental, as not
9045     all machine descriptions used by GCC model the CPU closely enough
9046     to avoid unreliable results from the algorithm.
9047
9048     This only makes sense when scheduling after register allocation,
9049     i.e. with '-fschedule-insns2' or at '-O2' or higher.
9050
9051'-fsched-group-heuristic'
9052     Enable the group heuristic in the scheduler.  This heuristic favors
9053     the instruction that belongs to a schedule group.  This is enabled
9054     by default when scheduling is enabled, i.e. with '-fschedule-insns'
9055     or '-fschedule-insns2' or at '-O2' or higher.
9056
9057'-fsched-critical-path-heuristic'
9058     Enable the critical-path heuristic in the scheduler.  This
9059     heuristic favors instructions on the critical path.  This is
9060     enabled by default when scheduling is enabled, i.e. with
9061     '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or higher.
9062
9063'-fsched-spec-insn-heuristic'
9064     Enable the speculative instruction heuristic in the scheduler.
9065     This heuristic favors speculative instructions with greater
9066     dependency weakness.  This is enabled by default when scheduling is
9067     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
9068     '-O2' or higher.
9069
9070'-fsched-rank-heuristic'
9071     Enable the rank heuristic in the scheduler.  This heuristic favors
9072     the instruction belonging to a basic block with greater size or
9073     frequency.  This is enabled by default when scheduling is enabled,
9074     i.e. with '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or
9075     higher.
9076
9077'-fsched-last-insn-heuristic'
9078     Enable the last-instruction heuristic in the scheduler.  This
9079     heuristic favors the instruction that is less dependent on the last
9080     instruction scheduled.  This is enabled by default when scheduling
9081     is enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or
9082     at '-O2' or higher.
9083
9084'-fsched-dep-count-heuristic'
9085     Enable the dependent-count heuristic in the scheduler.  This
9086     heuristic favors the instruction that has more instructions
9087     depending on it.  This is enabled by default when scheduling is
9088     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
9089     '-O2' or higher.
9090
9091'-freschedule-modulo-scheduled-loops'
9092     Modulo scheduling is performed before traditional scheduling.  If a
9093     loop is modulo scheduled, later scheduling passes may change its
9094     schedule.  Use this option to control that behavior.
9095
9096'-fselective-scheduling'
9097     Schedule instructions using selective scheduling algorithm.
9098     Selective scheduling runs instead of the first scheduler pass.
9099
9100'-fselective-scheduling2'
9101     Schedule instructions using selective scheduling algorithm.
9102     Selective scheduling runs instead of the second scheduler pass.
9103
9104'-fsel-sched-pipelining'
9105     Enable software pipelining of innermost loops during selective
9106     scheduling.  This option has no effect unless one of
9107     '-fselective-scheduling' or '-fselective-scheduling2' is turned on.
9108
9109'-fsel-sched-pipelining-outer-loops'
9110     When pipelining loops during selective scheduling, also pipeline
9111     outer loops.  This option has no effect unless
9112     '-fsel-sched-pipelining' is turned on.
9113
9114'-fsemantic-interposition'
9115     Some object formats, like ELF, allow interposing of symbols by the
9116     dynamic linker.  This means that for symbols exported from the DSO,
9117     the compiler cannot perform interprocedural propagation, inlining
9118     and other optimizations in anticipation that the function or
9119     variable in question may change.  While this feature is useful, for
9120     example, to rewrite memory allocation functions by a debugging
9121     implementation, it is expensive in the terms of code quality.  With
9122     '-fno-semantic-interposition' the compiler assumes that if
9123     interposition happens for functions the overwriting function will
9124     have precisely the same semantics (and side effects).  Similarly if
9125     interposition happens for variables, the constructor of the
9126     variable will be the same.  The flag has no effect for functions
9127     explicitly declared inline (where it is never allowed for
9128     interposition to change semantics) and for symbols explicitly
9129     declared weak.
9130
9131'-fshrink-wrap'
9132     Emit function prologues only before parts of the function that need
9133     it, rather than at the top of the function.  This flag is enabled
9134     by default at '-O' and higher.
9135
9136'-fshrink-wrap-separate'
9137     Shrink-wrap separate parts of the prologue and epilogue separately,
9138     so that those parts are only executed when needed.  This option is
9139     on by default, but has no effect unless '-fshrink-wrap' is also
9140     turned on and the target supports this.
9141
9142'-fcaller-saves'
9143     Enable allocation of values to registers that are clobbered by
9144     function calls, by emitting extra instructions to save and restore
9145     the registers around such calls.  Such allocation is done only when
9146     it seems to result in better code.
9147
9148     This option is always enabled by default on certain machines,
9149     usually those which have no call-preserved registers to use
9150     instead.
9151
9152     Enabled at levels '-O2', '-O3', '-Os'.
9153
9154'-fcombine-stack-adjustments'
9155     Tracks stack adjustments (pushes and pops) and stack memory
9156     references and then tries to find ways to combine them.
9157
9158     Enabled by default at '-O1' and higher.
9159
9160'-fipa-ra'
9161     Use caller save registers for allocation if those registers are not
9162     used by any called function.  In that case it is not necessary to
9163     save and restore them around calls.  This is only possible if
9164     called functions are part of same compilation unit as current
9165     function and they are compiled before it.
9166
9167     Enabled at levels '-O2', '-O3', '-Os', however the option is
9168     disabled if generated code will be instrumented for profiling
9169     ('-p', or '-pg') or if callee's register usage cannot be known
9170     exactly (this happens on targets that do not expose prologues and
9171     epilogues in RTL).
9172
9173'-fconserve-stack'
9174     Attempt to minimize stack usage.  The compiler attempts to use less
9175     stack space, even if that makes the program slower.  This option
9176     implies setting the 'large-stack-frame' parameter to 100 and the
9177     'large-stack-frame-growth' parameter to 400.
9178
9179'-ftree-reassoc'
9180     Perform reassociation on trees.  This flag is enabled by default at
9181     '-O' and higher.
9182
9183'-fcode-hoisting'
9184     Perform code hoisting.  Code hoisting tries to move the evaluation
9185     of expressions executed on all paths to the function exit as early
9186     as possible.  This is especially useful as a code size
9187     optimization, but it often helps for code speed as well.  This flag
9188     is enabled by default at '-O2' and higher.
9189
9190'-ftree-pre'
9191     Perform partial redundancy elimination (PRE) on trees.  This flag
9192     is enabled by default at '-O2' and '-O3'.
9193
9194'-ftree-partial-pre'
9195     Make partial redundancy elimination (PRE) more aggressive.  This
9196     flag is enabled by default at '-O3'.
9197
9198'-ftree-forwprop'
9199     Perform forward propagation on trees.  This flag is enabled by
9200     default at '-O' and higher.
9201
9202'-ftree-fre'
9203     Perform full redundancy elimination (FRE) on trees.  The difference
9204     between FRE and PRE is that FRE only considers expressions that are
9205     computed on all paths leading to the redundant computation.  This
9206     analysis is faster than PRE, though it exposes fewer redundancies.
9207     This flag is enabled by default at '-O' and higher.
9208
9209'-ftree-phiprop'
9210     Perform hoisting of loads from conditional pointers on trees.  This
9211     pass is enabled by default at '-O' and higher.
9212
9213'-fhoist-adjacent-loads'
9214     Speculatively hoist loads from both branches of an if-then-else if
9215     the loads are from adjacent locations in the same structure and the
9216     target architecture has a conditional move instruction.  This flag
9217     is enabled by default at '-O2' and higher.
9218
9219'-ftree-copy-prop'
9220     Perform copy propagation on trees.  This pass eliminates
9221     unnecessary copy operations.  This flag is enabled by default at
9222     '-O' and higher.
9223
9224'-fipa-pure-const'
9225     Discover which functions are pure or constant.  Enabled by default
9226     at '-O' and higher.
9227
9228'-fipa-reference'
9229     Discover which static variables do not escape the compilation unit.
9230     Enabled by default at '-O' and higher.
9231
9232'-fipa-reference-addressable'
9233     Discover read-only, write-only and non-addressable static
9234     variables.  Enabled by default at '-O' and higher.
9235
9236'-fipa-stack-alignment'
9237     Reduce stack alignment on call sites if possible.  Enabled by
9238     default.
9239
9240'-fipa-pta'
9241     Perform interprocedural pointer analysis and interprocedural
9242     modification and reference analysis.  This option can cause
9243     excessive memory and compile-time usage on large compilation units.
9244     It is not enabled by default at any optimization level.
9245
9246'-fipa-profile'
9247     Perform interprocedural profile propagation.  The functions called
9248     only from cold functions are marked as cold.  Also functions
9249     executed once (such as 'cold', 'noreturn', static constructors or
9250     destructors) are identified.  Cold functions and loop less parts of
9251     functions executed once are then optimized for size.  Enabled by
9252     default at '-O' and higher.
9253
9254'-fipa-cp'
9255     Perform interprocedural constant propagation.  This optimization
9256     analyzes the program to determine when values passed to functions
9257     are constants and then optimizes accordingly.  This optimization
9258     can substantially increase performance if the application has
9259     constants passed to functions.  This flag is enabled by default at
9260     '-O2', '-Os' and '-O3'.  It is also enabled by '-fprofile-use' and
9261     '-fauto-profile'.
9262
9263'-fipa-cp-clone'
9264     Perform function cloning to make interprocedural constant
9265     propagation stronger.  When enabled, interprocedural constant
9266     propagation performs function cloning when externally visible
9267     function can be called with constant arguments.  Because this
9268     optimization can create multiple copies of functions, it may
9269     significantly increase code size (see '--param
9270     ipa-cp-unit-growth=VALUE').  This flag is enabled by default at
9271     '-O3'.  It is also enabled by '-fprofile-use' and '-fauto-profile'.
9272
9273'-fipa-bit-cp'
9274     When enabled, perform interprocedural bitwise constant propagation.
9275     This flag is enabled by default at '-O2' and by '-fprofile-use' and
9276     '-fauto-profile'.  It requires that '-fipa-cp' is enabled.
9277
9278'-fipa-vrp'
9279     When enabled, perform interprocedural propagation of value ranges.
9280     This flag is enabled by default at '-O2'.  It requires that
9281     '-fipa-cp' is enabled.
9282
9283'-fipa-icf'
9284     Perform Identical Code Folding for functions and read-only
9285     variables.  The optimization reduces code size and may disturb
9286     unwind stacks by replacing a function by equivalent one with a
9287     different name.  The optimization works more effectively with
9288     link-time optimization enabled.
9289
9290     Although the behavior is similar to the Gold Linker's ICF
9291     optimization, GCC ICF works on different levels and thus the
9292     optimizations are not same - there are equivalences that are found
9293     only by GCC and equivalences found only by Gold.
9294
9295     This flag is enabled by default at '-O2' and '-Os'.
9296
9297'-flive-patching=LEVEL'
9298     Control GCC's optimizations to produce output suitable for
9299     live-patching.
9300
9301     If the compiler's optimization uses a function's body or
9302     information extracted from its body to optimize/change another
9303     function, the latter is called an impacted function of the former.
9304     If a function is patched, its impacted functions should be patched
9305     too.
9306
9307     The impacted functions are determined by the compiler's
9308     interprocedural optimizations.  For example, a caller is impacted
9309     when inlining a function into its caller, cloning a function and
9310     changing its caller to call this new clone, or extracting a
9311     function's pureness/constness information to optimize its direct or
9312     indirect callers, etc.
9313
9314     Usually, the more IPA optimizations enabled, the larger the number
9315     of impacted functions for each function.  In order to control the
9316     number of impacted functions and more easily compute the list of
9317     impacted function, IPA optimizations can be partially enabled at
9318     two different levels.
9319
9320     The LEVEL argument should be one of the following:
9321
9322     'inline-clone'
9323
9324          Only enable inlining and cloning optimizations, which includes
9325          inlining, cloning, interprocedural scalar replacement of
9326          aggregates and partial inlining.  As a result, when patching a
9327          function, all its callers and its clones' callers are
9328          impacted, therefore need to be patched as well.
9329
9330          '-flive-patching=inline-clone' disables the following
9331          optimization flags:
9332               -fwhole-program  -fipa-pta  -fipa-reference  -fipa-ra
9333               -fipa-icf  -fipa-icf-functions  -fipa-icf-variables
9334               -fipa-bit-cp  -fipa-vrp  -fipa-pure-const  -fipa-reference-addressable
9335               -fipa-stack-alignment
9336
9337     'inline-only-static'
9338
9339          Only enable inlining of static functions.  As a result, when
9340          patching a static function, all its callers are impacted and
9341          so need to be patched as well.
9342
9343          In addition to all the flags that
9344          '-flive-patching=inline-clone' disables,
9345          '-flive-patching=inline-only-static' disables the following
9346          additional optimization flags:
9347               -fipa-cp-clone  -fipa-sra  -fpartial-inlining  -fipa-cp
9348
9349     When '-flive-patching' is specified without any value, the default
9350     value is INLINE-CLONE.
9351
9352     This flag is disabled by default.
9353
9354     Note that '-flive-patching' is not supported with link-time
9355     optimization ('-flto').
9356
9357'-fisolate-erroneous-paths-dereference'
9358     Detect paths that trigger erroneous or undefined behavior due to
9359     dereferencing a null pointer.  Isolate those paths from the main
9360     control flow and turn the statement with erroneous or undefined
9361     behavior into a trap.  This flag is enabled by default at '-O2' and
9362     higher and depends on '-fdelete-null-pointer-checks' also being
9363     enabled.
9364
9365'-fisolate-erroneous-paths-attribute'
9366     Detect paths that trigger erroneous or undefined behavior due to a
9367     null value being used in a way forbidden by a 'returns_nonnull' or
9368     'nonnull' attribute.  Isolate those paths from the main control
9369     flow and turn the statement with erroneous or undefined behavior
9370     into a trap.  This is not currently enabled, but may be enabled by
9371     '-O2' in the future.
9372
9373'-ftree-sink'
9374     Perform forward store motion on trees.  This flag is enabled by
9375     default at '-O' and higher.
9376
9377'-ftree-bit-ccp'
9378     Perform sparse conditional bit constant propagation on trees and
9379     propagate pointer alignment information.  This pass only operates
9380     on local scalar variables and is enabled by default at '-O1' and
9381     higher, except for '-Og'.  It requires that '-ftree-ccp' is
9382     enabled.
9383
9384'-ftree-ccp'
9385     Perform sparse conditional constant propagation (CCP) on trees.
9386     This pass only operates on local scalar variables and is enabled by
9387     default at '-O' and higher.
9388
9389'-fssa-backprop'
9390     Propagate information about uses of a value up the definition chain
9391     in order to simplify the definitions.  For example, this pass
9392     strips sign operations if the sign of a value never matters.  The
9393     flag is enabled by default at '-O' and higher.
9394
9395'-fssa-phiopt'
9396     Perform pattern matching on SSA PHI nodes to optimize conditional
9397     code.  This pass is enabled by default at '-O1' and higher, except
9398     for '-Og'.
9399
9400'-ftree-switch-conversion'
9401     Perform conversion of simple initializations in a switch to
9402     initializations from a scalar array.  This flag is enabled by
9403     default at '-O2' and higher.
9404
9405'-ftree-tail-merge'
9406     Look for identical code sequences.  When found, replace one with a
9407     jump to the other.  This optimization is known as tail merging or
9408     cross jumping.  This flag is enabled by default at '-O2' and
9409     higher.  The compilation time in this pass can be limited using
9410     'max-tail-merge-comparisons' parameter and
9411     'max-tail-merge-iterations' parameter.
9412
9413'-ftree-dce'
9414     Perform dead code elimination (DCE) on trees.  This flag is enabled
9415     by default at '-O' and higher.
9416
9417'-ftree-builtin-call-dce'
9418     Perform conditional dead code elimination (DCE) for calls to
9419     built-in functions that may set 'errno' but are otherwise free of
9420     side effects.  This flag is enabled by default at '-O2' and higher
9421     if '-Os' is not also specified.
9422
9423'-ffinite-loops'
9424     Assume that a loop with an exit will eventually take the exit and
9425     not loop indefinitely.  This allows the compiler to remove loops
9426     that otherwise have no side-effects, not considering eventual
9427     endless looping as such.
9428
9429     This option is enabled by default at '-O2' for C++ with -std=c++11
9430     or higher.
9431
9432'-ftree-dominator-opts'
9433     Perform a variety of simple scalar cleanups (constant/copy
9434     propagation, redundancy elimination, range propagation and
9435     expression simplification) based on a dominator tree traversal.
9436     This also performs jump threading (to reduce jumps to jumps).  This
9437     flag is enabled by default at '-O' and higher.
9438
9439'-ftree-dse'
9440     Perform dead store elimination (DSE) on trees.  A dead store is a
9441     store into a memory location that is later overwritten by another
9442     store without any intervening loads.  In this case the earlier
9443     store can be deleted.  This flag is enabled by default at '-O' and
9444     higher.
9445
9446'-ftree-ch'
9447     Perform loop header copying on trees.  This is beneficial since it
9448     increases effectiveness of code motion optimizations.  It also
9449     saves one jump.  This flag is enabled by default at '-O' and
9450     higher.  It is not enabled for '-Os', since it usually increases
9451     code size.
9452
9453'-ftree-loop-optimize'
9454     Perform loop optimizations on trees.  This flag is enabled by
9455     default at '-O' and higher.
9456
9457'-ftree-loop-linear'
9458'-floop-strip-mine'
9459'-floop-block'
9460     Perform loop nest optimizations.  Same as '-floop-nest-optimize'.
9461     To use this code transformation, GCC has to be configured with
9462     '--with-isl' to enable the Graphite loop transformation
9463     infrastructure.
9464
9465'-fgraphite-identity'
9466     Enable the identity transformation for graphite.  For every SCoP we
9467     generate the polyhedral representation and transform it back to
9468     gimple.  Using '-fgraphite-identity' we can check the costs or
9469     benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
9470     minimal optimizations are also performed by the code generator isl,
9471     like index splitting and dead code elimination in loops.
9472
9473'-floop-nest-optimize'
9474     Enable the isl based loop nest optimizer.  This is a generic loop
9475     nest optimizer based on the Pluto optimization algorithms.  It
9476     calculates a loop structure optimized for data-locality and
9477     parallelism.  This option is experimental.
9478
9479'-floop-parallelize-all'
9480     Use the Graphite data dependence analysis to identify loops that
9481     can be parallelized.  Parallelize all the loops that can be
9482     analyzed to not contain loop carried dependences without checking
9483     that it is profitable to parallelize the loops.
9484
9485'-ftree-coalesce-vars'
9486     While transforming the program out of the SSA representation,
9487     attempt to reduce copying by coalescing versions of different
9488     user-defined variables, instead of just compiler temporaries.  This
9489     may severely limit the ability to debug an optimized program
9490     compiled with '-fno-var-tracking-assignments'.  In the negated
9491     form, this flag prevents SSA coalescing of user variables.  This
9492     option is enabled by default if optimization is enabled, and it
9493     does very little otherwise.
9494
9495'-ftree-loop-if-convert'
9496     Attempt to transform conditional jumps in the innermost loops to
9497     branch-less equivalents.  The intent is to remove control-flow from
9498     the innermost loops in order to improve the ability of the
9499     vectorization pass to handle these loops.  This is enabled by
9500     default if vectorization is enabled.
9501
9502'-ftree-loop-distribution'
9503     Perform loop distribution.  This flag can improve cache performance
9504     on big loop bodies and allow further loop optimizations, like
9505     parallelization or vectorization, to take place.  For example, the
9506     loop
9507          DO I = 1, N
9508            A(I) = B(I) + C
9509            D(I) = E(I) * F
9510          ENDDO
9511     is transformed to
9512          DO I = 1, N
9513             A(I) = B(I) + C
9514          ENDDO
9515          DO I = 1, N
9516             D(I) = E(I) * F
9517          ENDDO
9518     This flag is enabled by default at '-O3'.  It is also enabled by
9519     '-fprofile-use' and '-fauto-profile'.
9520
9521'-ftree-loop-distribute-patterns'
9522     Perform loop distribution of patterns that can be code generated
9523     with calls to a library.  This flag is enabled by default at '-O2'
9524     and higher, and by '-fprofile-use' and '-fauto-profile'.
9525
9526     This pass distributes the initialization loops and generates a call
9527     to memset zero.  For example, the loop
9528          DO I = 1, N
9529            A(I) = 0
9530            B(I) = A(I) + I
9531          ENDDO
9532     is transformed to
9533          DO I = 1, N
9534             A(I) = 0
9535          ENDDO
9536          DO I = 1, N
9537             B(I) = A(I) + I
9538          ENDDO
9539     and the initialization loop is transformed into a call to memset
9540     zero.  This flag is enabled by default at '-O3'.  It is also
9541     enabled by '-fprofile-use' and '-fauto-profile'.
9542
9543'-floop-interchange'
9544     Perform loop interchange outside of graphite.  This flag can
9545     improve cache performance on loop nest and allow further loop
9546     optimizations, like vectorization, to take place.  For example, the
9547     loop
9548          for (int i = 0; i < N; i++)
9549            for (int j = 0; j < N; j++)
9550              for (int k = 0; k < N; k++)
9551                c[i][j] = c[i][j] + a[i][k]*b[k][j];
9552     is transformed to
9553          for (int i = 0; i < N; i++)
9554            for (int k = 0; k < N; k++)
9555              for (int j = 0; j < N; j++)
9556                c[i][j] = c[i][j] + a[i][k]*b[k][j];
9557     This flag is enabled by default at '-O3'.  It is also enabled by
9558     '-fprofile-use' and '-fauto-profile'.
9559
9560'-floop-unroll-and-jam'
9561     Apply unroll and jam transformations on feasible loops.  In a loop
9562     nest this unrolls the outer loop by some factor and fuses the
9563     resulting multiple inner loops.  This flag is enabled by default at
9564     '-O3'.  It is also enabled by '-fprofile-use' and '-fauto-profile'.
9565
9566'-ftree-loop-im'
9567     Perform loop invariant motion on trees.  This pass moves only
9568     invariants that are hard to handle at RTL level (function calls,
9569     operations that expand to nontrivial sequences of insns).  With
9570     '-funswitch-loops' it also moves operands of conditions that are
9571     invariant out of the loop, so that we can use just trivial
9572     invariantness analysis in loop unswitching.  The pass also includes
9573     store motion.
9574
9575'-ftree-loop-ivcanon'
9576     Create a canonical counter for number of iterations in loops for
9577     which determining number of iterations requires complicated
9578     analysis.  Later optimizations then may determine the number
9579     easily.  Useful especially in connection with unrolling.
9580
9581'-ftree-scev-cprop'
9582     Perform final value replacement.  If a variable is modified in a
9583     loop in such a way that its value when exiting the loop can be
9584     determined using only its initial value and the number of loop
9585     iterations, replace uses of the final value by such a computation,
9586     provided it is sufficiently cheap.  This reduces data dependencies
9587     and may allow further simplifications.  Enabled by default at '-O'
9588     and higher.
9589
9590'-fivopts'
9591     Perform induction variable optimizations (strength reduction,
9592     induction variable merging and induction variable elimination) on
9593     trees.
9594
9595'-ftree-parallelize-loops=n'
9596     Parallelize loops, i.e., split their iteration space to run in n
9597     threads.  This is only possible for loops whose iterations are
9598     independent and can be arbitrarily reordered.  The optimization is
9599     only profitable on multiprocessor machines, for loops that are
9600     CPU-intensive, rather than constrained e.g. by memory bandwidth.
9601     This option implies '-pthread', and thus is only supported on
9602     targets that have support for '-pthread'.
9603
9604'-ftree-pta'
9605     Perform function-local points-to analysis on trees.  This flag is
9606     enabled by default at '-O1' and higher, except for '-Og'.
9607
9608'-ftree-sra'
9609     Perform scalar replacement of aggregates.  This pass replaces
9610     structure references with scalars to prevent committing structures
9611     to memory too early.  This flag is enabled by default at '-O1' and
9612     higher, except for '-Og'.
9613
9614'-fstore-merging'
9615     Perform merging of narrow stores to consecutive memory addresses.
9616     This pass merges contiguous stores of immediate values narrower
9617     than a word into fewer wider stores to reduce the number of
9618     instructions.  This is enabled by default at '-O2' and higher as
9619     well as '-Os'.
9620
9621'-ftree-ter'
9622     Perform temporary expression replacement during the SSA->normal
9623     phase.  Single use/single def temporaries are replaced at their use
9624     location with their defining expression.  This results in
9625     non-GIMPLE code, but gives the expanders much more complex trees to
9626     work on resulting in better RTL generation.  This is enabled by
9627     default at '-O' and higher.
9628
9629'-ftree-slsr'
9630     Perform straight-line strength reduction on trees.  This recognizes
9631     related expressions involving multiplications and replaces them by
9632     less expensive calculations when possible.  This is enabled by
9633     default at '-O' and higher.
9634
9635'-ftree-vectorize'
9636     Perform vectorization on trees.  This flag enables
9637     '-ftree-loop-vectorize' and '-ftree-slp-vectorize' if not
9638     explicitly specified.
9639
9640'-ftree-loop-vectorize'
9641     Perform loop vectorization on trees.  This flag is enabled by
9642     default at '-O3' and by '-ftree-vectorize', '-fprofile-use', and
9643     '-fauto-profile'.
9644
9645'-ftree-slp-vectorize'
9646     Perform basic block vectorization on trees.  This flag is enabled
9647     by default at '-O3' and by '-ftree-vectorize', '-fprofile-use', and
9648     '-fauto-profile'.
9649
9650'-fvect-cost-model=MODEL'
9651     Alter the cost model used for vectorization.  The MODEL argument
9652     should be one of 'unlimited', 'dynamic' or 'cheap'.  With the
9653     'unlimited' model the vectorized code-path is assumed to be
9654     profitable while with the 'dynamic' model a runtime check guards
9655     the vectorized code-path to enable it only for iteration counts
9656     that will likely execute faster than when executing the original
9657     scalar loop.  The 'cheap' model disables vectorization of loops
9658     where doing so would be cost prohibitive for example due to
9659     required runtime checks for data dependence or alignment but
9660     otherwise is equal to the 'dynamic' model.  The default cost model
9661     depends on other optimization flags and is either 'dynamic' or
9662     'cheap'.
9663
9664'-fsimd-cost-model=MODEL'
9665     Alter the cost model used for vectorization of loops marked with
9666     the OpenMP simd directive.  The MODEL argument should be one of
9667     'unlimited', 'dynamic', 'cheap'.  All values of MODEL have the same
9668     meaning as described in '-fvect-cost-model' and by default a cost
9669     model defined with '-fvect-cost-model' is used.
9670
9671'-ftree-vrp'
9672     Perform Value Range Propagation on trees.  This is similar to the
9673     constant propagation pass, but instead of values, ranges of values
9674     are propagated.  This allows the optimizers to remove unnecessary
9675     range checks like array bound checks and null pointer checks.  This
9676     is enabled by default at '-O2' and higher.  Null pointer check
9677     elimination is only done if '-fdelete-null-pointer-checks' is
9678     enabled.
9679
9680'-fsplit-paths'
9681     Split paths leading to loop backedges.  This can improve dead code
9682     elimination and common subexpression elimination.  This is enabled
9683     by default at '-O3' and above.
9684
9685'-fsplit-ivs-in-unroller'
9686     Enables expression of values of induction variables in later
9687     iterations of the unrolled loop using the value in the first
9688     iteration.  This breaks long dependency chains, thus improving
9689     efficiency of the scheduling passes.
9690
9691     A combination of '-fweb' and CSE is often sufficient to obtain the
9692     same effect.  However, that is not reliable in cases where the loop
9693     body is more complicated than a single basic block.  It also does
9694     not work at all on some architectures due to restrictions in the
9695     CSE pass.
9696
9697     This optimization is enabled by default.
9698
9699'-fvariable-expansion-in-unroller'
9700     With this option, the compiler creates multiple copies of some
9701     local variables when unrolling a loop, which can result in superior
9702     code.
9703
9704     This optimization is enabled by default for PowerPC targets, but
9705     disabled by default otherwise.
9706
9707'-fpartial-inlining'
9708     Inline parts of functions.  This option has any effect only when
9709     inlining itself is turned on by the '-finline-functions' or
9710     '-finline-small-functions' options.
9711
9712     Enabled at levels '-O2', '-O3', '-Os'.
9713
9714'-fpredictive-commoning'
9715     Perform predictive commoning optimization, i.e., reusing
9716     computations (especially memory loads and stores) performed in
9717     previous iterations of loops.
9718
9719     This option is enabled at level '-O3'.  It is also enabled by
9720     '-fprofile-use' and '-fauto-profile'.
9721
9722'-fprefetch-loop-arrays'
9723     If supported by the target machine, generate instructions to
9724     prefetch memory to improve the performance of loops that access
9725     large arrays.
9726
9727     This option may generate better or worse code; results are highly
9728     dependent on the structure of loops within the source code.
9729
9730     Disabled at level '-Os'.
9731
9732'-fno-printf-return-value'
9733     Do not substitute constants for known return value of formatted
9734     output functions such as 'sprintf', 'snprintf', 'vsprintf', and
9735     'vsnprintf' (but not 'printf' of 'fprintf').  This transformation
9736     allows GCC to optimize or even eliminate branches based on the
9737     known return value of these functions called with arguments that
9738     are either constant, or whose values are known to be in a range
9739     that makes determining the exact return value possible.  For
9740     example, when '-fprintf-return-value' is in effect, both the branch
9741     and the body of the 'if' statement (but not the call to 'snprint')
9742     can be optimized away when 'i' is a 32-bit or smaller integer
9743     because the return value is guaranteed to be at most 8.
9744
9745          char buf[9];
9746          if (snprintf (buf, "%08x", i) >= sizeof buf)
9747            ...
9748
9749     The '-fprintf-return-value' option relies on other optimizations
9750     and yields best results with '-O2' and above.  It works in tandem
9751     with the '-Wformat-overflow' and '-Wformat-truncation' options.
9752     The '-fprintf-return-value' option is enabled by default.
9753
9754'-fno-peephole'
9755'-fno-peephole2'
9756     Disable any machine-specific peephole optimizations.  The
9757     difference between '-fno-peephole' and '-fno-peephole2' is in how
9758     they are implemented in the compiler; some targets use one, some
9759     use the other, a few use both.
9760
9761     '-fpeephole' is enabled by default.  '-fpeephole2' enabled at
9762     levels '-O2', '-O3', '-Os'.
9763
9764'-fno-guess-branch-probability'
9765     Do not guess branch probabilities using heuristics.
9766
9767     GCC uses heuristics to guess branch probabilities if they are not
9768     provided by profiling feedback ('-fprofile-arcs').  These
9769     heuristics are based on the control flow graph.  If some branch
9770     probabilities are specified by '__builtin_expect', then the
9771     heuristics are used to guess branch probabilities for the rest of
9772     the control flow graph, taking the '__builtin_expect' info into
9773     account.  The interactions between the heuristics and
9774     '__builtin_expect' can be complex, and in some cases, it may be
9775     useful to disable the heuristics so that the effects of
9776     '__builtin_expect' are easier to understand.
9777
9778     It is also possible to specify expected probability of the
9779     expression with '__builtin_expect_with_probability' built-in
9780     function.
9781
9782     The default is '-fguess-branch-probability' at levels '-O', '-O2',
9783     '-O3', '-Os'.
9784
9785'-freorder-blocks'
9786     Reorder basic blocks in the compiled function in order to reduce
9787     number of taken branches and improve code locality.
9788
9789     Enabled at levels '-O', '-O2', '-O3', '-Os'.
9790
9791'-freorder-blocks-algorithm=ALGORITHM'
9792     Use the specified algorithm for basic block reordering.  The
9793     ALGORITHM argument can be 'simple', which does not increase code
9794     size (except sometimes due to secondary effects like alignment), or
9795     'stc', the "software trace cache" algorithm, which tries to put all
9796     often executed code together, minimizing the number of branches
9797     executed by making extra copies of code.
9798
9799     The default is 'simple' at levels '-O', '-Os', and 'stc' at levels
9800     '-O2', '-O3'.
9801
9802'-freorder-blocks-and-partition'
9803     In addition to reordering basic blocks in the compiled function, in
9804     order to reduce number of taken branches, partitions hot and cold
9805     basic blocks into separate sections of the assembly and '.o' files,
9806     to improve paging and cache locality performance.
9807
9808     This optimization is automatically turned off in the presence of
9809     exception handling or unwind tables (on targets using
9810     setjump/longjump or target specific scheme), for linkonce sections,
9811     for functions with a user-defined section attribute and on any
9812     architecture that does not support named sections.  When
9813     '-fsplit-stack' is used this option is not enabled by default (to
9814     avoid linker errors), but may be enabled explicitly (if using a
9815     working linker).
9816
9817     Enabled for x86 at levels '-O2', '-O3', '-Os'.
9818
9819'-freorder-functions'
9820     Reorder functions in the object file in order to improve code
9821     locality.  This is implemented by using special subsections
9822     '.text.hot' for most frequently executed functions and
9823     '.text.unlikely' for unlikely executed functions.  Reordering is
9824     done by the linker so object file format must support named
9825     sections and linker must place them in a reasonable way.
9826
9827     This option isn't effective unless you either provide profile
9828     feedback (see '-fprofile-arcs' for details) or manually annotate
9829     functions with 'hot' or 'cold' attributes (*note Common Function
9830     Attributes::).
9831
9832     Enabled at levels '-O2', '-O3', '-Os'.
9833
9834'-fstrict-aliasing'
9835     Allow the compiler to assume the strictest aliasing rules
9836     applicable to the language being compiled.  For C (and C++), this
9837     activates optimizations based on the type of expressions.  In
9838     particular, an object of one type is assumed never to reside at the
9839     same address as an object of a different type, unless the types are
9840     almost the same.  For example, an 'unsigned int' can alias an
9841     'int', but not a 'void*' or a 'double'.  A character type may alias
9842     any other type.
9843
9844     Pay special attention to code like this:
9845          union a_union {
9846            int i;
9847            double d;
9848          };
9849
9850          int f() {
9851            union a_union t;
9852            t.d = 3.0;
9853            return t.i;
9854          }
9855     The practice of reading from a different union member than the one
9856     most recently written to (called "type-punning") is common.  Even
9857     with '-fstrict-aliasing', type-punning is allowed, provided the
9858     memory is accessed through the union type.  So, the code above
9859     works as expected.  *Note Structures unions enumerations and
9860     bit-fields implementation::.  However, this code might not:
9861          int f() {
9862            union a_union t;
9863            int* ip;
9864            t.d = 3.0;
9865            ip = &t.i;
9866            return *ip;
9867          }
9868
9869     Similarly, access by taking the address, casting the resulting
9870     pointer and dereferencing the result has undefined behavior, even
9871     if the cast uses a union type, e.g.:
9872          int f() {
9873            double d = 3.0;
9874            return ((union a_union *) &d)->i;
9875          }
9876
9877     The '-fstrict-aliasing' option is enabled at levels '-O2', '-O3',
9878     '-Os'.
9879
9880'-falign-functions'
9881'-falign-functions=N'
9882'-falign-functions=N:M'
9883'-falign-functions=N:M:N2'
9884'-falign-functions=N:M:N2:M2'
9885     Align the start of functions to the next power-of-two greater than
9886     or equal to N, skipping up to M-1 bytes.  This ensures that at
9887     least the first M bytes of the function can be fetched by the CPU
9888     without crossing an N-byte alignment boundary.
9889
9890     If M is not specified, it defaults to N.
9891
9892     Examples: '-falign-functions=32' aligns functions to the next
9893     32-byte boundary, '-falign-functions=24' aligns to the next 32-byte
9894     boundary only if this can be done by skipping 23 bytes or less,
9895     '-falign-functions=32:7' aligns to the next 32-byte boundary only
9896     if this can be done by skipping 6 bytes or less.
9897
9898     The second pair of N2:M2 values allows you to specify a secondary
9899     alignment: '-falign-functions=64:7:32:3' aligns to the next 64-byte
9900     boundary if this can be done by skipping 6 bytes or less, otherwise
9901     aligns to the next 32-byte boundary if this can be done by skipping
9902     2 bytes or less.  If M2 is not specified, it defaults to N2.
9903
9904     Some assemblers only support this flag when N is a power of two; in
9905     that case, it is rounded up.
9906
9907     '-fno-align-functions' and '-falign-functions=1' are equivalent and
9908     mean that functions are not aligned.
9909
9910     If N is not specified or is zero, use a machine-dependent default.
9911     The maximum allowed N option value is 65536.
9912
9913     Enabled at levels '-O2', '-O3'.
9914
9915'-flimit-function-alignment'
9916     If this option is enabled, the compiler tries to avoid
9917     unnecessarily overaligning functions.  It attempts to instruct the
9918     assembler to align by the amount specified by '-falign-functions',
9919     but not to skip more bytes than the size of the function.
9920
9921'-falign-labels'
9922'-falign-labels=N'
9923'-falign-labels=N:M'
9924'-falign-labels=N:M:N2'
9925'-falign-labels=N:M:N2:M2'
9926     Align all branch targets to a power-of-two boundary.
9927
9928     Parameters of this option are analogous to the '-falign-functions'
9929     option.  '-fno-align-labels' and '-falign-labels=1' are equivalent
9930     and mean that labels are not aligned.
9931
9932     If '-falign-loops' or '-falign-jumps' are applicable and are
9933     greater than this value, then their values are used instead.
9934
9935     If N is not specified or is zero, use a machine-dependent default
9936     which is very likely to be '1', meaning no alignment.  The maximum
9937     allowed N option value is 65536.
9938
9939     Enabled at levels '-O2', '-O3'.
9940
9941'-falign-loops'
9942'-falign-loops=N'
9943'-falign-loops=N:M'
9944'-falign-loops=N:M:N2'
9945'-falign-loops=N:M:N2:M2'
9946     Align loops to a power-of-two boundary.  If the loops are executed
9947     many times, this makes up for any execution of the dummy padding
9948     instructions.
9949
9950     If '-falign-labels' is greater than this value, then its value is
9951     used instead.
9952
9953     Parameters of this option are analogous to the '-falign-functions'
9954     option.  '-fno-align-loops' and '-falign-loops=1' are equivalent
9955     and mean that loops are not aligned.  The maximum allowed N option
9956     value is 65536.
9957
9958     If N is not specified or is zero, use a machine-dependent default.
9959
9960     Enabled at levels '-O2', '-O3'.
9961
9962'-falign-jumps'
9963'-falign-jumps=N'
9964'-falign-jumps=N:M'
9965'-falign-jumps=N:M:N2'
9966'-falign-jumps=N:M:N2:M2'
9967     Align branch targets to a power-of-two boundary, for branch targets
9968     where the targets can only be reached by jumping.  In this case, no
9969     dummy operations need be executed.
9970
9971     If '-falign-labels' is greater than this value, then its value is
9972     used instead.
9973
9974     Parameters of this option are analogous to the '-falign-functions'
9975     option.  '-fno-align-jumps' and '-falign-jumps=1' are equivalent
9976     and mean that loops are not aligned.
9977
9978     If N is not specified or is zero, use a machine-dependent default.
9979     The maximum allowed N option value is 65536.
9980
9981     Enabled at levels '-O2', '-O3'.
9982
9983'-fno-allocation-dce'
9984     Do not remove unused C++ allocations in dead code elimination.
9985
9986'-fallow-store-data-races'
9987     Allow the compiler to introduce new data races on stores.
9988
9989     Enabled at level '-Ofast'.
9990
9991'-funit-at-a-time'
9992     This option is left for compatibility reasons.  '-funit-at-a-time'
9993     has no effect, while '-fno-unit-at-a-time' implies
9994     '-fno-toplevel-reorder' and '-fno-section-anchors'.
9995
9996     Enabled by default.
9997
9998'-fno-toplevel-reorder'
9999     Do not reorder top-level functions, variables, and 'asm'
10000     statements.  Output them in the same order that they appear in the
10001     input file.  When this option is used, unreferenced static
10002     variables are not removed.  This option is intended to support
10003     existing code that relies on a particular ordering.  For new code,
10004     it is better to use attributes when possible.
10005
10006     '-ftoplevel-reorder' is the default at '-O1' and higher, and also
10007     at '-O0' if '-fsection-anchors' is explicitly requested.
10008     Additionally '-fno-toplevel-reorder' implies
10009     '-fno-section-anchors'.
10010
10011'-fweb'
10012     Constructs webs as commonly used for register allocation purposes
10013     and assign each web individual pseudo register.  This allows the
10014     register allocation pass to operate on pseudos directly, but also
10015     strengthens several other optimization passes, such as CSE, loop
10016     optimizer and trivial dead code remover.  It can, however, make
10017     debugging impossible, since variables no longer stay in a "home
10018     register".
10019
10020     Enabled by default with '-funroll-loops'.
10021
10022'-fwhole-program'
10023     Assume that the current compilation unit represents the whole
10024     program being compiled.  All public functions and variables with
10025     the exception of 'main' and those merged by attribute
10026     'externally_visible' become static functions and in effect are
10027     optimized more aggressively by interprocedural optimizers.
10028
10029     This option should not be used in combination with '-flto'.
10030     Instead relying on a linker plugin should provide safer and more
10031     precise information.
10032
10033'-flto[=N]'
10034     This option runs the standard link-time optimizer.  When invoked
10035     with source code, it generates GIMPLE (one of GCC's internal
10036     representations) and writes it to special ELF sections in the
10037     object file.  When the object files are linked together, all the
10038     function bodies are read from these ELF sections and instantiated
10039     as if they had been part of the same translation unit.
10040
10041     To use the link-time optimizer, '-flto' and optimization options
10042     should be specified at compile time and during the final link.  It
10043     is recommended that you compile all the files participating in the
10044     same link with the same options and also specify those options at
10045     link time.  For example:
10046
10047          gcc -c -O2 -flto foo.c
10048          gcc -c -O2 -flto bar.c
10049          gcc -o myprog -flto -O2 foo.o bar.o
10050
10051     The first two invocations to GCC save a bytecode representation of
10052     GIMPLE into special ELF sections inside 'foo.o' and 'bar.o'.  The
10053     final invocation reads the GIMPLE bytecode from 'foo.o' and
10054     'bar.o', merges the two files into a single internal image, and
10055     compiles the result as usual.  Since both 'foo.o' and 'bar.o' are
10056     merged into a single image, this causes all the interprocedural
10057     analyses and optimizations in GCC to work across the two files as
10058     if they were a single one.  This means, for example, that the
10059     inliner is able to inline functions in 'bar.o' into functions in
10060     'foo.o' and vice-versa.
10061
10062     Another (simpler) way to enable link-time optimization is:
10063
10064          gcc -o myprog -flto -O2 foo.c bar.c
10065
10066     The above generates bytecode for 'foo.c' and 'bar.c', merges them
10067     together into a single GIMPLE representation and optimizes them as
10068     usual to produce 'myprog'.
10069
10070     The important thing to keep in mind is that to enable link-time
10071     optimizations you need to use the GCC driver to perform the link
10072     step.  GCC automatically performs link-time optimization if any of
10073     the objects involved were compiled with the '-flto' command-line
10074     option.  You can always override the automatic decision to do
10075     link-time optimization by passing '-fno-lto' to the link command.
10076
10077     To make whole program optimization effective, it is necessary to
10078     make certain whole program assumptions.  The compiler needs to know
10079     what functions and variables can be accessed by libraries and
10080     runtime outside of the link-time optimized unit.  When supported by
10081     the linker, the linker plugin (see '-fuse-linker-plugin') passes
10082     information to the compiler about used and externally visible
10083     symbols.  When the linker plugin is not available,
10084     '-fwhole-program' should be used to allow the compiler to make
10085     these assumptions, which leads to more aggressive optimization
10086     decisions.
10087
10088     When a file is compiled with '-flto' without '-fuse-linker-plugin',
10089     the generated object file is larger than a regular object file
10090     because it contains GIMPLE bytecodes and the usual final code (see
10091     '-ffat-lto-objects'.  This means that object files with LTO
10092     information can be linked as normal object files; if '-fno-lto' is
10093     passed to the linker, no interprocedural optimizations are applied.
10094     Note that when '-fno-fat-lto-objects' is enabled the compile stage
10095     is faster but you cannot perform a regular, non-LTO link on them.
10096
10097     When producing the final binary, GCC only applies link-time
10098     optimizations to those files that contain bytecode.  Therefore, you
10099     can mix and match object files and libraries with GIMPLE bytecodes
10100     and final object code.  GCC automatically selects which files to
10101     optimize in LTO mode and which files to link without further
10102     processing.
10103
10104     Generally, options specified at link time override those specified
10105     at compile time, although in some cases GCC attempts to infer
10106     link-time options from the settings used to compile the input
10107     files.
10108
10109     If you do not specify an optimization level option '-O' at link
10110     time, then GCC uses the highest optimization level used when
10111     compiling the object files.  Note that it is generally ineffective
10112     to specify an optimization level option only at link time and not
10113     at compile time, for two reasons.  First, compiling without
10114     optimization suppresses compiler passes that gather information
10115     needed for effective optimization at link time.  Second, some early
10116     optimization passes can be performed only at compile time and not
10117     at link time.
10118
10119     There are some code generation flags preserved by GCC when
10120     generating bytecodes, as they need to be used during the final
10121     link.  Currently, the following options and their settings are
10122     taken from the first object file that explicitly specifies them:
10123     '-fPIC', '-fpic', '-fpie', '-fcommon', '-fexceptions',
10124     '-fnon-call-exceptions', '-fgnu-tm' and all the '-m' target flags.
10125
10126     Certain ABI-changing flags are required to match in all compilation
10127     units, and trying to override this at link time with a conflicting
10128     value is ignored.  This includes options such as
10129     '-freg-struct-return' and '-fpcc-struct-return'.
10130
10131     Other options such as '-ffp-contract', '-fno-strict-overflow',
10132     '-fwrapv', '-fno-trapv' or '-fno-strict-aliasing' are passed
10133     through to the link stage and merged conservatively for conflicting
10134     translation units.  Specifically '-fno-strict-overflow', '-fwrapv'
10135     and '-fno-trapv' take precedence; and for example
10136     '-ffp-contract=off' takes precedence over '-ffp-contract=fast'.
10137     You can override them at link time.
10138
10139     Diagnostic options such as '-Wstringop-overflow' are passed through
10140     to the link stage and their setting matches that of the
10141     compile-step at function granularity.  Note that this matters only
10142     for diagnostics emitted during optimization.  Note that code
10143     transforms such as inlining can lead to warnings being enabled or
10144     disabled for regions if code not consistent with the setting at
10145     compile time.
10146
10147     When you need to pass options to the assembler via '-Wa' or
10148     '-Xassembler' make sure to either compile such translation units
10149     with '-fno-lto' or consistently use the same assembler options on
10150     all translation units.  You can alternatively also specify
10151     assembler options at LTO link time.
10152
10153     To enable debug info generation you need to supply '-g' at compile
10154     time.  If any of the input files at link time were built with debug
10155     info generation enabled the link will enable debug info generation
10156     as well.  Any elaborate debug info settings like the dwarf level
10157     '-gdwarf-5' need to be explicitly repeated at the linker command
10158     line and mixing different settings in different translation units
10159     is discouraged.
10160
10161     If LTO encounters objects with C linkage declared with incompatible
10162     types in separate translation units to be linked together
10163     (undefined behavior according to ISO C99 6.2.7), a non-fatal
10164     diagnostic may be issued.  The behavior is still undefined at run
10165     time.  Similar diagnostics may be raised for other languages.
10166
10167     Another feature of LTO is that it is possible to apply
10168     interprocedural optimizations on files written in different
10169     languages:
10170
10171          gcc -c -flto foo.c
10172          g++ -c -flto bar.cc
10173          gfortran -c -flto baz.f90
10174          g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
10175
10176     Notice that the final link is done with 'g++' to get the C++
10177     runtime libraries and '-lgfortran' is added to get the Fortran
10178     runtime libraries.  In general, when mixing languages in LTO mode,
10179     you should use the same link command options as when mixing
10180     languages in a regular (non-LTO) compilation.
10181
10182     If object files containing GIMPLE bytecode are stored in a library
10183     archive, say 'libfoo.a', it is possible to extract and use them in
10184     an LTO link if you are using a linker with plugin support.  To
10185     create static libraries suitable for LTO, use 'gcc-ar' and
10186     'gcc-ranlib' instead of 'ar' and 'ranlib'; to show the symbols of
10187     object files with GIMPLE bytecode, use 'gcc-nm'.  Those commands
10188     require that 'ar', 'ranlib' and 'nm' have been compiled with plugin
10189     support.  At link time, use the flag '-fuse-linker-plugin' to
10190     ensure that the library participates in the LTO optimization
10191     process:
10192
10193          gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
10194
10195     With the linker plugin enabled, the linker extracts the needed
10196     GIMPLE files from 'libfoo.a' and passes them on to the running GCC
10197     to make them part of the aggregated GIMPLE image to be optimized.
10198
10199     If you are not using a linker with plugin support and/or do not
10200     enable the linker plugin, then the objects inside 'libfoo.a' are
10201     extracted and linked as usual, but they do not participate in the
10202     LTO optimization process.  In order to make a static library
10203     suitable for both LTO optimization and usual linkage, compile its
10204     object files with '-flto' '-ffat-lto-objects'.
10205
10206     Link-time optimizations do not require the presence of the whole
10207     program to operate.  If the program does not require any symbols to
10208     be exported, it is possible to combine '-flto' and
10209     '-fwhole-program' to allow the interprocedural optimizers to use
10210     more aggressive assumptions which may lead to improved optimization
10211     opportunities.  Use of '-fwhole-program' is not needed when linker
10212     plugin is active (see '-fuse-linker-plugin').
10213
10214     The current implementation of LTO makes no attempt to generate
10215     bytecode that is portable between different types of hosts.  The
10216     bytecode files are versioned and there is a strict version check,
10217     so bytecode files generated in one version of GCC do not work with
10218     an older or newer version of GCC.
10219
10220     Link-time optimization does not work well with generation of
10221     debugging information on systems other than those using a
10222     combination of ELF and DWARF.
10223
10224     If you specify the optional N, the optimization and code generation
10225     done at link time is executed in parallel using N parallel jobs by
10226     utilizing an installed 'make' program.  The environment variable
10227     'MAKE' may be used to override the program used.
10228
10229     You can also specify '-flto=jobserver' to use GNU make's job server
10230     mode to determine the number of parallel jobs.  This is useful when
10231     the Makefile calling GCC is already executing in parallel.  You
10232     must prepend a '+' to the command recipe in the parent Makefile for
10233     this to work.  This option likely only works if 'MAKE' is GNU make.
10234     Even without the option value, GCC tries to automatically detect a
10235     running GNU make's job server.
10236
10237     Use '-flto=auto' to use GNU make's job server, if available, or
10238     otherwise fall back to autodetection of the number of CPU threads
10239     present in your system.
10240
10241'-flto-partition=ALG'
10242     Specify the partitioning algorithm used by the link-time optimizer.
10243     The value is either '1to1' to specify a partitioning mirroring the
10244     original source files or 'balanced' to specify partitioning into
10245     equally sized chunks (whenever possible) or 'max' to create new
10246     partition for every symbol where possible.  Specifying 'none' as an
10247     algorithm disables partitioning and streaming completely.  The
10248     default value is 'balanced'.  While '1to1' can be used as an
10249     workaround for various code ordering issues, the 'max' partitioning
10250     is intended for internal testing only.  The value 'one' specifies
10251     that exactly one partition should be used while the value 'none'
10252     bypasses partitioning and executes the link-time optimization step
10253     directly from the WPA phase.
10254
10255'-flto-compression-level=N'
10256     This option specifies the level of compression used for
10257     intermediate language written to LTO object files, and is only
10258     meaningful in conjunction with LTO mode ('-flto').  Valid values
10259     are 0 (no compression) to 9 (maximum compression).  Values outside
10260     this range are clamped to either 0 or 9.  If the option is not
10261     given, a default balanced compression setting is used.
10262
10263'-fuse-linker-plugin'
10264     Enables the use of a linker plugin during link-time optimization.
10265     This option relies on plugin support in the linker, which is
10266     available in gold or in GNU ld 2.21 or newer.
10267
10268     This option enables the extraction of object files with GIMPLE
10269     bytecode out of library archives.  This improves the quality of
10270     optimization by exposing more code to the link-time optimizer.
10271     This information specifies what symbols can be accessed externally
10272     (by non-LTO object or during dynamic linking).  Resulting code
10273     quality improvements on binaries (and shared libraries that use
10274     hidden visibility) are similar to '-fwhole-program'.  See '-flto'
10275     for a description of the effect of this flag and how to use it.
10276
10277     This option is enabled by default when LTO support in GCC is
10278     enabled and GCC was configured for use with a linker supporting
10279     plugins (GNU ld 2.21 or newer or gold).
10280
10281'-ffat-lto-objects'
10282     Fat LTO objects are object files that contain both the intermediate
10283     language and the object code.  This makes them usable for both LTO
10284     linking and normal linking.  This option is effective only when
10285     compiling with '-flto' and is ignored at link time.
10286
10287     '-fno-fat-lto-objects' improves compilation time over plain LTO,
10288     but requires the complete toolchain to be aware of LTO. It requires
10289     a linker with linker plugin support for basic functionality.
10290     Additionally, 'nm', 'ar' and 'ranlib' need to support linker
10291     plugins to allow a full-featured build environment (capable of
10292     building static libraries etc).  GCC provides the 'gcc-ar',
10293     'gcc-nm', 'gcc-ranlib' wrappers to pass the right options to these
10294     tools.  With non fat LTO makefiles need to be modified to use them.
10295
10296     Note that modern binutils provide plugin auto-load mechanism.
10297     Installing the linker plugin into '$libdir/bfd-plugins' has the
10298     same effect as usage of the command wrappers ('gcc-ar', 'gcc-nm'
10299     and 'gcc-ranlib').
10300
10301     The default is '-fno-fat-lto-objects' on targets with linker plugin
10302     support.
10303
10304'-fcompare-elim'
10305     After register allocation and post-register allocation instruction
10306     splitting, identify arithmetic instructions that compute processor
10307     flags similar to a comparison operation based on that arithmetic.
10308     If possible, eliminate the explicit comparison operation.
10309
10310     This pass only applies to certain targets that cannot explicitly
10311     represent the comparison operation before register allocation is
10312     complete.
10313
10314     Enabled at levels '-O', '-O2', '-O3', '-Os'.
10315
10316'-fcprop-registers'
10317     After register allocation and post-register allocation instruction
10318     splitting, perform a copy-propagation pass to try to reduce
10319     scheduling dependencies and occasionally eliminate the copy.
10320
10321     Enabled at levels '-O', '-O2', '-O3', '-Os'.
10322
10323'-fprofile-correction'
10324     Profiles collected using an instrumented binary for multi-threaded
10325     programs may be inconsistent due to missed counter updates.  When
10326     this option is specified, GCC uses heuristics to correct or smooth
10327     out such inconsistencies.  By default, GCC emits an error message
10328     when an inconsistent profile is detected.
10329
10330     This option is enabled by '-fauto-profile'.
10331
10332'-fprofile-partial-training'
10333     With '-fprofile-use' all portions of programs not executed during
10334     train run are optimized agressively for size rather than speed.  In
10335     some cases it is not practical to train all possible hot paths in
10336     the program.  (For example, program may contain functions specific
10337     for a given hardware and trianing may not cover all hardware
10338     configurations program is run on.)  With
10339     '-fprofile-partial-training' profile feedback will be ignored for
10340     all functions not executed during the train run leading them to be
10341     optimized as if they were compiled without profile feedback.  This
10342     leads to better performance when train run is not representative
10343     but also leads to significantly bigger code.
10344
10345'-fprofile-use'
10346'-fprofile-use=PATH'
10347     Enable profile feedback-directed optimizations, and the following
10348     optimizations, many of which are generally profitable only with
10349     profile feedback available:
10350
10351          -fbranch-probabilities  -fprofile-values
10352          -funroll-loops  -fpeel-loops  -ftracer  -fvpt
10353          -finline-functions  -fipa-cp  -fipa-cp-clone  -fipa-bit-cp
10354          -fpredictive-commoning  -fsplit-loops  -funswitch-loops
10355          -fgcse-after-reload  -ftree-loop-vectorize  -ftree-slp-vectorize
10356          -fvect-cost-model=dynamic  -ftree-loop-distribute-patterns
10357          -fprofile-reorder-functions
10358
10359     Before you can use this option, you must first generate profiling
10360     information.  *Note Instrumentation Options::, for information
10361     about the '-fprofile-generate' option.
10362
10363     By default, GCC emits an error message if the feedback profiles do
10364     not match the source code.  This error can be turned into a warning
10365     by using '-Wno-error=coverage-mismatch'.  Note this may result in
10366     poorly optimized code.  Additionally, by default, GCC also emits a
10367     warning message if the feedback profiles do not exist (see
10368     '-Wmissing-profile').
10369
10370     If PATH is specified, GCC looks at the PATH to find the profile
10371     feedback data files.  See '-fprofile-dir'.
10372
10373'-fauto-profile'
10374'-fauto-profile=PATH'
10375     Enable sampling-based feedback-directed optimizations, and the
10376     following optimizations, many of which are generally profitable
10377     only with profile feedback available:
10378
10379          -fbranch-probabilities  -fprofile-values
10380          -funroll-loops  -fpeel-loops  -ftracer  -fvpt
10381          -finline-functions  -fipa-cp  -fipa-cp-clone  -fipa-bit-cp
10382          -fpredictive-commoning  -fsplit-loops  -funswitch-loops
10383          -fgcse-after-reload  -ftree-loop-vectorize  -ftree-slp-vectorize
10384          -fvect-cost-model=dynamic  -ftree-loop-distribute-patterns
10385          -fprofile-correction
10386
10387     PATH is the name of a file containing AutoFDO profile information.
10388     If omitted, it defaults to 'fbdata.afdo' in the current directory.
10389
10390     Producing an AutoFDO profile data file requires running your
10391     program with the 'perf' utility on a supported GNU/Linux target
10392     system.  For more information, see <https://perf.wiki.kernel.org/>.
10393
10394     E.g.
10395          perf record -e br_inst_retired:near_taken -b -o perf.data \
10396              -- your_program
10397
10398     Then use the 'create_gcov' tool to convert the raw profile data to
10399     a format that can be used by GCC.  You must also supply the
10400     unstripped binary for your program to this tool.  See
10401     <https://github.com/google/autofdo>.
10402
10403     E.g.
10404          create_gcov --binary=your_program.unstripped --profile=perf.data \
10405              --gcov=profile.afdo
10406
10407 The following options control compiler behavior regarding
10408floating-point arithmetic.  These options trade off between speed and
10409correctness.  All must be specifically enabled.
10410
10411'-ffloat-store'
10412     Do not store floating-point variables in registers, and inhibit
10413     other options that might change whether a floating-point value is
10414     taken from a register or memory.
10415
10416     This option prevents undesirable excess precision on machines such
10417     as the 68000 where the floating registers (of the 68881) keep more
10418     precision than a 'double' is supposed to have.  Similarly for the
10419     x86 architecture.  For most programs, the excess precision does
10420     only good, but a few programs rely on the precise definition of
10421     IEEE floating point.  Use '-ffloat-store' for such programs, after
10422     modifying them to store all pertinent intermediate computations
10423     into variables.
10424
10425'-fexcess-precision=STYLE'
10426     This option allows further control over excess precision on
10427     machines where floating-point operations occur in a format with
10428     more precision or range than the IEEE standard and interchange
10429     floating-point types.  By default, '-fexcess-precision=fast' is in
10430     effect; this means that operations may be carried out in a wider
10431     precision than the types specified in the source if that would
10432     result in faster code, and it is unpredictable when rounding to the
10433     types specified in the source code takes place.  When compiling C,
10434     if '-fexcess-precision=standard' is specified then excess precision
10435     follows the rules specified in ISO C99; in particular, both casts
10436     and assignments cause values to be rounded to their semantic types
10437     (whereas '-ffloat-store' only affects assignments).  This option is
10438     enabled by default for C if a strict conformance option such as
10439     '-std=c99' is used.  '-ffast-math' enables
10440     '-fexcess-precision=fast' by default regardless of whether a strict
10441     conformance option is used.
10442
10443     '-fexcess-precision=standard' is not implemented for languages
10444     other than C. On the x86, it has no effect if '-mfpmath=sse' or
10445     '-mfpmath=sse+387' is specified; in the former case, IEEE semantics
10446     apply without excess precision, and in the latter, rounding is
10447     unpredictable.
10448
10449'-ffast-math'
10450     Sets the options '-fno-math-errno', '-funsafe-math-optimizations',
10451     '-ffinite-math-only', '-fno-rounding-math', '-fno-signaling-nans',
10452     '-fcx-limited-range' and '-fexcess-precision=fast'.
10453
10454     This option causes the preprocessor macro '__FAST_MATH__' to be
10455     defined.
10456
10457     This option is not turned on by any '-O' option besides '-Ofast'
10458     since it can result in incorrect output for programs that depend on
10459     an exact implementation of IEEE or ISO rules/specifications for
10460     math functions.  It may, however, yield faster code for programs
10461     that do not require the guarantees of these specifications.
10462
10463'-fno-math-errno'
10464     Do not set 'errno' after calling math functions that are executed
10465     with a single instruction, e.g., 'sqrt'.  A program that relies on
10466     IEEE exceptions for math error handling may want to use this flag
10467     for speed while maintaining IEEE arithmetic compatibility.
10468
10469     This option is not turned on by any '-O' option since it can result
10470     in incorrect output for programs that depend on an exact
10471     implementation of IEEE or ISO rules/specifications for math
10472     functions.  It may, however, yield faster code for programs that do
10473     not require the guarantees of these specifications.
10474
10475     The default is '-fmath-errno'.
10476
10477     On Darwin systems, the math library never sets 'errno'.  There is
10478     therefore no reason for the compiler to consider the possibility
10479     that it might, and '-fno-math-errno' is the default.
10480
10481'-funsafe-math-optimizations'
10482
10483     Allow optimizations for floating-point arithmetic that (a) assume
10484     that arguments and results are valid and (b) may violate IEEE or
10485     ANSI standards.  When used at link time, it may include libraries
10486     or startup files that change the default FPU control word or other
10487     similar optimizations.
10488
10489     This option is not turned on by any '-O' option since it can result
10490     in incorrect output for programs that depend on an exact
10491     implementation of IEEE or ISO rules/specifications for math
10492     functions.  It may, however, yield faster code for programs that do
10493     not require the guarantees of these specifications.  Enables
10494     '-fno-signed-zeros', '-fno-trapping-math', '-fassociative-math' and
10495     '-freciprocal-math'.
10496
10497     The default is '-fno-unsafe-math-optimizations'.
10498
10499'-fassociative-math'
10500
10501     Allow re-association of operands in series of floating-point
10502     operations.  This violates the ISO C and C++ language standard by
10503     possibly changing computation result.  NOTE: re-ordering may change
10504     the sign of zero as well as ignore NaNs and inhibit or create
10505     underflow or overflow (and thus cannot be used on code that relies
10506     on rounding behavior like '(x + 2**52) - 2**52'.  May also reorder
10507     floating-point comparisons and thus may not be used when ordered
10508     comparisons are required.  This option requires that both
10509     '-fno-signed-zeros' and '-fno-trapping-math' be in effect.
10510     Moreover, it doesn't make much sense with '-frounding-math'.  For
10511     Fortran the option is automatically enabled when both
10512     '-fno-signed-zeros' and '-fno-trapping-math' are in effect.
10513
10514     The default is '-fno-associative-math'.
10515
10516'-freciprocal-math'
10517
10518     Allow the reciprocal of a value to be used instead of dividing by
10519     the value if this enables optimizations.  For example 'x / y' can
10520     be replaced with 'x * (1/y)', which is useful if '(1/y)' is subject
10521     to common subexpression elimination.  Note that this loses
10522     precision and increases the number of flops operating on the value.
10523
10524     The default is '-fno-reciprocal-math'.
10525
10526'-ffinite-math-only'
10527     Allow optimizations for floating-point arithmetic that assume that
10528     arguments and results are not NaNs or +-Infs.
10529
10530     This option is not turned on by any '-O' option since it can result
10531     in incorrect output for programs that depend on an exact
10532     implementation of IEEE or ISO rules/specifications for math
10533     functions.  It may, however, yield faster code for programs that do
10534     not require the guarantees of these specifications.
10535
10536     The default is '-fno-finite-math-only'.
10537
10538'-fno-signed-zeros'
10539     Allow optimizations for floating-point arithmetic that ignore the
10540     signedness of zero.  IEEE arithmetic specifies the behavior of
10541     distinct +0.0 and -0.0 values, which then prohibits simplification
10542     of expressions such as x+0.0 or 0.0*x (even with
10543     '-ffinite-math-only').  This option implies that the sign of a zero
10544     result isn't significant.
10545
10546     The default is '-fsigned-zeros'.
10547
10548'-fno-trapping-math'
10549     Compile code assuming that floating-point operations cannot
10550     generate user-visible traps.  These traps include division by zero,
10551     overflow, underflow, inexact result and invalid operation.  This
10552     option requires that '-fno-signaling-nans' be in effect.  Setting
10553     this option may allow faster code if one relies on "non-stop" IEEE
10554     arithmetic, for example.
10555
10556     This option should never be turned on by any '-O' option since it
10557     can result in incorrect output for programs that depend on an exact
10558     implementation of IEEE or ISO rules/specifications for math
10559     functions.
10560
10561     The default is '-ftrapping-math'.
10562
10563'-frounding-math'
10564     Disable transformations and optimizations that assume default
10565     floating-point rounding behavior.  This is round-to-zero for all
10566     floating point to integer conversions, and round-to-nearest for all
10567     other arithmetic truncations.  This option should be specified for
10568     programs that change the FP rounding mode dynamically, or that may
10569     be executed with a non-default rounding mode.  This option disables
10570     constant folding of floating-point expressions at compile time
10571     (which may be affected by rounding mode) and arithmetic
10572     transformations that are unsafe in the presence of sign-dependent
10573     rounding modes.
10574
10575     The default is '-fno-rounding-math'.
10576
10577     This option is experimental and does not currently guarantee to
10578     disable all GCC optimizations that are affected by rounding mode.
10579     Future versions of GCC may provide finer control of this setting
10580     using C99's 'FENV_ACCESS' pragma.  This command-line option will be
10581     used to specify the default state for 'FENV_ACCESS'.
10582
10583'-fsignaling-nans'
10584     Compile code assuming that IEEE signaling NaNs may generate
10585     user-visible traps during floating-point operations.  Setting this
10586     option disables optimizations that may change the number of
10587     exceptions visible with signaling NaNs.  This option implies
10588     '-ftrapping-math'.
10589
10590     This option causes the preprocessor macro '__SUPPORT_SNAN__' to be
10591     defined.
10592
10593     The default is '-fno-signaling-nans'.
10594
10595     This option is experimental and does not currently guarantee to
10596     disable all GCC optimizations that affect signaling NaN behavior.
10597
10598'-fno-fp-int-builtin-inexact'
10599     Do not allow the built-in functions 'ceil', 'floor', 'round' and
10600     'trunc', and their 'float' and 'long double' variants, to generate
10601     code that raises the "inexact" floating-point exception for
10602     noninteger arguments.  ISO C99 and C11 allow these functions to
10603     raise the "inexact" exception, but ISO/IEC TS 18661-1:2014, the C
10604     bindings to IEEE 754-2008, as integrated into ISO C2X, does not
10605     allow these functions to do so.
10606
10607     The default is '-ffp-int-builtin-inexact', allowing the exception
10608     to be raised, unless C2X or a later C standard is selected.  This
10609     option does nothing unless '-ftrapping-math' is in effect.
10610
10611     Even if '-fno-fp-int-builtin-inexact' is used, if the functions
10612     generate a call to a library function then the "inexact" exception
10613     may be raised if the library implementation does not follow TS
10614     18661.
10615
10616'-fsingle-precision-constant'
10617     Treat floating-point constants as single precision instead of
10618     implicitly converting them to double-precision constants.
10619
10620'-fcx-limited-range'
10621     When enabled, this option states that a range reduction step is not
10622     needed when performing complex division.  Also, there is no
10623     checking whether the result of a complex multiplication or division
10624     is 'NaN + I*NaN', with an attempt to rescue the situation in that
10625     case.  The default is '-fno-cx-limited-range', but is enabled by
10626     '-ffast-math'.
10627
10628     This option controls the default setting of the ISO C99
10629     'CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to all
10630     languages.
10631
10632'-fcx-fortran-rules'
10633     Complex multiplication and division follow Fortran rules.  Range
10634     reduction is done as part of complex division, but there is no
10635     checking whether the result of a complex multiplication or division
10636     is 'NaN + I*NaN', with an attempt to rescue the situation in that
10637     case.
10638
10639     The default is '-fno-cx-fortran-rules'.
10640
10641 The following options control optimizations that may improve
10642performance, but are not enabled by any '-O' options.  This section
10643includes experimental options that may produce broken code.
10644
10645'-fbranch-probabilities'
10646     After running a program compiled with '-fprofile-arcs' (*note
10647     Instrumentation Options::), you can compile it a second time using
10648     '-fbranch-probabilities', to improve optimizations based on the
10649     number of times each branch was taken.  When a program compiled
10650     with '-fprofile-arcs' exits, it saves arc execution counts to a
10651     file called 'SOURCENAME.gcda' for each source file.  The
10652     information in this data file is very dependent on the structure of
10653     the generated code, so you must use the same source code and the
10654     same optimization options for both compilations.
10655
10656     With '-fbranch-probabilities', GCC puts a 'REG_BR_PROB' note on
10657     each 'JUMP_INSN' and 'CALL_INSN'.  These can be used to improve
10658     optimization.  Currently, they are only used in one place: in
10659     'reorg.c', instead of guessing which path a branch is most likely
10660     to take, the 'REG_BR_PROB' values are used to exactly determine
10661     which path is taken more often.
10662
10663     Enabled by '-fprofile-use' and '-fauto-profile'.
10664
10665'-fprofile-values'
10666     If combined with '-fprofile-arcs', it adds code so that some data
10667     about values of expressions in the program is gathered.
10668
10669     With '-fbranch-probabilities', it reads back the data gathered from
10670     profiling values of expressions for usage in optimizations.
10671
10672     Enabled by '-fprofile-generate', '-fprofile-use', and
10673     '-fauto-profile'.
10674
10675'-fprofile-reorder-functions'
10676     Function reordering based on profile instrumentation collects first
10677     time of execution of a function and orders these functions in
10678     ascending order.
10679
10680     Enabled with '-fprofile-use'.
10681
10682'-fvpt'
10683     If combined with '-fprofile-arcs', this option instructs the
10684     compiler to add code to gather information about values of
10685     expressions.
10686
10687     With '-fbranch-probabilities', it reads back the data gathered and
10688     actually performs the optimizations based on them.  Currently the
10689     optimizations include specialization of division operations using
10690     the knowledge about the value of the denominator.
10691
10692     Enabled with '-fprofile-use' and '-fauto-profile'.
10693
10694'-frename-registers'
10695     Attempt to avoid false dependencies in scheduled code by making use
10696     of registers left over after register allocation.  This
10697     optimization most benefits processors with lots of registers.
10698     Depending on the debug information format adopted by the target,
10699     however, it can make debugging impossible, since variables no
10700     longer stay in a "home register".
10701
10702     Enabled by default with '-funroll-loops'.
10703
10704'-fschedule-fusion'
10705     Performs a target dependent pass over the instruction stream to
10706     schedule instructions of same type together because target machine
10707     can execute them more efficiently if they are adjacent to each
10708     other in the instruction flow.
10709
10710     Enabled at levels '-O2', '-O3', '-Os'.
10711
10712'-ftracer'
10713     Perform tail duplication to enlarge superblock size.  This
10714     transformation simplifies the control flow of the function allowing
10715     other optimizations to do a better job.
10716
10717     Enabled by '-fprofile-use' and '-fauto-profile'.
10718
10719'-funroll-loops'
10720     Unroll loops whose number of iterations can be determined at
10721     compile time or upon entry to the loop.  '-funroll-loops' implies
10722     '-frerun-cse-after-loop', '-fweb' and '-frename-registers'.  It
10723     also turns on complete loop peeling (i.e. complete removal of loops
10724     with a small constant number of iterations).  This option makes
10725     code larger, and may or may not make it run faster.
10726
10727     Enabled by '-fprofile-use' and '-fauto-profile'.
10728
10729'-funroll-all-loops'
10730     Unroll all loops, even if their number of iterations is uncertain
10731     when the loop is entered.  This usually makes programs run more
10732     slowly.  '-funroll-all-loops' implies the same options as
10733     '-funroll-loops'.
10734
10735'-fpeel-loops'
10736     Peels loops for which there is enough information that they do not
10737     roll much (from profile feedback or static analysis).  It also
10738     turns on complete loop peeling (i.e. complete removal of loops with
10739     small constant number of iterations).
10740
10741     Enabled by '-O3', '-fprofile-use', and '-fauto-profile'.
10742
10743'-fmove-loop-invariants'
10744     Enables the loop invariant motion pass in the RTL loop optimizer.
10745     Enabled at level '-O1' and higher, except for '-Og'.
10746
10747'-fsplit-loops'
10748     Split a loop into two if it contains a condition that's always true
10749     for one side of the iteration space and false for the other.
10750
10751     Enabled by '-fprofile-use' and '-fauto-profile'.
10752
10753'-funswitch-loops'
10754     Move branches with loop invariant conditions out of the loop, with
10755     duplicates of the loop on both branches (modified according to
10756     result of the condition).
10757
10758     Enabled by '-fprofile-use' and '-fauto-profile'.
10759
10760'-fversion-loops-for-strides'
10761     If a loop iterates over an array with a variable stride, create
10762     another version of the loop that assumes the stride is always one.
10763     For example:
10764
10765          for (int i = 0; i < n; ++i)
10766            x[i * stride] = ...;
10767
10768     becomes:
10769
10770          if (stride == 1)
10771            for (int i = 0; i < n; ++i)
10772              x[i] = ...;
10773          else
10774            for (int i = 0; i < n; ++i)
10775              x[i * stride] = ...;
10776
10777     This is particularly useful for assumed-shape arrays in Fortran
10778     where (for example) it allows better vectorization assuming
10779     contiguous accesses.  This flag is enabled by default at '-O3'.  It
10780     is also enabled by '-fprofile-use' and '-fauto-profile'.
10781
10782'-ffunction-sections'
10783'-fdata-sections'
10784     Place each function or data item into its own section in the output
10785     file if the target supports arbitrary sections.  The name of the
10786     function or the name of the data item determines the section's name
10787     in the output file.
10788
10789     Use these options on systems where the linker can perform
10790     optimizations to improve locality of reference in the instruction
10791     space.  Most systems using the ELF object format have linkers with
10792     such optimizations.  On AIX, the linker rearranges sections
10793     (CSECTs) based on the call graph.  The performance impact varies.
10794
10795     Together with a linker garbage collection (linker '--gc-sections'
10796     option) these options may lead to smaller statically-linked
10797     executables (after stripping).
10798
10799     On ELF/DWARF systems these options do not degenerate the quality of
10800     the debug information.  There could be issues with other object
10801     files/debug info formats.
10802
10803     Only use these options when there are significant benefits from
10804     doing so.  When you specify these options, the assembler and linker
10805     create larger object and executable files and are also slower.
10806     These options affect code generation.  They prevent optimizations
10807     by the compiler and assembler using relative locations inside a
10808     translation unit since the locations are unknown until link time.
10809     An example of such an optimization is relaxing calls to short call
10810     instructions.
10811
10812'-fstdarg-opt'
10813     Optimize the prologue of variadic argument functions with respect
10814     to usage of those arguments.
10815
10816'-fsection-anchors'
10817     Try to reduce the number of symbolic address calculations by using
10818     shared "anchor" symbols to address nearby objects.  This
10819     transformation can help to reduce the number of GOT entries and GOT
10820     accesses on some targets.
10821
10822     For example, the implementation of the following function 'foo':
10823
10824          static int a, b, c;
10825          int foo (void) { return a + b + c; }
10826
10827     usually calculates the addresses of all three variables, but if you
10828     compile it with '-fsection-anchors', it accesses the variables from
10829     a common anchor point instead.  The effect is similar to the
10830     following pseudocode (which isn't valid C):
10831
10832          int foo (void)
10833          {
10834            register int *xr = &x;
10835            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
10836          }
10837
10838     Not all targets support this option.
10839
10840'--param NAME=VALUE'
10841     In some places, GCC uses various constants to control the amount of
10842     optimization that is done.  For example, GCC does not inline
10843     functions that contain more than a certain number of instructions.
10844     You can control some of these constants on the command line using
10845     the '--param' option.
10846
10847     The names of specific parameters, and the meaning of the values,
10848     are tied to the internals of the compiler, and are subject to
10849     change without notice in future releases.
10850
10851     In order to get minimal, maximal and default value of a parameter,
10852     one can use '--help=param -Q' options.
10853
10854     In each case, the VALUE is an integer.  The following choices of
10855     NAME are recognized for all targets:
10856
10857     'predictable-branch-outcome'
10858          When branch is predicted to be taken with probability lower
10859          than this threshold (in percent), then it is considered well
10860          predictable.
10861
10862     'max-rtl-if-conversion-insns'
10863          RTL if-conversion tries to remove conditional branches around
10864          a block and replace them with conditionally executed
10865          instructions.  This parameter gives the maximum number of
10866          instructions in a block which should be considered for
10867          if-conversion.  The compiler will also use other heuristics to
10868          decide whether if-conversion is likely to be profitable.
10869
10870     'max-rtl-if-conversion-predictable-cost'
10871     'max-rtl-if-conversion-unpredictable-cost'
10872          RTL if-conversion will try to remove conditional branches
10873          around a block and replace them with conditionally executed
10874          instructions.  These parameters give the maximum permissible
10875          cost for the sequence that would be generated by if-conversion
10876          depending on whether the branch is statically determined to be
10877          predictable or not.  The units for this parameter are the same
10878          as those for the GCC internal seq_cost metric.  The compiler
10879          will try to provide a reasonable default for this parameter
10880          using the BRANCH_COST target macro.
10881
10882     'max-crossjump-edges'
10883          The maximum number of incoming edges to consider for
10884          cross-jumping.  The algorithm used by '-fcrossjumping' is
10885          O(N^2) in the number of edges incoming to each block.
10886          Increasing values mean more aggressive optimization, making
10887          the compilation time increase with probably small improvement
10888          in executable size.
10889
10890     'min-crossjump-insns'
10891          The minimum number of instructions that must be matched at the
10892          end of two blocks before cross-jumping is performed on them.
10893          This value is ignored in the case where all instructions in
10894          the block being cross-jumped from are matched.
10895
10896     'max-grow-copy-bb-insns'
10897          The maximum code size expansion factor when copying basic
10898          blocks instead of jumping.  The expansion is relative to a
10899          jump instruction.
10900
10901     'max-goto-duplication-insns'
10902          The maximum number of instructions to duplicate to a block
10903          that jumps to a computed goto.  To avoid O(N^2) behavior in a
10904          number of passes, GCC factors computed gotos early in the
10905          compilation process, and unfactors them as late as possible.
10906          Only computed jumps at the end of a basic blocks with no more
10907          than max-goto-duplication-insns are unfactored.
10908
10909     'max-delay-slot-insn-search'
10910          The maximum number of instructions to consider when looking
10911          for an instruction to fill a delay slot.  If more than this
10912          arbitrary number of instructions are searched, the time
10913          savings from filling the delay slot are minimal, so stop
10914          searching.  Increasing values mean more aggressive
10915          optimization, making the compilation time increase with
10916          probably small improvement in execution time.
10917
10918     'max-delay-slot-live-search'
10919          When trying to fill delay slots, the maximum number of
10920          instructions to consider when searching for a block with valid
10921          live register information.  Increasing this arbitrarily chosen
10922          value means more aggressive optimization, increasing the
10923          compilation time.  This parameter should be removed when the
10924          delay slot code is rewritten to maintain the control-flow
10925          graph.
10926
10927     'max-gcse-memory'
10928          The approximate maximum amount of memory that can be allocated
10929          in order to perform the global common subexpression
10930          elimination optimization.  If more memory than specified is
10931          required, the optimization is not done.
10932
10933     'max-gcse-insertion-ratio'
10934          If the ratio of expression insertions to deletions is larger
10935          than this value for any expression, then RTL PRE inserts or
10936          removes the expression and thus leaves partially redundant
10937          computations in the instruction stream.
10938
10939     'max-pending-list-length'
10940          The maximum number of pending dependencies scheduling allows
10941          before flushing the current state and starting over.  Large
10942          functions with few branches or calls can create excessively
10943          large lists which needlessly consume memory and resources.
10944
10945     'max-modulo-backtrack-attempts'
10946          The maximum number of backtrack attempts the scheduler should
10947          make when modulo scheduling a loop.  Larger values can
10948          exponentially increase compilation time.
10949
10950     'max-inline-insns-single'
10951          Several parameters control the tree inliner used in GCC.  This
10952          number sets the maximum number of instructions (counted in
10953          GCC's internal representation) in a single function that the
10954          tree inliner considers for inlining.  This only affects
10955          functions declared inline and methods implemented in a class
10956          declaration (C++).
10957
10958     'max-inline-insns-auto'
10959          When you use '-finline-functions' (included in '-O3'), a lot
10960          of functions that would otherwise not be considered for
10961          inlining by the compiler are investigated.  To those
10962          functions, a different (more restrictive) limit compared to
10963          functions declared inline can be applied ('--param
10964          max-inline-insns-auto').
10965
10966     'max-inline-insns-small'
10967          This is bound applied to calls which are considered relevant
10968          with '-finline-small-functions'.
10969
10970     'max-inline-insns-size'
10971          This is bound applied to calls which are optimized for size.
10972          Small growth may be desirable to anticipate optimization
10973          oppurtunities exposed by inlining.
10974
10975     'uninlined-function-insns'
10976          Number of instructions accounted by inliner for function
10977          overhead such as function prologue and epilogue.
10978
10979     'uninlined-function-time'
10980          Extra time accounted by inliner for function overhead such as
10981          time needed to execute function prologue and epilogue
10982
10983     'inline-heuristics-hint-percent'
10984          The scale (in percents) applied to 'inline-insns-single',
10985          'inline-insns-single-O2', 'inline-insns-auto' when inline
10986          heuristics hints that inlining is very profitable (will enable
10987          later optimizations).
10988
10989     'uninlined-thunk-insns'
10990     'uninlined-thunk-time'
10991          Same as '--param uninlined-function-insns' and '--param
10992          uninlined-function-time' but applied to function thunks
10993
10994     'inline-min-speedup'
10995          When estimated performance improvement of caller + callee
10996          runtime exceeds this threshold (in percent), the function can
10997          be inlined regardless of the limit on '--param
10998          max-inline-insns-single' and '--param max-inline-insns-auto'.
10999
11000     'large-function-insns'
11001          The limit specifying really large functions.  For functions
11002          larger than this limit after inlining, inlining is constrained
11003          by '--param large-function-growth'.  This parameter is useful
11004          primarily to avoid extreme compilation time caused by
11005          non-linear algorithms used by the back end.
11006
11007     'large-function-growth'
11008          Specifies maximal growth of large function caused by inlining
11009          in percents.  For example, parameter value 100 limits large
11010          function growth to 2.0 times the original size.
11011
11012     'large-unit-insns'
11013          The limit specifying large translation unit.  Growth caused by
11014          inlining of units larger than this limit is limited by
11015          '--param inline-unit-growth'.  For small units this might be
11016          too tight.  For example, consider a unit consisting of
11017          function A that is inline and B that just calls A three times.
11018          If B is small relative to A, the growth of unit is 300\% and
11019          yet such inlining is very sane.  For very large units
11020          consisting of small inlineable functions, however, the overall
11021          unit growth limit is needed to avoid exponential explosion of
11022          code size.  Thus for smaller units, the size is increased to
11023          '--param large-unit-insns' before applying '--param
11024          inline-unit-growth'.
11025
11026     'inline-unit-growth'
11027          Specifies maximal overall growth of the compilation unit
11028          caused by inlining.  For example, parameter value 20 limits
11029          unit growth to 1.2 times the original size.  Cold functions
11030          (either marked cold via an attribute or by profile feedback)
11031          are not accounted into the unit size.
11032
11033     'ipa-cp-unit-growth'
11034          Specifies maximal overall growth of the compilation unit
11035          caused by interprocedural constant propagation.  For example,
11036          parameter value 10 limits unit growth to 1.1 times the
11037          original size.
11038
11039     'large-stack-frame'
11040          The limit specifying large stack frames.  While inlining the
11041          algorithm is trying to not grow past this limit too much.
11042
11043     'large-stack-frame-growth'
11044          Specifies maximal growth of large stack frames caused by
11045          inlining in percents.  For example, parameter value 1000
11046          limits large stack frame growth to 11 times the original size.
11047
11048     'max-inline-insns-recursive'
11049     'max-inline-insns-recursive-auto'
11050          Specifies the maximum number of instructions an out-of-line
11051          copy of a self-recursive inline function can grow into by
11052          performing recursive inlining.
11053
11054          '--param max-inline-insns-recursive' applies to functions
11055          declared inline.  For functions not declared inline, recursive
11056          inlining happens only when '-finline-functions' (included in
11057          '-O3') is enabled; '--param max-inline-insns-recursive-auto'
11058          applies instead.
11059
11060     'max-inline-recursive-depth'
11061     'max-inline-recursive-depth-auto'
11062          Specifies the maximum recursion depth used for recursive
11063          inlining.
11064
11065          '--param max-inline-recursive-depth' applies to functions
11066          declared inline.  For functions not declared inline, recursive
11067          inlining happens only when '-finline-functions' (included in
11068          '-O3') is enabled; '--param max-inline-recursive-depth-auto'
11069          applies instead.
11070
11071     'min-inline-recursive-probability'
11072          Recursive inlining is profitable only for function having deep
11073          recursion in average and can hurt for function having little
11074          recursion depth by increasing the prologue size or complexity
11075          of function body to other optimizers.
11076
11077          When profile feedback is available (see '-fprofile-generate')
11078          the actual recursion depth can be guessed from the probability
11079          that function recurses via a given call expression.  This
11080          parameter limits inlining only to call expressions whose
11081          probability exceeds the given threshold (in percents).
11082
11083     'early-inlining-insns'
11084          Specify growth that the early inliner can make.  In effect it
11085          increases the amount of inlining for code having a large
11086          abstraction penalty.
11087
11088     'max-early-inliner-iterations'
11089          Limit of iterations of the early inliner.  This basically
11090          bounds the number of nested indirect calls the early inliner
11091          can resolve.  Deeper chains are still handled by late
11092          inlining.
11093
11094     'comdat-sharing-probability'
11095          Probability (in percent) that C++ inline function with comdat
11096          visibility are shared across multiple compilation units.
11097
11098     'profile-func-internal-id'
11099          A parameter to control whether to use function internal id in
11100          profile database lookup.  If the value is 0, the compiler uses
11101          an id that is based on function assembler name and filename,
11102          which makes old profile data more tolerant to source changes
11103          such as function reordering etc.
11104
11105     'min-vect-loop-bound'
11106          The minimum number of iterations under which loops are not
11107          vectorized when '-ftree-vectorize' is used.  The number of
11108          iterations after vectorization needs to be greater than the
11109          value specified by this option to allow vectorization.
11110
11111     'gcse-cost-distance-ratio'
11112          Scaling factor in calculation of maximum distance an
11113          expression can be moved by GCSE optimizations.  This is
11114          currently supported only in the code hoisting pass.  The
11115          bigger the ratio, the more aggressive code hoisting is with
11116          simple expressions, i.e., the expressions that have cost less
11117          than 'gcse-unrestricted-cost'.  Specifying 0 disables hoisting
11118          of simple expressions.
11119
11120     'gcse-unrestricted-cost'
11121          Cost, roughly measured as the cost of a single typical machine
11122          instruction, at which GCSE optimizations do not constrain the
11123          distance an expression can travel.  This is currently
11124          supported only in the code hoisting pass.  The lesser the
11125          cost, the more aggressive code hoisting is.  Specifying 0
11126          allows all expressions to travel unrestricted distances.
11127
11128     'max-hoist-depth'
11129          The depth of search in the dominator tree for expressions to
11130          hoist.  This is used to avoid quadratic behavior in hoisting
11131          algorithm.  The value of 0 does not limit on the search, but
11132          may slow down compilation of huge functions.
11133
11134     'max-tail-merge-comparisons'
11135          The maximum amount of similar bbs to compare a bb with.  This
11136          is used to avoid quadratic behavior in tree tail merging.
11137
11138     'max-tail-merge-iterations'
11139          The maximum amount of iterations of the pass over the
11140          function.  This is used to limit compilation time in tree tail
11141          merging.
11142
11143     'store-merging-allow-unaligned'
11144          Allow the store merging pass to introduce unaligned stores if
11145          it is legal to do so.
11146
11147     'max-stores-to-merge'
11148          The maximum number of stores to attempt to merge into wider
11149          stores in the store merging pass.
11150
11151     'max-unrolled-insns'
11152          The maximum number of instructions that a loop may have to be
11153          unrolled.  If a loop is unrolled, this parameter also
11154          determines how many times the loop code is unrolled.
11155
11156     'max-average-unrolled-insns'
11157          The maximum number of instructions biased by probabilities of
11158          their execution that a loop may have to be unrolled.  If a
11159          loop is unrolled, this parameter also determines how many
11160          times the loop code is unrolled.
11161
11162     'max-unroll-times'
11163          The maximum number of unrollings of a single loop.
11164
11165     'max-peeled-insns'
11166          The maximum number of instructions that a loop may have to be
11167          peeled.  If a loop is peeled, this parameter also determines
11168          how many times the loop code is peeled.
11169
11170     'max-peel-times'
11171          The maximum number of peelings of a single loop.
11172
11173     'max-peel-branches'
11174          The maximum number of branches on the hot path through the
11175          peeled sequence.
11176
11177     'max-completely-peeled-insns'
11178          The maximum number of insns of a completely peeled loop.
11179
11180     'max-completely-peel-times'
11181          The maximum number of iterations of a loop to be suitable for
11182          complete peeling.
11183
11184     'max-completely-peel-loop-nest-depth'
11185          The maximum depth of a loop nest suitable for complete
11186          peeling.
11187
11188     'max-unswitch-insns'
11189          The maximum number of insns of an unswitched loop.
11190
11191     'max-unswitch-level'
11192          The maximum number of branches unswitched in a single loop.
11193
11194     'lim-expensive'
11195          The minimum cost of an expensive expression in the loop
11196          invariant motion.
11197
11198     'min-loop-cond-split-prob'
11199          When FDO profile information is available,
11200          'min-loop-cond-split-prob' specifies minimum threshold for
11201          probability of semi-invariant condition statement to trigger
11202          loop split.
11203
11204     'iv-consider-all-candidates-bound'
11205          Bound on number of candidates for induction variables, below
11206          which all candidates are considered for each use in induction
11207          variable optimizations.  If there are more candidates than
11208          this, only the most relevant ones are considered to avoid
11209          quadratic time complexity.
11210
11211     'iv-max-considered-uses'
11212          The induction variable optimizations give up on loops that
11213          contain more induction variable uses.
11214
11215     'iv-always-prune-cand-set-bound'
11216          If the number of candidates in the set is smaller than this
11217          value, always try to remove unnecessary ivs from the set when
11218          adding a new one.
11219
11220     'avg-loop-niter'
11221          Average number of iterations of a loop.
11222
11223     'dse-max-object-size'
11224          Maximum size (in bytes) of objects tracked bytewise by dead
11225          store elimination.  Larger values may result in larger
11226          compilation times.
11227
11228     'dse-max-alias-queries-per-store'
11229          Maximum number of queries into the alias oracle per store.
11230          Larger values result in larger compilation times and may
11231          result in more removed dead stores.
11232
11233     'scev-max-expr-size'
11234          Bound on size of expressions used in the scalar evolutions
11235          analyzer.  Large expressions slow the analyzer.
11236
11237     'scev-max-expr-complexity'
11238          Bound on the complexity of the expressions in the scalar
11239          evolutions analyzer.  Complex expressions slow the analyzer.
11240
11241     'max-tree-if-conversion-phi-args'
11242          Maximum number of arguments in a PHI supported by TREE if
11243          conversion unless the loop is marked with simd pragma.
11244
11245     'vect-max-version-for-alignment-checks'
11246          The maximum number of run-time checks that can be performed
11247          when doing loop versioning for alignment in the vectorizer.
11248
11249     'vect-max-version-for-alias-checks'
11250          The maximum number of run-time checks that can be performed
11251          when doing loop versioning for alias in the vectorizer.
11252
11253     'vect-max-peeling-for-alignment'
11254          The maximum number of loop peels to enhance access alignment
11255          for vectorizer.  Value -1 means no limit.
11256
11257     'max-iterations-to-track'
11258          The maximum number of iterations of a loop the brute-force
11259          algorithm for analysis of the number of iterations of the loop
11260          tries to evaluate.
11261
11262     'hot-bb-count-fraction'
11263          The denominator n of fraction 1/n of the maximal execution
11264          count of a basic block in the entire program that a basic
11265          block needs to at least have in order to be considered hot.
11266          The default is 10000, which means that a basic block is
11267          considered hot if its execution count is greater than 1/10000
11268          of the maximal execution count.  0 means that it is never
11269          considered hot.  Used in non-LTO mode.
11270
11271     'hot-bb-count-ws-permille'
11272          The number of most executed permilles, ranging from 0 to 1000,
11273          of the profiled execution of the entire program to which the
11274          execution count of a basic block must be part of in order to
11275          be considered hot.  The default is 990, which means that a
11276          basic block is considered hot if its execution count
11277          contributes to the upper 990 permilles, or 99.0%, of the
11278          profiled execution of the entire program.  0 means that it is
11279          never considered hot.  Used in LTO mode.
11280
11281     'hot-bb-frequency-fraction'
11282          The denominator n of fraction 1/n of the execution frequency
11283          of the entry block of a function that a basic block of this
11284          function needs to at least have in order to be considered hot.
11285          The default is 1000, which means that a basic block is
11286          considered hot in a function if it is executed more frequently
11287          than 1/1000 of the frequency of the entry block of the
11288          function.  0 means that it is never considered hot.
11289
11290     'unlikely-bb-count-fraction'
11291          The denominator n of fraction 1/n of the number of profiled
11292          runs of the entire program below which the execution count of
11293          a basic block must be in order for the basic block to be
11294          considered unlikely executed.  The default is 20, which means
11295          that a basic block is considered unlikely executed if it is
11296          executed in fewer than 1/20, or 5%, of the runs of the
11297          program.  0 means that it is always considered unlikely
11298          executed.
11299
11300     'max-predicted-iterations'
11301          The maximum number of loop iterations we predict statically.
11302          This is useful in cases where a function contains a single
11303          loop with known bound and another loop with unknown bound.
11304          The known number of iterations is predicted correctly, while
11305          the unknown number of iterations average to roughly 10.  This
11306          means that the loop without bounds appears artificially cold
11307          relative to the other one.
11308
11309     'builtin-expect-probability'
11310          Control the probability of the expression having the specified
11311          value.  This parameter takes a percentage (i.e. 0 ...  100) as
11312          input.
11313
11314     'builtin-string-cmp-inline-length'
11315          The maximum length of a constant string for a builtin string
11316          cmp call eligible for inlining.
11317
11318     'align-threshold'
11319
11320          Select fraction of the maximal frequency of executions of a
11321          basic block in a function to align the basic block.
11322
11323     'align-loop-iterations'
11324
11325          A loop expected to iterate at least the selected number of
11326          iterations is aligned.
11327
11328     'tracer-dynamic-coverage'
11329     'tracer-dynamic-coverage-feedback'
11330
11331          This value is used to limit superblock formation once the
11332          given percentage of executed instructions is covered.  This
11333          limits unnecessary code size expansion.
11334
11335          The 'tracer-dynamic-coverage-feedback' parameter is used only
11336          when profile feedback is available.  The real profiles (as
11337          opposed to statically estimated ones) are much less balanced
11338          allowing the threshold to be larger value.
11339
11340     'tracer-max-code-growth'
11341          Stop tail duplication once code growth has reached given
11342          percentage.  This is a rather artificial limit, as most of the
11343          duplicates are eliminated later in cross jumping, so it may be
11344          set to much higher values than is the desired code growth.
11345
11346     'tracer-min-branch-ratio'
11347
11348          Stop reverse growth when the reverse probability of best edge
11349          is less than this threshold (in percent).
11350
11351     'tracer-min-branch-probability'
11352     'tracer-min-branch-probability-feedback'
11353
11354          Stop forward growth if the best edge has probability lower
11355          than this threshold.
11356
11357          Similarly to 'tracer-dynamic-coverage' two parameters are
11358          provided.  'tracer-min-branch-probability-feedback' is used
11359          for compilation with profile feedback and
11360          'tracer-min-branch-probability' compilation without.  The
11361          value for compilation with profile feedback needs to be more
11362          conservative (higher) in order to make tracer effective.
11363
11364     'stack-clash-protection-guard-size'
11365          Specify the size of the operating system provided stack guard
11366          as 2 raised to NUM bytes.  Higher values may reduce the number
11367          of explicit probes, but a value larger than the operating
11368          system provided guard will leave code vulnerable to stack
11369          clash style attacks.
11370
11371     'stack-clash-protection-probe-interval'
11372          Stack clash protection involves probing stack space as it is
11373          allocated.  This param controls the maximum distance between
11374          probes into the stack as 2 raised to NUM bytes.  Higher values
11375          may reduce the number of explicit probes, but a value larger
11376          than the operating system provided guard will leave code
11377          vulnerable to stack clash style attacks.
11378
11379     'max-cse-path-length'
11380
11381          The maximum number of basic blocks on path that CSE considers.
11382
11383     'max-cse-insns'
11384          The maximum number of instructions CSE processes before
11385          flushing.
11386
11387     'ggc-min-expand'
11388
11389          GCC uses a garbage collector to manage its own memory
11390          allocation.  This parameter specifies the minimum percentage
11391          by which the garbage collector's heap should be allowed to
11392          expand between collections.  Tuning this may improve
11393          compilation speed; it has no effect on code generation.
11394
11395          The default is 30% + 70% * (RAM/1GB) with an upper bound of
11396          100% when RAM >= 1GB.  If 'getrlimit' is available, the notion
11397          of "RAM" is the smallest of actual RAM and 'RLIMIT_DATA' or
11398          'RLIMIT_AS'.  If GCC is not able to calculate RAM on a
11399          particular platform, the lower bound of 30% is used.  Setting
11400          this parameter and 'ggc-min-heapsize' to zero causes a full
11401          collection to occur at every opportunity.  This is extremely
11402          slow, but can be useful for debugging.
11403
11404     'ggc-min-heapsize'
11405
11406          Minimum size of the garbage collector's heap before it begins
11407          bothering to collect garbage.  The first collection occurs
11408          after the heap expands by 'ggc-min-expand'% beyond
11409          'ggc-min-heapsize'.  Again, tuning this may improve
11410          compilation speed, and has no effect on code generation.
11411
11412          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
11413          that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
11414          exceeded, but with a lower bound of 4096 (four megabytes) and
11415          an upper bound of 131072 (128 megabytes).  If GCC is not able
11416          to calculate RAM on a particular platform, the lower bound is
11417          used.  Setting this parameter very large effectively disables
11418          garbage collection.  Setting this parameter and
11419          'ggc-min-expand' to zero causes a full collection to occur at
11420          every opportunity.
11421
11422     'max-reload-search-insns'
11423          The maximum number of instruction reload should look backward
11424          for equivalent register.  Increasing values mean more
11425          aggressive optimization, making the compilation time increase
11426          with probably slightly better performance.
11427
11428     'max-cselib-memory-locations'
11429          The maximum number of memory locations cselib should take into
11430          account.  Increasing values mean more aggressive optimization,
11431          making the compilation time increase with probably slightly
11432          better performance.
11433
11434     'max-sched-ready-insns'
11435          The maximum number of instructions ready to be issued the
11436          scheduler should consider at any given time during the first
11437          scheduling pass.  Increasing values mean more thorough
11438          searches, making the compilation time increase with probably
11439          little benefit.
11440
11441     'max-sched-region-blocks'
11442          The maximum number of blocks in a region to be considered for
11443          interblock scheduling.
11444
11445     'max-pipeline-region-blocks'
11446          The maximum number of blocks in a region to be considered for
11447          pipelining in the selective scheduler.
11448
11449     'max-sched-region-insns'
11450          The maximum number of insns in a region to be considered for
11451          interblock scheduling.
11452
11453     'max-pipeline-region-insns'
11454          The maximum number of insns in a region to be considered for
11455          pipelining in the selective scheduler.
11456
11457     'min-spec-prob'
11458          The minimum probability (in percents) of reaching a source
11459          block for interblock speculative scheduling.
11460
11461     'max-sched-extend-regions-iters'
11462          The maximum number of iterations through CFG to extend
11463          regions.  A value of 0 disables region extensions.
11464
11465     'max-sched-insn-conflict-delay'
11466          The maximum conflict delay for an insn to be considered for
11467          speculative motion.
11468
11469     'sched-spec-prob-cutoff'
11470          The minimal probability of speculation success (in percents),
11471          so that speculative insns are scheduled.
11472
11473     'sched-state-edge-prob-cutoff'
11474          The minimum probability an edge must have for the scheduler to
11475          save its state across it.
11476
11477     'sched-mem-true-dep-cost'
11478          Minimal distance (in CPU cycles) between store and load
11479          targeting same memory locations.
11480
11481     'selsched-max-lookahead'
11482          The maximum size of the lookahead window of selective
11483          scheduling.  It is a depth of search for available
11484          instructions.
11485
11486     'selsched-max-sched-times'
11487          The maximum number of times that an instruction is scheduled
11488          during selective scheduling.  This is the limit on the number
11489          of iterations through which the instruction may be pipelined.
11490
11491     'selsched-insns-to-rename'
11492          The maximum number of best instructions in the ready list that
11493          are considered for renaming in the selective scheduler.
11494
11495     'sms-min-sc'
11496          The minimum value of stage count that swing modulo scheduler
11497          generates.
11498
11499     'max-last-value-rtl'
11500          The maximum size measured as number of RTLs that can be
11501          recorded in an expression in combiner for a pseudo register as
11502          last known value of that register.
11503
11504     'max-combine-insns'
11505          The maximum number of instructions the RTL combiner tries to
11506          combine.
11507
11508     'integer-share-limit'
11509          Small integer constants can use a shared data structure,
11510          reducing the compiler's memory usage and increasing its speed.
11511          This sets the maximum value of a shared integer constant.
11512
11513     'ssp-buffer-size'
11514          The minimum size of buffers (i.e. arrays) that receive stack
11515          smashing protection when '-fstack-protection' is used.
11516
11517     'min-size-for-stack-sharing'
11518          The minimum size of variables taking part in stack slot
11519          sharing when not optimizing.
11520
11521     'max-jump-thread-duplication-stmts'
11522          Maximum number of statements allowed in a block that needs to
11523          be duplicated when threading jumps.
11524
11525     'max-fields-for-field-sensitive'
11526          Maximum number of fields in a structure treated in a field
11527          sensitive manner during pointer analysis.
11528
11529     'prefetch-latency'
11530          Estimate on average number of instructions that are executed
11531          before prefetch finishes.  The distance prefetched ahead is
11532          proportional to this constant.  Increasing this number may
11533          also lead to less streams being prefetched (see
11534          'simultaneous-prefetches').
11535
11536     'simultaneous-prefetches'
11537          Maximum number of prefetches that can run at the same time.
11538
11539     'l1-cache-line-size'
11540          The size of cache line in L1 data cache, in bytes.
11541
11542     'l1-cache-size'
11543          The size of L1 data cache, in kilobytes.
11544
11545     'l2-cache-size'
11546          The size of L2 data cache, in kilobytes.
11547
11548     'prefetch-dynamic-strides'
11549          Whether the loop array prefetch pass should issue software
11550          prefetch hints for strides that are non-constant.  In some
11551          cases this may be beneficial, though the fact the stride is
11552          non-constant may make it hard to predict when there is clear
11553          benefit to issuing these hints.
11554
11555          Set to 1 if the prefetch hints should be issued for
11556          non-constant strides.  Set to 0 if prefetch hints should be
11557          issued only for strides that are known to be constant and
11558          below 'prefetch-minimum-stride'.
11559
11560     'prefetch-minimum-stride'
11561          Minimum constant stride, in bytes, to start using prefetch
11562          hints for.  If the stride is less than this threshold,
11563          prefetch hints will not be issued.
11564
11565          This setting is useful for processors that have hardware
11566          prefetchers, in which case there may be conflicts between the
11567          hardware prefetchers and the software prefetchers.  If the
11568          hardware prefetchers have a maximum stride they can handle, it
11569          should be used here to improve the use of software
11570          prefetchers.
11571
11572          A value of -1 means we don't have a threshold and therefore
11573          prefetch hints can be issued for any constant stride.
11574
11575          This setting is only useful for strides that are known and
11576          constant.
11577
11578     'loop-interchange-max-num-stmts'
11579          The maximum number of stmts in a loop to be interchanged.
11580
11581     'loop-interchange-stride-ratio'
11582          The minimum ratio between stride of two loops for interchange
11583          to be profitable.
11584
11585     'min-insn-to-prefetch-ratio'
11586          The minimum ratio between the number of instructions and the
11587          number of prefetches to enable prefetching in a loop.
11588
11589     'prefetch-min-insn-to-mem-ratio'
11590          The minimum ratio between the number of instructions and the
11591          number of memory references to enable prefetching in a loop.
11592
11593     'use-canonical-types'
11594          Whether the compiler should use the "canonical" type system.
11595          Should always be 1, which uses a more efficient internal
11596          mechanism for comparing types in C++ and Objective-C++.
11597          However, if bugs in the canonical type system are causing
11598          compilation failures, set this value to 0 to disable canonical
11599          types.
11600
11601     'switch-conversion-max-branch-ratio'
11602          Switch initialization conversion refuses to create arrays that
11603          are bigger than 'switch-conversion-max-branch-ratio' times the
11604          number of branches in the switch.
11605
11606     'max-partial-antic-length'
11607          Maximum length of the partial antic set computed during the
11608          tree partial redundancy elimination optimization
11609          ('-ftree-pre') when optimizing at '-O3' and above.  For some
11610          sorts of source code the enhanced partial redundancy
11611          elimination optimization can run away, consuming all of the
11612          memory available on the host machine.  This parameter sets a
11613          limit on the length of the sets that are computed, which
11614          prevents the runaway behavior.  Setting a value of 0 for this
11615          parameter allows an unlimited set length.
11616
11617     'rpo-vn-max-loop-depth'
11618          Maximum loop depth that is value-numbered optimistically.
11619          When the limit hits the innermost RPO-VN-MAX-LOOP-DEPTH loops
11620          and the outermost loop in the loop nest are value-numbered
11621          optimistically and the remaining ones not.
11622
11623     'sccvn-max-alias-queries-per-access'
11624          Maximum number of alias-oracle queries we perform when looking
11625          for redundancies for loads and stores.  If this limit is hit
11626          the search is aborted and the load or store is not considered
11627          redundant.  The number of queries is algorithmically limited
11628          to the number of stores on all paths from the load to the
11629          function entry.
11630
11631     'ira-max-loops-num'
11632          IRA uses regional register allocation by default.  If a
11633          function contains more loops than the number given by this
11634          parameter, only at most the given number of the most
11635          frequently-executed loops form regions for regional register
11636          allocation.
11637
11638     'ira-max-conflict-table-size'
11639          Although IRA uses a sophisticated algorithm to compress the
11640          conflict table, the table can still require excessive amounts
11641          of memory for huge functions.  If the conflict table for a
11642          function could be more than the size in MB given by this
11643          parameter, the register allocator instead uses a faster,
11644          simpler, and lower-quality algorithm that does not require
11645          building a pseudo-register conflict table.
11646
11647     'ira-loop-reserved-regs'
11648          IRA can be used to evaluate more accurate register pressure in
11649          loops for decisions to move loop invariants (see '-O3').  The
11650          number of available registers reserved for some other purposes
11651          is given by this parameter.  Default of the parameter is the
11652          best found from numerous experiments.
11653
11654     'lra-inheritance-ebb-probability-cutoff'
11655          LRA tries to reuse values reloaded in registers in subsequent
11656          insns.  This optimization is called inheritance.  EBB is used
11657          as a region to do this optimization.  The parameter defines a
11658          minimal fall-through edge probability in percentage used to
11659          add BB to inheritance EBB in LRA. The default value was chosen
11660          from numerous runs of SPEC2000 on x86-64.
11661
11662     'loop-invariant-max-bbs-in-loop'
11663          Loop invariant motion can be very expensive, both in
11664          compilation time and in amount of needed compile-time memory,
11665          with very large loops.  Loops with more basic blocks than this
11666          parameter won't have loop invariant motion optimization
11667          performed on them.
11668
11669     'loop-max-datarefs-for-datadeps'
11670          Building data dependencies is expensive for very large loops.
11671          This parameter limits the number of data references in loops
11672          that are considered for data dependence analysis.  These large
11673          loops are no handled by the optimizations using loop data
11674          dependencies.
11675
11676     'max-vartrack-size'
11677          Sets a maximum number of hash table slots to use during
11678          variable tracking dataflow analysis of any function.  If this
11679          limit is exceeded with variable tracking at assignments
11680          enabled, analysis for that function is retried without it,
11681          after removing all debug insns from the function.  If the
11682          limit is exceeded even without debug insns, var tracking
11683          analysis is completely disabled for the function.  Setting the
11684          parameter to zero makes it unlimited.
11685
11686     'max-vartrack-expr-depth'
11687          Sets a maximum number of recursion levels when attempting to
11688          map variable names or debug temporaries to value expressions.
11689          This trades compilation time for more complete debug
11690          information.  If this is set too low, value expressions that
11691          are available and could be represented in debug information
11692          may end up not being used; setting this higher may enable the
11693          compiler to find more complex debug expressions, but compile
11694          time and memory use may grow.
11695
11696     'max-debug-marker-count'
11697          Sets a threshold on the number of debug markers (e.g. begin
11698          stmt markers) to avoid complexity explosion at inlining or
11699          expanding to RTL. If a function has more such gimple stmts
11700          than the set limit, such stmts will be dropped from the
11701          inlined copy of a function, and from its RTL expansion.
11702
11703     'min-nondebug-insn-uid'
11704          Use uids starting at this parameter for nondebug insns.  The
11705          range below the parameter is reserved exclusively for debug
11706          insns created by '-fvar-tracking-assignments', but debug insns
11707          may get (non-overlapping) uids above it if the reserved range
11708          is exhausted.
11709
11710     'ipa-sra-ptr-growth-factor'
11711          IPA-SRA replaces a pointer to an aggregate with one or more
11712          new parameters only when their cumulative size is less or
11713          equal to 'ipa-sra-ptr-growth-factor' times the size of the
11714          original pointer parameter.
11715
11716     'ipa-sra-max-replacements'
11717          Maximum pieces of an aggregate that IPA-SRA tracks.  As a
11718          consequence, it is also the maximum number of replacements of
11719          a formal parameter.
11720
11721     'sra-max-scalarization-size-Ospeed'
11722     'sra-max-scalarization-size-Osize'
11723          The two Scalar Reduction of Aggregates passes (SRA and
11724          IPA-SRA) aim to replace scalar parts of aggregates with uses
11725          of independent scalar variables.  These parameters control the
11726          maximum size, in storage units, of aggregate which is
11727          considered for replacement when compiling for speed
11728          ('sra-max-scalarization-size-Ospeed') or size
11729          ('sra-max-scalarization-size-Osize') respectively.
11730
11731     'sra-max-propagations'
11732          The maximum number of artificial accesses that Scalar
11733          Replacement of Aggregates (SRA) will track, per one local
11734          variable, in order to facilitate copy propagation.
11735
11736     'tm-max-aggregate-size'
11737          When making copies of thread-local variables in a transaction,
11738          this parameter specifies the size in bytes after which
11739          variables are saved with the logging functions as opposed to
11740          save/restore code sequence pairs.  This option only applies
11741          when using '-fgnu-tm'.
11742
11743     'graphite-max-nb-scop-params'
11744          To avoid exponential effects in the Graphite loop transforms,
11745          the number of parameters in a Static Control Part (SCoP) is
11746          bounded.  A value of zero can be used to lift the bound.  A
11747          variable whose value is unknown at compilation time and
11748          defined outside a SCoP is a parameter of the SCoP.
11749
11750     'loop-block-tile-size'
11751          Loop blocking or strip mining transforms, enabled with
11752          '-floop-block' or '-floop-strip-mine', strip mine each loop in
11753          the loop nest by a given number of iterations.  The strip
11754          length can be changed using the 'loop-block-tile-size'
11755          parameter.
11756
11757     'ipa-cp-value-list-size'
11758          IPA-CP attempts to track all possible values and types passed
11759          to a function's parameter in order to propagate them and
11760          perform devirtualization.  'ipa-cp-value-list-size' is the
11761          maximum number of values and types it stores per one formal
11762          parameter of a function.
11763
11764     'ipa-cp-eval-threshold'
11765          IPA-CP calculates its own score of cloning profitability
11766          heuristics and performs those cloning opportunities with
11767          scores that exceed 'ipa-cp-eval-threshold'.
11768
11769     'ipa-cp-max-recursive-depth'
11770          Maximum depth of recursive cloning for self-recursive
11771          function.
11772
11773     'ipa-cp-min-recursive-probability'
11774          Recursive cloning only when the probability of call being
11775          executed exceeds the parameter.
11776
11777     'ipa-cp-recursion-penalty'
11778          Percentage penalty the recursive functions will receive when
11779          they are evaluated for cloning.
11780
11781     'ipa-cp-single-call-penalty'
11782          Percentage penalty functions containing a single call to
11783          another function will receive when they are evaluated for
11784          cloning.
11785
11786     'ipa-max-agg-items'
11787          IPA-CP is also capable to propagate a number of scalar values
11788          passed in an aggregate.  'ipa-max-agg-items' controls the
11789          maximum number of such values per one parameter.
11790
11791     'ipa-cp-loop-hint-bonus'
11792          When IPA-CP determines that a cloning candidate would make the
11793          number of iterations of a loop known, it adds a bonus of
11794          'ipa-cp-loop-hint-bonus' to the profitability score of the
11795          candidate.
11796
11797     'ipa-max-aa-steps'
11798          During its analysis of function bodies, IPA-CP employs alias
11799          analysis in order to track values pointed to by function
11800          parameters.  In order not spend too much time analyzing huge
11801          functions, it gives up and consider all memory clobbered after
11802          examining 'ipa-max-aa-steps' statements modifying memory.
11803
11804     'ipa-max-switch-predicate-bounds'
11805          Maximal number of boundary endpoints of case ranges of switch
11806          statement.  For switch exceeding this limit, IPA-CP will not
11807          construct cloning cost predicate, which is used to estimate
11808          cloning benefit, for default case of the switch statement.
11809
11810     'ipa-max-param-expr-ops'
11811          IPA-CP will analyze conditional statement that references some
11812          function parameter to estimate benefit for cloning upon
11813          certain constant value.  But if number of operations in a
11814          parameter expression exceeds 'ipa-max-param-expr-ops', the
11815          expression is treated as complicated one, and is not handled
11816          by IPA analysis.
11817
11818     'lto-partitions'
11819          Specify desired number of partitions produced during WHOPR
11820          compilation.  The number of partitions should exceed the
11821          number of CPUs used for compilation.
11822
11823     'lto-min-partition'
11824          Size of minimal partition for WHOPR (in estimated
11825          instructions).  This prevents expenses of splitting very small
11826          programs into too many partitions.
11827
11828     'lto-max-partition'
11829          Size of max partition for WHOPR (in estimated instructions).
11830          to provide an upper bound for individual size of partition.
11831          Meant to be used only with balanced partitioning.
11832
11833     'lto-max-streaming-parallelism'
11834          Maximal number of parallel processes used for LTO streaming.
11835
11836     'cxx-max-namespaces-for-diagnostic-help'
11837          The maximum number of namespaces to consult for suggestions
11838          when C++ name lookup fails for an identifier.
11839
11840     'sink-frequency-threshold'
11841          The maximum relative execution frequency (in percents) of the
11842          target block relative to a statement's original block to allow
11843          statement sinking of a statement.  Larger numbers result in
11844          more aggressive statement sinking.  A small positive
11845          adjustment is applied for statements with memory operands as
11846          those are even more profitable so sink.
11847
11848     'max-stores-to-sink'
11849          The maximum number of conditional store pairs that can be
11850          sunk.  Set to 0 if either vectorization ('-ftree-vectorize')
11851          or if-conversion ('-ftree-loop-if-convert') is disabled.
11852
11853     'case-values-threshold'
11854          The smallest number of different values for which it is best
11855          to use a jump-table instead of a tree of conditional branches.
11856          If the value is 0, use the default for the machine.
11857
11858     'jump-table-max-growth-ratio-for-size'
11859          The maximum code size growth ratio when expanding into a jump
11860          table (in percent).  The parameter is used when optimizing for
11861          size.
11862
11863     'jump-table-max-growth-ratio-for-speed'
11864          The maximum code size growth ratio when expanding into a jump
11865          table (in percent).  The parameter is used when optimizing for
11866          speed.
11867
11868     'tree-reassoc-width'
11869          Set the maximum number of instructions executed in parallel in
11870          reassociated tree.  This parameter overrides target dependent
11871          heuristics used by default if has non zero value.
11872
11873     'sched-pressure-algorithm'
11874          Choose between the two available implementations of
11875          '-fsched-pressure'.  Algorithm 1 is the original
11876          implementation and is the more likely to prevent instructions
11877          from being reordered.  Algorithm 2 was designed to be a
11878          compromise between the relatively conservative approach taken
11879          by algorithm 1 and the rather aggressive approach taken by the
11880          default scheduler.  It relies more heavily on having a regular
11881          register file and accurate register pressure classes.  See
11882          'haifa-sched.c' in the GCC sources for more details.
11883
11884          The default choice depends on the target.
11885
11886     'max-slsr-cand-scan'
11887          Set the maximum number of existing candidates that are
11888          considered when seeking a basis for a new straight-line
11889          strength reduction candidate.
11890
11891     'asan-globals'
11892          Enable buffer overflow detection for global objects.  This
11893          kind of protection is enabled by default if you are using
11894          '-fsanitize=address' option.  To disable global objects
11895          protection use '--param asan-globals=0'.
11896
11897     'asan-stack'
11898          Enable buffer overflow detection for stack objects.  This kind
11899          of protection is enabled by default when using
11900          '-fsanitize=address'.  To disable stack protection use
11901          '--param asan-stack=0' option.
11902
11903     'asan-instrument-reads'
11904          Enable buffer overflow detection for memory reads.  This kind
11905          of protection is enabled by default when using
11906          '-fsanitize=address'.  To disable memory reads protection use
11907          '--param asan-instrument-reads=0'.
11908
11909     'asan-instrument-writes'
11910          Enable buffer overflow detection for memory writes.  This kind
11911          of protection is enabled by default when using
11912          '-fsanitize=address'.  To disable memory writes protection use
11913          '--param asan-instrument-writes=0' option.
11914
11915     'asan-memintrin'
11916          Enable detection for built-in functions.  This kind of
11917          protection is enabled by default when using
11918          '-fsanitize=address'.  To disable built-in functions
11919          protection use '--param asan-memintrin=0'.
11920
11921     'asan-use-after-return'
11922          Enable detection of use-after-return.  This kind of protection
11923          is enabled by default when using the '-fsanitize=address'
11924          option.  To disable it use '--param asan-use-after-return=0'.
11925
11926          Note: By default the check is disabled at run time.  To enable
11927          it, add 'detect_stack_use_after_return=1' to the environment
11928          variable 'ASAN_OPTIONS'.
11929
11930     'asan-instrumentation-with-call-threshold'
11931          If number of memory accesses in function being instrumented is
11932          greater or equal to this number, use callbacks instead of
11933          inline checks.  E.g.  to disable inline code use '--param
11934          asan-instrumentation-with-call-threshold=0'.
11935
11936     'use-after-scope-direct-emission-threshold'
11937          If the size of a local variable in bytes is smaller or equal
11938          to this number, directly poison (or unpoison) shadow memory
11939          instead of using run-time callbacks.
11940
11941     'max-fsm-thread-path-insns'
11942          Maximum number of instructions to copy when duplicating blocks
11943          on a finite state automaton jump thread path.
11944
11945     'max-fsm-thread-length'
11946          Maximum number of basic blocks on a finite state automaton
11947          jump thread path.
11948
11949     'max-fsm-thread-paths'
11950          Maximum number of new jump thread paths to create for a finite
11951          state automaton.
11952
11953     'parloops-chunk-size'
11954          Chunk size of omp schedule for loops parallelized by parloops.
11955
11956     'parloops-schedule'
11957          Schedule type of omp schedule for loops parallelized by
11958          parloops (static, dynamic, guided, auto, runtime).
11959
11960     'parloops-min-per-thread'
11961          The minimum number of iterations per thread of an innermost
11962          parallelized loop for which the parallelized variant is
11963          preferred over the single threaded one.  Note that for a
11964          parallelized loop nest the minimum number of iterations of the
11965          outermost loop per thread is two.
11966
11967     'max-ssa-name-query-depth'
11968          Maximum depth of recursion when querying properties of SSA
11969          names in things like fold routines.  One level of recursion
11970          corresponds to following a use-def chain.
11971
11972     'hsa-gen-debug-stores'
11973          Enable emission of special debug stores within HSA kernels
11974          which are then read and reported by libgomp plugin.
11975          Generation of these stores is disabled by default, use
11976          '--param hsa-gen-debug-stores=1' to enable it.
11977
11978     'max-speculative-devirt-maydefs'
11979          The maximum number of may-defs we analyze when looking for a
11980          must-def specifying the dynamic type of an object that invokes
11981          a virtual call we may be able to devirtualize speculatively.
11982
11983     'max-vrp-switch-assertions'
11984          The maximum number of assertions to add along the default edge
11985          of a switch statement during VRP.
11986
11987     'unroll-jam-min-percent'
11988          The minimum percentage of memory references that must be
11989          optimized away for the unroll-and-jam transformation to be
11990          considered profitable.
11991
11992     'unroll-jam-max-unroll'
11993          The maximum number of times the outer loop should be unrolled
11994          by the unroll-and-jam transformation.
11995
11996     'max-rtl-if-conversion-unpredictable-cost'
11997          Maximum permissible cost for the sequence that would be
11998          generated by the RTL if-conversion pass for a branch that is
11999          considered unpredictable.
12000
12001     'max-variable-expansions-in-unroller'
12002          If '-fvariable-expansion-in-unroller' is used, the maximum
12003          number of times that an individual variable will be expanded
12004          during loop unrolling.
12005
12006     'tracer-min-branch-probability-feedback'
12007          Stop forward growth if the probability of best edge is less
12008          than this threshold (in percent).  Used when profile feedback
12009          is available.
12010
12011     'partial-inlining-entry-probability'
12012          Maximum probability of the entry BB of split region (in
12013          percent relative to entry BB of the function) to make partial
12014          inlining happen.
12015
12016     'max-tracked-strlens'
12017          Maximum number of strings for which strlen optimization pass
12018          will track string lengths.
12019
12020     'gcse-after-reload-partial-fraction'
12021          The threshold ratio for performing partial redundancy
12022          elimination after reload.
12023
12024     'gcse-after-reload-critical-fraction'
12025          The threshold ratio of critical edges execution count that
12026          permit performing redundancy elimination after reload.
12027
12028     'max-loop-header-insns'
12029          The maximum number of insns in loop header duplicated by the
12030          copy loop headers pass.
12031
12032     'vect-epilogues-nomask'
12033          Enable loop epilogue vectorization using smaller vector size.
12034
12035     'slp-max-insns-in-bb'
12036          Maximum number of instructions in basic block to be considered
12037          for SLP vectorization.
12038
12039     'avoid-fma-max-bits'
12040          Maximum number of bits for which we avoid creating FMAs.
12041
12042     'sms-loop-average-count-threshold'
12043          A threshold on the average loop count considered by the swing
12044          modulo scheduler.
12045
12046     'sms-dfa-history'
12047          The number of cycles the swing modulo scheduler considers when
12048          checking conflicts using DFA.
12049
12050     'max-inline-insns-recursive-auto'
12051          The maximum number of instructions non-inline function can
12052          grow to via recursive inlining.
12053
12054     'graphite-allow-codegen-errors'
12055          Whether codegen errors should be ICEs when '-fchecking'.
12056
12057     'sms-max-ii-factor'
12058          A factor for tuning the upper bound that swing modulo
12059          scheduler uses for scheduling a loop.
12060
12061     'lra-max-considered-reload-pseudos'
12062          The max number of reload pseudos which are considered during
12063          spilling a non-reload pseudo.
12064
12065     'max-pow-sqrt-depth'
12066          Maximum depth of sqrt chains to use when synthesizing
12067          exponentiation by a real constant.
12068
12069     'max-dse-active-local-stores'
12070          Maximum number of active local stores in RTL dead store
12071          elimination.
12072
12073     'asan-instrument-allocas'
12074          Enable asan allocas/VLAs protection.
12075
12076     'max-iterations-computation-cost'
12077          Bound on the cost of an expression to compute the number of
12078          iterations.
12079
12080     'max-isl-operations'
12081          Maximum number of isl operations, 0 means unlimited.
12082
12083     'graphite-max-arrays-per-scop'
12084          Maximum number of arrays per scop.
12085
12086     'max-vartrack-reverse-op-size'
12087          Max.  size of loc list for which reverse ops should be added.
12088
12089     'tracer-dynamic-coverage-feedback'
12090          The percentage of function, weighted by execution frequency,
12091          that must be covered by trace formation.  Used when profile
12092          feedback is available.
12093
12094     'max-inline-recursive-depth-auto'
12095          The maximum depth of recursive inlining for non-inline
12096          functions.
12097
12098     'fsm-scale-path-stmts'
12099          Scale factor to apply to the number of statements in a
12100          threading path when comparing to the number of (scaled)
12101          blocks.
12102
12103     'fsm-maximum-phi-arguments'
12104          Maximum number of arguments a PHI may have before the FSM
12105          threader will not try to thread through its block.
12106
12107     'uninit-control-dep-attempts'
12108          Maximum number of nested calls to search for control
12109          dependencies during uninitialized variable analysis.
12110
12111     'sra-max-scalarization-size-Osize'
12112          Maximum size, in storage units, of an aggregate which should
12113          be considered for scalarization when compiling for size.
12114
12115     'fsm-scale-path-blocks'
12116          Scale factor to apply to the number of blocks in a threading
12117          path when comparing to the number of (scaled) statements.
12118
12119     'sched-autopref-queue-depth'
12120          Hardware autoprefetcher scheduler model control flag.  Number
12121          of lookahead cycles the model looks into; at ' ' only enable
12122          instruction sorting heuristic.
12123
12124     'loop-versioning-max-inner-insns'
12125          The maximum number of instructions that an inner loop can have
12126          before the loop versioning pass considers it too big to copy.
12127
12128     'loop-versioning-max-outer-insns'
12129          The maximum number of instructions that an outer loop can have
12130          before the loop versioning pass considers it too big to copy,
12131          discounting any instructions in inner loops that directly
12132          benefit from versioning.
12133
12134     'ssa-name-def-chain-limit'
12135          The maximum number of SSA_NAME assignments to follow in
12136          determining a property of a variable such as its value.  This
12137          limits the number of iterations or recursive calls GCC
12138          performs when optimizing certain statements or when
12139          determining their validity prior to issuing diagnostics.
12140
12141     'store-merging-max-size'
12142          Maximum size of a single store merging region in bytes.
12143
12144     'hash-table-verification-limit'
12145          The number of elements for which hash table verification is
12146          done for each searched element.
12147
12148     'max-find-base-term-values'
12149          Maximum number of VALUEs handled during a single
12150          find_base_term call.
12151
12152     'analyzer-max-enodes-per-program-point'
12153          The maximum number of exploded nodes per program point within
12154          the analyzer, before terminating analysis of that point.
12155
12156     'analyzer-min-snodes-for-call-summary'
12157          The minimum number of supernodes within a function for the
12158          analyzer to consider summarizing its effects at call sites.
12159
12160     'analyzer-max-recursion-depth'
12161          The maximum number of times a callsite can appear in a call
12162          stack within the analyzer, before terminating analysis of a
12163          call that would recurse deeper.
12164
12165     'gimple-fe-computed-hot-bb-threshold'
12166          The number of executions of a basic block which is considered
12167          hot.  The parameter is used only in GIMPLE FE.
12168
12169     'analyzer-bb-explosion-factor'
12170          The maximum number of 'after supernode' exploded nodes within
12171          the analyzer per supernode, before terminating analysis.
12172
12173     The following choices of NAME are available on AArch64 targets:
12174
12175     'aarch64-sve-compare-costs'
12176          When vectorizing for SVE, consider using "unpacked" vectors
12177          for smaller elements and use the cost model to pick the
12178          cheapest approach.  Also use the cost model to choose between
12179          SVE and Advanced SIMD vectorization.
12180
12181          Using unpacked vectors includes storing smaller elements in
12182          larger containers and accessing elements with extending loads
12183          and truncating stores.
12184
12185     'aarch64-float-recp-precision'
12186          The number of Newton iterations for calculating the reciprocal
12187          for float type.  The precision of division is proportional to
12188          this param when division approximation is enabled.  The
12189          default value is 1.
12190
12191     'aarch64-double-recp-precision'
12192          The number of Newton iterations for calculating the reciprocal
12193          for double type.  The precision of division is propotional to
12194          this param when division approximation is enabled.  The
12195          default value is 2.
12196
12197     'aarch64-autovec-preference'
12198          Force an ISA selection strategy for auto-vectorization.
12199          Accepts values from 0 to 4, inclusive.
12200          '0'
12201               Use the default heuristics.
12202          '1'
12203               Use only Advanced SIMD for auto-vectorization.
12204          '2'
12205               Use only SVE for auto-vectorization.
12206          '3'
12207               Use both Advanced SIMD and SVE. Prefer Advanced SIMD when
12208               the costs are deemed equal.
12209          '4'
12210               Use both Advanced SIMD and SVE. Prefer SVE when the costs
12211               are deemed equal.
12212          The default value is 0.
12213
12214
12215File: gcc.info,  Node: Instrumentation Options,  Next: Preprocessor Options,  Prev: Optimize Options,  Up: Invoking GCC
12216
122173.12 Program Instrumentation Options
12218====================================
12219
12220GCC supports a number of command-line options that control adding
12221run-time instrumentation to the code it normally generates.  For
12222example, one purpose of instrumentation is collect profiling statistics
12223for use in finding program hot spots, code coverage analysis, or
12224profile-guided optimizations.  Another class of program instrumentation
12225is adding run-time checking to detect programming errors like invalid
12226pointer dereferences or out-of-bounds array accesses, as well as
12227deliberately hostile attacks such as stack smashing or C++ vtable
12228hijacking.  There is also a general hook which can be used to implement
12229other forms of tracing or function-level instrumentation for debug or
12230program analysis purposes.
12231
12232'-p'
12233'-pg'
12234     Generate extra code to write profile information suitable for the
12235     analysis program 'prof' (for '-p') or 'gprof' (for '-pg').  You
12236     must use this option when compiling the source files you want data
12237     about, and you must also use it when linking.
12238
12239     You can use the function attribute 'no_instrument_function' to
12240     suppress profiling of individual functions when compiling with
12241     these options.  *Note Common Function Attributes::.
12242
12243'-fprofile-arcs'
12244     Add code so that program flow "arcs" are instrumented.  During
12245     execution the program records how many times each branch and call
12246     is executed and how many times it is taken or returns.  On targets
12247     that support constructors with priority support, profiling properly
12248     handles constructors, destructors and C++ constructors (and
12249     destructors) of classes which are used as a type of a global
12250     variable.
12251
12252     When the compiled program exits it saves this data to a file called
12253     'AUXNAME.gcda' for each source file.  The data may be used for
12254     profile-directed optimizations ('-fbranch-probabilities'), or for
12255     test coverage analysis ('-ftest-coverage').  Each object file's
12256     AUXNAME is generated from the name of the output file, if
12257     explicitly specified and it is not the final executable, otherwise
12258     it is the basename of the source file.  In both cases any suffix is
12259     removed (e.g. 'foo.gcda' for input file 'dir/foo.c', or
12260     'dir/foo.gcda' for output file specified as '-o dir/foo.o').  *Note
12261     Cross-profiling::.
12262
12263'--coverage'
12264
12265     This option is used to compile and link code instrumented for
12266     coverage analysis.  The option is a synonym for '-fprofile-arcs'
12267     '-ftest-coverage' (when compiling) and '-lgcov' (when linking).
12268     See the documentation for those options for more details.
12269
12270        * Compile the source files with '-fprofile-arcs' plus
12271          optimization and code generation options.  For test coverage
12272          analysis, use the additional '-ftest-coverage' option.  You do
12273          not need to profile every source file in a program.
12274
12275        * Compile the source files additionally with
12276          '-fprofile-abs-path' to create absolute path names in the
12277          '.gcno' files.  This allows 'gcov' to find the correct sources
12278          in projects where compilations occur with different working
12279          directories.
12280
12281        * Link your object files with '-lgcov' or '-fprofile-arcs' (the
12282          latter implies the former).
12283
12284        * Run the program on a representative workload to generate the
12285          arc profile information.  This may be repeated any number of
12286          times.  You can run concurrent instances of your program, and
12287          provided that the file system supports locking, the data files
12288          will be correctly updated.  Unless a strict ISO C dialect
12289          option is in effect, 'fork' calls are detected and correctly
12290          handled without double counting.
12291
12292        * For profile-directed optimizations, compile the source files
12293          again with the same optimization and code generation options
12294          plus '-fbranch-probabilities' (*note Options that Control
12295          Optimization: Optimize Options.).
12296
12297        * For test coverage analysis, use 'gcov' to produce human
12298          readable information from the '.gcno' and '.gcda' files.
12299          Refer to the 'gcov' documentation for further information.
12300
12301     With '-fprofile-arcs', for each function of your program GCC
12302     creates a program flow graph, then finds a spanning tree for the
12303     graph.  Only arcs that are not on the spanning tree have to be
12304     instrumented: the compiler adds code to count the number of times
12305     that these arcs are executed.  When an arc is the only exit or only
12306     entrance to a block, the instrumentation code can be added to the
12307     block; otherwise, a new basic block must be created to hold the
12308     instrumentation code.
12309
12310'-ftest-coverage'
12311     Produce a notes file that the 'gcov' code-coverage utility (*note
12312     'gcov'--a Test Coverage Program: Gcov.) can use to show program
12313     coverage.  Each source file's note file is called 'AUXNAME.gcno'.
12314     Refer to the '-fprofile-arcs' option above for a description of
12315     AUXNAME and instructions on how to generate test coverage data.
12316     Coverage data matches the source files more closely if you do not
12317     optimize.
12318
12319'-fprofile-abs-path'
12320     Automatically convert relative source file names to absolute path
12321     names in the '.gcno' files.  This allows 'gcov' to find the correct
12322     sources in projects where compilations occur with different working
12323     directories.
12324
12325'-fprofile-dir=PATH'
12326
12327     Set the directory to search for the profile data files in to PATH.
12328     This option affects only the profile data generated by
12329     '-fprofile-generate', '-ftest-coverage', '-fprofile-arcs' and used
12330     by '-fprofile-use' and '-fbranch-probabilities' and its related
12331     options.  Both absolute and relative paths can be used.  By
12332     default, GCC uses the current directory as PATH, thus the profile
12333     data file appears in the same directory as the object file.  In
12334     order to prevent the file name clashing, if the object file name is
12335     not an absolute path, we mangle the absolute path of the
12336     'SOURCENAME.gcda' file and use it as the file name of a '.gcda'
12337     file.  See similar option '-fprofile-note'.
12338
12339     When an executable is run in a massive parallel environment, it is
12340     recommended to save profile to different folders.  That can be done
12341     with variables in PATH that are exported during run-time:
12342
12343     '%p'
12344          process ID.
12345
12346     '%q{VAR}'
12347          value of environment variable VAR
12348
12349'-fprofile-generate'
12350'-fprofile-generate=PATH'
12351
12352     Enable options usually used for instrumenting application to
12353     produce profile useful for later recompilation with profile
12354     feedback based optimization.  You must use '-fprofile-generate'
12355     both when compiling and when linking your program.
12356
12357     The following options are enabled: '-fprofile-arcs',
12358     '-fprofile-values', '-finline-functions', and '-fipa-bit-cp'.
12359
12360     If PATH is specified, GCC looks at the PATH to find the profile
12361     feedback data files.  See '-fprofile-dir'.
12362
12363     To optimize the program based on the collected profile information,
12364     use '-fprofile-use'.  *Note Optimize Options::, for more
12365     information.
12366
12367'-fprofile-note=PATH'
12368
12369     If PATH is specified, GCC saves '.gcno' file into PATH location.
12370     If you combine the option with multiple source files, the '.gcno'
12371     file will be overwritten.
12372
12373'-fprofile-prefix-path=PATH'
12374
12375     This option can be used in combination with
12376     'profile-generate='PROFILE_DIR and 'profile-use='PROFILE_DIR to
12377     inform GCC where is the base directory of built source tree.  By
12378     default PROFILE_DIR will contain files with mangled absolute paths
12379     of all object files in the built project.  This is not desirable
12380     when directory used to build the instrumented binary differs from
12381     the directory used to build the binary optimized with profile
12382     feedback because the profile data will not be found during the
12383     optimized build.  In such setups '-fprofile-prefix-path='PATH with
12384     PATH pointing to the base directory of the build can be used to
12385     strip the irrelevant part of the path and keep all file names
12386     relative to the main build directory.
12387
12388'-fprofile-update=METHOD'
12389
12390     Alter the update method for an application instrumented for profile
12391     feedback based optimization.  The METHOD argument should be one of
12392     'single', 'atomic' or 'prefer-atomic'.  The first one is useful for
12393     single-threaded applications, while the second one prevents profile
12394     corruption by emitting thread-safe code.
12395
12396     *Warning:* When an application does not properly join all threads
12397     (or creates an detached thread), a profile file can be still
12398     corrupted.
12399
12400     Using 'prefer-atomic' would be transformed either to 'atomic', when
12401     supported by a target, or to 'single' otherwise.  The GCC driver
12402     automatically selects 'prefer-atomic' when '-pthread' is present in
12403     the command line.
12404
12405'-fprofile-filter-files=REGEX'
12406
12407     Instrument only functions from files where names match any regular
12408     expression (separated by a semi-colon).
12409
12410     For example, '-fprofile-filter-files=main.c;module.*.c' will
12411     instrument only 'main.c' and all C files starting with 'module'.
12412
12413'-fprofile-exclude-files=REGEX'
12414
12415     Instrument only functions from files where names do not match all
12416     the regular expressions (separated by a semi-colon).
12417
12418     For example, '-fprofile-exclude-files=/usr/*' will prevent
12419     instrumentation of all files that are located in '/usr/' folder.
12420
12421'-fprofile-reproducible=[multithreaded|parallel-runs|serial]'
12422     Control level of reproducibility of profile gathered by
12423     '-fprofile-generate'.  This makes it possible to rebuild program
12424     with same outcome which is useful, for example, for distribution
12425     packages.
12426
12427     With '-fprofile-reproducible=serial' the profile gathered by
12428     '-fprofile-generate' is reproducible provided the trained program
12429     behaves the same at each invocation of the train run, it is not
12430     multi-threaded and profile data streaming is always done in the
12431     same order.  Note that profile streaming happens at the end of
12432     program run but also before 'fork' function is invoked.
12433
12434     Note that it is quite common that execution counts of some part of
12435     programs depends, for example, on length of temporary file names or
12436     memory space randomization (that may affect hash-table collision
12437     rate).  Such non-reproducible part of programs may be annotated by
12438     'no_instrument_function' function attribute.  'gcov-dump' with '-l'
12439     can be used to dump gathered data and verify that they are indeed
12440     reproducible.
12441
12442     With '-fprofile-reproducible=parallel-runs' collected profile stays
12443     reproducible regardless the order of streaming of the data into
12444     gcda files.  This setting makes it possible to run multiple
12445     instances of instrumented program in parallel (such as with 'make
12446     -j').  This reduces quality of gathered data, in particular of
12447     indirect call profiling.
12448
12449'-fsanitize=address'
12450     Enable AddressSanitizer, a fast memory error detector.  Memory
12451     access instructions are instrumented to detect out-of-bounds and
12452     use-after-free bugs.  The option enables
12453     '-fsanitize-address-use-after-scope'.  See
12454     <https://github.com/google/sanitizers/wiki/AddressSanitizer> for
12455     more details.  The run-time behavior can be influenced using the
12456     'ASAN_OPTIONS' environment variable.  When set to 'help=1', the
12457     available options are shown at startup of the instrumented program.
12458     See
12459     <https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags>
12460     for a list of supported options.  The option cannot be combined
12461     with '-fsanitize=thread'.
12462
12463'-fsanitize=kernel-address'
12464     Enable AddressSanitizer for Linux kernel.  See
12465     <https://github.com/google/kasan/wiki> for more details.
12466
12467'-fsanitize=pointer-compare'
12468     Instrument comparison operation (<, <=, >, >=) with pointer
12469     operands.  The option must be combined with either
12470     '-fsanitize=kernel-address' or '-fsanitize=address' The option
12471     cannot be combined with '-fsanitize=thread'.  Note: By default the
12472     check is disabled at run time.  To enable it, add
12473     'detect_invalid_pointer_pairs=2' to the environment variable
12474     'ASAN_OPTIONS'.  Using 'detect_invalid_pointer_pairs=1' detects
12475     invalid operation only when both pointers are non-null.
12476
12477'-fsanitize=pointer-subtract'
12478     Instrument subtraction with pointer operands.  The option must be
12479     combined with either '-fsanitize=kernel-address' or
12480     '-fsanitize=address' The option cannot be combined with
12481     '-fsanitize=thread'.  Note: By default the check is disabled at run
12482     time.  To enable it, add 'detect_invalid_pointer_pairs=2' to the
12483     environment variable 'ASAN_OPTIONS'.  Using
12484     'detect_invalid_pointer_pairs=1' detects invalid operation only
12485     when both pointers are non-null.
12486
12487'-fsanitize=thread'
12488     Enable ThreadSanitizer, a fast data race detector.  Memory access
12489     instructions are instrumented to detect data race bugs.  See
12490     <https://github.com/google/sanitizers/wiki#threadsanitizer> for
12491     more details.  The run-time behavior can be influenced using the
12492     'TSAN_OPTIONS' environment variable; see
12493     <https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags>
12494     for a list of supported options.  The option cannot be combined
12495     with '-fsanitize=address', '-fsanitize=leak'.
12496
12497     Note that sanitized atomic builtins cannot throw exceptions when
12498     operating on invalid memory addresses with non-call exceptions
12499     ('-fnon-call-exceptions').
12500
12501'-fsanitize=leak'
12502     Enable LeakSanitizer, a memory leak detector.  This option only
12503     matters for linking of executables and the executable is linked
12504     against a library that overrides 'malloc' and other allocator
12505     functions.  See
12506     <https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>
12507     for more details.  The run-time behavior can be influenced using
12508     the 'LSAN_OPTIONS' environment variable.  The option cannot be
12509     combined with '-fsanitize=thread'.
12510
12511'-fsanitize=undefined'
12512     Enable UndefinedBehaviorSanitizer, a fast undefined behavior
12513     detector.  Various computations are instrumented to detect
12514     undefined behavior at runtime.  See
12515     <https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html> for
12516     more details.  The run-time behavior can be influenced using the
12517     'UBSAN_OPTIONS' environment variable.  Current suboptions are:
12518
12519     '-fsanitize=shift'
12520          This option enables checking that the result of a shift
12521          operation is not undefined.  Note that what exactly is
12522          considered undefined differs slightly between C and C++, as
12523          well as between ISO C90 and C99, etc.  This option has two
12524          suboptions, '-fsanitize=shift-base' and
12525          '-fsanitize=shift-exponent'.
12526
12527     '-fsanitize=shift-exponent'
12528          This option enables checking that the second argument of a
12529          shift operation is not negative and is smaller than the
12530          precision of the promoted first argument.
12531
12532     '-fsanitize=shift-base'
12533          If the second argument of a shift operation is within range,
12534          check that the result of a shift operation is not undefined.
12535          Note that what exactly is considered undefined differs
12536          slightly between C and C++, as well as between ISO C90 and
12537          C99, etc.
12538
12539     '-fsanitize=integer-divide-by-zero'
12540          Detect integer division by zero as well as 'INT_MIN / -1'
12541          division.
12542
12543     '-fsanitize=unreachable'
12544          With this option, the compiler turns the
12545          '__builtin_unreachable' call into a diagnostics message call
12546          instead.  When reaching the '__builtin_unreachable' call, the
12547          behavior is undefined.
12548
12549     '-fsanitize=vla-bound'
12550          This option instructs the compiler to check that the size of a
12551          variable length array is positive.
12552
12553     '-fsanitize=null'
12554          This option enables pointer checking.  Particularly, the
12555          application built with this option turned on will issue an
12556          error message when it tries to dereference a NULL pointer, or
12557          if a reference (possibly an rvalue reference) is bound to a
12558          NULL pointer, or if a method is invoked on an object pointed
12559          by a NULL pointer.
12560
12561     '-fsanitize=return'
12562          This option enables return statement checking.  Programs built
12563          with this option turned on will issue an error message when
12564          the end of a non-void function is reached without actually
12565          returning a value.  This option works in C++ only.
12566
12567     '-fsanitize=signed-integer-overflow'
12568          This option enables signed integer overflow checking.  We
12569          check that the result of '+', '*', and both unary and binary
12570          '-' does not overflow in the signed arithmetics.  Note,
12571          integer promotion rules must be taken into account.  That is,
12572          the following is not an overflow:
12573               signed char a = SCHAR_MAX;
12574               a++;
12575
12576     '-fsanitize=bounds'
12577          This option enables instrumentation of array bounds.  Various
12578          out of bounds accesses are detected.  Flexible array members,
12579          flexible array member-like arrays, and initializers of
12580          variables with static storage are not instrumented.
12581
12582     '-fsanitize=bounds-strict'
12583          This option enables strict instrumentation of array bounds.
12584          Most out of bounds accesses are detected, including flexible
12585          array members and flexible array member-like arrays.
12586          Initializers of variables with static storage are not
12587          instrumented.
12588
12589     '-fsanitize=alignment'
12590
12591          This option enables checking of alignment of pointers when
12592          they are dereferenced, or when a reference is bound to
12593          insufficiently aligned target, or when a method or constructor
12594          is invoked on insufficiently aligned object.
12595
12596     '-fsanitize=object-size'
12597          This option enables instrumentation of memory references using
12598          the '__builtin_object_size' function.  Various out of bounds
12599          pointer accesses are detected.
12600
12601     '-fsanitize=float-divide-by-zero'
12602          Detect floating-point division by zero.  Unlike other similar
12603          options, '-fsanitize=float-divide-by-zero' is not enabled by
12604          '-fsanitize=undefined', since floating-point division by zero
12605          can be a legitimate way of obtaining infinities and NaNs.
12606
12607     '-fsanitize=float-cast-overflow'
12608          This option enables floating-point type to integer conversion
12609          checking.  We check that the result of the conversion does not
12610          overflow.  Unlike other similar options,
12611          '-fsanitize=float-cast-overflow' is not enabled by
12612          '-fsanitize=undefined'.  This option does not work well with
12613          'FE_INVALID' exceptions enabled.
12614
12615     '-fsanitize=nonnull-attribute'
12616
12617          This option enables instrumentation of calls, checking whether
12618          null values are not passed to arguments marked as requiring a
12619          non-null value by the 'nonnull' function attribute.
12620
12621     '-fsanitize=returns-nonnull-attribute'
12622
12623          This option enables instrumentation of return statements in
12624          functions marked with 'returns_nonnull' function attribute, to
12625          detect returning of null values from such functions.
12626
12627     '-fsanitize=bool'
12628
12629          This option enables instrumentation of loads from bool.  If a
12630          value other than 0/1 is loaded, a run-time error is issued.
12631
12632     '-fsanitize=enum'
12633
12634          This option enables instrumentation of loads from an enum
12635          type.  If a value outside the range of values for the enum
12636          type is loaded, a run-time error is issued.
12637
12638     '-fsanitize=vptr'
12639
12640          This option enables instrumentation of C++ member function
12641          calls, member accesses and some conversions between pointers
12642          to base and derived classes, to verify the referenced object
12643          has the correct dynamic type.
12644
12645     '-fsanitize=pointer-overflow'
12646
12647          This option enables instrumentation of pointer arithmetics.
12648          If the pointer arithmetics overflows, a run-time error is
12649          issued.
12650
12651     '-fsanitize=builtin'
12652
12653          This option enables instrumentation of arguments to selected
12654          builtin functions.  If an invalid value is passed to such
12655          arguments, a run-time error is issued.  E.g. passing 0 as the
12656          argument to '__builtin_ctz' or '__builtin_clz' invokes
12657          undefined behavior and is diagnosed by this option.
12658
12659     While '-ftrapv' causes traps for signed overflows to be emitted,
12660     '-fsanitize=undefined' gives a diagnostic message.  This currently
12661     works only for the C family of languages.
12662
12663'-fno-sanitize=all'
12664
12665     This option disables all previously enabled sanitizers.
12666     '-fsanitize=all' is not allowed, as some sanitizers cannot be used
12667     together.
12668
12669'-fasan-shadow-offset=NUMBER'
12670     This option forces GCC to use custom shadow offset in
12671     AddressSanitizer checks.  It is useful for experimenting with
12672     different shadow memory layouts in Kernel AddressSanitizer.
12673
12674'-fsanitize-sections=S1,S2,...'
12675     Sanitize global variables in selected user-defined sections.  SI
12676     may contain wildcards.
12677
12678'-fsanitize-recover[=OPTS]'
12679     '-fsanitize-recover=' controls error recovery mode for sanitizers
12680     mentioned in comma-separated list of OPTS.  Enabling this option
12681     for a sanitizer component causes it to attempt to continue running
12682     the program as if no error happened.  This means multiple runtime
12683     errors can be reported in a single program run, and the exit code
12684     of the program may indicate success even when errors have been
12685     reported.  The '-fno-sanitize-recover=' option can be used to alter
12686     this behavior: only the first detected error is reported and
12687     program then exits with a non-zero exit code.
12688
12689     Currently this feature only works for '-fsanitize=undefined' (and
12690     its suboptions except for '-fsanitize=unreachable' and
12691     '-fsanitize=return'), '-fsanitize=float-cast-overflow',
12692     '-fsanitize=float-divide-by-zero', '-fsanitize=bounds-strict',
12693     '-fsanitize=kernel-address' and '-fsanitize=address'.  For these
12694     sanitizers error recovery is turned on by default, except
12695     '-fsanitize=address', for which this feature is experimental.
12696     '-fsanitize-recover=all' and '-fno-sanitize-recover=all' is also
12697     accepted, the former enables recovery for all sanitizers that
12698     support it, the latter disables recovery for all sanitizers that
12699     support it.
12700
12701     Even if a recovery mode is turned on the compiler side, it needs to
12702     be also enabled on the runtime library side, otherwise the failures
12703     are still fatal.  The runtime library defaults to 'halt_on_error=0'
12704     for ThreadSanitizer and UndefinedBehaviorSanitizer, while default
12705     value for AddressSanitizer is 'halt_on_error=1'.  This can be
12706     overridden through setting the 'halt_on_error' flag in the
12707     corresponding environment variable.
12708
12709     Syntax without an explicit OPTS parameter is deprecated.  It is
12710     equivalent to specifying an OPTS list of:
12711
12712          undefined,float-cast-overflow,float-divide-by-zero,bounds-strict
12713
12714'-fsanitize-address-use-after-scope'
12715     Enable sanitization of local variables to detect use-after-scope
12716     bugs.  The option sets '-fstack-reuse' to 'none'.
12717
12718'-fsanitize-undefined-trap-on-error'
12719     The '-fsanitize-undefined-trap-on-error' option instructs the
12720     compiler to report undefined behavior using '__builtin_trap' rather
12721     than a 'libubsan' library routine.  The advantage of this is that
12722     the 'libubsan' library is not needed and is not linked in, so this
12723     is usable even in freestanding environments.
12724
12725'-fsanitize-coverage=trace-pc'
12726     Enable coverage-guided fuzzing code instrumentation.  Inserts a
12727     call to '__sanitizer_cov_trace_pc' into every basic block.
12728
12729'-fsanitize-coverage=trace-cmp'
12730     Enable dataflow guided fuzzing code instrumentation.  Inserts a
12731     call to '__sanitizer_cov_trace_cmp1', '__sanitizer_cov_trace_cmp2',
12732     '__sanitizer_cov_trace_cmp4' or '__sanitizer_cov_trace_cmp8' for
12733     integral comparison with both operands variable or
12734     '__sanitizer_cov_trace_const_cmp1',
12735     '__sanitizer_cov_trace_const_cmp2',
12736     '__sanitizer_cov_trace_const_cmp4' or
12737     '__sanitizer_cov_trace_const_cmp8' for integral comparison with one
12738     operand constant, '__sanitizer_cov_trace_cmpf' or
12739     '__sanitizer_cov_trace_cmpd' for float or double comparisons and
12740     '__sanitizer_cov_trace_switch' for switch statements.
12741
12742'-fcf-protection=[full|branch|return|none|check]'
12743     Enable code instrumentation of control-flow transfers to increase
12744     program security by checking that target addresses of control-flow
12745     transfer instructions (such as indirect function call, function
12746     return, indirect jump) are valid.  This prevents diverting the flow
12747     of control to an unexpected target.  This is intended to protect
12748     against such threats as Return-oriented Programming (ROP), and
12749     similarly call/jmp-oriented programming (COP/JOP).
12750
12751     The value 'branch' tells the compiler to implement checking of
12752     validity of control-flow transfer at the point of indirect branch
12753     instructions, i.e. call/jmp instructions.  The value 'return'
12754     implements checking of validity at the point of returning from a
12755     function.  The value 'full' is an alias for specifying both
12756     'branch' and 'return'.  The value 'none' turns off instrumentation.
12757
12758     The value 'check' is used for the final link with link-time
12759     optimization (LTO). An error is issued if LTO object files are
12760     compiled with different '-fcf-protection' values.  The value
12761     'check' is ignored at the compile time.
12762
12763     The macro '__CET__' is defined when '-fcf-protection' is used.  The
12764     first bit of '__CET__' is set to 1 for the value 'branch' and the
12765     second bit of '__CET__' is set to 1 for the 'return'.
12766
12767     You can also use the 'nocf_check' attribute to identify which
12768     functions and calls should be skipped from instrumentation (*note
12769     Function Attributes::).
12770
12771     Currently the x86 GNU/Linux target provides an implementation based
12772     on Intel Control-flow Enforcement Technology (CET) which works for
12773     i686 processor or newer.
12774
12775'-fstack-protector'
12776     Emit extra code to check for buffer overflows, such as stack
12777     smashing attacks.  This is done by adding a guard variable to
12778     functions with vulnerable objects.  This includes functions that
12779     call 'alloca', and functions with buffers larger than or equal to 8
12780     bytes.  The guards are initialized when a function is entered and
12781     then checked when the function exits.  If a guard check fails, an
12782     error message is printed and the program exits.  Only variables
12783     that are actually allocated on the stack are considered, optimized
12784     away variables or variables allocated in registers don't count.
12785
12786'-fstack-protector-all'
12787     Like '-fstack-protector' except that all functions are protected.
12788
12789'-fstack-protector-strong'
12790     Like '-fstack-protector' but includes additional functions to be
12791     protected -- those that have local array definitions, or have
12792     references to local frame addresses.  Only variables that are
12793     actually allocated on the stack are considered, optimized away
12794     variables or variables allocated in registers don't count.
12795
12796'-fstack-protector-explicit'
12797     Like '-fstack-protector' but only protects those functions which
12798     have the 'stack_protect' attribute.
12799
12800'-fstack-check'
12801     Generate code to verify that you do not go beyond the boundary of
12802     the stack.  You should specify this flag if you are running in an
12803     environment with multiple threads, but you only rarely need to
12804     specify it in a single-threaded environment since stack overflow is
12805     automatically detected on nearly all systems if there is only one
12806     stack.
12807
12808     Note that this switch does not actually cause checking to be done;
12809     the operating system or the language runtime must do that.  The
12810     switch causes generation of code to ensure that they see the stack
12811     being extended.
12812
12813     You can additionally specify a string parameter: 'no' means no
12814     checking, 'generic' means force the use of old-style checking,
12815     'specific' means use the best checking method and is equivalent to
12816     bare '-fstack-check'.
12817
12818     Old-style checking is a generic mechanism that requires no specific
12819     target support in the compiler but comes with the following
12820     drawbacks:
12821
12822       1. Modified allocation strategy for large objects: they are
12823          always allocated dynamically if their size exceeds a fixed
12824          threshold.  Note this may change the semantics of some code.
12825
12826       2. Fixed limit on the size of the static frame of functions: when
12827          it is topped by a particular function, stack checking is not
12828          reliable and a warning is issued by the compiler.
12829
12830       3. Inefficiency: because of both the modified allocation strategy
12831          and the generic implementation, code performance is hampered.
12832
12833     Note that old-style stack checking is also the fallback method for
12834     'specific' if no target support has been added in the compiler.
12835
12836     '-fstack-check=' is designed for Ada's needs to detect infinite
12837     recursion and stack overflows.  'specific' is an excellent choice
12838     when compiling Ada code.  It is not generally sufficient to protect
12839     against stack-clash attacks.  To protect against those you want
12840     '-fstack-clash-protection'.
12841
12842'-fstack-clash-protection'
12843     Generate code to prevent stack clash style attacks.  When this
12844     option is enabled, the compiler will only allocate one page of
12845     stack space at a time and each page is accessed immediately after
12846     allocation.  Thus, it prevents allocations from jumping over any
12847     stack guard page provided by the operating system.
12848
12849     Most targets do not fully support stack clash protection.  However,
12850     on those targets '-fstack-clash-protection' will protect dynamic
12851     stack allocations.  '-fstack-clash-protection' may also provide
12852     limited protection for static stack allocations if the target
12853     supports '-fstack-check=specific'.
12854
12855'-fstack-limit-register=REG'
12856'-fstack-limit-symbol=SYM'
12857'-fno-stack-limit'
12858     Generate code to ensure that the stack does not grow beyond a
12859     certain value, either the value of a register or the address of a
12860     symbol.  If a larger stack is required, a signal is raised at run
12861     time.  For most targets, the signal is raised before the stack
12862     overruns the boundary, so it is possible to catch the signal
12863     without taking special precautions.
12864
12865     For instance, if the stack starts at absolute address '0x80000000'
12866     and grows downwards, you can use the flags
12867     '-fstack-limit-symbol=__stack_limit' and
12868     '-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit of
12869     128KB.  Note that this may only work with the GNU linker.
12870
12871     You can locally override stack limit checking by using the
12872     'no_stack_limit' function attribute (*note Function Attributes::).
12873
12874'-fsplit-stack'
12875     Generate code to automatically split the stack before it overflows.
12876     The resulting program has a discontiguous stack which can only
12877     overflow if the program is unable to allocate any more memory.
12878     This is most useful when running threaded programs, as it is no
12879     longer necessary to calculate a good stack size to use for each
12880     thread.  This is currently only implemented for the x86 targets
12881     running GNU/Linux.
12882
12883     When code compiled with '-fsplit-stack' calls code compiled without
12884     '-fsplit-stack', there may not be much stack space available for
12885     the latter code to run.  If compiling all code, including library
12886     code, with '-fsplit-stack' is not an option, then the linker can
12887     fix up these calls so that the code compiled without
12888     '-fsplit-stack' always has a large stack.  Support for this is
12889     implemented in the gold linker in GNU binutils release 2.21 and
12890     later.
12891
12892'-fvtable-verify=[std|preinit|none]'
12893     This option is only available when compiling C++ code.  It turns on
12894     (or off, if using '-fvtable-verify=none') the security feature that
12895     verifies at run time, for every virtual call, that the vtable
12896     pointer through which the call is made is valid for the type of the
12897     object, and has not been corrupted or overwritten.  If an invalid
12898     vtable pointer is detected at run time, an error is reported and
12899     execution of the program is immediately halted.
12900
12901     This option causes run-time data structures to be built at program
12902     startup, which are used for verifying the vtable pointers.  The
12903     options 'std' and 'preinit' control the timing of when these data
12904     structures are built.  In both cases the data structures are built
12905     before execution reaches 'main'.  Using '-fvtable-verify=std'
12906     causes the data structures to be built after shared libraries have
12907     been loaded and initialized.  '-fvtable-verify=preinit' causes them
12908     to be built before shared libraries have been loaded and
12909     initialized.
12910
12911     If this option appears multiple times in the command line with
12912     different values specified, 'none' takes highest priority over both
12913     'std' and 'preinit'; 'preinit' takes priority over 'std'.
12914
12915'-fvtv-debug'
12916     When used in conjunction with '-fvtable-verify=std' or
12917     '-fvtable-verify=preinit', causes debug versions of the runtime
12918     functions for the vtable verification feature to be called.  This
12919     flag also causes the compiler to log information about which vtable
12920     pointers it finds for each class.  This information is written to a
12921     file named 'vtv_set_ptr_data.log' in the directory named by the
12922     environment variable 'VTV_LOGS_DIR' if that is defined or the
12923     current working directory otherwise.
12924
12925     Note: This feature _appends_ data to the log file.  If you want a
12926     fresh log file, be sure to delete any existing one.
12927
12928'-fvtv-counts'
12929     This is a debugging flag.  When used in conjunction with
12930     '-fvtable-verify=std' or '-fvtable-verify=preinit', this causes the
12931     compiler to keep track of the total number of virtual calls it
12932     encounters and the number of verifications it inserts.  It also
12933     counts the number of calls to certain run-time library functions
12934     that it inserts and logs this information for each compilation
12935     unit.  The compiler writes this information to a file named
12936     'vtv_count_data.log' in the directory named by the environment
12937     variable 'VTV_LOGS_DIR' if that is defined or the current working
12938     directory otherwise.  It also counts the size of the vtable pointer
12939     sets for each class, and writes this information to
12940     'vtv_class_set_sizes.log' in the same directory.
12941
12942     Note: This feature _appends_ data to the log files.  To get fresh
12943     log files, be sure to delete any existing ones.
12944
12945'-finstrument-functions'
12946     Generate instrumentation calls for entry and exit to functions.
12947     Just after function entry and just before function exit, the
12948     following profiling functions are called with the address of the
12949     current function and its call site.  (On some platforms,
12950     '__builtin_return_address' does not work beyond the current
12951     function, so the call site information may not be available to the
12952     profiling functions otherwise.)
12953
12954          void __cyg_profile_func_enter (void *this_fn,
12955                                         void *call_site);
12956          void __cyg_profile_func_exit  (void *this_fn,
12957                                         void *call_site);
12958
12959     The first argument is the address of the start of the current
12960     function, which may be looked up exactly in the symbol table.
12961
12962     This instrumentation is also done for functions expanded inline in
12963     other functions.  The profiling calls indicate where, conceptually,
12964     the inline function is entered and exited.  This means that
12965     addressable versions of such functions must be available.  If all
12966     your uses of a function are expanded inline, this may mean an
12967     additional expansion of code size.  If you use 'extern inline' in
12968     your C code, an addressable version of such functions must be
12969     provided.  (This is normally the case anyway, but if you get lucky
12970     and the optimizer always expands the functions inline, you might
12971     have gotten away without providing static copies.)
12972
12973     A function may be given the attribute 'no_instrument_function', in
12974     which case this instrumentation is not done.  This can be used, for
12975     example, for the profiling functions listed above, high-priority
12976     interrupt routines, and any functions from which the profiling
12977     functions cannot safely be called (perhaps signal handlers, if the
12978     profiling routines generate output or allocate memory).  *Note
12979     Common Function Attributes::.
12980
12981'-finstrument-functions-exclude-file-list=FILE,FILE,...'
12982
12983     Set the list of functions that are excluded from instrumentation
12984     (see the description of '-finstrument-functions').  If the file
12985     that contains a function definition matches with one of FILE, then
12986     that function is not instrumented.  The match is done on
12987     substrings: if the FILE parameter is a substring of the file name,
12988     it is considered to be a match.
12989
12990     For example:
12991
12992          -finstrument-functions-exclude-file-list=/bits/stl,include/sys
12993
12994     excludes any inline function defined in files whose pathnames
12995     contain '/bits/stl' or 'include/sys'.
12996
12997     If, for some reason, you want to include letter ',' in one of SYM,
12998     write '\,'.  For example,
12999     '-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
13000     single quote surrounding the option).
13001
13002'-finstrument-functions-exclude-function-list=SYM,SYM,...'
13003
13004     This is similar to '-finstrument-functions-exclude-file-list', but
13005     this option sets the list of function names to be excluded from
13006     instrumentation.  The function name to be matched is its
13007     user-visible name, such as 'vector<int> blah(const vector<int> &)',
13008     not the internal mangled name (e.g., '_Z4blahRSt6vectorIiSaIiEE').
13009     The match is done on substrings: if the SYM parameter is a
13010     substring of the function name, it is considered to be a match.
13011     For C99 and C++ extended identifiers, the function name must be
13012     given in UTF-8, not using universal character names.
13013
13014'-fpatchable-function-entry=N[,M]'
13015     Generate N NOPs right at the beginning of each function, with the
13016     function entry point before the Mth NOP. If M is omitted, it
13017     defaults to '0' so the function entry points to the address just at
13018     the first NOP. The NOP instructions reserve extra space which can
13019     be used to patch in any desired instrumentation at run time,
13020     provided that the code segment is writable.  The amount of space is
13021     controllable indirectly via the number of NOPs; the NOP instruction
13022     used corresponds to the instruction emitted by the internal GCC
13023     back-end interface 'gen_nop'.  This behavior is target-specific and
13024     may also depend on the architecture variant and/or other
13025     compilation options.
13026
13027     For run-time identification, the starting addresses of these areas,
13028     which correspond to their respective function entries minus M, are
13029     additionally collected in the '__patchable_function_entries'
13030     section of the resulting binary.
13031
13032     Note that the value of '__attribute__ ((patchable_function_entry
13033     (N,M)))' takes precedence over command-line option
13034     '-fpatchable-function-entry=N,M'.  This can be used to increase the
13035     area size or to remove it completely on a single function.  If
13036     'N=0', no pad location is recorded.
13037
13038     The NOP instructions are inserted at--and maybe before, depending
13039     on M--the function entry address, even before the prologue.
13040
13041
13042File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Instrumentation Options,  Up: Invoking GCC
13043
130443.13 Options Controlling the Preprocessor
13045=========================================
13046
13047These options control the C preprocessor, which is run on each C source
13048file before actual compilation.
13049
13050 If you use the '-E' option, nothing is done except preprocessing.  Some
13051of these options make sense only together with '-E' because they cause
13052the preprocessor output to be unsuitable for actual compilation.
13053
13054 In addition to the options listed here, there are a number of options
13055to control search paths for include files documented in *note Directory
13056Options::.  Options to control preprocessor diagnostics are listed in
13057*note Warning Options::.
13058
13059'-D NAME'
13060     Predefine NAME as a macro, with definition '1'.
13061
13062'-D NAME=DEFINITION'
13063     The contents of DEFINITION are tokenized and processed as if they
13064     appeared during translation phase three in a '#define' directive.
13065     In particular, the definition is truncated by embedded newline
13066     characters.
13067
13068     If you are invoking the preprocessor from a shell or shell-like
13069     program you may need to use the shell's quoting syntax to protect
13070     characters such as spaces that have a meaning in the shell syntax.
13071
13072     If you wish to define a function-like macro on the command line,
13073     write its argument list with surrounding parentheses before the
13074     equals sign (if any).  Parentheses are meaningful to most shells,
13075     so you should quote the option.  With 'sh' and 'csh',
13076     '-D'NAME(ARGS...)=DEFINITION'' works.
13077
13078     '-D' and '-U' options are processed in the order they are given on
13079     the command line.  All '-imacros FILE' and '-include FILE' options
13080     are processed after all '-D' and '-U' options.
13081
13082'-U NAME'
13083     Cancel any previous definition of NAME, either built in or provided
13084     with a '-D' option.
13085
13086'-include FILE'
13087     Process FILE as if '#include "file"' appeared as the first line of
13088     the primary source file.  However, the first directory searched for
13089     FILE is the preprocessor's working directory _instead of_ the
13090     directory containing the main source file.  If not found there, it
13091     is searched for in the remainder of the '#include "..."' search
13092     chain as normal.
13093
13094     If multiple '-include' options are given, the files are included in
13095     the order they appear on the command line.
13096
13097'-imacros FILE'
13098     Exactly like '-include', except that any output produced by
13099     scanning FILE is thrown away.  Macros it defines remain defined.
13100     This allows you to acquire all the macros from a header without
13101     also processing its declarations.
13102
13103     All files specified by '-imacros' are processed before all files
13104     specified by '-include'.
13105
13106'-undef'
13107     Do not predefine any system-specific or GCC-specific macros.  The
13108     standard predefined macros remain defined.
13109
13110'-pthread'
13111     Define additional macros required for using the POSIX threads
13112     library.  You should use this option consistently for both
13113     compilation and linking.  This option is supported on GNU/Linux
13114     targets, most other Unix derivatives, and also on x86 Cygwin and
13115     MinGW targets.
13116
13117'-M'
13118     Instead of outputting the result of preprocessing, output a rule
13119     suitable for 'make' describing the dependencies of the main source
13120     file.  The preprocessor outputs one 'make' rule containing the
13121     object file name for that source file, a colon, and the names of
13122     all the included files, including those coming from '-include' or
13123     '-imacros' command-line options.
13124
13125     Unless specified explicitly (with '-MT' or '-MQ'), the object file
13126     name consists of the name of the source file with any suffix
13127     replaced with object file suffix and with any leading directory
13128     parts removed.  If there are many included files then the rule is
13129     split into several lines using '\'-newline.  The rule has no
13130     commands.
13131
13132     This option does not suppress the preprocessor's debug output, such
13133     as '-dM'.  To avoid mixing such debug output with the dependency
13134     rules you should explicitly specify the dependency output file with
13135     '-MF', or use an environment variable like 'DEPENDENCIES_OUTPUT'
13136     (*note Environment Variables::).  Debug output is still sent to the
13137     regular output stream as normal.
13138
13139     Passing '-M' to the driver implies '-E', and suppresses warnings
13140     with an implicit '-w'.
13141
13142'-MM'
13143     Like '-M' but do not mention header files that are found in system
13144     header directories, nor header files that are included, directly or
13145     indirectly, from such a header.
13146
13147     This implies that the choice of angle brackets or double quotes in
13148     an '#include' directive does not in itself determine whether that
13149     header appears in '-MM' dependency output.
13150
13151'-MF FILE'
13152     When used with '-M' or '-MM', specifies a file to write the
13153     dependencies to.  If no '-MF' switch is given the preprocessor
13154     sends the rules to the same place it would send preprocessed
13155     output.
13156
13157     When used with the driver options '-MD' or '-MMD', '-MF' overrides
13158     the default dependency output file.
13159
13160     If FILE is '-', then the dependencies are written to 'stdout'.
13161
13162'-MG'
13163     In conjunction with an option such as '-M' requesting dependency
13164     generation, '-MG' assumes missing header files are generated files
13165     and adds them to the dependency list without raising an error.  The
13166     dependency filename is taken directly from the '#include' directive
13167     without prepending any path.  '-MG' also suppresses preprocessed
13168     output, as a missing header file renders this useless.
13169
13170     This feature is used in automatic updating of makefiles.
13171
13172'-MP'
13173     This option instructs CPP to add a phony target for each dependency
13174     other than the main file, causing each to depend on nothing.  These
13175     dummy rules work around errors 'make' gives if you remove header
13176     files without updating the 'Makefile' to match.
13177
13178     This is typical output:
13179
13180          test.o: test.c test.h
13181
13182          test.h:
13183
13184'-MT TARGET'
13185
13186     Change the target of the rule emitted by dependency generation.  By
13187     default CPP takes the name of the main input file, deletes any
13188     directory components and any file suffix such as '.c', and appends
13189     the platform's usual object suffix.  The result is the target.
13190
13191     An '-MT' option sets the target to be exactly the string you
13192     specify.  If you want multiple targets, you can specify them as a
13193     single argument to '-MT', or use multiple '-MT' options.
13194
13195     For example, '-MT '$(objpfx)foo.o'' might give
13196
13197          $(objpfx)foo.o: foo.c
13198
13199'-MQ TARGET'
13200
13201     Same as '-MT', but it quotes any characters which are special to
13202     Make.  '-MQ '$(objpfx)foo.o'' gives
13203
13204          $$(objpfx)foo.o: foo.c
13205
13206     The default target is automatically quoted, as if it were given
13207     with '-MQ'.
13208
13209'-MD'
13210     '-MD' is equivalent to '-M -MF FILE', except that '-E' is not
13211     implied.  The driver determines FILE based on whether an '-o'
13212     option is given.  If it is, the driver uses its argument but with a
13213     suffix of '.d', otherwise it takes the name of the input file,
13214     removes any directory components and suffix, and applies a '.d'
13215     suffix.
13216
13217     If '-MD' is used in conjunction with '-E', any '-o' switch is
13218     understood to specify the dependency output file (*note -MF:
13219     dashMF.), but if used without '-E', each '-o' is understood to
13220     specify a target object file.
13221
13222     Since '-E' is not implied, '-MD' can be used to generate a
13223     dependency output file as a side effect of the compilation process.
13224
13225'-MMD'
13226     Like '-MD' except mention only user header files, not system header
13227     files.
13228
13229'-fpreprocessed'
13230     Indicate to the preprocessor that the input file has already been
13231     preprocessed.  This suppresses things like macro expansion,
13232     trigraph conversion, escaped newline splicing, and processing of
13233     most directives.  The preprocessor still recognizes and removes
13234     comments, so that you can pass a file preprocessed with '-C' to the
13235     compiler without problems.  In this mode the integrated
13236     preprocessor is little more than a tokenizer for the front ends.
13237
13238     '-fpreprocessed' is implicit if the input file has one of the
13239     extensions '.i', '.ii' or '.mi'.  These are the extensions that GCC
13240     uses for preprocessed files created by '-save-temps'.
13241
13242'-fdirectives-only'
13243     When preprocessing, handle directives, but do not expand macros.
13244
13245     The option's behavior depends on the '-E' and '-fpreprocessed'
13246     options.
13247
13248     With '-E', preprocessing is limited to the handling of directives
13249     such as '#define', '#ifdef', and '#error'.  Other preprocessor
13250     operations, such as macro expansion and trigraph conversion are not
13251     performed.  In addition, the '-dD' option is implicitly enabled.
13252
13253     With '-fpreprocessed', predefinition of command line and most
13254     builtin macros is disabled.  Macros such as '__LINE__', which are
13255     contextually dependent, are handled normally.  This enables
13256     compilation of files previously preprocessed with '-E
13257     -fdirectives-only'.
13258
13259     With both '-E' and '-fpreprocessed', the rules for '-fpreprocessed'
13260     take precedence.  This enables full preprocessing of files
13261     previously preprocessed with '-E -fdirectives-only'.
13262
13263'-fdollars-in-identifiers'
13264     Accept '$' in identifiers.
13265
13266'-fextended-identifiers'
13267     Accept universal character names and extended characters in
13268     identifiers.  This option is enabled by default for C99 (and later
13269     C standard versions) and C++.
13270
13271'-fno-canonical-system-headers'
13272     When preprocessing, do not shorten system header paths with
13273     canonicalization.
13274
13275'-fmax-include-depth=DEPTH'
13276     Set the maximum depth of the nested #include.  The default is 200.
13277
13278'-ftabstop=WIDTH'
13279     Set the distance between tab stops.  This helps the preprocessor
13280     report correct column numbers in warnings or errors, even if tabs
13281     appear on the line.  If the value is less than 1 or greater than
13282     100, the option is ignored.  The default is 8.
13283
13284'-ftrack-macro-expansion[=LEVEL]'
13285     Track locations of tokens across macro expansions.  This allows the
13286     compiler to emit diagnostic about the current macro expansion stack
13287     when a compilation error occurs in a macro expansion.  Using this
13288     option makes the preprocessor and the compiler consume more memory.
13289     The LEVEL parameter can be used to choose the level of precision of
13290     token location tracking thus decreasing the memory consumption if
13291     necessary.  Value '0' of LEVEL de-activates this option.  Value '1'
13292     tracks tokens locations in a degraded mode for the sake of minimal
13293     memory overhead.  In this mode all tokens resulting from the
13294     expansion of an argument of a function-like macro have the same
13295     location.  Value '2' tracks tokens locations completely.  This
13296     value is the most memory hungry.  When this option is given no
13297     argument, the default parameter value is '2'.
13298
13299     Note that '-ftrack-macro-expansion=2' is activated by default.
13300
13301'-fmacro-prefix-map=OLD=NEW'
13302     When preprocessing files residing in directory 'OLD', expand the
13303     '__FILE__' and '__BASE_FILE__' macros as if the files resided in
13304     directory 'NEW' instead.  This can be used to change an absolute
13305     path to a relative path by using '.' for NEW which can result in
13306     more reproducible builds that are location independent.  This
13307     option also affects '__builtin_FILE()' during compilation.  See
13308     also '-ffile-prefix-map'.
13309
13310'-fexec-charset=CHARSET'
13311     Set the execution character set, used for string and character
13312     constants.  The default is UTF-8.  CHARSET can be any encoding
13313     supported by the system's 'iconv' library routine.
13314
13315'-fwide-exec-charset=CHARSET'
13316     Set the wide execution character set, used for wide string and
13317     character constants.  The default is one of UTF-32BE, UTF-32LE,
13318     UTF-16BE, or UTF-16LE, whichever corresponds to the width of
13319     'wchar_t' and the big-endian or little-endian byte order being used
13320     for code generation.  As with '-fexec-charset', CHARSET can be any
13321     encoding supported by the system's 'iconv' library routine;
13322     however, you will have problems with encodings that do not fit
13323     exactly in 'wchar_t'.
13324
13325'-finput-charset=CHARSET'
13326     Set the input character set, used for translation from the
13327     character set of the input file to the source character set used by
13328     GCC.  If the locale does not specify, or GCC cannot get this
13329     information from the locale, the default is UTF-8.  This can be
13330     overridden by either the locale or this command-line option.
13331     Currently the command-line option takes precedence if there's a
13332     conflict.  CHARSET can be any encoding supported by the system's
13333     'iconv' library routine.
13334
13335'-fpch-deps'
13336     When using precompiled headers (*note Precompiled Headers::), this
13337     flag causes the dependency-output flags to also list the files from
13338     the precompiled header's dependencies.  If not specified, only the
13339     precompiled header are listed and not the files that were used to
13340     create it, because those files are not consulted when a precompiled
13341     header is used.
13342
13343'-fpch-preprocess'
13344     This option allows use of a precompiled header (*note Precompiled
13345     Headers::) together with '-E'.  It inserts a special '#pragma',
13346     '#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
13347     place where the precompiled header was found, and its FILENAME.
13348     When '-fpreprocessed' is in use, GCC recognizes this '#pragma' and
13349     loads the PCH.
13350
13351     This option is off by default, because the resulting preprocessed
13352     output is only really suitable as input to GCC.  It is switched on
13353     by '-save-temps'.
13354
13355     You should not write this '#pragma' in your own code, but it is
13356     safe to edit the filename if the PCH file is available in a
13357     different location.  The filename may be absolute or it may be
13358     relative to GCC's current directory.
13359
13360'-fworking-directory'
13361     Enable generation of linemarkers in the preprocessor output that
13362     let the compiler know the current working directory at the time of
13363     preprocessing.  When this option is enabled, the preprocessor
13364     emits, after the initial linemarker, a second linemarker with the
13365     current working directory followed by two slashes.  GCC uses this
13366     directory, when it's present in the preprocessed input, as the
13367     directory emitted as the current working directory in some
13368     debugging information formats.  This option is implicitly enabled
13369     if debugging information is enabled, but this can be inhibited with
13370     the negated form '-fno-working-directory'.  If the '-P' flag is
13371     present in the command line, this option has no effect, since no
13372     '#line' directives are emitted whatsoever.
13373
13374'-A PREDICATE=ANSWER'
13375     Make an assertion with the predicate PREDICATE and answer ANSWER.
13376     This form is preferred to the older form '-A PREDICATE(ANSWER)',
13377     which is still supported, because it does not use shell special
13378     characters.
13379
13380'-A -PREDICATE=ANSWER'
13381     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
13382
13383'-C'
13384     Do not discard comments.  All comments are passed through to the
13385     output file, except for comments in processed directives, which are
13386     deleted along with the directive.
13387
13388     You should be prepared for side effects when using '-C'; it causes
13389     the preprocessor to treat comments as tokens in their own right.
13390     For example, comments appearing at the start of what would be a
13391     directive line have the effect of turning that line into an
13392     ordinary source line, since the first token on the line is no
13393     longer a '#'.
13394
13395'-CC'
13396     Do not discard comments, including during macro expansion.  This is
13397     like '-C', except that comments contained within macros are also
13398     passed through to the output file where the macro is expanded.
13399
13400     In addition to the side effects of the '-C' option, the '-CC'
13401     option causes all C++-style comments inside a macro to be converted
13402     to C-style comments.  This is to prevent later use of that macro
13403     from inadvertently commenting out the remainder of the source line.
13404
13405     The '-CC' option is generally used to support lint comments.
13406
13407'-P'
13408     Inhibit generation of linemarkers in the output from the
13409     preprocessor.  This might be useful when running the preprocessor
13410     on something that is not C code, and will be sent to a program
13411     which might be confused by the linemarkers.
13412
13413'-traditional'
13414'-traditional-cpp'
13415
13416     Try to imitate the behavior of pre-standard C preprocessors, as
13417     opposed to ISO C preprocessors.  See the GNU CPP manual for
13418     details.
13419
13420     Note that GCC does not otherwise attempt to emulate a pre-standard
13421     C compiler, and these options are only supported with the '-E'
13422     switch, or when invoking CPP explicitly.
13423
13424'-trigraphs'
13425     Support ISO C trigraphs.  These are three-character sequences, all
13426     starting with '??', that are defined by ISO C to stand for single
13427     characters.  For example, '??/' stands for '\', so ''??/n'' is a
13428     character constant for a newline.
13429
13430     The nine trigraphs and their replacements are
13431
13432          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
13433          Replacement:      [    ]    {    }    #    \    ^    |    ~
13434
13435     By default, GCC ignores trigraphs, but in standard-conforming modes
13436     it converts them.  See the '-std' and '-ansi' options.
13437
13438'-remap'
13439     Enable special code to work around file systems which only permit
13440     very short file names, such as MS-DOS.
13441
13442'-H'
13443     Print the name of each header file used, in addition to other
13444     normal activities.  Each name is indented to show how deep in the
13445     '#include' stack it is.  Precompiled header files are also printed,
13446     even if they are found to be invalid; an invalid precompiled header
13447     file is printed with '...x' and a valid one with '...!' .
13448
13449'-dLETTERS'
13450     Says to make debugging dumps during compilation as specified by
13451     LETTERS.  The flags documented here are those relevant to the
13452     preprocessor.  Other LETTERS are interpreted by the compiler
13453     proper, or reserved for future versions of GCC, and so are silently
13454     ignored.  If you specify LETTERS whose behavior conflicts, the
13455     result is undefined.  *Note Developer Options::, for more
13456     information.
13457
13458     '-dM'
13459          Instead of the normal output, generate a list of '#define'
13460          directives for all the macros defined during the execution of
13461          the preprocessor, including predefined macros.  This gives you
13462          a way of finding out what is predefined in your version of the
13463          preprocessor.  Assuming you have no file 'foo.h', the command
13464
13465               touch foo.h; cpp -dM foo.h
13466
13467          shows all the predefined macros.
13468
13469          If you use '-dM' without the '-E' option, '-dM' is interpreted
13470          as a synonym for '-fdump-rtl-mach'.  *Note (gcc)Developer
13471          Options::.
13472
13473     '-dD'
13474          Like '-dM' except in two respects: it does _not_ include the
13475          predefined macros, and it outputs _both_ the '#define'
13476          directives and the result of preprocessing.  Both kinds of
13477          output go to the standard output file.
13478
13479     '-dN'
13480          Like '-dD', but emit only the macro names, not their
13481          expansions.
13482
13483     '-dI'
13484          Output '#include' directives in addition to the result of
13485          preprocessing.
13486
13487     '-dU'
13488          Like '-dD' except that only macros that are expanded, or whose
13489          definedness is tested in preprocessor directives, are output;
13490          the output is delayed until the use or test of the macro; and
13491          '#undef' directives are also output for macros tested but
13492          undefined at the time.
13493
13494'-fdebug-cpp'
13495     This option is only useful for debugging GCC. When used from CPP or
13496     with '-E', it dumps debugging information about location maps.
13497     Every token in the output is preceded by the dump of the map its
13498     location belongs to.
13499
13500     When used from GCC without '-E', this option has no effect.
13501
13502'-Wp,OPTION'
13503     You can use '-Wp,OPTION' to bypass the compiler driver and pass
13504     OPTION directly through to the preprocessor.  If OPTION contains
13505     commas, it is split into multiple options at the commas.  However,
13506     many options are modified, translated or interpreted by the
13507     compiler driver before being passed to the preprocessor, and '-Wp'
13508     forcibly bypasses this phase.  The preprocessor's direct interface
13509     is undocumented and subject to change, so whenever possible you
13510     should avoid using '-Wp' and let the driver handle the options
13511     instead.
13512
13513'-Xpreprocessor OPTION'
13514     Pass OPTION as an option to the preprocessor.  You can use this to
13515     supply system-specific preprocessor options that GCC does not
13516     recognize.
13517
13518     If you want to pass an option that takes an argument, you must use
13519     '-Xpreprocessor' twice, once for the option and once for the
13520     argument.
13521
13522'-no-integrated-cpp'
13523     Perform preprocessing as a separate pass before compilation.  By
13524     default, GCC performs preprocessing as an integrated part of input
13525     tokenization and parsing.  If this option is provided, the
13526     appropriate language front end ('cc1', 'cc1plus', or 'cc1obj' for
13527     C, C++, and Objective-C, respectively) is instead invoked twice,
13528     once for preprocessing only and once for actual compilation of the
13529     preprocessed input.  This option may be useful in conjunction with
13530     the '-B' or '-wrapper' options to specify an alternate preprocessor
13531     or perform additional processing of the program source between
13532     normal preprocessing and compilation.
13533
13534
13535File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
13536
135373.14 Passing Options to the Assembler
13538=====================================
13539
13540You can pass options to the assembler.
13541
13542'-Wa,OPTION'
13543     Pass OPTION as an option to the assembler.  If OPTION contains
13544     commas, it is split into multiple options at the commas.
13545
13546'-Xassembler OPTION'
13547     Pass OPTION as an option to the assembler.  You can use this to
13548     supply system-specific assembler options that GCC does not
13549     recognize.
13550
13551     If you want to pass an option that takes an argument, you must use
13552     '-Xassembler' twice, once for the option and once for the argument.
13553
13554
13555File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
13556
135573.15 Options for Linking
13558========================
13559
13560These options come into play when the compiler links object files into
13561an executable output file.  They are meaningless if the compiler is not
13562doing a link step.
13563
13564'OBJECT-FILE-NAME'
13565     A file name that does not end in a special recognized suffix is
13566     considered to name an object file or library.  (Object files are
13567     distinguished from libraries by the linker according to the file
13568     contents.)  If linking is done, these object files are used as
13569     input to the linker.
13570
13571'-c'
13572'-S'
13573'-E'
13574     If any of these options is used, then the linker is not run, and
13575     object file names should not be used as arguments.  *Note Overall
13576     Options::.
13577
13578'-flinker-output=TYPE'
13579     This option controls code generation of the link-time optimizer.
13580     By default the linker output is automatically determined by the
13581     linker plugin.  For debugging the compiler and if incremental
13582     linking with a non-LTO object file is desired, it may be useful to
13583     control the type manually.
13584
13585     If TYPE is 'exec', code generation produces a static binary.  In
13586     this case '-fpic' and '-fpie' are both disabled.
13587
13588     If TYPE is 'dyn', code generation produces a shared library.  In
13589     this case '-fpic' or '-fPIC' is preserved, but not enabled
13590     automatically.  This allows to build shared libraries without
13591     position-independent code on architectures where this is possible,
13592     i.e. on x86.
13593
13594     If TYPE is 'pie', code generation produces an '-fpie' executable.
13595     This results in similar optimizations as 'exec' except that '-fpie'
13596     is not disabled if specified at compilation time.
13597
13598     If TYPE is 'rel', the compiler assumes that incremental linking is
13599     done.  The sections containing intermediate code for link-time
13600     optimization are merged, pre-optimized, and output to the resulting
13601     object file.  In addition, if '-ffat-lto-objects' is specified,
13602     binary code is produced for future non-LTO linking.  The object
13603     file produced by incremental linking is smaller than a static
13604     library produced from the same object files.  At link time the
13605     result of incremental linking also loads faster than a static
13606     library assuming that the majority of objects in the library are
13607     used.
13608
13609     Finally 'nolto-rel' configures the compiler for incremental linking
13610     where code generation is forced, a final binary is produced, and
13611     the intermediate code for later link-time optimization is stripped.
13612     When multiple object files are linked together the resulting code
13613     is better optimized than with link-time optimizations disabled (for
13614     example, cross-module inlining happens), but most of benefits of
13615     whole program optimizations are lost.
13616
13617     During the incremental link (by '-r') the linker plugin defaults to
13618     'rel'.  With current interfaces to GNU Binutils it is however not
13619     possible to incrementally link LTO objects and non-LTO objects into
13620     a single mixed object file.  If any of object files in incremental
13621     link cannot be used for link-time optimization, the linker plugin
13622     issues a warning and uses 'nolto-rel'.  To maintain whole program
13623     optimization, it is recommended to link such objects into static
13624     library instead.  Alternatively it is possible to use H.J. Lu's
13625     binutils with support for mixed objects.
13626
13627'-fuse-ld=bfd'
13628     Use the 'bfd' linker instead of the default linker.
13629
13630'-fuse-ld=gold'
13631     Use the 'gold' linker instead of the default linker.
13632
13633'-fuse-ld=lld'
13634     Use the LLVM 'lld' linker instead of the default linker.
13635
13636'-lLIBRARY'
13637'-l LIBRARY'
13638     Search the library named LIBRARY when linking.  (The second
13639     alternative with the library as a separate argument is only for
13640     POSIX compliance and is not recommended.)
13641
13642     The '-l' option is passed directly to the linker by GCC. Refer to
13643     your linker documentation for exact details.  The general
13644     description below applies to the GNU linker.
13645
13646     The linker searches a standard list of directories for the library.
13647     The directories searched include several standard system
13648     directories plus any that you specify with '-L'.
13649
13650     Static libraries are archives of object files, and have file names
13651     like 'libLIBRARY.a'.  Some targets also support shared libraries,
13652     which typically have names like 'libLIBRARY.so'.  If both static
13653     and shared libraries are found, the linker gives preference to
13654     linking with the shared library unless the '-static' option is
13655     used.
13656
13657     It makes a difference where in the command you write this option;
13658     the linker searches and processes libraries and object files in the
13659     order they are specified.  Thus, 'foo.o -lz bar.o' searches library
13660     'z' after file 'foo.o' but before 'bar.o'.  If 'bar.o' refers to
13661     functions in 'z', those functions may not be loaded.
13662
13663'-lobjc'
13664     You need this special case of the '-l' option in order to link an
13665     Objective-C or Objective-C++ program.
13666
13667'-nostartfiles'
13668     Do not use the standard system startup files when linking.  The
13669     standard system libraries are used normally, unless '-nostdlib',
13670     '-nolibc', or '-nodefaultlibs' is used.
13671
13672'-nodefaultlibs'
13673     Do not use the standard system libraries when linking.  Only the
13674     libraries you specify are passed to the linker, and options
13675     specifying linkage of the system libraries, such as
13676     '-static-libgcc' or '-shared-libgcc', are ignored.  The standard
13677     startup files are used normally, unless '-nostartfiles' is used.
13678
13679     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
13680     'memmove'.  These entries are usually resolved by entries in libc.
13681     These entry points should be supplied through some other mechanism
13682     when this option is specified.
13683
13684'-nolibc'
13685     Do not use the C library or system libraries tightly coupled with
13686     it when linking.  Still link with the startup files, 'libgcc' or
13687     toolchain provided language support libraries such as 'libgnat',
13688     'libgfortran' or 'libstdc++' unless options preventing their
13689     inclusion are used as well.  This typically removes '-lc' from the
13690     link command line, as well as system libraries that normally go
13691     with it and become meaningless when absence of a C library is
13692     assumed, for example '-lpthread' or '-lm' in some configurations.
13693     This is intended for bare-board targets when there is indeed no C
13694     library available.
13695
13696'-nostdlib'
13697     Do not use the standard system startup files or libraries when
13698     linking.  No startup files and only the libraries you specify are
13699     passed to the linker, and options specifying linkage of the system
13700     libraries, such as '-static-libgcc' or '-shared-libgcc', are
13701     ignored.
13702
13703     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
13704     'memmove'.  These entries are usually resolved by entries in libc.
13705     These entry points should be supplied through some other mechanism
13706     when this option is specified.
13707
13708     One of the standard libraries bypassed by '-nostdlib' and
13709     '-nodefaultlibs' is 'libgcc.a', a library of internal subroutines
13710     which GCC uses to overcome shortcomings of particular machines, or
13711     special needs for some languages.  (*Note Interfacing to GCC
13712     Output: (gccint)Interface, for more discussion of 'libgcc.a'.)  In
13713     most cases, you need 'libgcc.a' even when you want to avoid other
13714     standard libraries.  In other words, when you specify '-nostdlib'
13715     or '-nodefaultlibs' you should usually specify '-lgcc' as well.
13716     This ensures that you have no unresolved references to internal GCC
13717     library subroutines.  (An example of such an internal subroutine is
13718     '__main', used to ensure C++ constructors are called; *note
13719     'collect2': (gccint)Collect2.)
13720
13721'-e ENTRY'
13722'--entry=ENTRY'
13723
13724     Specify that the program entry point is ENTRY.  The argument is
13725     interpreted by the linker; the GNU linker accepts either a symbol
13726     name or an address.
13727
13728'-pie'
13729     Produce a dynamically linked position independent executable on
13730     targets that support it.  For predictable results, you must also
13731     specify the same set of options used for compilation ('-fpie',
13732     '-fPIE', or model suboptions) when you specify this linker option.
13733
13734'-no-pie'
13735     Don't produce a dynamically linked position independent executable.
13736
13737'-static-pie'
13738     Produce a static position independent executable on targets that
13739     support it.  A static position independent executable is similar to
13740     a static executable, but can be loaded at any address without a
13741     dynamic linker.  For predictable results, you must also specify the
13742     same set of options used for compilation ('-fpie', '-fPIE', or
13743     model suboptions) when you specify this linker option.
13744
13745'-pthread'
13746     Link with the POSIX threads library.  This option is supported on
13747     GNU/Linux targets, most other Unix derivatives, and also on x86
13748     Cygwin and MinGW targets.  On some targets this option also sets
13749     flags for the preprocessor, so it should be used consistently for
13750     both compilation and linking.
13751
13752'-r'
13753     Produce a relocatable object as output.  This is also known as
13754     partial linking.
13755
13756'-rdynamic'
13757     Pass the flag '-export-dynamic' to the ELF linker, on targets that
13758     support it.  This instructs the linker to add all symbols, not only
13759     used ones, to the dynamic symbol table.  This option is needed for
13760     some uses of 'dlopen' or to allow obtaining backtraces from within
13761     a program.
13762
13763'-s'
13764     Remove all symbol table and relocation information from the
13765     executable.
13766
13767'-static'
13768     On systems that support dynamic linking, this overrides '-pie' and
13769     prevents linking with the shared libraries.  On other systems, this
13770     option has no effect.
13771
13772'-shared'
13773     Produce a shared object which can then be linked with other objects
13774     to form an executable.  Not all systems support this option.  For
13775     predictable results, you must also specify the same set of options
13776     used for compilation ('-fpic', '-fPIC', or model suboptions) when
13777     you specify this linker option.(1)
13778
13779'-shared-libgcc'
13780'-static-libgcc'
13781     On systems that provide 'libgcc' as a shared library, these options
13782     force the use of either the shared or static version, respectively.
13783     If no shared version of 'libgcc' was built when the compiler was
13784     configured, these options have no effect.
13785
13786     There are several situations in which an application should use the
13787     shared 'libgcc' instead of the static version.  The most common of
13788     these is when the application wishes to throw and catch exceptions
13789     across different shared libraries.  In that case, each of the
13790     libraries as well as the application itself should use the shared
13791     'libgcc'.
13792
13793     Therefore, the G++ driver automatically adds '-shared-libgcc'
13794     whenever you build a shared library or a main executable, because
13795     C++ programs typically use exceptions, so this is the right thing
13796     to do.
13797
13798     If, instead, you use the GCC driver to create shared libraries, you
13799     may find that they are not always linked with the shared 'libgcc'.
13800     If GCC finds, at its configuration time, that you have a non-GNU
13801     linker or a GNU linker that does not support option
13802     '--eh-frame-hdr', it links the shared version of 'libgcc' into
13803     shared libraries by default.  Otherwise, it takes advantage of the
13804     linker and optimizes away the linking with the shared version of
13805     'libgcc', linking with the static version of libgcc by default.
13806     This allows exceptions to propagate through such shared libraries,
13807     without incurring relocation costs at library load time.
13808
13809     However, if a library or main executable is supposed to throw or
13810     catch exceptions, you must link it using the G++ driver, or using
13811     the option '-shared-libgcc', such that it is linked with the shared
13812     'libgcc'.
13813
13814'-static-libasan'
13815     When the '-fsanitize=address' option is used to link a program, the
13816     GCC driver automatically links against 'libasan'.  If 'libasan' is
13817     available as a shared library, and the '-static' option is not
13818     used, then this links against the shared version of 'libasan'.  The
13819     '-static-libasan' option directs the GCC driver to link 'libasan'
13820     statically, without necessarily linking other libraries statically.
13821
13822'-static-libtsan'
13823     When the '-fsanitize=thread' option is used to link a program, the
13824     GCC driver automatically links against 'libtsan'.  If 'libtsan' is
13825     available as a shared library, and the '-static' option is not
13826     used, then this links against the shared version of 'libtsan'.  The
13827     '-static-libtsan' option directs the GCC driver to link 'libtsan'
13828     statically, without necessarily linking other libraries statically.
13829
13830'-static-liblsan'
13831     When the '-fsanitize=leak' option is used to link a program, the
13832     GCC driver automatically links against 'liblsan'.  If 'liblsan' is
13833     available as a shared library, and the '-static' option is not
13834     used, then this links against the shared version of 'liblsan'.  The
13835     '-static-liblsan' option directs the GCC driver to link 'liblsan'
13836     statically, without necessarily linking other libraries statically.
13837
13838'-static-libubsan'
13839     When the '-fsanitize=undefined' option is used to link a program,
13840     the GCC driver automatically links against 'libubsan'.  If
13841     'libubsan' is available as a shared library, and the '-static'
13842     option is not used, then this links against the shared version of
13843     'libubsan'.  The '-static-libubsan' option directs the GCC driver
13844     to link 'libubsan' statically, without necessarily linking other
13845     libraries statically.
13846
13847'-static-libstdc++'
13848     When the 'g++' program is used to link a C++ program, it normally
13849     automatically links against 'libstdc++'.  If 'libstdc++' is
13850     available as a shared library, and the '-static' option is not
13851     used, then this links against the shared version of 'libstdc++'.
13852     That is normally fine.  However, it is sometimes useful to freeze
13853     the version of 'libstdc++' used by the program without going all
13854     the way to a fully static link.  The '-static-libstdc++' option
13855     directs the 'g++' driver to link 'libstdc++' statically, without
13856     necessarily linking other libraries statically.
13857
13858'-symbolic'
13859     Bind references to global symbols when building a shared object.
13860     Warn about any unresolved references (unless overridden by the link
13861     editor option '-Xlinker -z -Xlinker defs').  Only a few systems
13862     support this option.
13863
13864'-T SCRIPT'
13865     Use SCRIPT as the linker script.  This option is supported by most
13866     systems using the GNU linker.  On some targets, such as bare-board
13867     targets without an operating system, the '-T' option may be
13868     required when linking to avoid references to undefined symbols.
13869
13870'-Xlinker OPTION'
13871     Pass OPTION as an option to the linker.  You can use this to supply
13872     system-specific linker options that GCC does not recognize.
13873
13874     If you want to pass an option that takes a separate argument, you
13875     must use '-Xlinker' twice, once for the option and once for the
13876     argument.  For example, to pass '-assert definitions', you must
13877     write '-Xlinker -assert -Xlinker definitions'.  It does not work to
13878     write '-Xlinker "-assert definitions"', because this passes the
13879     entire string as a single argument, which is not what the linker
13880     expects.
13881
13882     When using the GNU linker, it is usually more convenient to pass
13883     arguments to linker options using the 'OPTION=VALUE' syntax than as
13884     separate arguments.  For example, you can specify '-Xlinker
13885     -Map=output.map' rather than '-Xlinker -Map -Xlinker output.map'.
13886     Other linkers may not support this syntax for command-line options.
13887
13888'-Wl,OPTION'
13889     Pass OPTION as an option to the linker.  If OPTION contains commas,
13890     it is split into multiple options at the commas.  You can use this
13891     syntax to pass an argument to the option.  For example,
13892     '-Wl,-Map,output.map' passes '-Map output.map' to the linker.  When
13893     using the GNU linker, you can also get the same effect with
13894     '-Wl,-Map=output.map'.
13895
13896'-u SYMBOL'
13897     Pretend the symbol SYMBOL is undefined, to force linking of library
13898     modules to define it.  You can use '-u' multiple times with
13899     different symbols to force loading of additional library modules.
13900
13901'-z KEYWORD'
13902     '-z' is passed directly on to the linker along with the keyword
13903     KEYWORD.  See the section in the documentation of your linker for
13904     permitted values and their meanings.
13905
13906   ---------- Footnotes ----------
13907
13908   (1) On some systems, 'gcc -shared' needs to build supplementary stub
13909code for constructors to work.  On multi-libbed systems, 'gcc -shared'
13910must select the correct support libraries to link against.  Failing to
13911supply the correct flags may lead to subtle defects.  Supplying them in
13912cases where they are not necessary is innocuous.
13913
13914
13915File: gcc.info,  Node: Directory Options,  Next: Code Gen Options,  Prev: Link Options,  Up: Invoking GCC
13916
139173.16 Options for Directory Search
13918=================================
13919
13920These options specify directories to search for header files, for
13921libraries and for parts of the compiler:
13922
13923'-I DIR'
13924'-iquote DIR'
13925'-isystem DIR'
13926'-idirafter DIR'
13927     Add the directory DIR to the list of directories to be searched for
13928     header files during preprocessing.  If DIR begins with '=' or
13929     '$SYSROOT', then the '=' or '$SYSROOT' is replaced by the sysroot
13930     prefix; see '--sysroot' and '-isysroot'.
13931
13932     Directories specified with '-iquote' apply only to the quote form
13933     of the directive, '#include "FILE"'.  Directories specified with
13934     '-I', '-isystem', or '-idirafter' apply to lookup for both the
13935     '#include "FILE"' and '#include <FILE>' directives.
13936
13937     You can specify any number or combination of these options on the
13938     command line to search for header files in several directories.
13939     The lookup order is as follows:
13940
13941       1. For the quote form of the include directive, the directory of
13942          the current file is searched first.
13943
13944       2. For the quote form of the include directive, the directories
13945          specified by '-iquote' options are searched in left-to-right
13946          order, as they appear on the command line.
13947
13948       3. Directories specified with '-I' options are scanned in
13949          left-to-right order.
13950
13951       4. Directories specified with '-isystem' options are scanned in
13952          left-to-right order.
13953
13954       5. Standard system directories are scanned.
13955
13956       6. Directories specified with '-idirafter' options are scanned in
13957          left-to-right order.
13958
13959     You can use '-I' to override a system header file, substituting
13960     your own version, since these directories are searched before the
13961     standard system header file directories.  However, you should not
13962     use this option to add directories that contain vendor-supplied
13963     system header files; use '-isystem' for that.
13964
13965     The '-isystem' and '-idirafter' options also mark the directory as
13966     a system directory, so that it gets the same special treatment that
13967     is applied to the standard system directories.
13968
13969     If a standard system include directory, or a directory specified
13970     with '-isystem', is also specified with '-I', the '-I' option is
13971     ignored.  The directory is still searched but as a system directory
13972     at its normal position in the system include chain.  This is to
13973     ensure that GCC's procedure to fix buggy system headers and the
13974     ordering for the '#include_next' directive are not inadvertently
13975     changed.  If you really need to change the search order for system
13976     directories, use the '-nostdinc' and/or '-isystem' options.
13977
13978'-I-'
13979     Split the include path.  This option has been deprecated.  Please
13980     use '-iquote' instead for '-I' directories before the '-I-' and
13981     remove the '-I-' option.
13982
13983     Any directories specified with '-I' options before '-I-' are
13984     searched only for headers requested with '#include "FILE"'; they
13985     are not searched for '#include <FILE>'.  If additional directories
13986     are specified with '-I' options after the '-I-', those directories
13987     are searched for all '#include' directives.
13988
13989     In addition, '-I-' inhibits the use of the directory of the current
13990     file directory as the first search directory for '#include "FILE"'.
13991     There is no way to override this effect of '-I-'.
13992
13993'-iprefix PREFIX'
13994     Specify PREFIX as the prefix for subsequent '-iwithprefix' options.
13995     If the prefix represents a directory, you should include the final
13996     '/'.
13997
13998'-iwithprefix DIR'
13999'-iwithprefixbefore DIR'
14000     Append DIR to the prefix specified previously with '-iprefix', and
14001     add the resulting directory to the include search path.
14002     '-iwithprefixbefore' puts it in the same place '-I' would;
14003     '-iwithprefix' puts it where '-idirafter' would.
14004
14005'-isysroot DIR'
14006     This option is like the '--sysroot' option, but applies only to
14007     header files (except for Darwin targets, where it applies to both
14008     header files and libraries).  See the '--sysroot' option for more
14009     information.
14010
14011'-imultilib DIR'
14012     Use DIR as a subdirectory of the directory containing
14013     target-specific C++ headers.
14014
14015'-nostdinc'
14016     Do not search the standard system directories for header files.
14017     Only the directories explicitly specified with '-I', '-iquote',
14018     '-isystem', and/or '-idirafter' options (and the directory of the
14019     current file, if appropriate) are searched.
14020
14021'-nostdinc++'
14022     Do not search for header files in the C++-specific standard
14023     directories, but do still search the other standard directories.
14024     (This option is used when building the C++ library.)
14025
14026'-iplugindir=DIR'
14027     Set the directory to search for plugins that are passed by
14028     '-fplugin=NAME' instead of '-fplugin=PATH/NAME.so'.  This option is
14029     not meant to be used by the user, but only passed by the driver.
14030
14031'-LDIR'
14032     Add directory DIR to the list of directories to be searched for
14033     '-l'.
14034
14035'-BPREFIX'
14036     This option specifies where to find the executables, libraries,
14037     include files, and data files of the compiler itself.
14038
14039     The compiler driver program runs one or more of the subprograms
14040     'cpp', 'cc1', 'as' and 'ld'.  It tries PREFIX as a prefix for each
14041     program it tries to run, both with and without 'MACHINE/VERSION/'
14042     for the corresponding target machine and compiler version.
14043
14044     For each subprogram to be run, the compiler driver first tries the
14045     '-B' prefix, if any.  If that name is not found, or if '-B' is not
14046     specified, the driver tries two standard prefixes, '/usr/lib/gcc/'
14047     and '/usr/local/lib/gcc/'.  If neither of those results in a file
14048     name that is found, the unmodified program name is searched for
14049     using the directories specified in your 'PATH' environment
14050     variable.
14051
14052     The compiler checks to see if the path provided by '-B' refers to a
14053     directory, and if necessary it adds a directory separator character
14054     at the end of the path.
14055
14056     '-B' prefixes that effectively specify directory names also apply
14057     to libraries in the linker, because the compiler translates these
14058     options into '-L' options for the linker.  They also apply to
14059     include files in the preprocessor, because the compiler translates
14060     these options into '-isystem' options for the preprocessor.  In
14061     this case, the compiler appends 'include' to the prefix.
14062
14063     The runtime support file 'libgcc.a' can also be searched for using
14064     the '-B' prefix, if needed.  If it is not found there, the two
14065     standard prefixes above are tried, and that is all.  The file is
14066     left out of the link if it is not found by those means.
14067
14068     Another way to specify a prefix much like the '-B' prefix is to use
14069     the environment variable 'GCC_EXEC_PREFIX'.  *Note Environment
14070     Variables::.
14071
14072     As a special kludge, if the path provided by '-B' is
14073     '[dir/]stageN/', where N is a number in the range 0 to 9, then it
14074     is replaced by '[dir/]include'.  This is to help with
14075     boot-strapping the compiler.
14076
14077'-no-canonical-prefixes'
14078     Do not expand any symbolic links, resolve references to '/../' or
14079     '/./', or make the path absolute when generating a relative prefix.
14080
14081'--sysroot=DIR'
14082     Use DIR as the logical root directory for headers and libraries.
14083     For example, if the compiler normally searches for headers in
14084     '/usr/include' and libraries in '/usr/lib', it instead searches
14085     'DIR/usr/include' and 'DIR/usr/lib'.
14086
14087     If you use both this option and the '-isysroot' option, then the
14088     '--sysroot' option applies to libraries, but the '-isysroot' option
14089     applies to header files.
14090
14091     The GNU linker (beginning with version 2.16) has the necessary
14092     support for this option.  If your linker does not support this
14093     option, the header file aspect of '--sysroot' still works, but the
14094     library aspect does not.
14095
14096'--no-sysroot-suffix'
14097     For some targets, a suffix is added to the root directory specified
14098     with '--sysroot', depending on the other options used, so that
14099     headers may for example be found in 'DIR/SUFFIX/usr/include'
14100     instead of 'DIR/usr/include'.  This option disables the addition of
14101     such a suffix.
14102
14103
14104File: gcc.info,  Node: Code Gen Options,  Next: Developer Options,  Prev: Directory Options,  Up: Invoking GCC
14105
141063.17 Options for Code Generation Conventions
14107============================================
14108
14109These machine-independent options control the interface conventions used
14110in code generation.
14111
14112 Most of them have both positive and negative forms; the negative form
14113of '-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
14114listed--the one that is not the default.  You can figure out the other
14115form by either removing 'no-' or adding it.
14116
14117'-fstack-reuse=REUSE-LEVEL'
14118     This option controls stack space reuse for user declared local/auto
14119     variables and compiler generated temporaries.  REUSE_LEVEL can be
14120     'all', 'named_vars', or 'none'.  'all' enables stack reuse for all
14121     local variables and temporaries, 'named_vars' enables the reuse
14122     only for user defined local variables with names, and 'none'
14123     disables stack reuse completely.  The default value is 'all'.  The
14124     option is needed when the program extends the lifetime of a scoped
14125     local variable or a compiler generated temporary beyond the end
14126     point defined by the language.  When a lifetime of a variable ends,
14127     and if the variable lives in memory, the optimizing compiler has
14128     the freedom to reuse its stack space with other temporaries or
14129     scoped local variables whose live range does not overlap with it.
14130     Legacy code extending local lifetime is likely to break with the
14131     stack reuse optimization.
14132
14133     For example,
14134
14135             int *p;
14136             {
14137               int local1;
14138
14139               p = &local1;
14140               local1 = 10;
14141               ....
14142             }
14143             {
14144                int local2;
14145                local2 = 20;
14146                ...
14147             }
14148
14149             if (*p == 10)  // out of scope use of local1
14150               {
14151
14152               }
14153
14154     Another example:
14155
14156             struct A
14157             {
14158                 A(int k) : i(k), j(k) { }
14159                 int i;
14160                 int j;
14161             };
14162
14163             A *ap;
14164
14165             void foo(const A& ar)
14166             {
14167                ap = &ar;
14168             }
14169
14170             void bar()
14171             {
14172                foo(A(10)); // temp object's lifetime ends when foo returns
14173
14174                {
14175                  A a(20);
14176                  ....
14177                }
14178                ap->i+= 10;  // ap references out of scope temp whose space
14179                             // is reused with a. What is the value of ap->i?
14180             }
14181
14182
14183     The lifetime of a compiler generated temporary is well defined by
14184     the C++ standard.  When a lifetime of a temporary ends, and if the
14185     temporary lives in memory, the optimizing compiler has the freedom
14186     to reuse its stack space with other temporaries or scoped local
14187     variables whose live range does not overlap with it.  However some
14188     of the legacy code relies on the behavior of older compilers in
14189     which temporaries' stack space is not reused, the aggressive stack
14190     reuse can lead to runtime errors.  This option is used to control
14191     the temporary stack reuse optimization.
14192
14193'-ftrapv'
14194     This option generates traps for signed overflow on addition,
14195     subtraction, multiplication operations.  The options '-ftrapv' and
14196     '-fwrapv' override each other, so using '-ftrapv' '-fwrapv' on the
14197     command-line results in '-fwrapv' being effective.  Note that only
14198     active options override, so using '-ftrapv' '-fwrapv' '-fno-wrapv'
14199     on the command-line results in '-ftrapv' being effective.
14200
14201'-fwrapv'
14202     This option instructs the compiler to assume that signed arithmetic
14203     overflow of addition, subtraction and multiplication wraps around
14204     using twos-complement representation.  This flag enables some
14205     optimizations and disables others.  The options '-ftrapv' and
14206     '-fwrapv' override each other, so using '-ftrapv' '-fwrapv' on the
14207     command-line results in '-fwrapv' being effective.  Note that only
14208     active options override, so using '-ftrapv' '-fwrapv' '-fno-wrapv'
14209     on the command-line results in '-ftrapv' being effective.
14210
14211'-fwrapv-pointer'
14212     This option instructs the compiler to assume that pointer
14213     arithmetic overflow on addition and subtraction wraps around using
14214     twos-complement representation.  This flag disables some
14215     optimizations which assume pointer overflow is invalid.
14216
14217'-fstrict-overflow'
14218     This option implies '-fno-wrapv' '-fno-wrapv-pointer' and when
14219     negated implies '-fwrapv' '-fwrapv-pointer'.
14220
14221'-fexceptions'
14222     Enable exception handling.  Generates extra code needed to
14223     propagate exceptions.  For some targets, this implies GCC generates
14224     frame unwind information for all functions, which can produce
14225     significant data size overhead, although it does not affect
14226     execution.  If you do not specify this option, GCC enables it by
14227     default for languages like C++ that normally require exception
14228     handling, and disables it for languages like C that do not normally
14229     require it.  However, you may need to enable this option when
14230     compiling C code that needs to interoperate properly with exception
14231     handlers written in C++.  You may also wish to disable this option
14232     if you are compiling older C++ programs that don't use exception
14233     handling.
14234
14235'-fnon-call-exceptions'
14236     Generate code that allows trapping instructions to throw
14237     exceptions.  Note that this requires platform-specific runtime
14238     support that does not exist everywhere.  Moreover, it only allows
14239     _trapping_ instructions to throw exceptions, i.e. memory references
14240     or floating-point instructions.  It does not allow exceptions to be
14241     thrown from arbitrary signal handlers such as 'SIGALRM'.
14242
14243'-fdelete-dead-exceptions'
14244     Consider that instructions that may throw exceptions but don't
14245     otherwise contribute to the execution of the program can be
14246     optimized away.  This option is enabled by default for the Ada
14247     front end, as permitted by the Ada language specification.
14248     Optimization passes that cause dead exceptions to be removed are
14249     enabled independently at different optimization levels.
14250
14251'-funwind-tables'
14252     Similar to '-fexceptions', except that it just generates any needed
14253     static data, but does not affect the generated code in any other
14254     way.  You normally do not need to enable this option; instead, a
14255     language processor that needs this handling enables it on your
14256     behalf.
14257
14258'-fasynchronous-unwind-tables'
14259     Generate unwind table in DWARF format, if supported by target
14260     machine.  The table is exact at each instruction boundary, so it
14261     can be used for stack unwinding from asynchronous events (such as
14262     debugger or garbage collector).
14263
14264'-fno-gnu-unique'
14265     On systems with recent GNU assembler and C library, the C++
14266     compiler uses the 'STB_GNU_UNIQUE' binding to make sure that
14267     definitions of template static data members and static local
14268     variables in inline functions are unique even in the presence of
14269     'RTLD_LOCAL'; this is necessary to avoid problems with a library
14270     used by two different 'RTLD_LOCAL' plugins depending on a
14271     definition in one of them and therefore disagreeing with the other
14272     one about the binding of the symbol.  But this causes 'dlclose' to
14273     be ignored for affected DSOs; if your program relies on
14274     reinitialization of a DSO via 'dlclose' and 'dlopen', you can use
14275     '-fno-gnu-unique'.
14276
14277'-fpcc-struct-return'
14278     Return "short" 'struct' and 'union' values in memory like longer
14279     ones, rather than in registers.  This convention is less efficient,
14280     but it has the advantage of allowing intercallability between
14281     GCC-compiled files and files compiled with other compilers,
14282     particularly the Portable C Compiler (pcc).
14283
14284     The precise convention for returning structures in memory depends
14285     on the target configuration macros.
14286
14287     Short structures and unions are those whose size and alignment
14288     match that of some integer type.
14289
14290     *Warning:* code compiled with the '-fpcc-struct-return' switch is
14291     not binary compatible with code compiled with the
14292     '-freg-struct-return' switch.  Use it to conform to a non-default
14293     application binary interface.
14294
14295'-freg-struct-return'
14296     Return 'struct' and 'union' values in registers when possible.
14297     This is more efficient for small structures than
14298     '-fpcc-struct-return'.
14299
14300     If you specify neither '-fpcc-struct-return' nor
14301     '-freg-struct-return', GCC defaults to whichever convention is
14302     standard for the target.  If there is no standard convention, GCC
14303     defaults to '-fpcc-struct-return', except on targets where GCC is
14304     the principal compiler.  In those cases, we can choose the
14305     standard, and we chose the more efficient register return
14306     alternative.
14307
14308     *Warning:* code compiled with the '-freg-struct-return' switch is
14309     not binary compatible with code compiled with the
14310     '-fpcc-struct-return' switch.  Use it to conform to a non-default
14311     application binary interface.
14312
14313'-fshort-enums'
14314     Allocate to an 'enum' type only as many bytes as it needs for the
14315     declared range of possible values.  Specifically, the 'enum' type
14316     is equivalent to the smallest integer type that has enough room.
14317
14318     *Warning:* the '-fshort-enums' switch causes GCC to generate code
14319     that is not binary compatible with code generated without that
14320     switch.  Use it to conform to a non-default application binary
14321     interface.
14322
14323'-fshort-wchar'
14324     Override the underlying type for 'wchar_t' to be 'short unsigned
14325     int' instead of the default for the target.  This option is useful
14326     for building programs to run under WINE.
14327
14328     *Warning:* the '-fshort-wchar' switch causes GCC to generate code
14329     that is not binary compatible with code generated without that
14330     switch.  Use it to conform to a non-default application binary
14331     interface.
14332
14333'-fcommon'
14334     In C code, this option controls the placement of global variables
14335     defined without an initializer, known as "tentative definitions" in
14336     the C standard.  Tentative definitions are distinct from
14337     declarations of a variable with the 'extern' keyword, which do not
14338     allocate storage.
14339
14340     The default is '-fno-common', which specifies that the compiler
14341     places uninitialized global variables in the BSS section of the
14342     object file.  This inhibits the merging of tentative definitions by
14343     the linker so you get a multiple-definition error if the same
14344     variable is accidentally defined in more than one compilation unit.
14345
14346     The '-fcommon' places uninitialized global variables in a common
14347     block.  This allows the linker to resolve all tentative definitions
14348     of the same variable in different compilation units to the same
14349     object, or to a non-tentative definition.  This behavior is
14350     inconsistent with C++, and on many targets implies a speed and code
14351     size penalty on global variable references.  It is mainly useful to
14352     enable legacy code to link without errors.
14353
14354'-fno-ident'
14355     Ignore the '#ident' directive.
14356
14357'-finhibit-size-directive'
14358     Don't output a '.size' assembler directive, or anything else that
14359     would cause trouble if the function is split in the middle, and the
14360     two halves are placed at locations far apart in memory.  This
14361     option is used when compiling 'crtstuff.c'; you should not need to
14362     use it for anything else.
14363
14364'-fverbose-asm'
14365     Put extra commentary information in the generated assembly code to
14366     make it more readable.  This option is generally only of use to
14367     those who actually need to read the generated assembly code
14368     (perhaps while debugging the compiler itself).
14369
14370     '-fno-verbose-asm', the default, causes the extra information to be
14371     omitted and is useful when comparing two assembler files.
14372
14373     The added comments include:
14374
14375        * information on the compiler version and command-line options,
14376
14377        * the source code lines associated with the assembly
14378          instructions, in the form FILENAME:LINENUMBER:CONTENT OF LINE,
14379
14380        * hints on which high-level expressions correspond to the
14381          various assembly instruction operands.
14382
14383     For example, given this C source file:
14384
14385          int test (int n)
14386          {
14387            int i;
14388            int total = 0;
14389
14390            for (i = 0; i < n; i++)
14391              total += i * i;
14392
14393            return total;
14394          }
14395
14396     compiling to (x86_64) assembly via '-S' and emitting the result
14397     direct to stdout via '-o' '-'
14398
14399          gcc -S test.c -fverbose-asm -Os -o -
14400
14401     gives output similar to this:
14402
14403          	.file	"test.c"
14404          # GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64-pc-linux-gnu)
14405            [...snip...]
14406          # options passed:
14407            [...snip...]
14408
14409          	.text
14410          	.globl	test
14411          	.type	test, @function
14412          test:
14413          .LFB0:
14414          	.cfi_startproc
14415          # test.c:4:   int total = 0;
14416          	xorl	%eax, %eax	# <retval>
14417          # test.c:6:   for (i = 0; i < n; i++)
14418          	xorl	%edx, %edx	# i
14419          .L2:
14420          # test.c:6:   for (i = 0; i < n; i++)
14421          	cmpl	%edi, %edx	# n, i
14422          	jge	.L5	#,
14423          # test.c:7:     total += i * i;
14424          	movl	%edx, %ecx	# i, tmp92
14425          	imull	%edx, %ecx	# i, tmp92
14426          # test.c:6:   for (i = 0; i < n; i++)
14427          	incl	%edx	# i
14428          # test.c:7:     total += i * i;
14429          	addl	%ecx, %eax	# tmp92, <retval>
14430          	jmp	.L2	#
14431          .L5:
14432          # test.c:10: }
14433          	ret
14434          	.cfi_endproc
14435          .LFE0:
14436          	.size	test, .-test
14437          	.ident	"GCC: (GNU) 7.0.0 20160809 (experimental)"
14438          	.section	.note.GNU-stack,"",@progbits
14439
14440     The comments are intended for humans rather than machines and hence
14441     the precise format of the comments is subject to change.
14442
14443'-frecord-gcc-switches'
14444     This switch causes the command line used to invoke the compiler to
14445     be recorded into the object file that is being created.  This
14446     switch is only implemented on some targets and the exact format of
14447     the recording is target and binary file format dependent, but it
14448     usually takes the form of a section containing ASCII text.  This
14449     switch is related to the '-fverbose-asm' switch, but that switch
14450     only records information in the assembler output file as comments,
14451     so it never reaches the object file.  See also
14452     '-grecord-gcc-switches' for another way of storing compiler options
14453     into the object file.
14454
14455'-fpic'
14456     Generate position-independent code (PIC) suitable for use in a
14457     shared library, if supported for the target machine.  Such code
14458     accesses all constant addresses through a global offset table
14459     (GOT).  The dynamic loader resolves the GOT entries when the
14460     program starts (the dynamic loader is not part of GCC; it is part
14461     of the operating system).  If the GOT size for the linked
14462     executable exceeds a machine-specific maximum size, you get an
14463     error message from the linker indicating that '-fpic' does not
14464     work; in that case, recompile with '-fPIC' instead.  (These
14465     maximums are 8k on the SPARC, 28k on AArch64 and 32k on the m68k
14466     and RS/6000.  The x86 has no such limit.)
14467
14468     Position-independent code requires special support, and therefore
14469     works only on certain machines.  For the x86, GCC supports PIC for
14470     System V but not for the Sun 386i.  Code generated for the IBM
14471     RS/6000 is always position-independent.
14472
14473     When this flag is set, the macros '__pic__' and '__PIC__' are
14474     defined to 1.
14475
14476'-fPIC'
14477     If supported for the target machine, emit position-independent
14478     code, suitable for dynamic linking and avoiding any limit on the
14479     size of the global offset table.  This option makes a difference on
14480     AArch64, m68k, PowerPC and SPARC.
14481
14482     Position-independent code requires special support, and therefore
14483     works only on certain machines.
14484
14485     When this flag is set, the macros '__pic__' and '__PIC__' are
14486     defined to 2.
14487
14488'-fpie'
14489'-fPIE'
14490     These options are similar to '-fpic' and '-fPIC', but the generated
14491     position-independent code can be only linked into executables.
14492     Usually these options are used to compile code that will be linked
14493     using the '-pie' GCC option.
14494
14495     '-fpie' and '-fPIE' both define the macros '__pie__' and '__PIE__'.
14496     The macros have the value 1 for '-fpie' and 2 for '-fPIE'.
14497
14498'-fno-plt'
14499     Do not use the PLT for external function calls in
14500     position-independent code.  Instead, load the callee address at
14501     call sites from the GOT and branch to it.  This leads to more
14502     efficient code by eliminating PLT stubs and exposing GOT loads to
14503     optimizations.  On architectures such as 32-bit x86 where PLT stubs
14504     expect the GOT pointer in a specific register, this gives more
14505     register allocation freedom to the compiler.  Lazy binding requires
14506     use of the PLT; with '-fno-plt' all external symbols are resolved
14507     at load time.
14508
14509     Alternatively, the function attribute 'noplt' can be used to avoid
14510     calls through the PLT for specific external functions.
14511
14512     In position-dependent code, a few targets also convert calls to
14513     functions that are marked to not use the PLT to use the GOT
14514     instead.
14515
14516'-fno-jump-tables'
14517     Do not use jump tables for switch statements even where it would be
14518     more efficient than other code generation strategies.  This option
14519     is of use in conjunction with '-fpic' or '-fPIC' for building code
14520     that forms part of a dynamic linker and cannot reference the
14521     address of a jump table.  On some targets, jump tables do not
14522     require a GOT and this option is not needed.
14523
14524'-ffixed-REG'
14525     Treat the register named REG as a fixed register; generated code
14526     should never refer to it (except perhaps as a stack pointer, frame
14527     pointer or in some other fixed role).
14528
14529     REG must be the name of a register.  The register names accepted
14530     are machine-specific and are defined in the 'REGISTER_NAMES' macro
14531     in the machine description macro file.
14532
14533     This flag does not have a negative form, because it specifies a
14534     three-way choice.
14535
14536'-fcall-used-REG'
14537     Treat the register named REG as an allocable register that is
14538     clobbered by function calls.  It may be allocated for temporaries
14539     or variables that do not live across a call.  Functions compiled
14540     this way do not save and restore the register REG.
14541
14542     It is an error to use this flag with the frame pointer or stack
14543     pointer.  Use of this flag for other registers that have fixed
14544     pervasive roles in the machine's execution model produces
14545     disastrous results.
14546
14547     This flag does not have a negative form, because it specifies a
14548     three-way choice.
14549
14550'-fcall-saved-REG'
14551     Treat the register named REG as an allocable register saved by
14552     functions.  It may be allocated even for temporaries or variables
14553     that live across a call.  Functions compiled this way save and
14554     restore the register REG if they use it.
14555
14556     It is an error to use this flag with the frame pointer or stack
14557     pointer.  Use of this flag for other registers that have fixed
14558     pervasive roles in the machine's execution model produces
14559     disastrous results.
14560
14561     A different sort of disaster results from the use of this flag for
14562     a register in which function values may be returned.
14563
14564     This flag does not have a negative form, because it specifies a
14565     three-way choice.
14566
14567'-fpack-struct[=N]'
14568     Without a value specified, pack all structure members together
14569     without holes.  When a value is specified (which must be a small
14570     power of two), pack structure members according to this value,
14571     representing the maximum alignment (that is, objects with default
14572     alignment requirements larger than this are output potentially
14573     unaligned at the next fitting location.
14574
14575     *Warning:* the '-fpack-struct' switch causes GCC to generate code
14576     that is not binary compatible with code generated without that
14577     switch.  Additionally, it makes the code suboptimal.  Use it to
14578     conform to a non-default application binary interface.
14579
14580'-fleading-underscore'
14581     This option and its counterpart, '-fno-leading-underscore',
14582     forcibly change the way C symbols are represented in the object
14583     file.  One use is to help link with legacy assembly code.
14584
14585     *Warning:* the '-fleading-underscore' switch causes GCC to generate
14586     code that is not binary compatible with code generated without that
14587     switch.  Use it to conform to a non-default application binary
14588     interface.  Not all targets provide complete support for this
14589     switch.
14590
14591'-ftls-model=MODEL'
14592     Alter the thread-local storage model to be used (*note
14593     Thread-Local::).  The MODEL argument should be one of
14594     'global-dynamic', 'local-dynamic', 'initial-exec' or 'local-exec'.
14595     Note that the choice is subject to optimization: the compiler may
14596     use a more efficient model for symbols not visible outside of the
14597     translation unit, or if '-fpic' is not given on the command line.
14598
14599     The default without '-fpic' is 'initial-exec'; with '-fpic' the
14600     default is 'global-dynamic'.
14601
14602'-ftrampolines'
14603     For targets that normally need trampolines for nested functions,
14604     always generate them instead of using descriptors.  Otherwise, for
14605     targets that do not need them, like for example HP-PA or IA-64, do
14606     nothing.
14607
14608     A trampoline is a small piece of code that is created at run time
14609     on the stack when the address of a nested function is taken, and is
14610     used to call the nested function indirectly.  Therefore, it
14611     requires the stack to be made executable in order for the program
14612     to work properly.
14613
14614     '-fno-trampolines' is enabled by default on a language by language
14615     basis to let the compiler avoid generating them, if it computes
14616     that this is safe, and replace them with descriptors.  Descriptors
14617     are made up of data only, but the generated code must be prepared
14618     to deal with them.  As of this writing, '-fno-trampolines' is
14619     enabled by default only for Ada.
14620
14621     Moreover, code compiled with '-ftrampolines' and code compiled with
14622     '-fno-trampolines' are not binary compatible if nested functions
14623     are present.  This option must therefore be used on a program-wide
14624     basis and be manipulated with extreme care.
14625
14626'-fvisibility=[default|internal|hidden|protected]'
14627     Set the default ELF image symbol visibility to the specified
14628     option--all symbols are marked with this unless overridden within
14629     the code.  Using this feature can very substantially improve
14630     linking and load times of shared object libraries, produce more
14631     optimized code, provide near-perfect API export and prevent symbol
14632     clashes.  It is *strongly* recommended that you use this in any
14633     shared objects you distribute.
14634
14635     Despite the nomenclature, 'default' always means public; i.e.,
14636     available to be linked against from outside the shared object.
14637     'protected' and 'internal' are pretty useless in real-world usage
14638     so the only other commonly used option is 'hidden'.  The default if
14639     '-fvisibility' isn't specified is 'default', i.e., make every
14640     symbol public.
14641
14642     A good explanation of the benefits offered by ensuring ELF symbols
14643     have the correct visibility is given by "How To Write Shared
14644     Libraries" by Ulrich Drepper (which can be found at
14645     <https://www.akkadia.org/drepper/>)--however a superior solution
14646     made possible by this option to marking things hidden when the
14647     default is public is to make the default hidden and mark things
14648     public.  This is the norm with DLLs on Windows and with
14649     '-fvisibility=hidden' and '__attribute__ ((visibility("default")))'
14650     instead of '__declspec(dllexport)' you get almost identical
14651     semantics with identical syntax.  This is a great boon to those
14652     working with cross-platform projects.
14653
14654     For those adding visibility support to existing code, you may find
14655     '#pragma GCC visibility' of use.  This works by you enclosing the
14656     declarations you wish to set visibility for with (for example)
14657     '#pragma GCC visibility push(hidden)' and '#pragma GCC visibility
14658     pop'.  Bear in mind that symbol visibility should be viewed *as
14659     part of the API interface contract* and thus all new code should
14660     always specify visibility when it is not the default; i.e.,
14661     declarations only for use within the local DSO should *always* be
14662     marked explicitly as hidden as so to avoid PLT indirection
14663     overheads--making this abundantly clear also aids readability and
14664     self-documentation of the code.  Note that due to ISO C++
14665     specification requirements, 'operator new' and 'operator delete'
14666     must always be of default visibility.
14667
14668     Be aware that headers from outside your project, in particular
14669     system headers and headers from any other library you use, may not
14670     be expecting to be compiled with visibility other than the default.
14671     You may need to explicitly say '#pragma GCC visibility
14672     push(default)' before including any such headers.
14673
14674     'extern' declarations are not affected by '-fvisibility', so a lot
14675     of code can be recompiled with '-fvisibility=hidden' with no
14676     modifications.  However, this means that calls to 'extern'
14677     functions with no explicit visibility use the PLT, so it is more
14678     effective to use '__attribute ((visibility))' and/or '#pragma GCC
14679     visibility' to tell the compiler which 'extern' declarations should
14680     be treated as hidden.
14681
14682     Note that '-fvisibility' does affect C++ vague linkage entities.
14683     This means that, for instance, an exception class that is be thrown
14684     between DSOs must be explicitly marked with default visibility so
14685     that the 'type_info' nodes are unified between the DSOs.
14686
14687     An overview of these techniques, their benefits and how to use them
14688     is at <http://gcc.gnu.org/wiki/Visibility>.
14689
14690'-fstrict-volatile-bitfields'
14691     This option should be used if accesses to volatile bit-fields (or
14692     other structure fields, although the compiler usually honors those
14693     types anyway) should use a single access of the width of the
14694     field's type, aligned to a natural alignment if possible.  For
14695     example, targets with memory-mapped peripheral registers might
14696     require all such accesses to be 16 bits wide; with this flag you
14697     can declare all peripheral bit-fields as 'unsigned short' (assuming
14698     short is 16 bits on these targets) to force GCC to use 16-bit
14699     accesses instead of, perhaps, a more efficient 32-bit access.
14700
14701     If this option is disabled, the compiler uses the most efficient
14702     instruction.  In the previous example, that might be a 32-bit load
14703     instruction, even though that accesses bytes that do not contain
14704     any portion of the bit-field, or memory-mapped registers unrelated
14705     to the one being updated.
14706
14707     In some cases, such as when the 'packed' attribute is applied to a
14708     structure field, it may not be possible to access the field with a
14709     single read or write that is correctly aligned for the target
14710     machine.  In this case GCC falls back to generating multiple
14711     accesses rather than code that will fault or truncate the result at
14712     run time.
14713
14714     Note: Due to restrictions of the C/C++11 memory model, write
14715     accesses are not allowed to touch non bit-field members.  It is
14716     therefore recommended to define all bits of the field's type as
14717     bit-field members.
14718
14719     The default value of this option is determined by the application
14720     binary interface for the target processor.
14721
14722'-fsync-libcalls'
14723     This option controls whether any out-of-line instance of the
14724     '__sync' family of functions may be used to implement the C++11
14725     '__atomic' family of functions.
14726
14727     The default value of this option is enabled, thus the only useful
14728     form of the option is '-fno-sync-libcalls'.  This option is used in
14729     the implementation of the 'libatomic' runtime library.
14730
14731
14732File: gcc.info,  Node: Developer Options,  Next: Submodel Options,  Prev: Code Gen Options,  Up: Invoking GCC
14733
147343.18 GCC Developer Options
14735==========================
14736
14737This section describes command-line options that are primarily of
14738interest to GCC developers, including options to support compiler
14739testing and investigation of compiler bugs and compile-time performance
14740problems.  This includes options that produce debug dumps at various
14741points in the compilation; that print statistics such as memory use and
14742execution time; and that print information about GCC's configuration,
14743such as where it searches for libraries.  You should rarely need to use
14744any of these options for ordinary compilation and linking tasks.
14745
14746 Many developer options that cause GCC to dump output to a file take an
14747optional '=FILENAME' suffix.  You can specify 'stdout' or '-' to dump to
14748standard output, and 'stderr' for standard error.
14749
14750 If '=FILENAME' is omitted, a default dump file name is constructed by
14751concatenating the base dump file name, a pass number, phase letter, and
14752pass name.  The base dump file name is the name of output file produced
14753by the compiler if explicitly specified and not an executable; otherwise
14754it is the source file name.  The pass number is determined by the order
14755passes are registered with the compiler's pass manager.  This is
14756generally the same as the order of execution, but passes registered by
14757plugins, target-specific passes, or passes that are otherwise registered
14758late are numbered higher than the pass named 'final', even if they are
14759executed earlier.  The phase letter is one of 'i' (inter-procedural
14760analysis), 'l' (language-specific), 'r' (RTL), or 't' (tree).  The files
14761are created in the directory of the output file.
14762
14763'-fcallgraph-info'
14764'-fcallgraph-info=MARKERS'
14765     Makes the compiler output callgraph information for the program, on
14766     a per-object-file basis.  The information is generated in the
14767     common VCG format.  It can be decorated with additional, per-node
14768     and/or per-edge information, if a list of comma-separated markers
14769     is additionally specified.  When the 'su' marker is specified, the
14770     callgraph is decorated with stack usage information; it is
14771     equivalent to '-fstack-usage'.  When the 'da' marker is specified,
14772     the callgraph is decorated with information about dynamically
14773     allocated objects.
14774
14775     When compiling with '-flto', no callgraph information is output
14776     along with the object file.  At LTO link time, '-fcallgraph-info'
14777     may generate multiple callgraph information files next to
14778     intermediate LTO output files.
14779
14780'-dLETTERS'
14781'-fdump-rtl-PASS'
14782'-fdump-rtl-PASS=FILENAME'
14783     Says to make debugging dumps during compilation at times specified
14784     by LETTERS.  This is used for debugging the RTL-based passes of the
14785     compiler.
14786
14787     Some '-dLETTERS' switches have different meaning when '-E' is used
14788     for preprocessing.  *Note Preprocessor Options::, for information
14789     about preprocessor-specific dump options.
14790
14791     Debug dumps can be enabled with a '-fdump-rtl' switch or some '-d'
14792     option LETTERS.  Here are the possible letters for use in PASS and
14793     LETTERS, and their meanings:
14794
14795     '-fdump-rtl-alignments'
14796          Dump after branch alignments have been computed.
14797
14798     '-fdump-rtl-asmcons'
14799          Dump after fixing rtl statements that have unsatisfied in/out
14800          constraints.
14801
14802     '-fdump-rtl-auto_inc_dec'
14803          Dump after auto-inc-dec discovery.  This pass is only run on
14804          architectures that have auto inc or auto dec instructions.
14805
14806     '-fdump-rtl-barriers'
14807          Dump after cleaning up the barrier instructions.
14808
14809     '-fdump-rtl-bbpart'
14810          Dump after partitioning hot and cold basic blocks.
14811
14812     '-fdump-rtl-bbro'
14813          Dump after block reordering.
14814
14815     '-fdump-rtl-btl1'
14816     '-fdump-rtl-btl2'
14817          '-fdump-rtl-btl1' and '-fdump-rtl-btl2' enable dumping after
14818          the two branch target load optimization passes.
14819
14820     '-fdump-rtl-bypass'
14821          Dump after jump bypassing and control flow optimizations.
14822
14823     '-fdump-rtl-combine'
14824          Dump after the RTL instruction combination pass.
14825
14826     '-fdump-rtl-compgotos'
14827          Dump after duplicating the computed gotos.
14828
14829     '-fdump-rtl-ce1'
14830     '-fdump-rtl-ce2'
14831     '-fdump-rtl-ce3'
14832          '-fdump-rtl-ce1', '-fdump-rtl-ce2', and '-fdump-rtl-ce3'
14833          enable dumping after the three if conversion passes.
14834
14835     '-fdump-rtl-cprop_hardreg'
14836          Dump after hard register copy propagation.
14837
14838     '-fdump-rtl-csa'
14839          Dump after combining stack adjustments.
14840
14841     '-fdump-rtl-cse1'
14842     '-fdump-rtl-cse2'
14843          '-fdump-rtl-cse1' and '-fdump-rtl-cse2' enable dumping after
14844          the two common subexpression elimination passes.
14845
14846     '-fdump-rtl-dce'
14847          Dump after the standalone dead code elimination passes.
14848
14849     '-fdump-rtl-dbr'
14850          Dump after delayed branch scheduling.
14851
14852     '-fdump-rtl-dce1'
14853     '-fdump-rtl-dce2'
14854          '-fdump-rtl-dce1' and '-fdump-rtl-dce2' enable dumping after
14855          the two dead store elimination passes.
14856
14857     '-fdump-rtl-eh'
14858          Dump after finalization of EH handling code.
14859
14860     '-fdump-rtl-eh_ranges'
14861          Dump after conversion of EH handling range regions.
14862
14863     '-fdump-rtl-expand'
14864          Dump after RTL generation.
14865
14866     '-fdump-rtl-fwprop1'
14867     '-fdump-rtl-fwprop2'
14868          '-fdump-rtl-fwprop1' and '-fdump-rtl-fwprop2' enable dumping
14869          after the two forward propagation passes.
14870
14871     '-fdump-rtl-gcse1'
14872     '-fdump-rtl-gcse2'
14873          '-fdump-rtl-gcse1' and '-fdump-rtl-gcse2' enable dumping after
14874          global common subexpression elimination.
14875
14876     '-fdump-rtl-init-regs'
14877          Dump after the initialization of the registers.
14878
14879     '-fdump-rtl-initvals'
14880          Dump after the computation of the initial value sets.
14881
14882     '-fdump-rtl-into_cfglayout'
14883          Dump after converting to cfglayout mode.
14884
14885     '-fdump-rtl-ira'
14886          Dump after iterated register allocation.
14887
14888     '-fdump-rtl-jump'
14889          Dump after the second jump optimization.
14890
14891     '-fdump-rtl-loop2'
14892          '-fdump-rtl-loop2' enables dumping after the rtl loop
14893          optimization passes.
14894
14895     '-fdump-rtl-mach'
14896          Dump after performing the machine dependent reorganization
14897          pass, if that pass exists.
14898
14899     '-fdump-rtl-mode_sw'
14900          Dump after removing redundant mode switches.
14901
14902     '-fdump-rtl-rnreg'
14903          Dump after register renumbering.
14904
14905     '-fdump-rtl-outof_cfglayout'
14906          Dump after converting from cfglayout mode.
14907
14908     '-fdump-rtl-peephole2'
14909          Dump after the peephole pass.
14910
14911     '-fdump-rtl-postreload'
14912          Dump after post-reload optimizations.
14913
14914     '-fdump-rtl-pro_and_epilogue'
14915          Dump after generating the function prologues and epilogues.
14916
14917     '-fdump-rtl-sched1'
14918     '-fdump-rtl-sched2'
14919          '-fdump-rtl-sched1' and '-fdump-rtl-sched2' enable dumping
14920          after the basic block scheduling passes.
14921
14922     '-fdump-rtl-ree'
14923          Dump after sign/zero extension elimination.
14924
14925     '-fdump-rtl-seqabstr'
14926          Dump after common sequence discovery.
14927
14928     '-fdump-rtl-shorten'
14929          Dump after shortening branches.
14930
14931     '-fdump-rtl-sibling'
14932          Dump after sibling call optimizations.
14933
14934     '-fdump-rtl-split1'
14935     '-fdump-rtl-split2'
14936     '-fdump-rtl-split3'
14937     '-fdump-rtl-split4'
14938     '-fdump-rtl-split5'
14939          These options enable dumping after five rounds of instruction
14940          splitting.
14941
14942     '-fdump-rtl-sms'
14943          Dump after modulo scheduling.  This pass is only run on some
14944          architectures.
14945
14946     '-fdump-rtl-stack'
14947          Dump after conversion from GCC's "flat register file"
14948          registers to the x87's stack-like registers.  This pass is
14949          only run on x86 variants.
14950
14951     '-fdump-rtl-subreg1'
14952     '-fdump-rtl-subreg2'
14953          '-fdump-rtl-subreg1' and '-fdump-rtl-subreg2' enable dumping
14954          after the two subreg expansion passes.
14955
14956     '-fdump-rtl-unshare'
14957          Dump after all rtl has been unshared.
14958
14959     '-fdump-rtl-vartrack'
14960          Dump after variable tracking.
14961
14962     '-fdump-rtl-vregs'
14963          Dump after converting virtual registers to hard registers.
14964
14965     '-fdump-rtl-web'
14966          Dump after live range splitting.
14967
14968     '-fdump-rtl-regclass'
14969     '-fdump-rtl-subregs_of_mode_init'
14970     '-fdump-rtl-subregs_of_mode_finish'
14971     '-fdump-rtl-dfinit'
14972     '-fdump-rtl-dfinish'
14973          These dumps are defined but always produce empty files.
14974
14975     '-da'
14976     '-fdump-rtl-all'
14977          Produce all the dumps listed above.
14978
14979     '-dA'
14980          Annotate the assembler output with miscellaneous debugging
14981          information.
14982
14983     '-dD'
14984          Dump all macro definitions, at the end of preprocessing, in
14985          addition to normal output.
14986
14987     '-dH'
14988          Produce a core dump whenever an error occurs.
14989
14990     '-dp'
14991          Annotate the assembler output with a comment indicating which
14992          pattern and alternative is used.  The length and cost of each
14993          instruction are also printed.
14994
14995     '-dP'
14996          Dump the RTL in the assembler output as a comment before each
14997          instruction.  Also turns on '-dp' annotation.
14998
14999     '-dx'
15000          Just generate RTL for a function instead of compiling it.
15001          Usually used with '-fdump-rtl-expand'.
15002
15003'-fdump-debug'
15004     Dump debugging information generated during the debug generation
15005     phase.
15006
15007'-fdump-earlydebug'
15008     Dump debugging information generated during the early debug
15009     generation phase.
15010
15011'-fdump-noaddr'
15012     When doing debugging dumps, suppress address output.  This makes it
15013     more feasible to use diff on debugging dumps for compiler
15014     invocations with different compiler binaries and/or different text
15015     / bss / data / heap / stack / dso start locations.
15016
15017'-freport-bug'
15018     Collect and dump debug information into a temporary file if an
15019     internal compiler error (ICE) occurs.
15020
15021'-fdump-unnumbered'
15022     When doing debugging dumps, suppress instruction numbers and
15023     address output.  This makes it more feasible to use diff on
15024     debugging dumps for compiler invocations with different options, in
15025     particular with and without '-g'.
15026
15027'-fdump-unnumbered-links'
15028     When doing debugging dumps (see '-d' option above), suppress
15029     instruction numbers for the links to the previous and next
15030     instructions in a sequence.
15031
15032'-fdump-ipa-SWITCH'
15033'-fdump-ipa-SWITCH-OPTIONS'
15034     Control the dumping at various stages of inter-procedural analysis
15035     language tree to a file.  The file name is generated by appending a
15036     switch specific suffix to the source file name, and the file is
15037     created in the same directory as the output file.  The following
15038     dumps are possible:
15039
15040     'all'
15041          Enables all inter-procedural analysis dumps.
15042
15043     'cgraph'
15044          Dumps information about call-graph optimization, unused
15045          function removal, and inlining decisions.
15046
15047     'inline'
15048          Dump after function inlining.
15049
15050     Additionally, the options '-optimized', '-missed', '-note', and
15051     '-all' can be provided, with the same meaning as for '-fopt-info',
15052     defaulting to '-optimized'.
15053
15054     For example, '-fdump-ipa-inline-optimized-missed' will emit
15055     information on callsites that were inlined, along with callsites
15056     that were not inlined.
15057
15058     By default, the dump will contain messages about successful
15059     optimizations (equivalent to '-optimized') together with low-level
15060     details about the analysis.
15061
15062'-fdump-lang-all'
15063'-fdump-lang-SWITCH'
15064'-fdump-lang-SWITCH-OPTIONS'
15065'-fdump-lang-SWITCH-OPTIONS=FILENAME'
15066     Control the dumping of language-specific information.  The OPTIONS
15067     and FILENAME portions behave as described in the '-fdump-tree'
15068     option.  The following SWITCH values are accepted:
15069
15070     'all'
15071
15072          Enable all language-specific dumps.
15073
15074     'class'
15075          Dump class hierarchy information.  Virtual table information
15076          is emitted unless ''slim'' is specified.  This option is
15077          applicable to C++ only.
15078
15079     'raw'
15080          Dump the raw internal tree data.  This option is applicable to
15081          C++ only.
15082
15083'-fdump-passes'
15084     Print on 'stderr' the list of optimization passes that are turned
15085     on and off by the current command-line options.
15086
15087'-fdump-statistics-OPTION'
15088     Enable and control dumping of pass statistics in a separate file.
15089     The file name is generated by appending a suffix ending in
15090     '.statistics' to the source file name, and the file is created in
15091     the same directory as the output file.  If the '-OPTION' form is
15092     used, '-stats' causes counters to be summed over the whole
15093     compilation unit while '-details' dumps every event as the passes
15094     generate them.  The default with no option is to sum counters for
15095     each function compiled.
15096
15097'-fdump-tree-all'
15098'-fdump-tree-SWITCH'
15099'-fdump-tree-SWITCH-OPTIONS'
15100'-fdump-tree-SWITCH-OPTIONS=FILENAME'
15101     Control the dumping at various stages of processing the
15102     intermediate language tree to a file.  If the '-OPTIONS' form is
15103     used, OPTIONS is a list of '-' separated options which control the
15104     details of the dump.  Not all options are applicable to all dumps;
15105     those that are not meaningful are ignored.  The following options
15106     are available
15107
15108     'address'
15109          Print the address of each node.  Usually this is not
15110          meaningful as it changes according to the environment and
15111          source file.  Its primary use is for tying up a dump file with
15112          a debug environment.
15113     'asmname'
15114          If 'DECL_ASSEMBLER_NAME' has been set for a given decl, use
15115          that in the dump instead of 'DECL_NAME'.  Its primary use is
15116          ease of use working backward from mangled names in the
15117          assembly file.
15118     'slim'
15119          When dumping front-end intermediate representations, inhibit
15120          dumping of members of a scope or body of a function merely
15121          because that scope has been reached.  Only dump such items
15122          when they are directly reachable by some other path.
15123
15124          When dumping pretty-printed trees, this option inhibits
15125          dumping the bodies of control structures.
15126
15127          When dumping RTL, print the RTL in slim (condensed) form
15128          instead of the default LISP-like representation.
15129     'raw'
15130          Print a raw representation of the tree.  By default, trees are
15131          pretty-printed into a C-like representation.
15132     'details'
15133          Enable more detailed dumps (not honored by every dump option).
15134          Also include information from the optimization passes.
15135     'stats'
15136          Enable dumping various statistics about the pass (not honored
15137          by every dump option).
15138     'blocks'
15139          Enable showing basic block boundaries (disabled in raw dumps).
15140     'graph'
15141          For each of the other indicated dump files
15142          ('-fdump-rtl-PASS'), dump a representation of the control flow
15143          graph suitable for viewing with GraphViz to
15144          'FILE.PASSID.PASS.dot'.  Each function in the file is
15145          pretty-printed as a subgraph, so that GraphViz can render them
15146          all in a single plot.
15147
15148          This option currently only works for RTL dumps, and the RTL is
15149          always dumped in slim form.
15150     'vops'
15151          Enable showing virtual operands for every statement.
15152     'lineno'
15153          Enable showing line numbers for statements.
15154     'uid'
15155          Enable showing the unique ID ('DECL_UID') for each variable.
15156     'verbose'
15157          Enable showing the tree dump for each statement.
15158     'eh'
15159          Enable showing the EH region number holding each statement.
15160     'scev'
15161          Enable showing scalar evolution analysis details.
15162     'optimized'
15163          Enable showing optimization information (only available in
15164          certain passes).
15165     'missed'
15166          Enable showing missed optimization information (only available
15167          in certain passes).
15168     'note'
15169          Enable other detailed optimization information (only available
15170          in certain passes).
15171     'all'
15172          Turn on all options, except 'raw', 'slim', 'verbose' and
15173          'lineno'.
15174     'optall'
15175          Turn on all optimization options, i.e., 'optimized', 'missed',
15176          and 'note'.
15177
15178     To determine what tree dumps are available or find the dump for a
15179     pass of interest follow the steps below.
15180
15181       1. Invoke GCC with '-fdump-passes' and in the 'stderr' output
15182          look for a code that corresponds to the pass you are
15183          interested in.  For example, the codes 'tree-evrp',
15184          'tree-vrp1', and 'tree-vrp2' correspond to the three Value
15185          Range Propagation passes.  The number at the end distinguishes
15186          distinct invocations of the same pass.
15187       2. To enable the creation of the dump file, append the pass code
15188          to the '-fdump-' option prefix and invoke GCC with it.  For
15189          example, to enable the dump from the Early Value Range
15190          Propagation pass, invoke GCC with the '-fdump-tree-evrp'
15191          option.  Optionally, you may specify the name of the dump
15192          file.  If you don't specify one, GCC creates as described
15193          below.
15194       3. Find the pass dump in a file whose name is composed of three
15195          components separated by a period: the name of the source file
15196          GCC was invoked to compile, a numeric suffix indicating the
15197          pass number followed by the letter 't' for tree passes (and
15198          the letter 'r' for RTL passes), and finally the pass code.
15199          For example, the Early VRP pass dump might be in a file named
15200          'myfile.c.038t.evrp' in the current working directory.  Note
15201          that the numeric codes are not stable and may change from one
15202          version of GCC to another.
15203
15204'-fopt-info'
15205'-fopt-info-OPTIONS'
15206'-fopt-info-OPTIONS=FILENAME'
15207     Controls optimization dumps from various optimization passes.  If
15208     the '-OPTIONS' form is used, OPTIONS is a list of '-' separated
15209     option keywords to select the dump details and optimizations.
15210
15211     The OPTIONS can be divided into three groups:
15212       1. options describing what kinds of messages should be emitted,
15213       2. options describing the verbosity of the dump, and
15214       3. options describing which optimizations should be included.
15215     The options from each group can be freely mixed as they are
15216     non-overlapping.  However, in case of any conflicts, the later
15217     options override the earlier options on the command line.
15218
15219     The following options control which kinds of messages should be
15220     emitted:
15221
15222     'optimized'
15223          Print information when an optimization is successfully
15224          applied.  It is up to a pass to decide which information is
15225          relevant.  For example, the vectorizer passes print the source
15226          location of loops which are successfully vectorized.
15227     'missed'
15228          Print information about missed optimizations.  Individual
15229          passes control which information to include in the output.
15230     'note'
15231          Print verbose information about optimizations, such as certain
15232          transformations, more detailed messages about decisions etc.
15233     'all'
15234          Print detailed optimization information.  This includes
15235          'optimized', 'missed', and 'note'.
15236
15237     The following option controls the dump verbosity:
15238
15239     'internals'
15240          By default, only "high-level" messages are emitted.  This
15241          option enables additional, more detailed, messages, which are
15242          likely to only be of interest to GCC developers.
15243
15244     One or more of the following option keywords can be used to
15245     describe a group of optimizations:
15246
15247     'ipa'
15248          Enable dumps from all interprocedural optimizations.
15249     'loop'
15250          Enable dumps from all loop optimizations.
15251     'inline'
15252          Enable dumps from all inlining optimizations.
15253     'omp'
15254          Enable dumps from all OMP (Offloading and Multi Processing)
15255          optimizations.
15256     'vec'
15257          Enable dumps from all vectorization optimizations.
15258     'optall'
15259          Enable dumps from all optimizations.  This is a superset of
15260          the optimization groups listed above.
15261
15262     If OPTIONS is omitted, it defaults to 'optimized-optall', which
15263     means to dump messages about successful optimizations from all the
15264     passes, omitting messages that are treated as "internals".
15265
15266     If the FILENAME is provided, then the dumps from all the applicable
15267     optimizations are concatenated into the FILENAME.  Otherwise the
15268     dump is output onto 'stderr'.  Though multiple '-fopt-info' options
15269     are accepted, only one of them can include a FILENAME.  If other
15270     filenames are provided then all but the first such option are
15271     ignored.
15272
15273     Note that the output FILENAME is overwritten in case of multiple
15274     translation units.  If a combined output from multiple translation
15275     units is desired, 'stderr' should be used instead.
15276
15277     In the following example, the optimization info is output to
15278     'stderr':
15279
15280          gcc -O3 -fopt-info
15281
15282     This example:
15283          gcc -O3 -fopt-info-missed=missed.all
15284
15285     outputs missed optimization report from all the passes into
15286     'missed.all', and this one:
15287
15288          gcc -O2 -ftree-vectorize -fopt-info-vec-missed
15289
15290     prints information about missed optimization opportunities from
15291     vectorization passes on 'stderr'.  Note that
15292     '-fopt-info-vec-missed' is equivalent to '-fopt-info-missed-vec'.
15293     The order of the optimization group names and message types listed
15294     after '-fopt-info' does not matter.
15295
15296     As another example,
15297          gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
15298
15299     outputs information about missed optimizations as well as optimized
15300     locations from all the inlining passes into 'inline.txt'.
15301
15302     Finally, consider:
15303
15304          gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
15305
15306     Here the two output filenames 'vec.miss' and 'loop.opt' are in
15307     conflict since only one output file is allowed.  In this case, only
15308     the first option takes effect and the subsequent options are
15309     ignored.  Thus only 'vec.miss' is produced which contains dumps
15310     from the vectorizer about missed opportunities.
15311
15312'-fsave-optimization-record'
15313     Write a SRCFILE.opt-record.json.gz file detailing what
15314     optimizations were performed, for those optimizations that support
15315     '-fopt-info'.
15316
15317     This option is experimental and the format of the data within the
15318     compressed JSON file is subject to change.
15319
15320     It is roughly equivalent to a machine-readable version of
15321     '-fopt-info-all', as a collection of messages with source file,
15322     line number and column number, with the following additional data
15323     for each message:
15324
15325        * the execution count of the code being optimized, along with
15326          metadata about whether this was from actual profile data, or
15327          just an estimate, allowing consumers to prioritize messages by
15328          code hotness,
15329
15330        * the function name of the code being optimized, where
15331          applicable,
15332
15333        * the "inlining chain" for the code being optimized, so that
15334          when a function is inlined into several different places
15335          (which might themselves be inlined), the reader can
15336          distinguish between the copies,
15337
15338        * objects identifying those parts of the message that refer to
15339          expressions, statements or symbol-table nodes, which of these
15340          categories they are, and, when available, their source code
15341          location,
15342
15343        * the GCC pass that emitted the message, and
15344
15345        * the location in GCC's own code from which the message was
15346          emitted
15347
15348     Additionally, some messages are logically nested within other
15349     messages, reflecting implementation details of the optimization
15350     passes.
15351
15352'-fsched-verbose=N'
15353     On targets that use instruction scheduling, this option controls
15354     the amount of debugging output the scheduler prints to the dump
15355     files.
15356
15357     For N greater than zero, '-fsched-verbose' outputs the same
15358     information as '-fdump-rtl-sched1' and '-fdump-rtl-sched2'.  For N
15359     greater than one, it also output basic block probabilities,
15360     detailed ready list information and unit/insn info.  For N greater
15361     than two, it includes RTL at abort point, control-flow and regions
15362     info.  And for N over four, '-fsched-verbose' also includes
15363     dependence info.
15364
15365'-fenable-KIND-PASS'
15366'-fdisable-KIND-PASS=RANGE-LIST'
15367
15368     This is a set of options that are used to explicitly disable/enable
15369     optimization passes.  These options are intended for use for
15370     debugging GCC. Compiler users should use regular options for
15371     enabling/disabling passes instead.
15372
15373     '-fdisable-ipa-PASS'
15374          Disable IPA pass PASS.  PASS is the pass name.  If the same
15375          pass is statically invoked in the compiler multiple times, the
15376          pass name should be appended with a sequential number starting
15377          from 1.
15378
15379     '-fdisable-rtl-PASS'
15380     '-fdisable-rtl-PASS=RANGE-LIST'
15381          Disable RTL pass PASS.  PASS is the pass name.  If the same
15382          pass is statically invoked in the compiler multiple times, the
15383          pass name should be appended with a sequential number starting
15384          from 1.  RANGE-LIST is a comma-separated list of function
15385          ranges or assembler names.  Each range is a number pair
15386          separated by a colon.  The range is inclusive in both ends.
15387          If the range is trivial, the number pair can be simplified as
15388          a single number.  If the function's call graph node's UID
15389          falls within one of the specified ranges, the PASS is disabled
15390          for that function.  The UID is shown in the function header of
15391          a dump file, and the pass names can be dumped by using option
15392          '-fdump-passes'.
15393
15394     '-fdisable-tree-PASS'
15395     '-fdisable-tree-PASS=RANGE-LIST'
15396          Disable tree pass PASS.  See '-fdisable-rtl' for the
15397          description of option arguments.
15398
15399     '-fenable-ipa-PASS'
15400          Enable IPA pass PASS.  PASS is the pass name.  If the same
15401          pass is statically invoked in the compiler multiple times, the
15402          pass name should be appended with a sequential number starting
15403          from 1.
15404
15405     '-fenable-rtl-PASS'
15406     '-fenable-rtl-PASS=RANGE-LIST'
15407          Enable RTL pass PASS.  See '-fdisable-rtl' for option argument
15408          description and examples.
15409
15410     '-fenable-tree-PASS'
15411     '-fenable-tree-PASS=RANGE-LIST'
15412          Enable tree pass PASS.  See '-fdisable-rtl' for the
15413          description of option arguments.
15414
15415     Here are some examples showing uses of these options.
15416
15417
15418          # disable ccp1 for all functions
15419             -fdisable-tree-ccp1
15420          # disable complete unroll for function whose cgraph node uid is 1
15421             -fenable-tree-cunroll=1
15422          # disable gcse2 for functions at the following ranges [1,1],
15423          # [300,400], and [400,1000]
15424          # disable gcse2 for functions foo and foo2
15425             -fdisable-rtl-gcse2=foo,foo2
15426          # disable early inlining
15427             -fdisable-tree-einline
15428          # disable ipa inlining
15429             -fdisable-ipa-inline
15430          # enable tree full unroll
15431             -fenable-tree-unroll
15432
15433
15434'-fchecking'
15435'-fchecking=N'
15436     Enable internal consistency checking.  The default depends on the
15437     compiler configuration.  '-fchecking=2' enables further internal
15438     consistency checking that might affect code generation.
15439
15440'-frandom-seed=STRING'
15441     This option provides a seed that GCC uses in place of random
15442     numbers in generating certain symbol names that have to be
15443     different in every compiled file.  It is also used to place unique
15444     stamps in coverage data files and the object files that produce
15445     them.  You can use the '-frandom-seed' option to produce
15446     reproducibly identical object files.
15447
15448     The STRING can either be a number (decimal, octal or hex) or an
15449     arbitrary string (in which case it's converted to a number by
15450     computing CRC32).
15451
15452     The STRING should be different for every file you compile.
15453
15454'-save-temps'
15455'-save-temps=cwd'
15456     Store the usual "temporary" intermediate files permanently; place
15457     them in the current directory and name them based on the source
15458     file.  Thus, compiling 'foo.c' with '-c -save-temps' produces files
15459     'foo.i' and 'foo.s', as well as 'foo.o'.  This creates a
15460     preprocessed 'foo.i' output file even though the compiler now
15461     normally uses an integrated preprocessor.
15462
15463     When used in combination with the '-x' command-line option,
15464     '-save-temps' is sensible enough to avoid over writing an input
15465     source file with the same extension as an intermediate file.  The
15466     corresponding intermediate file may be obtained by renaming the
15467     source file before using '-save-temps'.
15468
15469     If you invoke GCC in parallel, compiling several different source
15470     files that share a common base name in different subdirectories or
15471     the same source file compiled for multiple output destinations, it
15472     is likely that the different parallel compilers will interfere with
15473     each other, and overwrite the temporary files.  For instance:
15474
15475          gcc -save-temps -o outdir1/foo.o indir1/foo.c&
15476          gcc -save-temps -o outdir2/foo.o indir2/foo.c&
15477
15478     may result in 'foo.i' and 'foo.o' being written to simultaneously
15479     by both compilers.
15480
15481'-save-temps=obj'
15482     Store the usual "temporary" intermediate files permanently.  If the
15483     '-o' option is used, the temporary files are based on the object
15484     file.  If the '-o' option is not used, the '-save-temps=obj' switch
15485     behaves like '-save-temps'.
15486
15487     For example:
15488
15489          gcc -save-temps=obj -c foo.c
15490          gcc -save-temps=obj -c bar.c -o dir/xbar.o
15491          gcc -save-temps=obj foobar.c -o dir2/yfoobar
15492
15493     creates 'foo.i', 'foo.s', 'dir/xbar.i', 'dir/xbar.s',
15494     'dir2/yfoobar.i', 'dir2/yfoobar.s', and 'dir2/yfoobar.o'.
15495
15496'-time[=FILE]'
15497     Report the CPU time taken by each subprocess in the compilation
15498     sequence.  For C source files, this is the compiler proper and
15499     assembler (plus the linker if linking is done).
15500
15501     Without the specification of an output file, the output looks like
15502     this:
15503
15504          # cc1 0.12 0.01
15505          # as 0.00 0.01
15506
15507     The first number on each line is the "user time", that is time
15508     spent executing the program itself.  The second number is "system
15509     time", time spent executing operating system routines on behalf of
15510     the program.  Both numbers are in seconds.
15511
15512     With the specification of an output file, the output is appended to
15513     the named file, and it looks like this:
15514
15515          0.12 0.01 cc1 OPTIONS
15516          0.00 0.01 as OPTIONS
15517
15518     The "user time" and the "system time" are moved before the program
15519     name, and the options passed to the program are displayed, so that
15520     one can later tell what file was being compiled, and with which
15521     options.
15522
15523'-fdump-final-insns[=FILE]'
15524     Dump the final internal representation (RTL) to FILE.  If the
15525     optional argument is omitted (or if FILE is '.'), the name of the
15526     dump file is determined by appending '.gkd' to the compilation
15527     output file name.
15528
15529'-fcompare-debug[=OPTS]'
15530     If no error occurs during compilation, run the compiler a second
15531     time, adding OPTS and '-fcompare-debug-second' to the arguments
15532     passed to the second compilation.  Dump the final internal
15533     representation in both compilations, and print an error if they
15534     differ.
15535
15536     If the equal sign is omitted, the default '-gtoggle' is used.
15537
15538     The environment variable 'GCC_COMPARE_DEBUG', if defined, non-empty
15539     and nonzero, implicitly enables '-fcompare-debug'.  If
15540     'GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
15541     then it is used for OPTS, otherwise the default '-gtoggle' is used.
15542
15543     '-fcompare-debug=', with the equal sign but without OPTS, is
15544     equivalent to '-fno-compare-debug', which disables the dumping of
15545     the final representation and the second compilation, preventing
15546     even 'GCC_COMPARE_DEBUG' from taking effect.
15547
15548     To verify full coverage during '-fcompare-debug' testing, set
15549     'GCC_COMPARE_DEBUG' to say '-fcompare-debug-not-overridden', which
15550     GCC rejects as an invalid option in any actual compilation (rather
15551     than preprocessing, assembly or linking).  To get just a warning,
15552     setting 'GCC_COMPARE_DEBUG' to '-w%n-fcompare-debug not overridden'
15553     will do.
15554
15555'-fcompare-debug-second'
15556     This option is implicitly passed to the compiler for the second
15557     compilation requested by '-fcompare-debug', along with options to
15558     silence warnings, and omitting other options that would cause the
15559     compiler to produce output to files or to standard output as a side
15560     effect.  Dump files and preserved temporary files are renamed so as
15561     to contain the '.gk' additional extension during the second
15562     compilation, to avoid overwriting those generated by the first.
15563
15564     When this option is passed to the compiler driver, it causes the
15565     _first_ compilation to be skipped, which makes it useful for little
15566     other than debugging the compiler proper.
15567
15568'-gtoggle'
15569     Turn off generation of debug info, if leaving out this option
15570     generates it, or turn it on at level 2 otherwise.  The position of
15571     this argument in the command line does not matter; it takes effect
15572     after all other options are processed, and it does so only once, no
15573     matter how many times it is given.  This is mainly intended to be
15574     used with '-fcompare-debug'.
15575
15576'-fvar-tracking-assignments-toggle'
15577     Toggle '-fvar-tracking-assignments', in the same way that
15578     '-gtoggle' toggles '-g'.
15579
15580'-Q'
15581     Makes the compiler print out each function name as it is compiled,
15582     and print some statistics about each pass when it finishes.
15583
15584'-ftime-report'
15585     Makes the compiler print some statistics about the time consumed by
15586     each pass when it finishes.
15587
15588'-ftime-report-details'
15589     Record the time consumed by infrastructure parts separately for
15590     each pass.
15591
15592'-fira-verbose=N'
15593     Control the verbosity of the dump file for the integrated register
15594     allocator.  The default value is 5.  If the value N is greater or
15595     equal to 10, the dump output is sent to stderr using the same
15596     format as N minus 10.
15597
15598'-flto-report'
15599     Prints a report with internal details on the workings of the
15600     link-time optimizer.  The contents of this report vary from version
15601     to version.  It is meant to be useful to GCC developers when
15602     processing object files in LTO mode (via '-flto').
15603
15604     Disabled by default.
15605
15606'-flto-report-wpa'
15607     Like '-flto-report', but only print for the WPA phase of link-time
15608     optimization.
15609
15610'-fmem-report'
15611     Makes the compiler print some statistics about permanent memory
15612     allocation when it finishes.
15613
15614'-fmem-report-wpa'
15615     Makes the compiler print some statistics about permanent memory
15616     allocation for the WPA phase only.
15617
15618'-fpre-ipa-mem-report'
15619'-fpost-ipa-mem-report'
15620     Makes the compiler print some statistics about permanent memory
15621     allocation before or after interprocedural optimization.
15622
15623'-fprofile-report'
15624     Makes the compiler print some statistics about consistency of the
15625     (estimated) profile and effect of individual passes.
15626
15627'-fstack-usage'
15628     Makes the compiler output stack usage information for the program,
15629     on a per-function basis.  The filename for the dump is made by
15630     appending '.su' to the AUXNAME.  AUXNAME is generated from the name
15631     of the output file, if explicitly specified and it is not an
15632     executable, otherwise it is the basename of the source file.  An
15633     entry is made up of three fields:
15634
15635        * The name of the function.
15636        * A number of bytes.
15637        * One or more qualifiers: 'static', 'dynamic', 'bounded'.
15638
15639     The qualifier 'static' means that the function manipulates the
15640     stack statically: a fixed number of bytes are allocated for the
15641     frame on function entry and released on function exit; no stack
15642     adjustments are otherwise made in the function.  The second field
15643     is this fixed number of bytes.
15644
15645     The qualifier 'dynamic' means that the function manipulates the
15646     stack dynamically: in addition to the static allocation described
15647     above, stack adjustments are made in the body of the function, for
15648     example to push/pop arguments around function calls.  If the
15649     qualifier 'bounded' is also present, the amount of these
15650     adjustments is bounded at compile time and the second field is an
15651     upper bound of the total amount of stack used by the function.  If
15652     it is not present, the amount of these adjustments is not bounded
15653     at compile time and the second field only represents the bounded
15654     part.
15655
15656'-fstats'
15657     Emit statistics about front-end processing at the end of the
15658     compilation.  This option is supported only by the C++ front end,
15659     and the information is generally only useful to the G++ development
15660     team.
15661
15662'-fdbg-cnt-list'
15663     Print the name and the counter upper bound for all debug counters.
15664
15665'-fdbg-cnt=COUNTER-VALUE-LIST'
15666     Set the internal debug counter lower and upper bound.
15667     COUNTER-VALUE-LIST is a comma-separated list of
15668     NAME:LOWER_BOUND1-UPPER_BOUND1 [:LOWER_BOUND2-UPPER_BOUND2...]
15669     tuples which sets the name of the counter and list of closed
15670     intervals.  The LOWER_BOUND is optional and is zero initialized if
15671     not set.  For example, with '-fdbg-cnt=dce:2-4:10-11,tail_call:10',
15672     'dbg_cnt(dce)' returns true only for second, third, fourth, tenth
15673     and eleventh invocation.  For 'dbg_cnt(tail_call)' true is returned
15674     for first 10 invocations.
15675
15676'-print-file-name=LIBRARY'
15677     Print the full absolute name of the library file LIBRARY that would
15678     be used when linking--and don't do anything else.  With this
15679     option, GCC does not compile or link anything; it just prints the
15680     file name.
15681
15682'-print-multi-directory'
15683     Print the directory name corresponding to the multilib selected by
15684     any other switches present in the command line.  This directory is
15685     supposed to exist in 'GCC_EXEC_PREFIX'.
15686
15687'-print-multi-lib'
15688     Print the mapping from multilib directory names to compiler
15689     switches that enable them.  The directory name is separated from
15690     the switches by ';', and each switch starts with an '@' instead of
15691     the '-', without spaces between multiple switches.  This is
15692     supposed to ease shell processing.
15693
15694'-print-multi-os-directory'
15695     Print the path to OS libraries for the selected multilib, relative
15696     to some 'lib' subdirectory.  If OS libraries are present in the
15697     'lib' subdirectory and no multilibs are used, this is usually just
15698     '.', if OS libraries are present in 'libSUFFIX' sibling directories
15699     this prints e.g. '../lib64', '../lib' or '../lib32', or if OS
15700     libraries are present in 'lib/SUBDIR' subdirectories it prints e.g.
15701     'amd64', 'sparcv9' or 'ev6'.
15702
15703'-print-multiarch'
15704     Print the path to OS libraries for the selected multiarch, relative
15705     to some 'lib' subdirectory.
15706
15707'-print-prog-name=PROGRAM'
15708     Like '-print-file-name', but searches for a program such as 'cpp'.
15709
15710'-print-libgcc-file-name'
15711     Same as '-print-file-name=libgcc.a'.
15712
15713     This is useful when you use '-nostdlib' or '-nodefaultlibs' but you
15714     do want to link with 'libgcc.a'.  You can do:
15715
15716          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
15717
15718'-print-search-dirs'
15719     Print the name of the configured installation directory and a list
15720     of program and library directories 'gcc' searches--and don't do
15721     anything else.
15722
15723     This is useful when 'gcc' prints the error message 'installation
15724     problem, cannot exec cpp0: No such file or directory'.  To resolve
15725     this you either need to put 'cpp0' and the other compiler
15726     components where 'gcc' expects to find them, or you can set the
15727     environment variable 'GCC_EXEC_PREFIX' to the directory where you
15728     installed them.  Don't forget the trailing '/'.  *Note Environment
15729     Variables::.
15730
15731'-print-sysroot'
15732     Print the target sysroot directory that is used during compilation.
15733     This is the target sysroot specified either at configure time or
15734     using the '--sysroot' option, possibly with an extra suffix that
15735     depends on compilation options.  If no target sysroot is specified,
15736     the option prints nothing.
15737
15738'-print-sysroot-headers-suffix'
15739     Print the suffix added to the target sysroot when searching for
15740     headers, or give an error if the compiler is not configured with
15741     such a suffix--and don't do anything else.
15742
15743'-dumpmachine'
15744     Print the compiler's target machine (for example,
15745     'i686-pc-linux-gnu')--and don't do anything else.
15746
15747'-dumpversion'
15748     Print the compiler version (for example, '3.0', '6.3.0' or
15749     '7')--and don't do anything else.  This is the compiler version
15750     used in filesystem paths and specs.  Depending on how the compiler
15751     has been configured it can be just a single number (major version),
15752     two numbers separated by a dot (major and minor version) or three
15753     numbers separated by dots (major, minor and patchlevel version).
15754
15755'-dumpfullversion'
15756     Print the full compiler version--and don't do anything else.  The
15757     output is always three numbers separated by dots, major, minor and
15758     patchlevel version.
15759
15760'-dumpspecs'
15761     Print the compiler's built-in specs--and don't do anything else.
15762     (This is used when GCC itself is being built.)  *Note Spec Files::.
15763
15764
15765File: gcc.info,  Node: Submodel Options,  Next: Spec Files,  Prev: Developer Options,  Up: Invoking GCC
15766
157673.19 Machine-Dependent Options
15768==============================
15769
15770Each target machine supported by GCC can have its own options--for
15771example, to allow you to compile for a particular processor variant or
15772ABI, or to control optimizations specific to that machine.  By
15773convention, the names of machine-specific options start with '-m'.
15774
15775 Some configurations of the compiler also support additional
15776target-specific options, usually for compatibility with other compilers
15777on the same platform.
15778
15779* Menu:
15780
15781* AArch64 Options::
15782* Adapteva Epiphany Options::
15783* AMD GCN Options::
15784* ARC Options::
15785* ARM Options::
15786* AVR Options::
15787* Blackfin Options::
15788* C6X Options::
15789* CRIS Options::
15790* CR16 Options::
15791* C-SKY Options::
15792* Darwin Options::
15793* DEC Alpha Options::
15794* eBPF Options::
15795* FR30 Options::
15796* FT32 Options::
15797* FRV Options::
15798* GNU/Linux Options::
15799* H8/300 Options::
15800* HPPA Options::
15801* IA-64 Options::
15802* LM32 Options::
15803* M32C Options::
15804* M32R/D Options::
15805* M680x0 Options::
15806* MCore Options::
15807* MeP Options::
15808* MicroBlaze Options::
15809* MIPS Options::
15810* MMIX Options::
15811* MN10300 Options::
15812* Moxie Options::
15813* MSP430 Options::
15814* NDS32 Options::
15815* Nios II Options::
15816* Nvidia PTX Options::
15817* OpenRISC Options::
15818* PDP-11 Options::
15819* picoChip Options::
15820* PowerPC Options::
15821* PRU Options::
15822* RISC-V Options::
15823* RL78 Options::
15824* RS/6000 and PowerPC Options::
15825* RX Options::
15826* S/390 and zSeries Options::
15827* Score Options::
15828* SH Options::
15829* Solaris 2 Options::
15830* SPARC Options::
15831* System V Options::
15832* TILE-Gx Options::
15833* TILEPro Options::
15834* V850 Options::
15835* VAX Options::
15836* Visium Options::
15837* VMS Options::
15838* VxWorks Options::
15839* x86 Options::
15840* x86 Windows Options::
15841* Xstormy16 Options::
15842* Xtensa Options::
15843* zSeries Options::
15844
15845
15846File: gcc.info,  Node: AArch64 Options,  Next: Adapteva Epiphany Options,  Up: Submodel Options
15847
158483.19.1 AArch64 Options
15849----------------------
15850
15851These options are defined for AArch64 implementations:
15852
15853'-mabi=NAME'
15854     Generate code for the specified data model.  Permissible values are
15855     'ilp32' for SysV-like data model where int, long int and pointers
15856     are 32 bits, and 'lp64' for SysV-like data model where int is 32
15857     bits, but long int and pointers are 64 bits.
15858
15859     The default depends on the specific target configuration.  Note
15860     that the LP64 and ILP32 ABIs are not link-compatible; you must
15861     compile your entire program with the same ABI, and link with a
15862     compatible set of libraries.
15863
15864'-mbig-endian'
15865     Generate big-endian code.  This is the default when GCC is
15866     configured for an 'aarch64_be-*-*' target.
15867
15868'-mgeneral-regs-only'
15869     Generate code which uses only the general-purpose registers.  This
15870     will prevent the compiler from using floating-point and Advanced
15871     SIMD registers but will not impose any restrictions on the
15872     assembler.
15873
15874'-mlittle-endian'
15875     Generate little-endian code.  This is the default when GCC is
15876     configured for an 'aarch64-*-*' but not an 'aarch64_be-*-*' target.
15877
15878'-mcmodel=tiny'
15879     Generate code for the tiny code model.  The program and its
15880     statically defined symbols must be within 1MB of each other.
15881     Programs can be statically or dynamically linked.
15882
15883'-mcmodel=small'
15884     Generate code for the small code model.  The program and its
15885     statically defined symbols must be within 4GB of each other.
15886     Programs can be statically or dynamically linked.  This is the
15887     default code model.
15888
15889'-mcmodel=large'
15890     Generate code for the large code model.  This makes no assumptions
15891     about addresses and sizes of sections.  Programs can be statically
15892     linked only.  The '-mcmodel=large' option is incompatible with
15893     '-mabi=ilp32', '-fpic' and '-fPIC'.
15894
15895'-mstrict-align'
15896'-mno-strict-align'
15897     Avoid or allow generating memory accesses that may not be aligned
15898     on a natural object boundary as described in the architecture
15899     specification.
15900
15901'-momit-leaf-frame-pointer'
15902'-mno-omit-leaf-frame-pointer'
15903     Omit or keep the frame pointer in leaf functions.  The former
15904     behavior is the default.
15905
15906'-mstack-protector-guard=GUARD'
15907'-mstack-protector-guard-reg=REG'
15908'-mstack-protector-guard-offset=OFFSET'
15909     Generate stack protection code using canary at GUARD.  Supported
15910     locations are 'global' for a global canary or 'sysreg' for a canary
15911     in an appropriate system register.
15912
15913     With the latter choice the options
15914     '-mstack-protector-guard-reg=REG' and
15915     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
15916     system register to use as base register for reading the canary, and
15917     from what offset from that base register.  There is no default
15918     register or offset as this is entirely for use within the Linux
15919     kernel.
15920
15921'-mstack-protector-guard=GUARD'
15922'-mstack-protector-guard-reg=REG'
15923'-mstack-protector-guard-offset=OFFSET'
15924     Generate stack protection code using canary at GUARD.  Supported
15925     locations are 'global' for a global canary or 'sysreg' for a canary
15926     in an appropriate system register.
15927
15928     With the latter choice the options
15929     '-mstack-protector-guard-reg=REG' and
15930     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
15931     system register to use as base register for reading the canary, and
15932     from what offset from that base register.  There is no default
15933     register or offset as this is entirely for use within the Linux
15934     kernel.
15935
15936'-mtls-dialect=desc'
15937     Use TLS descriptors as the thread-local storage mechanism for
15938     dynamic accesses of TLS variables.  This is the default.
15939
15940'-mtls-dialect=traditional'
15941     Use traditional TLS as the thread-local storage mechanism for
15942     dynamic accesses of TLS variables.
15943
15944'-mtls-size=SIZE'
15945     Specify bit size of immediate TLS offsets.  Valid values are 12,
15946     24, 32, 48.  This option requires binutils 2.26 or newer.
15947
15948'-mfix-cortex-a53-835769'
15949'-mno-fix-cortex-a53-835769'
15950     Enable or disable the workaround for the ARM Cortex-A53 erratum
15951     number 835769.  This involves inserting a NOP instruction between
15952     memory instructions and 64-bit integer multiply-accumulate
15953     instructions.
15954
15955'-mfix-cortex-a53-843419'
15956'-mno-fix-cortex-a53-843419'
15957     Enable or disable the workaround for the ARM Cortex-A53 erratum
15958     number 843419.  This erratum workaround is made at link time and
15959     this will only pass the corresponding flag to the linker.
15960
15961'-mlow-precision-recip-sqrt'
15962'-mno-low-precision-recip-sqrt'
15963     Enable or disable the reciprocal square root approximation.  This
15964     option only has an effect if '-ffast-math' or
15965     '-funsafe-math-optimizations' is used as well.  Enabling this
15966     reduces precision of reciprocal square root results to about 16
15967     bits for single precision and to 32 bits for double precision.
15968
15969'-mlow-precision-sqrt'
15970'-mno-low-precision-sqrt'
15971     Enable or disable the square root approximation.  This option only
15972     has an effect if '-ffast-math' or '-funsafe-math-optimizations' is
15973     used as well.  Enabling this reduces precision of square root
15974     results to about 16 bits for single precision and to 32 bits for
15975     double precision.  If enabled, it implies
15976     '-mlow-precision-recip-sqrt'.
15977
15978'-mlow-precision-div'
15979'-mno-low-precision-div'
15980     Enable or disable the division approximation.  This option only has
15981     an effect if '-ffast-math' or '-funsafe-math-optimizations' is used
15982     as well.  Enabling this reduces precision of division results to
15983     about 16 bits for single precision and to 32 bits for double
15984     precision.
15985
15986'-mtrack-speculation'
15987'-mno-track-speculation'
15988     Enable or disable generation of additional code to track
15989     speculative execution through conditional branches.  The tracking
15990     state can then be used by the compiler when expanding calls to
15991     '__builtin_speculation_safe_copy' to permit a more efficient code
15992     sequence to be generated.
15993
15994'-moutline-atomics'
15995'-mno-outline-atomics'
15996     Enable or disable calls to out-of-line helpers to implement atomic
15997     operations.  These helpers will, at runtime, determine if the LSE
15998     instructions from ARMv8.1-A can be used; if not, they will use the
15999     load/store-exclusive instructions that are present in the base
16000     ARMv8.0 ISA.
16001
16002     This option is only applicable when compiling for the base ARMv8.0
16003     instruction set.  If using a later revision, e.g.
16004     '-march=armv8.1-a' or '-march=armv8-a+lse', the ARMv8.1-Atomics
16005     instructions will be used directly.  The same applies when using
16006     '-mcpu=' when the selected cpu supports the 'lse' feature.  This
16007     option is on by default.
16008
16009'-march=NAME'
16010     Specify the name of the target architecture and, optionally, one or
16011     more feature modifiers.  This option has the form
16012     '-march=ARCH{+[no]FEATURE}*'.
16013
16014     The table below summarizes the permissible values for ARCH and the
16015     features that they enable by default:
16016
16017     ARCH value     Architecture   Includes by default
16018     --------------------------------------------------------------------------
16019     'armv8-a'      Armv8-A        '+fp', '+simd'
16020     'armv8.1-a'    Armv8.1-A      'armv8-a', '+crc', '+lse', '+rdma'
16021     'armv8.2-a'    Armv8.2-A      'armv8.1-a'
16022     'armv8.3-a'    Armv8.3-A      'armv8.2-a'
16023     'armv8.4-a'    Armv8.4-A      'armv8.3-a', '+fp16fml', '+dotprod'
16024     'armv8.5-a'    Armv8.5-A      'armv8.4-a', '+sb', '+ssbs', '+predres'
16025     'armv8.6-a'    Armv8.6-A      'armv8.5-a', '+bf16', '+i8mm'
16026
16027     The value 'native' is available on native AArch64 GNU/Linux and
16028     causes the compiler to pick the architecture of the host system.
16029     This option has no effect if the compiler is unable to recognize
16030     the architecture of the host system,
16031
16032     The permissible values for FEATURE are listed in the sub-section on
16033     *note '-march' and '-mcpu' Feature Modifiers:
16034     aarch64-feature-modifiers.  Where conflicting feature modifiers are
16035     specified, the right-most feature is used.
16036
16037     GCC uses NAME to determine what kind of instructions it can emit
16038     when generating assembly code.  If '-march' is specified without
16039     either of '-mtune' or '-mcpu' also being specified, the code is
16040     tuned to perform well across a range of target processors
16041     implementing the target architecture.
16042
16043'-mtune=NAME'
16044     Specify the name of the target processor for which GCC should tune
16045     the performance of the code.  Permissible values for this option
16046     are: 'generic', 'cortex-a35', 'cortex-a53', 'cortex-a55',
16047     'cortex-a57', 'cortex-a72', 'cortex-a73', 'cortex-a75',
16048     'cortex-a76', 'cortex-a76ae', 'cortex-a77', 'cortex-a65',
16049     'cortex-a65ae', 'cortex-a34', 'ares', 'exynos-m1', 'emag',
16050     'falkor', 'neoverse-e1', 'neoverse-n1', 'neoverse-n2',
16051     'neoverse-v1', 'neoverse-v2', 'neoverse-512tvb', 'qdf24xx',
16052     'saphira', 'phecda', 'xgene1', 'vulcan', 'octeontx', 'octeontx81',
16053     'octeontx83', 'octeontx2', 'octeontx2t98', 'octeontx2t96'
16054     'octeontx2t93', 'octeontx2f95', 'octeontx2f95n', 'octeontx2f95mm',
16055     'a64fx', 'thunderx', 'thunderxt88', 'thunderxt88p1', 'thunderxt81',
16056     'tsv110', 'thunderxt83', 'thunderx2t99', 'thunderx3t110', 'zeus',
16057     'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
16058     'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53',
16059     'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55', 'ampere1',
16060     'ampere1a', 'native'.
16061
16062     The values 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
16063     'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53',
16064     'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55' specify that GCC
16065     should tune for a big.LITTLE system.
16066
16067     The value 'neoverse-512tvb' specifies that GCC should tune for
16068     Neoverse cores that (a) implement SVE and (b) have a total vector
16069     bandwidth of 512 bits per cycle.  In other words, the option tells
16070     GCC to tune for Neoverse cores that can execute 4 128-bit Advanced
16071     SIMD arithmetic instructions a cycle and that can execute an
16072     equivalent number of SVE arithmetic instructions per cycle (2 for
16073     256-bit SVE, 4 for 128-bit SVE). This is more general than tuning
16074     for a specific core like Neoverse V1 but is more specific than the
16075     default tuning described below.
16076
16077     Additionally on native AArch64 GNU/Linux systems the value 'native'
16078     tunes performance to the host system.  This option has no effect if
16079     the compiler is unable to recognize the processor of the host
16080     system.
16081
16082     Where none of '-mtune=', '-mcpu=' or '-march=' are specified, the
16083     code is tuned to perform well across a range of target processors.
16084
16085     This option cannot be suffixed by feature modifiers.
16086
16087'-mcpu=NAME'
16088     Specify the name of the target processor, optionally suffixed by
16089     one or more feature modifiers.  This option has the form
16090     '-mcpu=CPU{+[no]FEATURE}*', where the permissible values for CPU
16091     are the same as those available for '-mtune'.  The permissible
16092     values for FEATURE are documented in the sub-section on *note
16093     '-march' and '-mcpu' Feature Modifiers: aarch64-feature-modifiers.
16094     Where conflicting feature modifiers are specified, the right-most
16095     feature is used.
16096
16097     GCC uses NAME to determine what kind of instructions it can emit
16098     when generating assembly code (as if by '-march') and to determine
16099     the target processor for which to tune for performance (as if by
16100     '-mtune').  Where this option is used in conjunction with '-march'
16101     or '-mtune', those options take precedence over the appropriate
16102     part of this option.
16103
16104     '-mcpu=neoverse-512tvb' is special in that it does not refer to a
16105     specific core, but instead refers to all Neoverse cores that (a)
16106     implement SVE and (b) have a total vector bandwidth of 512 bits a
16107     cycle.  Unless overridden by '-march', '-mcpu=neoverse-512tvb'
16108     generates code that can run on a Neoverse V1 core, since Neoverse
16109     V1 is the first Neoverse core with these properties.  Unless
16110     overridden by '-mtune', '-mcpu=neoverse-512tvb' tunes code in the
16111     same way as for '-mtune=neoverse-512tvb'.
16112
16113'-moverride=STRING'
16114     Override tuning decisions made by the back-end in response to a
16115     '-mtune=' switch.  The syntax, semantics, and accepted values for
16116     STRING in this option are not guaranteed to be consistent across
16117     releases.
16118
16119     This option is only intended to be useful when developing GCC.
16120
16121'-mverbose-cost-dump'
16122     Enable verbose cost model dumping in the debug dump files.  This
16123     option is provided for use in debugging the compiler.
16124
16125'-mpc-relative-literal-loads'
16126'-mno-pc-relative-literal-loads'
16127     Enable or disable PC-relative literal loads.  With this option
16128     literal pools are accessed using a single instruction and emitted
16129     after each function.  This limits the maximum size of functions to
16130     1MB. This is enabled by default for '-mcmodel=tiny'.
16131
16132'-msign-return-address=SCOPE'
16133     Select the function scope on which return address signing will be
16134     applied.  Permissible values are 'none', which disables return
16135     address signing, 'non-leaf', which enables pointer signing for
16136     functions which are not leaf functions, and 'all', which enables
16137     pointer signing for all functions.  The default value is 'none'.
16138     This option has been deprecated by -mbranch-protection.
16139
16140'-mbranch-protection=NONE|STANDARD|PAC-RET[+LEAF+B-KEY]|BTI'
16141     Select the branch protection features to use.  'none' is the
16142     default and turns off all types of branch protection.  'standard'
16143     turns on all types of branch protection features.  If a feature has
16144     additional tuning options, then 'standard' sets it to its standard
16145     level.  'pac-ret[+LEAF]' turns on return address signing to its
16146     standard level: signing functions that save the return address to
16147     memory (non-leaf functions will practically always do this) using
16148     the a-key.  The optional argument 'leaf' can be used to extend the
16149     signing to include leaf functions.  The optional argument 'b-key'
16150     can be used to sign the functions with the B-key instead of the
16151     A-key.  'bti' turns on branch target identification mechanism.
16152
16153'-mharden-sls=OPTS'
16154     Enable compiler hardening against straight line speculation (SLS).
16155     OPTS is a comma-separated list of the following options:
16156     'retbr'
16157     'blr'
16158     In addition, '-mharden-sls=all' enables all SLS hardening while
16159     '-mharden-sls=none' disables all SLS hardening.
16160
16161'-msve-vector-bits=BITS'
16162     Specify the number of bits in an SVE vector register.  This option
16163     only has an effect when SVE is enabled.
16164
16165     GCC supports two forms of SVE code generation: "vector-length
16166     agnostic" output that works with any size of vector register and
16167     "vector-length specific" output that allows GCC to make assumptions
16168     about the vector length when it is useful for optimization reasons.
16169     The possible values of 'bits' are: 'scalable', '128', '256', '512',
16170     '1024' and '2048'.  Specifying 'scalable' selects vector-length
16171     agnostic output.  At present '-msve-vector-bits=128' also generates
16172     vector-length agnostic output for big-endian targets.  All other
16173     values generate vector-length specific code.  The behavior of these
16174     values may change in future releases and no value except 'scalable'
16175     should be relied on for producing code that is portable across
16176     different hardware SVE vector lengths.
16177
16178     The default is '-msve-vector-bits=scalable', which produces
16179     vector-length agnostic code.
16180
161813.19.1.1 '-march' and '-mcpu' Feature Modifiers
16182...............................................
16183
16184Feature modifiers used with '-march' and '-mcpu' can be any of the
16185following and their inverses 'noFEATURE':
16186
16187'crc'
16188     Enable CRC extension.  This is on by default for
16189     '-march=armv8.1-a'.
16190'crypto'
16191     Enable Crypto extension.  This also enables Advanced SIMD and
16192     floating-point instructions.
16193'fp'
16194     Enable floating-point instructions.  This is on by default for all
16195     possible values for options '-march' and '-mcpu'.
16196'simd'
16197     Enable Advanced SIMD instructions.  This also enables
16198     floating-point instructions.  This is on by default for all
16199     possible values for options '-march' and '-mcpu'.
16200'sve'
16201     Enable Scalable Vector Extension instructions.  This also enables
16202     Advanced SIMD and floating-point instructions.
16203'lse'
16204     Enable Large System Extension instructions.  This is on by default
16205     for '-march=armv8.1-a'.
16206'rdma'
16207     Enable Round Double Multiply Accumulate instructions.  This is on
16208     by default for '-march=armv8.1-a'.
16209'fp16'
16210     Enable FP16 extension.  This also enables floating-point
16211     instructions.
16212'fp16fml'
16213     Enable FP16 fmla extension.  This also enables FP16 extensions and
16214     floating-point instructions.  This option is enabled by default for
16215     '-march=armv8.4-a'.  Use of this option with architectures prior to
16216     Armv8.2-A is not supported.
16217
16218'rcpc'
16219     Enable the RcPc extension.  This does not change code generation
16220     from GCC, but is passed on to the assembler, enabling inline asm
16221     statements to use instructions from the RcPc extension.
16222'dotprod'
16223     Enable the Dot Product extension.  This also enables Advanced SIMD
16224     instructions.
16225'aes'
16226     Enable the Armv8-a aes and pmull crypto extension.  This also
16227     enables Advanced SIMD instructions.
16228'sha2'
16229     Enable the Armv8-a sha2 crypto extension.  This also enables
16230     Advanced SIMD instructions.
16231'sha3'
16232     Enable the sha512 and sha3 crypto extension.  This also enables
16233     Advanced SIMD instructions.  Use of this option with architectures
16234     prior to Armv8.2-A is not supported.
16235'sm4'
16236     Enable the sm3 and sm4 crypto extension.  This also enables
16237     Advanced SIMD instructions.  Use of this option with architectures
16238     prior to Armv8.2-A is not supported.
16239'profile'
16240     Enable the Statistical Profiling extension.  This option is only to
16241     enable the extension at the assembler level and does not affect
16242     code generation.
16243'rng'
16244     Enable the Armv8.5-a Random Number instructions.  This option is
16245     only to enable the extension at the assembler level and does not
16246     affect code generation.
16247'memtag'
16248     Enable the Armv8.5-a Memory Tagging Extensions.  Use of this option
16249     with architectures prior to Armv8.5-A is not supported.
16250'sb'
16251     Enable the Armv8-a Speculation Barrier instruction.  This option is
16252     only to enable the extension at the assembler level and does not
16253     affect code generation.  This option is enabled by default for
16254     '-march=armv8.5-a'.
16255'ssbs'
16256     Enable the Armv8-a Speculative Store Bypass Safe instruction.  This
16257     option is only to enable the extension at the assembler level and
16258     does not affect code generation.  This option is enabled by default
16259     for '-march=armv8.5-a'.
16260'predres'
16261     Enable the Armv8-a Execution and Data Prediction Restriction
16262     instructions.  This option is only to enable the extension at the
16263     assembler level and does not affect code generation.  This option
16264     is enabled by default for '-march=armv8.5-a'.
16265'sve2'
16266     Enable the Armv8-a Scalable Vector Extension 2.  This also enables
16267     SVE instructions.
16268'sve2-bitperm'
16269     Enable SVE2 bitperm instructions.  This also enables SVE2
16270     instructions.
16271'sve2-sm4'
16272     Enable SVE2 sm4 instructions.  This also enables SVE2 instructions.
16273'sve2-aes'
16274     Enable SVE2 aes instructions.  This also enables SVE2 instructions.
16275'sve2-sha3'
16276     Enable SVE2 sha3 instructions.  This also enables SVE2
16277     instructions.
16278'tme'
16279     Enable the Transactional Memory Extension.
16280'i8mm'
16281     Enable 8-bit Integer Matrix Multiply instructions.  This also
16282     enables Advanced SIMD and floating-point instructions.  This option
16283     is enabled by default for '-march=armv8.6-a'.  Use of this option
16284     with architectures prior to Armv8.2-A is not supported.
16285'f32mm'
16286     Enable 32-bit Floating point Matrix Multiply instructions.  This
16287     also enables SVE instructions.  Use of this option with
16288     architectures prior to Armv8.2-A is not supported.
16289'f64mm'
16290     Enable 64-bit Floating point Matrix Multiply instructions.  This
16291     also enables SVE instructions.  Use of this option with
16292     architectures prior to Armv8.2-A is not supported.
16293'bf16'
16294     Enable brain half-precision floating-point instructions.  This also
16295     enables Advanced SIMD and floating-point instructions.  This option
16296     is enabled by default for '-march=armv8.6-a'.  Use of this option
16297     with architectures prior to Armv8.2-A is not supported.
16298
16299 Feature 'crypto' implies 'aes', 'sha2', and 'simd', which implies 'fp'.
16300Conversely, 'nofp' implies 'nosimd', which implies 'nocrypto', 'noaes'
16301and 'nosha2'.
16302
16303
16304File: gcc.info,  Node: Adapteva Epiphany Options,  Next: AMD GCN Options,  Prev: AArch64 Options,  Up: Submodel Options
16305
163063.19.2 Adapteva Epiphany Options
16307--------------------------------
16308
16309These '-m' options are defined for Adapteva Epiphany:
16310
16311'-mhalf-reg-file'
16312     Don't allocate any register in the range 'r32'...'r63'.  That
16313     allows code to run on hardware variants that lack these registers.
16314
16315'-mprefer-short-insn-regs'
16316     Preferentially allocate registers that allow short instruction
16317     generation.  This can result in increased instruction count, so
16318     this may either reduce or increase overall code size.
16319
16320'-mbranch-cost=NUM'
16321     Set the cost of branches to roughly NUM "simple" instructions.
16322     This cost is only a heuristic and is not guaranteed to produce
16323     consistent results across releases.
16324
16325'-mcmove'
16326     Enable the generation of conditional moves.
16327
16328'-mnops=NUM'
16329     Emit NUM NOPs before every other generated instruction.
16330
16331'-mno-soft-cmpsf'
16332     For single-precision floating-point comparisons, emit an 'fsub'
16333     instruction and test the flags.  This is faster than a software
16334     comparison, but can get incorrect results in the presence of NaNs,
16335     or when two different small numbers are compared such that their
16336     difference is calculated as zero.  The default is '-msoft-cmpsf',
16337     which uses slower, but IEEE-compliant, software comparisons.
16338
16339'-mstack-offset=NUM'
16340     Set the offset between the top of the stack and the stack pointer.
16341     E.g., a value of 8 means that the eight bytes in the range
16342     'sp+0...sp+7' can be used by leaf functions without stack
16343     allocation.  Values other than '8' or '16' are untested and
16344     unlikely to work.  Note also that this option changes the ABI;
16345     compiling a program with a different stack offset than the
16346     libraries have been compiled with generally does not work.  This
16347     option can be useful if you want to evaluate if a different stack
16348     offset would give you better code, but to actually use a different
16349     stack offset to build working programs, it is recommended to
16350     configure the toolchain with the appropriate
16351     '--with-stack-offset=NUM' option.
16352
16353'-mno-round-nearest'
16354     Make the scheduler assume that the rounding mode has been set to
16355     truncating.  The default is '-mround-nearest'.
16356
16357'-mlong-calls'
16358     If not otherwise specified by an attribute, assume all calls might
16359     be beyond the offset range of the 'b' / 'bl' instructions, and
16360     therefore load the function address into a register before
16361     performing a (otherwise direct) call.  This is the default.
16362
16363'-mshort-calls'
16364     If not otherwise specified by an attribute, assume all direct calls
16365     are in the range of the 'b' / 'bl' instructions, so use these
16366     instructions for direct calls.  The default is '-mlong-calls'.
16367
16368'-msmall16'
16369     Assume addresses can be loaded as 16-bit unsigned values.  This
16370     does not apply to function addresses for which '-mlong-calls'
16371     semantics are in effect.
16372
16373'-mfp-mode=MODE'
16374     Set the prevailing mode of the floating-point unit.  This
16375     determines the floating-point mode that is provided and expected at
16376     function call and return time.  Making this mode match the mode you
16377     predominantly need at function start can make your programs smaller
16378     and faster by avoiding unnecessary mode switches.
16379
16380     MODE can be set to one the following values:
16381
16382     'caller'
16383          Any mode at function entry is valid, and retained or restored
16384          when the function returns, and when it calls other functions.
16385          This mode is useful for compiling libraries or other
16386          compilation units you might want to incorporate into different
16387          programs with different prevailing FPU modes, and the
16388          convenience of being able to use a single object file
16389          outweighs the size and speed overhead for any extra mode
16390          switching that might be needed, compared with what would be
16391          needed with a more specific choice of prevailing FPU mode.
16392
16393     'truncate'
16394          This is the mode used for floating-point calculations with
16395          truncating (i.e. round towards zero) rounding mode.  That
16396          includes conversion from floating point to integer.
16397
16398     'round-nearest'
16399          This is the mode used for floating-point calculations with
16400          round-to-nearest-or-even rounding mode.
16401
16402     'int'
16403          This is the mode used to perform integer calculations in the
16404          FPU, e.g. integer multiply, or integer
16405          multiply-and-accumulate.
16406
16407     The default is '-mfp-mode=caller'
16408
16409'-mno-split-lohi'
16410'-mno-postinc'
16411'-mno-postmodify'
16412     Code generation tweaks that disable, respectively, splitting of
16413     32-bit loads, generation of post-increment addresses, and
16414     generation of post-modify addresses.  The defaults are
16415     'msplit-lohi', '-mpost-inc', and '-mpost-modify'.
16416
16417'-mnovect-double'
16418     Change the preferred SIMD mode to SImode.  The default is
16419     '-mvect-double', which uses DImode as preferred SIMD mode.
16420
16421'-max-vect-align=NUM'
16422     The maximum alignment for SIMD vector mode types.  NUM may be 4 or
16423     8.  The default is 8.  Note that this is an ABI change, even though
16424     many library function interfaces are unaffected if they don't use
16425     SIMD vector modes in places that affect size and/or alignment of
16426     relevant types.
16427
16428'-msplit-vecmove-early'
16429     Split vector moves into single word moves before reload.  In theory
16430     this can give better register allocation, but so far the reverse
16431     seems to be generally the case.
16432
16433'-m1reg-REG'
16434     Specify a register to hold the constant -1, which makes loading
16435     small negative constants and certain bitmasks faster.  Allowable
16436     values for REG are 'r43' and 'r63', which specify use of that
16437     register as a fixed register, and 'none', which means that no
16438     register is used for this purpose.  The default is '-m1reg-none'.
16439
16440
16441File: gcc.info,  Node: AMD GCN Options,  Next: ARC Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
16442
164433.19.3 AMD GCN Options
16444----------------------
16445
16446These options are defined specifically for the AMD GCN port.
16447
16448'-march=GPU'
16449'-mtune=GPU'
16450     Set architecture type or tuning for GPU.  Supported values for GPU
16451     are
16452
16453     'fiji'
16454          Compile for GCN3 Fiji devices (gfx803).
16455
16456     'gfx900'
16457          Compile for GCN5 Vega 10 devices (gfx900).
16458
16459     'gfx906'
16460          Compile for GCN5 Vega 20 devices (gfx906).
16461
16462'-mstack-size=BYTES'
16463     Specify how many BYTES of stack space will be requested for each
16464     GPU thread (wave-front).  Beware that there may be many threads and
16465     limited memory available.  The size of the stack allocation may
16466     also have an impact on run-time performance.  The default is 32KB
16467     when using OpenACC or OpenMP, and 1MB otherwise.
16468
16469
16470File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Prev: AMD GCN Options,  Up: Submodel Options
16471
164723.19.4 ARC Options
16473------------------
16474
16475The following options control the architecture variant for which code is
16476being compiled:
16477
16478'-mbarrel-shifter'
16479     Generate instructions supported by barrel shifter.  This is the
16480     default unless '-mcpu=ARC601' or '-mcpu=ARCEM' is in effect.
16481
16482'-mjli-always'
16483     Force to call a function using jli_s instruction.  This option is
16484     valid only for ARCv2 architecture.
16485
16486'-mcpu=CPU'
16487     Set architecture type, register usage, and instruction scheduling
16488     parameters for CPU.  There are also shortcut alias options
16489     available for backward compatibility and convenience.  Supported
16490     values for CPU are
16491
16492     'arc600'
16493          Compile for ARC600.  Aliases: '-mA6', '-mARC600'.
16494
16495     'arc601'
16496          Compile for ARC601.  Alias: '-mARC601'.
16497
16498     'arc700'
16499          Compile for ARC700.  Aliases: '-mA7', '-mARC700'.  This is the
16500          default when configured with '--with-cpu=arc700'.
16501
16502     'arcem'
16503          Compile for ARC EM.
16504
16505     'archs'
16506          Compile for ARC HS.
16507
16508     'em'
16509          Compile for ARC EM CPU with no hardware extensions.
16510
16511     'em4'
16512          Compile for ARC EM4 CPU.
16513
16514     'em4_dmips'
16515          Compile for ARC EM4 DMIPS CPU.
16516
16517     'em4_fpus'
16518          Compile for ARC EM4 DMIPS CPU with the single-precision
16519          floating-point extension.
16520
16521     'em4_fpuda'
16522          Compile for ARC EM4 DMIPS CPU with single-precision
16523          floating-point and double assist instructions.
16524
16525     'hs'
16526          Compile for ARC HS CPU with no hardware extensions except the
16527          atomic instructions.
16528
16529     'hs34'
16530          Compile for ARC HS34 CPU.
16531
16532     'hs38'
16533          Compile for ARC HS38 CPU.
16534
16535     'hs38_linux'
16536          Compile for ARC HS38 CPU with all hardware extensions on.
16537
16538     'arc600_norm'
16539          Compile for ARC 600 CPU with 'norm' instructions enabled.
16540
16541     'arc600_mul32x16'
16542          Compile for ARC 600 CPU with 'norm' and 32x16-bit multiply
16543          instructions enabled.
16544
16545     'arc600_mul64'
16546          Compile for ARC 600 CPU with 'norm' and 'mul64'-family
16547          instructions enabled.
16548
16549     'arc601_norm'
16550          Compile for ARC 601 CPU with 'norm' instructions enabled.
16551
16552     'arc601_mul32x16'
16553          Compile for ARC 601 CPU with 'norm' and 32x16-bit multiply
16554          instructions enabled.
16555
16556     'arc601_mul64'
16557          Compile for ARC 601 CPU with 'norm' and 'mul64'-family
16558          instructions enabled.
16559
16560     'nps400'
16561          Compile for ARC 700 on NPS400 chip.
16562
16563     'em_mini'
16564          Compile for ARC EM minimalist configuration featuring reduced
16565          register set.
16566
16567'-mdpfp'
16568'-mdpfp-compact'
16569     Generate double-precision FPX instructions, tuned for the compact
16570     implementation.
16571
16572'-mdpfp-fast'
16573     Generate double-precision FPX instructions, tuned for the fast
16574     implementation.
16575
16576'-mno-dpfp-lrsr'
16577     Disable 'lr' and 'sr' instructions from using FPX extension aux
16578     registers.
16579
16580'-mea'
16581     Generate extended arithmetic instructions.  Currently only 'divaw',
16582     'adds', 'subs', and 'sat16' are supported.  Only valid for
16583     '-mcpu=ARC700'.
16584
16585'-mno-mpy'
16586     Do not generate 'mpy'-family instructions for ARC700.  This option
16587     is deprecated.
16588
16589'-mmul32x16'
16590     Generate 32x16-bit multiply and multiply-accumulate instructions.
16591
16592'-mmul64'
16593     Generate 'mul64' and 'mulu64' instructions.  Only valid for
16594     '-mcpu=ARC600'.
16595
16596'-mnorm'
16597     Generate 'norm' instructions.  This is the default if
16598     '-mcpu=ARC700' is in effect.
16599
16600'-mspfp'
16601'-mspfp-compact'
16602     Generate single-precision FPX instructions, tuned for the compact
16603     implementation.
16604
16605'-mspfp-fast'
16606     Generate single-precision FPX instructions, tuned for the fast
16607     implementation.
16608
16609'-msimd'
16610     Enable generation of ARC SIMD instructions via target-specific
16611     builtins.  Only valid for '-mcpu=ARC700'.
16612
16613'-msoft-float'
16614     This option ignored; it is provided for compatibility purposes
16615     only.  Software floating-point code is emitted by default, and this
16616     default can overridden by FPX options; '-mspfp', '-mspfp-compact',
16617     or '-mspfp-fast' for single precision, and '-mdpfp',
16618     '-mdpfp-compact', or '-mdpfp-fast' for double precision.
16619
16620'-mswap'
16621     Generate 'swap' instructions.
16622
16623'-matomic'
16624     This enables use of the locked load/store conditional extension to
16625     implement atomic memory built-in functions.  Not available for ARC
16626     6xx or ARC EM cores.
16627
16628'-mdiv-rem'
16629     Enable 'div' and 'rem' instructions for ARCv2 cores.
16630
16631'-mcode-density'
16632     Enable code density instructions for ARC EM. This option is on by
16633     default for ARC HS.
16634
16635'-mll64'
16636     Enable double load/store operations for ARC HS cores.
16637
16638'-mtp-regno=REGNO'
16639     Specify thread pointer register number.
16640
16641'-mmpy-option=MULTO'
16642     Compile ARCv2 code with a multiplier design option.  You can
16643     specify the option using either a string or numeric value for
16644     MULTO.  'wlh1' is the default value.  The recognized values are:
16645
16646     '0'
16647     'none'
16648          No multiplier available.
16649
16650     '1'
16651     'w'
16652          16x16 multiplier, fully pipelined.  The following instructions
16653          are enabled: 'mpyw' and 'mpyuw'.
16654
16655     '2'
16656     'wlh1'
16657          32x32 multiplier, fully pipelined (1 stage).  The following
16658          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
16659          'mpymu', and 'mpy_s'.
16660
16661     '3'
16662     'wlh2'
16663          32x32 multiplier, fully pipelined (2 stages).  The following
16664          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
16665          'mpymu', and 'mpy_s'.
16666
16667     '4'
16668     'wlh3'
16669          Two 16x16 multipliers, blocking, sequential.  The following
16670          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
16671          'mpymu', and 'mpy_s'.
16672
16673     '5'
16674     'wlh4'
16675          One 16x16 multiplier, blocking, sequential.  The following
16676          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
16677          'mpymu', and 'mpy_s'.
16678
16679     '6'
16680     'wlh5'
16681          One 32x4 multiplier, blocking, sequential.  The following
16682          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
16683          'mpymu', and 'mpy_s'.
16684
16685     '7'
16686     'plus_dmpy'
16687          ARC HS SIMD support.
16688
16689     '8'
16690     'plus_macd'
16691          ARC HS SIMD support.
16692
16693     '9'
16694     'plus_qmacw'
16695          ARC HS SIMD support.
16696
16697     This option is only available for ARCv2 cores.
16698
16699'-mfpu=FPU'
16700     Enables support for specific floating-point hardware extensions for
16701     ARCv2 cores.  Supported values for FPU are:
16702
16703     'fpus'
16704          Enables support for single-precision floating-point hardware
16705          extensions.
16706
16707     'fpud'
16708          Enables support for double-precision floating-point hardware
16709          extensions.  The single-precision floating-point extension is
16710          also enabled.  Not available for ARC EM.
16711
16712     'fpuda'
16713          Enables support for double-precision floating-point hardware
16714          extensions using double-precision assist instructions.  The
16715          single-precision floating-point extension is also enabled.
16716          This option is only available for ARC EM.
16717
16718     'fpuda_div'
16719          Enables support for double-precision floating-point hardware
16720          extensions using double-precision assist instructions.  The
16721          single-precision floating-point, square-root, and divide
16722          extensions are also enabled.  This option is only available
16723          for ARC EM.
16724
16725     'fpuda_fma'
16726          Enables support for double-precision floating-point hardware
16727          extensions using double-precision assist instructions.  The
16728          single-precision floating-point and fused multiply and add
16729          hardware extensions are also enabled.  This option is only
16730          available for ARC EM.
16731
16732     'fpuda_all'
16733          Enables support for double-precision floating-point hardware
16734          extensions using double-precision assist instructions.  All
16735          single-precision floating-point hardware extensions are also
16736          enabled.  This option is only available for ARC EM.
16737
16738     'fpus_div'
16739          Enables support for single-precision floating-point,
16740          square-root and divide hardware extensions.
16741
16742     'fpud_div'
16743          Enables support for double-precision floating-point,
16744          square-root and divide hardware extensions.  This option
16745          includes option 'fpus_div'.  Not available for ARC EM.
16746
16747     'fpus_fma'
16748          Enables support for single-precision floating-point and fused
16749          multiply and add hardware extensions.
16750
16751     'fpud_fma'
16752          Enables support for double-precision floating-point and fused
16753          multiply and add hardware extensions.  This option includes
16754          option 'fpus_fma'.  Not available for ARC EM.
16755
16756     'fpus_all'
16757          Enables support for all single-precision floating-point
16758          hardware extensions.
16759
16760     'fpud_all'
16761          Enables support for all single- and double-precision
16762          floating-point hardware extensions.  Not available for ARC EM.
16763
16764'-mirq-ctrl-saved=REGISTER-RANGE, BLINK, LP_COUNT'
16765     Specifies general-purposes registers that the processor
16766     automatically saves/restores on interrupt entry and exit.
16767     REGISTER-RANGE is specified as two registers separated by a dash.
16768     The register range always starts with 'r0', the upper limit is 'fp'
16769     register.  BLINK and LP_COUNT are optional.  This option is only
16770     valid for ARC EM and ARC HS cores.
16771
16772'-mrgf-banked-regs=NUMBER'
16773     Specifies the number of registers replicated in second register
16774     bank on entry to fast interrupt.  Fast interrupts are interrupts
16775     with the highest priority level P0.  These interrupts save only PC
16776     and STATUS32 registers to avoid memory transactions during
16777     interrupt entry and exit sequences.  Use this option when you are
16778     using fast interrupts in an ARC V2 family processor.  Permitted
16779     values are 4, 8, 16, and 32.
16780
16781'-mlpc-width=WIDTH'
16782     Specify the width of the 'lp_count' register.  Valid values for
16783     WIDTH are 8, 16, 20, 24, 28 and 32 bits.  The default width is
16784     fixed to 32 bits.  If the width is less than 32, the compiler does
16785     not attempt to transform loops in your program to use the
16786     zero-delay loop mechanism unless it is known that the 'lp_count'
16787     register can hold the required loop-counter value.  Depending on
16788     the width specified, the compiler and run-time library might
16789     continue to use the loop mechanism for various needs.  This option
16790     defines macro '__ARC_LPC_WIDTH__' with the value of WIDTH.
16791
16792'-mrf16'
16793     This option instructs the compiler to generate code for a 16-entry
16794     register file.  This option defines the '__ARC_RF16__' preprocessor
16795     macro.
16796
16797'-mbranch-index'
16798     Enable use of 'bi' or 'bih' instructions to implement jump tables.
16799
16800 The following options are passed through to the assembler, and also
16801define preprocessor macro symbols.
16802
16803'-mdsp-packa'
16804     Passed down to the assembler to enable the DSP Pack A extensions.
16805     Also sets the preprocessor symbol '__Xdsp_packa'.  This option is
16806     deprecated.
16807
16808'-mdvbf'
16809     Passed down to the assembler to enable the dual Viterbi butterfly
16810     extension.  Also sets the preprocessor symbol '__Xdvbf'.  This
16811     option is deprecated.
16812
16813'-mlock'
16814     Passed down to the assembler to enable the locked load/store
16815     conditional extension.  Also sets the preprocessor symbol
16816     '__Xlock'.
16817
16818'-mmac-d16'
16819     Passed down to the assembler.  Also sets the preprocessor symbol
16820     '__Xxmac_d16'.  This option is deprecated.
16821
16822'-mmac-24'
16823     Passed down to the assembler.  Also sets the preprocessor symbol
16824     '__Xxmac_24'.  This option is deprecated.
16825
16826'-mrtsc'
16827     Passed down to the assembler to enable the 64-bit time-stamp
16828     counter extension instruction.  Also sets the preprocessor symbol
16829     '__Xrtsc'.  This option is deprecated.
16830
16831'-mswape'
16832     Passed down to the assembler to enable the swap byte ordering
16833     extension instruction.  Also sets the preprocessor symbol
16834     '__Xswape'.
16835
16836'-mtelephony'
16837     Passed down to the assembler to enable dual- and single-operand
16838     instructions for telephony.  Also sets the preprocessor symbol
16839     '__Xtelephony'.  This option is deprecated.
16840
16841'-mxy'
16842     Passed down to the assembler to enable the XY memory extension.
16843     Also sets the preprocessor symbol '__Xxy'.
16844
16845 The following options control how the assembly code is annotated:
16846
16847'-misize'
16848     Annotate assembler instructions with estimated addresses.
16849
16850'-mannotate-align'
16851     Explain what alignment considerations lead to the decision to make
16852     an instruction short or long.
16853
16854 The following options are passed through to the linker:
16855
16856'-marclinux'
16857     Passed through to the linker, to specify use of the 'arclinux'
16858     emulation.  This option is enabled by default in tool chains built
16859     for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
16860     profiling is not requested.
16861
16862'-marclinux_prof'
16863     Passed through to the linker, to specify use of the 'arclinux_prof'
16864     emulation.  This option is enabled by default in tool chains built
16865     for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
16866     profiling is requested.
16867
16868 The following options control the semantics of generated code:
16869
16870'-mlong-calls'
16871     Generate calls as register indirect calls, thus providing access to
16872     the full 32-bit address range.
16873
16874'-mmedium-calls'
16875     Don't use less than 25-bit addressing range for calls, which is the
16876     offset available for an unconditional branch-and-link instruction.
16877     Conditional execution of function calls is suppressed, to allow use
16878     of the 25-bit range, rather than the 21-bit range with conditional
16879     branch-and-link.  This is the default for tool chains built for
16880     'arc-linux-uclibc' and 'arceb-linux-uclibc' targets.
16881
16882'-G NUM'
16883     Put definitions of externally-visible data in a small data section
16884     if that data is no bigger than NUM bytes.  The default value of NUM
16885     is 4 for any ARC configuration, or 8 when we have double load/store
16886     operations.
16887
16888'-mno-sdata'
16889     Do not generate sdata references.  This is the default for tool
16890     chains built for 'arc-linux-uclibc' and 'arceb-linux-uclibc'
16891     targets.
16892
16893'-mvolatile-cache'
16894     Use ordinarily cached memory accesses for volatile references.
16895     This is the default.
16896
16897'-mno-volatile-cache'
16898     Enable cache bypass for volatile references.
16899
16900 The following options fine tune code generation:
16901'-malign-call'
16902     Do alignment optimizations for call instructions.
16903
16904'-mauto-modify-reg'
16905     Enable the use of pre/post modify with register displacement.
16906
16907'-mbbit-peephole'
16908     Enable bbit peephole2.
16909
16910'-mno-brcc'
16911     This option disables a target-specific pass in 'arc_reorg' to
16912     generate compare-and-branch ('brCC') instructions.  It has no
16913     effect on generation of these instructions driven by the combiner
16914     pass.
16915
16916'-mcase-vector-pcrel'
16917     Use PC-relative switch case tables to enable case table shortening.
16918     This is the default for '-Os'.
16919
16920'-mcompact-casesi'
16921     Enable compact 'casesi' pattern.  This is the default for '-Os',
16922     and only available for ARCv1 cores.  This option is deprecated.
16923
16924'-mno-cond-exec'
16925     Disable the ARCompact-specific pass to generate conditional
16926     execution instructions.
16927
16928     Due to delay slot scheduling and interactions between operand
16929     numbers, literal sizes, instruction lengths, and the support for
16930     conditional execution, the target-independent pass to generate
16931     conditional execution is often lacking, so the ARC port has kept a
16932     special pass around that tries to find more conditional execution
16933     generation opportunities after register allocation, branch
16934     shortening, and delay slot scheduling have been done.  This pass
16935     generally, but not always, improves performance and code size, at
16936     the cost of extra compilation time, which is why there is an option
16937     to switch it off.  If you have a problem with call instructions
16938     exceeding their allowable offset range because they are
16939     conditionalized, you should consider using '-mmedium-calls'
16940     instead.
16941
16942'-mearly-cbranchsi'
16943     Enable pre-reload use of the 'cbranchsi' pattern.
16944
16945'-mexpand-adddi'
16946     Expand 'adddi3' and 'subdi3' at RTL generation time into 'add.f',
16947     'adc' etc.  This option is deprecated.
16948
16949'-mindexed-loads'
16950     Enable the use of indexed loads.  This can be problematic because
16951     some optimizers then assume that indexed stores exist, which is not
16952     the case.
16953
16954'-mlra'
16955     Enable Local Register Allocation.  This is still experimental for
16956     ARC, so by default the compiler uses standard reload (i.e.
16957     '-mno-lra').
16958
16959'-mlra-priority-none'
16960     Don't indicate any priority for target registers.
16961
16962'-mlra-priority-compact'
16963     Indicate target register priority for r0..r3 / r12..r15.
16964
16965'-mlra-priority-noncompact'
16966     Reduce target register priority for r0..r3 / r12..r15.
16967
16968'-mmillicode'
16969     When optimizing for size (using '-Os'), prologues and epilogues
16970     that have to save or restore a large number of registers are often
16971     shortened by using call to a special function in libgcc; this is
16972     referred to as a _millicode_ call.  As these calls can pose
16973     performance issues, and/or cause linking issues when linking in a
16974     nonstandard way, this option is provided to turn on or off
16975     millicode call generation.
16976
16977'-mcode-density-frame'
16978     This option enable the compiler to emit 'enter' and 'leave'
16979     instructions.  These instructions are only valid for CPUs with
16980     code-density feature.
16981
16982'-mmixed-code'
16983     Tweak register allocation to help 16-bit instruction generation.
16984     This generally has the effect of decreasing the average instruction
16985     size while increasing the instruction count.
16986
16987'-mq-class'
16988     Ths option is deprecated.  Enable 'q' instruction alternatives.
16989     This is the default for '-Os'.
16990
16991'-mRcq'
16992     Enable 'Rcq' constraint handling.  Most short code generation
16993     depends on this.  This is the default.
16994
16995'-mRcw'
16996     Enable 'Rcw' constraint handling.  Most ccfsm condexec mostly
16997     depends on this.  This is the default.
16998
16999'-msize-level=LEVEL'
17000     Fine-tune size optimization with regards to instruction lengths and
17001     alignment.  The recognized values for LEVEL are:
17002     '0'
17003          No size optimization.  This level is deprecated and treated
17004          like '1'.
17005
17006     '1'
17007          Short instructions are used opportunistically.
17008
17009     '2'
17010          In addition, alignment of loops and of code after barriers are
17011          dropped.
17012
17013     '3'
17014          In addition, optional data alignment is dropped, and the
17015          option 'Os' is enabled.
17016
17017     This defaults to '3' when '-Os' is in effect.  Otherwise, the
17018     behavior when this is not set is equivalent to level '1'.
17019
17020'-mtune=CPU'
17021     Set instruction scheduling parameters for CPU, overriding any
17022     implied by '-mcpu='.
17023
17024     Supported values for CPU are
17025
17026     'ARC600'
17027          Tune for ARC600 CPU.
17028
17029     'ARC601'
17030          Tune for ARC601 CPU.
17031
17032     'ARC700'
17033          Tune for ARC700 CPU with standard multiplier block.
17034
17035     'ARC700-xmac'
17036          Tune for ARC700 CPU with XMAC block.
17037
17038     'ARC725D'
17039          Tune for ARC725D CPU.
17040
17041     'ARC750D'
17042          Tune for ARC750D CPU.
17043
17044'-mmultcost=NUM'
17045     Cost to assume for a multiply instruction, with '4' being equal to
17046     a normal instruction.
17047
17048'-munalign-prob-threshold=PROBABILITY'
17049     Set probability threshold for unaligning branches.  When tuning for
17050     'ARC700' and optimizing for speed, branches without filled delay
17051     slot are preferably emitted unaligned and long, unless profiling
17052     indicates that the probability for the branch to be taken is below
17053     PROBABILITY.  *Note Cross-profiling::.  The default is
17054     (REG_BR_PROB_BASE/2), i.e. 5000.
17055
17056 The following options are maintained for backward compatibility, but
17057are now deprecated and will be removed in a future release:
17058
17059'-margonaut'
17060     Obsolete FPX.
17061
17062'-mbig-endian'
17063'-EB'
17064     Compile code for big-endian targets.  Use of these options is now
17065     deprecated.  Big-endian code is supported by configuring GCC to
17066     build 'arceb-elf32' and 'arceb-linux-uclibc' targets, for which big
17067     endian is the default.
17068
17069'-mlittle-endian'
17070'-EL'
17071     Compile code for little-endian targets.  Use of these options is
17072     now deprecated.  Little-endian code is supported by configuring GCC
17073     to build 'arc-elf32' and 'arc-linux-uclibc' targets, for which
17074     little endian is the default.
17075
17076'-mbarrel_shifter'
17077     Replaced by '-mbarrel-shifter'.
17078
17079'-mdpfp_compact'
17080     Replaced by '-mdpfp-compact'.
17081
17082'-mdpfp_fast'
17083     Replaced by '-mdpfp-fast'.
17084
17085'-mdsp_packa'
17086     Replaced by '-mdsp-packa'.
17087
17088'-mEA'
17089     Replaced by '-mea'.
17090
17091'-mmac_24'
17092     Replaced by '-mmac-24'.
17093
17094'-mmac_d16'
17095     Replaced by '-mmac-d16'.
17096
17097'-mspfp_compact'
17098     Replaced by '-mspfp-compact'.
17099
17100'-mspfp_fast'
17101     Replaced by '-mspfp-fast'.
17102
17103'-mtune=CPU'
17104     Values 'arc600', 'arc601', 'arc700' and 'arc700-xmac' for CPU are
17105     replaced by 'ARC600', 'ARC601', 'ARC700' and 'ARC700-xmac'
17106     respectively.
17107
17108'-multcost=NUM'
17109     Replaced by '-mmultcost'.
17110
17111
17112File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
17113
171143.19.5 ARM Options
17115------------------
17116
17117These '-m' options are defined for the ARM port:
17118
17119'-mabi=NAME'
17120     Generate code for the specified ABI.  Permissible values are:
17121     'apcs-gnu', 'atpcs', 'aapcs', 'aapcs-linux' and 'iwmmxt'.
17122
17123'-mapcs-frame'
17124     Generate a stack frame that is compliant with the ARM Procedure
17125     Call Standard for all functions, even if this is not strictly
17126     necessary for correct execution of the code.  Specifying
17127     '-fomit-frame-pointer' with this option causes the stack frames not
17128     to be generated for leaf functions.  The default is
17129     '-mno-apcs-frame'.  This option is deprecated.
17130
17131'-mapcs'
17132     This is a synonym for '-mapcs-frame' and is deprecated.
17133
17134'-mthumb-interwork'
17135     Generate code that supports calling between the ARM and Thumb
17136     instruction sets.  Without this option, on pre-v5 architectures,
17137     the two instruction sets cannot be reliably used inside one
17138     program.  The default is '-mno-thumb-interwork', since slightly
17139     larger code is generated when '-mthumb-interwork' is specified.  In
17140     AAPCS configurations this option is meaningless.
17141
17142'-mno-sched-prolog'
17143     Prevent the reordering of instructions in the function prologue, or
17144     the merging of those instruction with the instructions in the
17145     function's body.  This means that all functions start with a
17146     recognizable set of instructions (or in fact one of a choice from a
17147     small set of different function prologues), and this information
17148     can be used to locate the start of functions inside an executable
17149     piece of code.  The default is '-msched-prolog'.
17150
17151'-mfloat-abi=NAME'
17152     Specifies which floating-point ABI to use.  Permissible values are:
17153     'soft', 'softfp' and 'hard'.
17154
17155     Specifying 'soft' causes GCC to generate output containing library
17156     calls for floating-point operations.  'softfp' allows the
17157     generation of code using hardware floating-point instructions, but
17158     still uses the soft-float calling conventions.  'hard' allows
17159     generation of floating-point instructions and uses FPU-specific
17160     calling conventions.
17161
17162     The default depends on the specific target configuration.  Note
17163     that the hard-float and soft-float ABIs are not link-compatible;
17164     you must compile your entire program with the same ABI, and link
17165     with a compatible set of libraries.
17166
17167'-mgeneral-regs-only'
17168     Generate code which uses only the general-purpose registers.  This
17169     will prevent the compiler from using floating-point and Advanced
17170     SIMD registers but will not impose any restrictions on the
17171     assembler.
17172
17173'-mlittle-endian'
17174     Generate code for a processor running in little-endian mode.  This
17175     is the default for all standard configurations.
17176
17177'-mbig-endian'
17178     Generate code for a processor running in big-endian mode; the
17179     default is to compile code for a little-endian processor.
17180
17181'-mbe8'
17182'-mbe32'
17183     When linking a big-endian image select between BE8 and BE32
17184     formats.  The option has no effect for little-endian images and is
17185     ignored.  The default is dependent on the selected target
17186     architecture.  For ARMv6 and later architectures the default is
17187     BE8, for older architectures the default is BE32.  BE32 format has
17188     been deprecated by ARM.
17189
17190'-march=NAME[+extension...]'
17191     This specifies the name of the target ARM architecture.  GCC uses
17192     this name to determine what kind of instructions it can emit when
17193     generating assembly code.  This option can be used in conjunction
17194     with or instead of the '-mcpu=' option.
17195
17196     Permissible names are: 'armv4t', 'armv5t', 'armv5te', 'armv6',
17197     'armv6j', 'armv6k', 'armv6kz', 'armv6t2', 'armv6z', 'armv6zk',
17198     'armv7', 'armv7-a', 'armv7ve', 'armv8-a', 'armv8.1-a', 'armv8.2-a',
17199     'armv8.3-a', 'armv8.4-a', 'armv8.5-a', 'armv8.6-a', 'armv7-r',
17200     'armv8-r', 'armv6-m', 'armv6s-m', 'armv7-m', 'armv7e-m',
17201     'armv8-m.base', 'armv8-m.main', 'armv8.1-m.main', 'iwmmxt' and
17202     'iwmmxt2'.
17203
17204     Additionally, the following architectures, which lack support for
17205     the Thumb execution state, are recognized but support is
17206     deprecated: 'armv4'.
17207
17208     Many of the architectures support extensions.  These can be added
17209     by appending '+EXTENSION' to the architecture name.  Extension
17210     options are processed in order and capabilities accumulate.  An
17211     extension will also enable any necessary base extensions upon which
17212     it depends.  For example, the '+crypto' extension will always
17213     enable the '+simd' extension.  The exception to the additive
17214     construction is for extensions that are prefixed with '+no...':
17215     these extensions disable the specified option and any other
17216     extensions that may depend on the presence of that extension.
17217
17218     For example, '-march=armv7-a+simd+nofp+vfpv4' is equivalent to
17219     writing '-march=armv7-a+vfpv4' since the '+simd' option is entirely
17220     disabled by the '+nofp' option that follows it.
17221
17222     Most extension names are generically named, but have an effect that
17223     is dependent upon the architecture to which it is applied.  For
17224     example, the '+simd' option can be applied to both 'armv7-a' and
17225     'armv8-a' architectures, but will enable the original ARMv7-A
17226     Advanced SIMD (Neon) extensions for 'armv7-a' and the ARMv8-A
17227     variant for 'armv8-a'.
17228
17229     The table below lists the supported extensions for each
17230     architecture.  Architectures not mentioned do not support any
17231     extensions.
17232
17233     'armv5te'
17234     'armv6'
17235     'armv6j'
17236     'armv6k'
17237     'armv6kz'
17238     'armv6t2'
17239     'armv6z'
17240     'armv6zk'
17241          '+fp'
17242               The VFPv2 floating-point instructions.  The extension
17243               '+vfpv2' can be used as an alias for this extension.
17244
17245          '+nofp'
17246               Disable the floating-point instructions.
17247
17248     'armv7'
17249          The common subset of the ARMv7-A, ARMv7-R and ARMv7-M
17250          architectures.
17251          '+fp'
17252               The VFPv3 floating-point instructions, with 16
17253               double-precision registers.  The extension '+vfpv3-d16'
17254               can be used as an alias for this extension.  Note that
17255               floating-point is not supported by the base ARMv7-M
17256               architecture, but is compatible with both the ARMv7-A and
17257               ARMv7-R architectures.
17258
17259          '+nofp'
17260               Disable the floating-point instructions.
17261
17262     'armv7-a'
17263          '+mp'
17264               The multiprocessing extension.
17265
17266          '+sec'
17267               The security extension.
17268
17269          '+fp'
17270               The VFPv3 floating-point instructions, with 16
17271               double-precision registers.  The extension '+vfpv3-d16'
17272               can be used as an alias for this extension.
17273
17274          '+simd'
17275               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
17276               instructions.  The extensions '+neon' and '+neon-vfpv3'
17277               can be used as aliases for this extension.
17278
17279          '+vfpv3'
17280               The VFPv3 floating-point instructions, with 32
17281               double-precision registers.
17282
17283          '+vfpv3-d16-fp16'
17284               The VFPv3 floating-point instructions, with 16
17285               double-precision registers and the half-precision
17286               floating-point conversion operations.
17287
17288          '+vfpv3-fp16'
17289               The VFPv3 floating-point instructions, with 32
17290               double-precision registers and the half-precision
17291               floating-point conversion operations.
17292
17293          '+vfpv4-d16'
17294               The VFPv4 floating-point instructions, with 16
17295               double-precision registers.
17296
17297          '+vfpv4'
17298               The VFPv4 floating-point instructions, with 32
17299               double-precision registers.
17300
17301          '+neon-fp16'
17302               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
17303               instructions, with the half-precision floating-point
17304               conversion operations.
17305
17306          '+neon-vfpv4'
17307               The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
17308               instructions.
17309
17310          '+nosimd'
17311               Disable the Advanced SIMD instructions (does not disable
17312               floating point).
17313
17314          '+nofp'
17315               Disable the floating-point and Advanced SIMD
17316               instructions.
17317
17318     'armv7ve'
17319          The extended version of the ARMv7-A architecture with support
17320          for virtualization.
17321          '+fp'
17322               The VFPv4 floating-point instructions, with 16
17323               double-precision registers.  The extension '+vfpv4-d16'
17324               can be used as an alias for this extension.
17325
17326          '+simd'
17327               The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
17328               instructions.  The extension '+neon-vfpv4' can be used as
17329               an alias for this extension.
17330
17331          '+vfpv3-d16'
17332               The VFPv3 floating-point instructions, with 16
17333               double-precision registers.
17334
17335          '+vfpv3'
17336               The VFPv3 floating-point instructions, with 32
17337               double-precision registers.
17338
17339          '+vfpv3-d16-fp16'
17340               The VFPv3 floating-point instructions, with 16
17341               double-precision registers and the half-precision
17342               floating-point conversion operations.
17343
17344          '+vfpv3-fp16'
17345               The VFPv3 floating-point instructions, with 32
17346               double-precision registers and the half-precision
17347               floating-point conversion operations.
17348
17349          '+vfpv4-d16'
17350               The VFPv4 floating-point instructions, with 16
17351               double-precision registers.
17352
17353          '+vfpv4'
17354               The VFPv4 floating-point instructions, with 32
17355               double-precision registers.
17356
17357          '+neon'
17358               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
17359               instructions.  The extension '+neon-vfpv3' can be used as
17360               an alias for this extension.
17361
17362          '+neon-fp16'
17363               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
17364               instructions, with the half-precision floating-point
17365               conversion operations.
17366
17367          '+nosimd'
17368               Disable the Advanced SIMD instructions (does not disable
17369               floating point).
17370
17371          '+nofp'
17372               Disable the floating-point and Advanced SIMD
17373               instructions.
17374
17375     'armv8-a'
17376          '+crc'
17377               The Cyclic Redundancy Check (CRC) instructions.
17378          '+simd'
17379               The ARMv8-A Advanced SIMD and floating-point
17380               instructions.
17381          '+crypto'
17382               The cryptographic instructions.
17383          '+nocrypto'
17384               Disable the cryptographic instructions.
17385          '+nofp'
17386               Disable the floating-point, Advanced SIMD and
17387               cryptographic instructions.
17388          '+sb'
17389               Speculation Barrier Instruction.
17390          '+predres'
17391               Execution and Data Prediction Restriction Instructions.
17392
17393     'armv8.1-a'
17394          '+simd'
17395               The ARMv8.1-A Advanced SIMD and floating-point
17396               instructions.
17397
17398          '+crypto'
17399               The cryptographic instructions.  This also enables the
17400               Advanced SIMD and floating-point instructions.
17401
17402          '+nocrypto'
17403               Disable the cryptographic instructions.
17404
17405          '+nofp'
17406               Disable the floating-point, Advanced SIMD and
17407               cryptographic instructions.
17408
17409          '+sb'
17410               Speculation Barrier Instruction.
17411
17412          '+predres'
17413               Execution and Data Prediction Restriction Instructions.
17414
17415     'armv8.2-a'
17416     'armv8.3-a'
17417          '+fp16'
17418               The half-precision floating-point data processing
17419               instructions.  This also enables the Advanced SIMD and
17420               floating-point instructions.
17421
17422          '+fp16fml'
17423               The half-precision floating-point fmla extension.  This
17424               also enables the half-precision floating-point extension
17425               and Advanced SIMD and floating-point instructions.
17426
17427          '+simd'
17428               The ARMv8.1-A Advanced SIMD and floating-point
17429               instructions.
17430
17431          '+crypto'
17432               The cryptographic instructions.  This also enables the
17433               Advanced SIMD and floating-point instructions.
17434
17435          '+dotprod'
17436               Enable the Dot Product extension.  This also enables
17437               Advanced SIMD instructions.
17438
17439          '+nocrypto'
17440               Disable the cryptographic extension.
17441
17442          '+nofp'
17443               Disable the floating-point, Advanced SIMD and
17444               cryptographic instructions.
17445
17446          '+sb'
17447               Speculation Barrier Instruction.
17448
17449          '+predres'
17450               Execution and Data Prediction Restriction Instructions.
17451
17452          '+i8mm'
17453               8-bit Integer Matrix Multiply instructions.  This also
17454               enables Advanced SIMD and floating-point instructions.
17455
17456          '+bf16'
17457               Brain half-precision floating-point instructions.  This
17458               also enables Advanced SIMD and floating-point
17459               instructions.
17460
17461     'armv8.4-a'
17462          '+fp16'
17463               The half-precision floating-point data processing
17464               instructions.  This also enables the Advanced SIMD and
17465               floating-point instructions as well as the Dot Product
17466               extension and the half-precision floating-point fmla
17467               extension.
17468
17469          '+simd'
17470               The ARMv8.3-A Advanced SIMD and floating-point
17471               instructions as well as the Dot Product extension.
17472
17473          '+crypto'
17474               The cryptographic instructions.  This also enables the
17475               Advanced SIMD and floating-point instructions as well as
17476               the Dot Product extension.
17477
17478          '+nocrypto'
17479               Disable the cryptographic extension.
17480
17481          '+nofp'
17482               Disable the floating-point, Advanced SIMD and
17483               cryptographic instructions.
17484
17485          '+sb'
17486               Speculation Barrier Instruction.
17487
17488          '+predres'
17489               Execution and Data Prediction Restriction Instructions.
17490
17491          '+i8mm'
17492               8-bit Integer Matrix Multiply instructions.  This also
17493               enables Advanced SIMD and floating-point instructions.
17494
17495          '+bf16'
17496               Brain half-precision floating-point instructions.  This
17497               also enables Advanced SIMD and floating-point
17498               instructions.
17499
17500     'armv8.5-a'
17501          '+fp16'
17502               The half-precision floating-point data processing
17503               instructions.  This also enables the Advanced SIMD and
17504               floating-point instructions as well as the Dot Product
17505               extension and the half-precision floating-point fmla
17506               extension.
17507
17508          '+simd'
17509               The ARMv8.3-A Advanced SIMD and floating-point
17510               instructions as well as the Dot Product extension.
17511
17512          '+crypto'
17513               The cryptographic instructions.  This also enables the
17514               Advanced SIMD and floating-point instructions as well as
17515               the Dot Product extension.
17516
17517          '+nocrypto'
17518               Disable the cryptographic extension.
17519
17520          '+nofp'
17521               Disable the floating-point, Advanced SIMD and
17522               cryptographic instructions.
17523
17524          '+i8mm'
17525               8-bit Integer Matrix Multiply instructions.  This also
17526               enables Advanced SIMD and floating-point instructions.
17527
17528          '+bf16'
17529               Brain half-precision floating-point instructions.  This
17530               also enables Advanced SIMD and floating-point
17531               instructions.
17532
17533     'armv8.6-a'
17534          '+fp16'
17535               The half-precision floating-point data processing
17536               instructions.  This also enables the Advanced SIMD and
17537               floating-point instructions as well as the Dot Product
17538               extension and the half-precision floating-point fmla
17539               extension.
17540
17541          '+simd'
17542               The ARMv8.3-A Advanced SIMD and floating-point
17543               instructions as well as the Dot Product extension.
17544
17545          '+crypto'
17546               The cryptographic instructions.  This also enables the
17547               Advanced SIMD and floating-point instructions as well as
17548               the Dot Product extension.
17549
17550          '+nocrypto'
17551               Disable the cryptographic extension.
17552
17553          '+nofp'
17554               Disable the floating-point, Advanced SIMD and
17555               cryptographic instructions.
17556
17557          '+i8mm'
17558               8-bit Integer Matrix Multiply instructions.  This also
17559               enables Advanced SIMD and floating-point instructions.
17560
17561          '+bf16'
17562               Brain half-precision floating-point instructions.  This
17563               also enables Advanced SIMD and floating-point
17564               instructions.
17565
17566     'armv7-r'
17567          '+fp.sp'
17568               The single-precision VFPv3 floating-point instructions.
17569               The extension '+vfpv3xd' can be used as an alias for this
17570               extension.
17571
17572          '+fp'
17573               The VFPv3 floating-point instructions with 16
17574               double-precision registers.  The extension +vfpv3-d16 can
17575               be used as an alias for this extension.
17576
17577          '+vfpv3xd-d16-fp16'
17578               The single-precision VFPv3 floating-point instructions
17579               with 16 double-precision registers and the half-precision
17580               floating-point conversion operations.
17581
17582          '+vfpv3-d16-fp16'
17583               The VFPv3 floating-point instructions with 16
17584               double-precision registers and the half-precision
17585               floating-point conversion operations.
17586
17587          '+nofp'
17588               Disable the floating-point extension.
17589
17590          '+idiv'
17591               The ARM-state integer division instructions.
17592
17593          '+noidiv'
17594               Disable the ARM-state integer division extension.
17595
17596     'armv7e-m'
17597          '+fp'
17598               The single-precision VFPv4 floating-point instructions.
17599
17600          '+fpv5'
17601               The single-precision FPv5 floating-point instructions.
17602
17603          '+fp.dp'
17604               The single- and double-precision FPv5 floating-point
17605               instructions.
17606
17607          '+nofp'
17608               Disable the floating-point extensions.
17609
17610     'armv8.1-m.main'
17611
17612          '+dsp'
17613               The DSP instructions.
17614
17615          '+mve'
17616               The M-Profile Vector Extension (MVE) integer
17617               instructions.
17618
17619          '+mve.fp'
17620               The M-Profile Vector Extension (MVE) integer and single
17621               precision floating-point instructions.
17622
17623          '+fp'
17624               The single-precision floating-point instructions.
17625
17626          '+fp.dp'
17627               The single- and double-precision floating-point
17628               instructions.
17629
17630          '+nofp'
17631               Disable the floating-point extension.
17632
17633          '+cdecp0, +cdecp1, ... , +cdecp7'
17634               Enable the Custom Datapath Extension (CDE) on selected
17635               coprocessors according to the numbers given in the
17636               options in the range 0 to 7.
17637
17638     'armv8-m.main'
17639          '+dsp'
17640               The DSP instructions.
17641
17642          '+nodsp'
17643               Disable the DSP extension.
17644
17645          '+fp'
17646               The single-precision floating-point instructions.
17647
17648          '+fp.dp'
17649               The single- and double-precision floating-point
17650               instructions.
17651
17652          '+nofp'
17653               Disable the floating-point extension.
17654
17655          '+cdecp0, +cdecp1, ... , +cdecp7'
17656               Enable the Custom Datapath Extension (CDE) on selected
17657               coprocessors according to the numbers given in the
17658               options in the range 0 to 7.
17659
17660     'armv8-r'
17661          '+crc'
17662               The Cyclic Redundancy Check (CRC) instructions.
17663          '+fp.sp'
17664               The single-precision FPv5 floating-point instructions.
17665          '+simd'
17666               The ARMv8-A Advanced SIMD and floating-point
17667               instructions.
17668          '+crypto'
17669               The cryptographic instructions.
17670          '+nocrypto'
17671               Disable the cryptographic instructions.
17672          '+nofp'
17673               Disable the floating-point, Advanced SIMD and
17674               cryptographic instructions.
17675
17676     '-march=native' causes the compiler to auto-detect the architecture
17677     of the build computer.  At present, this feature is only supported
17678     on GNU/Linux, and not all architectures are recognized.  If the
17679     auto-detect is unsuccessful the option has no effect.
17680
17681'-mtune=NAME'
17682     This option specifies the name of the target ARM processor for
17683     which GCC should tune the performance of the code.  For some ARM
17684     implementations better performance can be obtained by using this
17685     option.  Permissible names are: 'arm7tdmi', 'arm7tdmi-s',
17686     'arm710t', 'arm720t', 'arm740t', 'strongarm', 'strongarm110',
17687     'strongarm1100', 0'strongarm1110', 'arm8', 'arm810', 'arm9',
17688     'arm9e', 'arm920', 'arm920t', 'arm922t', 'arm946e-s', 'arm966e-s',
17689     'arm968e-s', 'arm926ej-s', 'arm940t', 'arm9tdmi', 'arm10tdmi',
17690     'arm1020t', 'arm1026ej-s', 'arm10e', 'arm1020e', 'arm1022e',
17691     'arm1136j-s', 'arm1136jf-s', 'mpcore', 'mpcorenovfp',
17692     'arm1156t2-s', 'arm1156t2f-s', 'arm1176jz-s', 'arm1176jzf-s',
17693     'generic-armv7-a', 'cortex-a5', 'cortex-a7', 'cortex-a8',
17694     'cortex-a9', 'cortex-a12', 'cortex-a15', 'cortex-a17',
17695     'cortex-a32', 'cortex-a35', 'cortex-a53', 'cortex-a55',
17696     'cortex-a57', 'cortex-a72', 'cortex-a73', 'cortex-a75',
17697     'cortex-a76', 'cortex-a76ae', 'cortex-a77', 'ares', 'cortex-r4',
17698     'cortex-r4f', 'cortex-r5', 'cortex-r7', 'cortex-r8', 'cortex-r52',
17699     'cortex-m0', 'cortex-m0plus', 'cortex-m1', 'cortex-m3',
17700     'cortex-m4', 'cortex-m7', 'cortex-m23', 'cortex-m33',
17701     'cortex-m35p', 'cortex-m55', 'cortex-m1.small-multiply',
17702     'cortex-m0.small-multiply', 'cortex-m0plus.small-multiply',
17703     'exynos-m1', 'marvell-pj4', 'neoverse-n1', 'neoverse-n2',
17704     'neoverse-v1', 'xscale', 'iwmmxt', 'iwmmxt2', 'ep9312', 'fa526',
17705     'fa626', 'fa606te', 'fa626te', 'fmp626', 'fa726te', 'xgene1'.
17706
17707     Additionally, this option can specify that GCC should tune the
17708     performance of the code for a big.LITTLE system.  Permissible names
17709     are: 'cortex-a15.cortex-a7', 'cortex-a17.cortex-a7',
17710     'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
17711     'cortex-a72.cortex-a35', 'cortex-a73.cortex-a53',
17712     'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55'.
17713
17714     '-mtune=generic-ARCH' specifies that GCC should tune the
17715     performance for a blend of processors within architecture ARCH.
17716     The aim is to generate code that run well on the current most
17717     popular processors, balancing between optimizations that benefit
17718     some CPUs in the range, and avoiding performance pitfalls of other
17719     CPUs.  The effects of this option may change in future GCC versions
17720     as CPU models come and go.
17721
17722     '-mtune' permits the same extension options as '-mcpu', but the
17723     extension options do not affect the tuning of the generated code.
17724
17725     '-mtune=native' causes the compiler to auto-detect the CPU of the
17726     build computer.  At present, this feature is only supported on
17727     GNU/Linux, and not all architectures are recognized.  If the
17728     auto-detect is unsuccessful the option has no effect.
17729
17730'-mcpu=NAME[+extension...]'
17731     This specifies the name of the target ARM processor.  GCC uses this
17732     name to derive the name of the target ARM architecture (as if
17733     specified by '-march') and the ARM processor type for which to tune
17734     for performance (as if specified by '-mtune').  Where this option
17735     is used in conjunction with '-march' or '-mtune', those options
17736     take precedence over the appropriate part of this option.
17737
17738     Many of the supported CPUs implement optional architectural
17739     extensions.  Where this is so the architectural extensions are
17740     normally enabled by default.  If implementations that lack the
17741     extension exist, then the extension syntax can be used to disable
17742     those extensions that have been omitted.  For floating-point and
17743     Advanced SIMD (Neon) instructions, the settings of the options
17744     '-mfloat-abi' and '-mfpu' must also be considered: floating-point
17745     and Advanced SIMD instructions will only be used if '-mfloat-abi'
17746     is not set to 'soft'; and any setting of '-mfpu' other than 'auto'
17747     will override the available floating-point and SIMD extension
17748     instructions.
17749
17750     For example, 'cortex-a9' can be found in three major
17751     configurations: integer only, with just a floating-point unit or
17752     with floating-point and Advanced SIMD. The default is to enable all
17753     the instructions, but the extensions '+nosimd' and '+nofp' can be
17754     used to disable just the SIMD or both the SIMD and floating-point
17755     instructions respectively.
17756
17757     Permissible names for this option are the same as those for
17758     '-mtune'.
17759
17760     The following extension options are common to the listed CPUs:
17761
17762     '+nodsp'
17763          Disable the DSP instructions on 'cortex-m33', 'cortex-m35p'.
17764
17765     '+nofp'
17766          Disables the floating-point instructions on 'arm9e',
17767          'arm946e-s', 'arm966e-s', 'arm968e-s', 'arm10e', 'arm1020e',
17768          'arm1022e', 'arm926ej-s', 'arm1026ej-s', 'cortex-r5',
17769          'cortex-r7', 'cortex-r8', 'cortex-m4', 'cortex-m7',
17770          'cortex-m33' and 'cortex-m35p'.  Disables the floating-point
17771          and SIMD instructions on 'generic-armv7-a', 'cortex-a5',
17772          'cortex-a7', 'cortex-a8', 'cortex-a9', 'cortex-a12',
17773          'cortex-a15', 'cortex-a17', 'cortex-a15.cortex-a7',
17774          'cortex-a17.cortex-a7', 'cortex-a32', 'cortex-a35',
17775          'cortex-a53' and 'cortex-a55'.
17776
17777     '+nofp.dp'
17778          Disables the double-precision component of the floating-point
17779          instructions on 'cortex-r5', 'cortex-r7', 'cortex-r8',
17780          'cortex-r52' and 'cortex-m7'.
17781
17782     '+nosimd'
17783          Disables the SIMD (but not floating-point) instructions on
17784          'generic-armv7-a', 'cortex-a5', 'cortex-a7' and 'cortex-a9'.
17785
17786     '+crypto'
17787          Enables the cryptographic instructions on 'cortex-a32',
17788          'cortex-a35', 'cortex-a53', 'cortex-a55', 'cortex-a57',
17789          'cortex-a72', 'cortex-a73', 'cortex-a75', 'exynos-m1',
17790          'xgene1', 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
17791          'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53' and
17792          'cortex-a75.cortex-a55'.
17793
17794     Additionally the 'generic-armv7-a' pseudo target defaults to VFPv3
17795     with 16 double-precision registers.  It supports the following
17796     extension options: 'mp', 'sec', 'vfpv3-d16', 'vfpv3',
17797     'vfpv3-d16-fp16', 'vfpv3-fp16', 'vfpv4-d16', 'vfpv4', 'neon',
17798     'neon-vfpv3', 'neon-fp16', 'neon-vfpv4'.  The meanings are the same
17799     as for the extensions to '-march=armv7-a'.
17800
17801     '-mcpu=generic-ARCH' is also permissible, and is equivalent to
17802     '-march=ARCH -mtune=generic-ARCH'.  See '-mtune' for more
17803     information.
17804
17805     '-mcpu=native' causes the compiler to auto-detect the CPU of the
17806     build computer.  At present, this feature is only supported on
17807     GNU/Linux, and not all architectures are recognized.  If the
17808     auto-detect is unsuccessful the option has no effect.
17809
17810'-mfpu=NAME'
17811     This specifies what floating-point hardware (or hardware emulation)
17812     is available on the target.  Permissible names are: 'auto',
17813     'vfpv2', 'vfpv3', 'vfpv3-fp16', 'vfpv3-d16', 'vfpv3-d16-fp16',
17814     'vfpv3xd', 'vfpv3xd-fp16', 'neon-vfpv3', 'neon-fp16', 'vfpv4',
17815     'vfpv4-d16', 'fpv4-sp-d16', 'neon-vfpv4', 'fpv5-d16',
17816     'fpv5-sp-d16', 'fp-armv8', 'neon-fp-armv8' and
17817     'crypto-neon-fp-armv8'.  Note that 'neon' is an alias for
17818     'neon-vfpv3' and 'vfp' is an alias for 'vfpv2'.
17819
17820     The setting 'auto' is the default and is special.  It causes the
17821     compiler to select the floating-point and Advanced SIMD
17822     instructions based on the settings of '-mcpu' and '-march'.
17823
17824     If the selected floating-point hardware includes the NEON extension
17825     (e.g. '-mfpu=neon'), note that floating-point operations are not
17826     generated by GCC's auto-vectorization pass unless
17827     '-funsafe-math-optimizations' is also specified.  This is because
17828     NEON hardware does not fully implement the IEEE 754 standard for
17829     floating-point arithmetic (in particular denormal values are
17830     treated as zero), so the use of NEON instructions may lead to a
17831     loss of precision.
17832
17833     You can also set the fpu name at function level by using the
17834     'target("fpu=")' function attributes (*note ARM Function
17835     Attributes::) or pragmas (*note Function Specific Option
17836     Pragmas::).
17837
17838'-mfp16-format=NAME'
17839     Specify the format of the '__fp16' half-precision floating-point
17840     type.  Permissible names are 'none', 'ieee', and 'alternative'; the
17841     default is 'none', in which case the '__fp16' type is not defined.
17842     *Note Half-Precision::, for more information.
17843
17844'-mstructure-size-boundary=N'
17845     The sizes of all structures and unions are rounded up to a multiple
17846     of the number of bits set by this option.  Permissible values are
17847     8, 32 and 64.  The default value varies for different toolchains.
17848     For the COFF targeted toolchain the default value is 8.  A value of
17849     64 is only allowed if the underlying ABI supports it.
17850
17851     Specifying a larger number can produce faster, more efficient code,
17852     but can also increase the size of the program.  Different values
17853     are potentially incompatible.  Code compiled with one value cannot
17854     necessarily expect to work with code or libraries compiled with
17855     another value, if they exchange information using structures or
17856     unions.
17857
17858     This option is deprecated.
17859
17860'-mabort-on-noreturn'
17861     Generate a call to the function 'abort' at the end of a 'noreturn'
17862     function.  It is executed if the function tries to return.
17863
17864'-mlong-calls'
17865'-mno-long-calls'
17866     Tells the compiler to perform function calls by first loading the
17867     address of the function into a register and then performing a
17868     subroutine call on this register.  This switch is needed if the
17869     target function lies outside of the 64-megabyte addressing range of
17870     the offset-based version of subroutine call instruction.
17871
17872     Even if this switch is enabled, not all function calls are turned
17873     into long calls.  The heuristic is that static functions, functions
17874     that have the 'short_call' attribute, functions that are inside the
17875     scope of a '#pragma no_long_calls' directive, and functions whose
17876     definitions have already been compiled within the current
17877     compilation unit are not turned into long calls.  The exceptions to
17878     this rule are that weak function definitions, functions with the
17879     'long_call' attribute or the 'section' attribute, and functions
17880     that are within the scope of a '#pragma long_calls' directive are
17881     always turned into long calls.
17882
17883     This feature is not enabled by default.  Specifying
17884     '-mno-long-calls' restores the default behavior, as does placing
17885     the function calls within the scope of a '#pragma long_calls_off'
17886     directive.  Note these switches have no effect on how the compiler
17887     generates code to handle function calls via function pointers.
17888
17889'-msingle-pic-base'
17890     Treat the register used for PIC addressing as read-only, rather
17891     than loading it in the prologue for each function.  The runtime
17892     system is responsible for initializing this register with an
17893     appropriate value before execution begins.
17894
17895'-mpic-register=REG'
17896     Specify the register to be used for PIC addressing.  For standard
17897     PIC base case, the default is any suitable register determined by
17898     compiler.  For single PIC base case, the default is 'R9' if target
17899     is EABI based or stack-checking is enabled, otherwise the default
17900     is 'R10'.
17901
17902'-mpic-data-is-text-relative'
17903     Assume that the displacement between the text and data segments is
17904     fixed at static link time.  This permits using PC-relative
17905     addressing operations to access data known to be in the data
17906     segment.  For non-VxWorks RTP targets, this option is enabled by
17907     default.  When disabled on such targets, it will enable
17908     '-msingle-pic-base' by default.
17909
17910'-mpoke-function-name'
17911     Write the name of each function into the text section, directly
17912     preceding the function prologue.  The generated code is similar to
17913     this:
17914
17915               t0
17916                   .ascii "arm_poke_function_name", 0
17917                   .align
17918               t1
17919                   .word 0xff000000 + (t1 - t0)
17920               arm_poke_function_name
17921                   mov     ip, sp
17922                   stmfd   sp!, {fp, ip, lr, pc}
17923                   sub     fp, ip, #4
17924
17925     When performing a stack backtrace, code can inspect the value of
17926     'pc' stored at 'fp + 0'.  If the trace function then looks at
17927     location 'pc - 12' and the top 8 bits are set, then we know that
17928     there is a function name embedded immediately preceding this
17929     location and has length '((pc[-3]) & 0xff000000)'.
17930
17931'-mthumb'
17932'-marm'
17933
17934     Select between generating code that executes in ARM and Thumb
17935     states.  The default for most configurations is to generate code
17936     that executes in ARM state, but the default can be changed by
17937     configuring GCC with the '--with-mode='STATE configure option.
17938
17939     You can also override the ARM and Thumb mode for each function by
17940     using the 'target("thumb")' and 'target("arm")' function attributes
17941     (*note ARM Function Attributes::) or pragmas (*note Function
17942     Specific Option Pragmas::).
17943
17944'-mflip-thumb'
17945     Switch ARM/Thumb modes on alternating functions.  This option is
17946     provided for regression testing of mixed Thumb/ARM code generation,
17947     and is not intended for ordinary use in compiling code.
17948
17949'-mtpcs-frame'
17950     Generate a stack frame that is compliant with the Thumb Procedure
17951     Call Standard for all non-leaf functions.  (A leaf function is one
17952     that does not call any other functions.)  The default is
17953     '-mno-tpcs-frame'.
17954
17955'-mtpcs-leaf-frame'
17956     Generate a stack frame that is compliant with the Thumb Procedure
17957     Call Standard for all leaf functions.  (A leaf function is one that
17958     does not call any other functions.)  The default is
17959     '-mno-apcs-leaf-frame'.
17960
17961'-mcallee-super-interworking'
17962     Gives all externally visible functions in the file being compiled
17963     an ARM instruction set header which switches to Thumb mode before
17964     executing the rest of the function.  This allows these functions to
17965     be called from non-interworking code.  This option is not valid in
17966     AAPCS configurations because interworking is enabled by default.
17967
17968'-mcaller-super-interworking'
17969     Allows calls via function pointers (including virtual functions) to
17970     execute correctly regardless of whether the target code has been
17971     compiled for interworking or not.  There is a small overhead in the
17972     cost of executing a function pointer if this option is enabled.
17973     This option is not valid in AAPCS configurations because
17974     interworking is enabled by default.
17975
17976'-mtp=NAME'
17977     Specify the access model for the thread local storage pointer.  The
17978     valid models are 'soft', which generates calls to
17979     '__aeabi_read_tp', 'cp15', which fetches the thread pointer from
17980     'cp15' directly (supported in the arm6k architecture), and 'auto',
17981     which uses the best available method for the selected processor.
17982     The default setting is 'auto'.
17983
17984'-mtls-dialect=DIALECT'
17985     Specify the dialect to use for accessing thread local storage.  Two
17986     DIALECTs are supported--'gnu' and 'gnu2'.  The 'gnu' dialect
17987     selects the original GNU scheme for supporting local and global
17988     dynamic TLS models.  The 'gnu2' dialect selects the GNU descriptor
17989     scheme, which provides better performance for shared libraries.
17990     The GNU descriptor scheme is compatible with the original scheme,
17991     but does require new assembler, linker and library support.
17992     Initial and local exec TLS models are unaffected by this option and
17993     always use the original scheme.
17994
17995'-mword-relocations'
17996     Only generate absolute relocations on word-sized values (i.e.
17997     R_ARM_ABS32).  This is enabled by default on targets (uClinux,
17998     SymbianOS) where the runtime loader imposes this restriction, and
17999     when '-fpic' or '-fPIC' is specified.  This option conflicts with
18000     '-mslow-flash-data'.
18001
18002'-mfix-cortex-m3-ldrd'
18003     Some Cortex-M3 cores can cause data corruption when 'ldrd'
18004     instructions with overlapping destination and base registers are
18005     used.  This option avoids generating these instructions.  This
18006     option is enabled by default when '-mcpu=cortex-m3' is specified.
18007
18008'-munaligned-access'
18009'-mno-unaligned-access'
18010     Enables (or disables) reading and writing of 16- and 32- bit values
18011     from addresses that are not 16- or 32- bit aligned.  By default
18012     unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
18013     ARMv8-M Baseline architectures, and enabled for all other
18014     architectures.  If unaligned access is not enabled then words in
18015     packed data structures are accessed a byte at a time.
18016
18017     The ARM attribute 'Tag_CPU_unaligned_access' is set in the
18018     generated object file to either true or false, depending upon the
18019     setting of this option.  If unaligned access is enabled then the
18020     preprocessor symbol '__ARM_FEATURE_UNALIGNED' is also defined.
18021
18022'-mneon-for-64bits'
18023     This option is deprecated and has no effect.
18024
18025'-mslow-flash-data'
18026     Assume loading data from flash is slower than fetching instruction.
18027     Therefore literal load is minimized for better performance.  This
18028     option is only supported when compiling for ARMv7 M-profile and off
18029     by default.  It conflicts with '-mword-relocations'.
18030
18031'-masm-syntax-unified'
18032     Assume inline assembler is using unified asm syntax.  The default
18033     is currently off which implies divided syntax.  This option has no
18034     impact on Thumb2.  However, this may change in future releases of
18035     GCC. Divided syntax should be considered deprecated.
18036
18037'-mrestrict-it'
18038     Restricts generation of IT blocks to conform to the rules of
18039     ARMv8-A. IT blocks can only contain a single 16-bit instruction
18040     from a select set of instructions.  This option is on by default
18041     for ARMv8-A Thumb mode.
18042
18043'-mprint-tune-info'
18044     Print CPU tuning information as comment in assembler file.  This is
18045     an option used only for regression testing of the compiler and not
18046     intended for ordinary use in compiling code.  This option is
18047     disabled by default.
18048
18049'-mverbose-cost-dump'
18050     Enable verbose cost model dumping in the debug dump files.  This
18051     option is provided for use in debugging the compiler.
18052
18053'-mpure-code'
18054     Do not allow constant data to be placed in code sections.
18055     Additionally, when compiling for ELF object format give all text
18056     sections the ELF processor-specific section attribute
18057     'SHF_ARM_PURECODE'.  This option is only available when generating
18058     non-pic code for M-profile targets.
18059
18060'-mcmse'
18061     Generate secure code as per the "ARMv8-M Security Extensions:
18062     Requirements on Development Tools Engineering Specification", which
18063     can be found on
18064     <https://developer.arm.com/documentation/ecm0359818/latest/>.
18065
18066'-mfix-cmse-cve-2021-35465'
18067     Mitigate against a potential security issue with the 'VLLDM'
18068     instruction in some M-profile devices when using CMSE
18069     (CVE-2021-365465).  This option is enabled by default when the
18070     option '-mcpu=' is used with 'cortex-m33', 'cortex-m35p' or
18071     'cortex-m55'.  The option '-mno-fix-cmse-cve-2021-35465' can be
18072     used to disable the mitigation.
18073
18074'-mfdpic'
18075'-mno-fdpic'
18076     Select the FDPIC ABI, which uses 64-bit function descriptors to
18077     represent pointers to functions.  When the compiler is configured
18078     for 'arm-*-uclinuxfdpiceabi' targets, this option is on by default
18079     and implies '-fPIE' if none of the PIC/PIE-related options is
18080     provided.  On other targets, it only enables the FDPIC-specific
18081     code generation features, and the user should explicitly provide
18082     the PIC/PIE-related options as needed.
18083
18084     Note that static linking is not supported because it would still
18085     involve the dynamic linker when the program self-relocates.  If
18086     such behavior is acceptable, use -static and -Wl,-dynamic-linker
18087     options.
18088
18089     The opposite '-mno-fdpic' option is useful (and required) to build
18090     the Linux kernel using the same ('arm-*-uclinuxfdpiceabi')
18091     toolchain as the one used to build the userland programs.
18092
18093
18094File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
18095
180963.19.6 AVR Options
18097------------------
18098
18099These options are defined for AVR implementations:
18100
18101'-mmcu=MCU'
18102     Specify Atmel AVR instruction set architectures (ISA) or MCU type.
18103
18104     The default for this option is 'avr2'.
18105
18106     GCC supports the following AVR devices and ISAs:
18107
18108     'avr2'
18109          "Classic" devices with up to 8 KiB of program memory.
18110          MCU = 'attiny22', 'attiny26', 'at90s2313', 'at90s2323',
18111          'at90s2333', 'at90s2343', 'at90s4414', 'at90s4433',
18112          'at90s4434', 'at90c8534', 'at90s8515', 'at90s8535'.
18113
18114     'avr25'
18115          "Classic" devices with up to 8 KiB of program memory and with
18116          the 'MOVW' instruction.
18117          MCU = 'attiny13', 'attiny13a', 'attiny24', 'attiny24a',
18118          'attiny25', 'attiny261', 'attiny261a', 'attiny2313',
18119          'attiny2313a', 'attiny43u', 'attiny44', 'attiny44a',
18120          'attiny45', 'attiny48', 'attiny441', 'attiny461',
18121          'attiny461a', 'attiny4313', 'attiny84', 'attiny84a',
18122          'attiny85', 'attiny87', 'attiny88', 'attiny828', 'attiny841',
18123          'attiny861', 'attiny861a', 'ata5272', 'ata6616c', 'at86rf401'.
18124
18125     'avr3'
18126          "Classic" devices with 16 KiB up to 64 KiB of program memory.
18127          MCU = 'at76c711', 'at43usb355'.
18128
18129     'avr31'
18130          "Classic" devices with 128 KiB of program memory.
18131          MCU = 'atmega103', 'at43usb320'.
18132
18133     'avr35'
18134          "Classic" devices with 16 KiB up to 64 KiB of program memory
18135          and with the 'MOVW' instruction.
18136          MCU = 'attiny167', 'attiny1634', 'atmega8u2', 'atmega16u2',
18137          'atmega32u2', 'ata5505', 'ata6617c', 'ata664251', 'at90usb82',
18138          'at90usb162'.
18139
18140     'avr4'
18141          "Enhanced" devices with up to 8 KiB of program memory.
18142          MCU = 'atmega48', 'atmega48a', 'atmega48p', 'atmega48pa',
18143          'atmega48pb', 'atmega8', 'atmega8a', 'atmega8hva', 'atmega88',
18144          'atmega88a', 'atmega88p', 'atmega88pa', 'atmega88pb',
18145          'atmega8515', 'atmega8535', 'ata6285', 'ata6286', 'ata6289',
18146          'ata6612c', 'at90pwm1', 'at90pwm2', 'at90pwm2b', 'at90pwm3',
18147          'at90pwm3b', 'at90pwm81'.
18148
18149     'avr5'
18150          "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
18151
18152          MCU = 'atmega16', 'atmega16a', 'atmega16hva', 'atmega16hva2',
18153          'atmega16hvb', 'atmega16hvbrevb', 'atmega16m1', 'atmega16u4',
18154          'atmega161', 'atmega162', 'atmega163', 'atmega164a',
18155          'atmega164p', 'atmega164pa', 'atmega165', 'atmega165a',
18156          'atmega165p', 'atmega165pa', 'atmega168', 'atmega168a',
18157          'atmega168p', 'atmega168pa', 'atmega168pb', 'atmega169',
18158          'atmega169a', 'atmega169p', 'atmega169pa', 'atmega32',
18159          'atmega32a', 'atmega32c1', 'atmega32hvb', 'atmega32hvbrevb',
18160          'atmega32m1', 'atmega32u4', 'atmega32u6', 'atmega323',
18161          'atmega324a', 'atmega324p', 'atmega324pa', 'atmega325',
18162          'atmega325a', 'atmega325p', 'atmega325pa', 'atmega328',
18163          'atmega328p', 'atmega328pb', 'atmega329', 'atmega329a',
18164          'atmega329p', 'atmega329pa', 'atmega3250', 'atmega3250a',
18165          'atmega3250p', 'atmega3250pa', 'atmega3290', 'atmega3290a',
18166          'atmega3290p', 'atmega3290pa', 'atmega406', 'atmega64',
18167          'atmega64a', 'atmega64c1', 'atmega64hve', 'atmega64hve2',
18168          'atmega64m1', 'atmega64rfr2', 'atmega640', 'atmega644',
18169          'atmega644a', 'atmega644p', 'atmega644pa', 'atmega644rfr2',
18170          'atmega645', 'atmega645a', 'atmega645p', 'atmega649',
18171          'atmega649a', 'atmega649p', 'atmega6450', 'atmega6450a',
18172          'atmega6450p', 'atmega6490', 'atmega6490a', 'atmega6490p',
18173          'ata5795', 'ata5790', 'ata5790n', 'ata5791', 'ata6613c',
18174          'ata6614q', 'ata5782', 'ata5831', 'ata8210', 'ata8510',
18175          'ata5702m322', 'at90pwm161', 'at90pwm216', 'at90pwm316',
18176          'at90can32', 'at90can64', 'at90scr100', 'at90usb646',
18177          'at90usb647', 'at94k', 'm3000'.
18178
18179     'avr51'
18180          "Enhanced" devices with 128 KiB of program memory.
18181          MCU = 'atmega128', 'atmega128a', 'atmega128rfa1',
18182          'atmega128rfr2', 'atmega1280', 'atmega1281', 'atmega1284',
18183          'atmega1284p', 'atmega1284rfr2', 'at90can128', 'at90usb1286',
18184          'at90usb1287'.
18185
18186     'avr6'
18187          "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB
18188          of program memory.
18189          MCU = 'atmega256rfr2', 'atmega2560', 'atmega2561',
18190          'atmega2564rfr2'.
18191
18192     'avrxmega2'
18193          "XMEGA" devices with more than 8 KiB and up to 64 KiB of
18194          program memory.
18195          MCU = 'atxmega8e5', 'atxmega16a4', 'atxmega16a4u',
18196          'atxmega16c4', 'atxmega16d4', 'atxmega16e5', 'atxmega32a4',
18197          'atxmega32a4u', 'atxmega32c3', 'atxmega32c4', 'atxmega32d3',
18198          'atxmega32d4', 'atxmega32e5'.
18199
18200     'avrxmega3'
18201          "XMEGA" devices with up to 64 KiB of combined program memory
18202          and RAM, and with program memory visible in the RAM address
18203          space.
18204          MCU = 'attiny202', 'attiny204', 'attiny212', 'attiny214',
18205          'attiny402', 'attiny404', 'attiny406', 'attiny412',
18206          'attiny414', 'attiny416', 'attiny417', 'attiny804',
18207          'attiny806', 'attiny807', 'attiny814', 'attiny816',
18208          'attiny817', 'attiny1604', 'attiny1606', 'attiny1607',
18209          'attiny1614', 'attiny1616', 'attiny1617', 'attiny3214',
18210          'attiny3216', 'attiny3217', 'atmega808', 'atmega809',
18211          'atmega1608', 'atmega1609', 'atmega3208', 'atmega3209',
18212          'atmega4808', 'atmega4809'.
18213
18214     'avrxmega4'
18215          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
18216          program memory.
18217          MCU = 'atxmega64a3', 'atxmega64a3u', 'atxmega64a4u',
18218          'atxmega64b1', 'atxmega64b3', 'atxmega64c3', 'atxmega64d3',
18219          'atxmega64d4'.
18220
18221     'avrxmega5'
18222          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
18223          program memory and more than 64 KiB of RAM.
18224          MCU = 'atxmega64a1', 'atxmega64a1u'.
18225
18226     'avrxmega6'
18227          "XMEGA" devices with more than 128 KiB of program memory.
18228          MCU = 'atxmega128a3', 'atxmega128a3u', 'atxmega128b1',
18229          'atxmega128b3', 'atxmega128c3', 'atxmega128d3',
18230          'atxmega128d4', 'atxmega192a3', 'atxmega192a3u',
18231          'atxmega192c3', 'atxmega192d3', 'atxmega256a3',
18232          'atxmega256a3b', 'atxmega256a3bu', 'atxmega256a3u',
18233          'atxmega256c3', 'atxmega256d3', 'atxmega384c3',
18234          'atxmega384d3'.
18235
18236     'avrxmega7'
18237          "XMEGA" devices with more than 128 KiB of program memory and
18238          more than 64 KiB of RAM.
18239          MCU = 'atxmega128a1', 'atxmega128a1u', 'atxmega128a4u'.
18240
18241     'avrtiny'
18242          "TINY" Tiny core devices with 512 B up to 4 KiB of program
18243          memory.
18244          MCU = 'attiny4', 'attiny5', 'attiny9', 'attiny10', 'attiny20',
18245          'attiny40'.
18246
18247     'avr1'
18248          This ISA is implemented by the minimal AVR core and supported
18249          for assembler only.
18250          MCU = 'attiny11', 'attiny12', 'attiny15', 'attiny28',
18251          'at90s1200'.
18252
18253'-mabsdata'
18254
18255     Assume that all data in static storage can be accessed by LDS / STS
18256     instructions.  This option has only an effect on reduced Tiny
18257     devices like ATtiny40.  See also the 'absdata' *note variable
18258     attribute: AVR Variable Attributes.
18259
18260'-maccumulate-args'
18261     Accumulate outgoing function arguments and acquire/release the
18262     needed stack space for outgoing function arguments once in function
18263     prologue/epilogue.  Without this option, outgoing arguments are
18264     pushed before calling a function and popped afterwards.
18265
18266     Popping the arguments after the function call can be expensive on
18267     AVR so that accumulating the stack space might lead to smaller
18268     executables because arguments need not be removed from the stack
18269     after such a function call.
18270
18271     This option can lead to reduced code size for functions that
18272     perform several calls to functions that get their arguments on the
18273     stack like calls to printf-like functions.
18274
18275'-mbranch-cost=COST'
18276     Set the branch costs for conditional branch instructions to COST.
18277     Reasonable values for COST are small, non-negative integers.  The
18278     default branch cost is 0.
18279
18280'-mcall-prologues'
18281     Functions prologues/epilogues are expanded as calls to appropriate
18282     subroutines.  Code size is smaller.
18283
18284'-mdouble=BITS'
18285'-mlong-double=BITS'
18286     Set the size (in bits) of the 'double' or 'long double' type,
18287     respectively.  Possible values for BITS are 32 and 64.  Whether or
18288     not a specific value for BITS is allowed depends on the
18289     '--with-double=' and '--with-long-double='
18290     configure options (https://gcc.gnu.org/install/configure.html#avr),
18291     and the same applies for the default values of the options.
18292
18293'-mgas-isr-prologues'
18294     Interrupt service routines (ISRs) may use the '__gcc_isr' pseudo
18295     instruction supported by GNU Binutils.  If this option is on, the
18296     feature can still be disabled for individual ISRs by means of the
18297     *note 'no_gccisr': AVR Function Attributes. function attribute.
18298     This feature is activated per default if optimization is on (but
18299     not with '-Og', *note Optimize Options::), and if GNU Binutils
18300     support PR21683 (https://sourceware.org/PR21683).
18301
18302'-mint8'
18303     Assume 'int' to be 8-bit integer.  This affects the sizes of all
18304     types: a 'char' is 1 byte, an 'int' is 1 byte, a 'long' is 2 bytes,
18305     and 'long long' is 4 bytes.  Please note that this option does not
18306     conform to the C standards, but it results in smaller code size.
18307
18308'-mmain-is-OS_task'
18309     Do not save registers in 'main'.  The effect is the same like
18310     attaching attribute *note 'OS_task': AVR Function Attributes. to
18311     'main'.  It is activated per default if optimization is on.
18312
18313'-mn-flash=NUM'
18314     Assume that the flash memory has a size of NUM times 64 KiB.
18315
18316'-mno-interrupts'
18317     Generated code is not compatible with hardware interrupts.  Code
18318     size is smaller.
18319
18320'-mrelax'
18321     Try to replace 'CALL' resp. 'JMP' instruction by the shorter
18322     'RCALL' resp. 'RJMP' instruction if applicable.  Setting '-mrelax'
18323     just adds the '--mlink-relax' option to the assembler's command
18324     line and the '--relax' option to the linker's command line.
18325
18326     Jump relaxing is performed by the linker because jump offsets are
18327     not known before code is located.  Therefore, the assembler code
18328     generated by the compiler is the same, but the instructions in the
18329     executable may differ from instructions in the assembler code.
18330
18331     Relaxing must be turned on if linker stubs are needed, see the
18332     section on 'EIND' and linker stubs below.
18333
18334'-mrmw'
18335     Assume that the device supports the Read-Modify-Write instructions
18336     'XCH', 'LAC', 'LAS' and 'LAT'.
18337
18338'-mshort-calls'
18339
18340     Assume that 'RJMP' and 'RCALL' can target the whole program memory.
18341
18342     This option is used internally for multilib selection.  It is not
18343     an optimization option, and you don't need to set it by hand.
18344
18345'-msp8'
18346     Treat the stack pointer register as an 8-bit register, i.e. assume
18347     the high byte of the stack pointer is zero.  In general, you don't
18348     need to set this option by hand.
18349
18350     This option is used internally by the compiler to select and build
18351     multilibs for architectures 'avr2' and 'avr25'.  These
18352     architectures mix devices with and without 'SPH'.  For any setting
18353     other than '-mmcu=avr2' or '-mmcu=avr25' the compiler driver adds
18354     or removes this option from the compiler proper's command line,
18355     because the compiler then knows if the device or architecture has
18356     an 8-bit stack pointer and thus no 'SPH' register or not.
18357
18358'-mstrict-X'
18359     Use address register 'X' in a way proposed by the hardware.  This
18360     means that 'X' is only used in indirect, post-increment or
18361     pre-decrement addressing.
18362
18363     Without this option, the 'X' register may be used in the same way
18364     as 'Y' or 'Z' which then is emulated by additional instructions.
18365     For example, loading a value with 'X+const' addressing with a small
18366     non-negative 'const < 64' to a register RN is performed as
18367
18368          adiw r26, const   ; X += const
18369          ld   RN, X        ; RN = *X
18370          sbiw r26, const   ; X -= const
18371
18372'-mtiny-stack'
18373     Only change the lower 8 bits of the stack pointer.
18374
18375'-mfract-convert-truncate'
18376     Allow to use truncation instead of rounding towards zero for
18377     fractional fixed-point types.
18378
18379'-nodevicelib'
18380     Don't link against AVR-LibC's device specific library 'lib<mcu>.a'.
18381
18382'-nodevicespecs'
18383     Don't add '-specs=device-specs/specs-MCU' to the compiler driver's
18384     command line.  The user takes responsibility for supplying the
18385     sub-processes like compiler proper, assembler and linker with
18386     appropriate command line options.  This means that the user has to
18387     supply her private device specs file by means of
18388     '-specs=PATH-TO-SPECS-FILE'.  There is no more need for option
18389     '-mmcu=MCU'.
18390
18391     This option can also serve as a replacement for the older way of
18392     specifying custom device-specs files that needed '-B SOME-PATH' to
18393     point to a directory which contains a folder named 'device-specs'
18394     which contains a specs file named 'specs-MCU', where MCU was
18395     specified by '-mmcu=MCU'.
18396
18397'-Waddr-space-convert'
18398     Warn about conversions between address spaces in the case where the
18399     resulting address space is not contained in the incoming address
18400     space.
18401
18402'-Wmisspelled-isr'
18403     Warn if the ISR is misspelled, i.e. without __vector prefix.
18404     Enabled by default.
18405
184063.19.6.1 'EIND' and Devices with More Than 128 Ki Bytes of Flash
18407................................................................
18408
18409Pointers in the implementation are 16 bits wide.  The address of a
18410function or label is represented as word address so that indirect jumps
18411and calls can target any code address in the range of 64 Ki words.
18412
18413 In order to facilitate indirect jump on devices with more than 128 Ki
18414bytes of program memory space, there is a special function register
18415called 'EIND' that serves as most significant part of the target address
18416when 'EICALL' or 'EIJMP' instructions are used.
18417
18418 Indirect jumps and calls on these devices are handled as follows by the
18419compiler and are subject to some limitations:
18420
18421   * The compiler never sets 'EIND'.
18422
18423   * The compiler uses 'EIND' implicitly in 'EICALL'/'EIJMP'
18424     instructions or might read 'EIND' directly in order to emulate an
18425     indirect call/jump by means of a 'RET' instruction.
18426
18427   * The compiler assumes that 'EIND' never changes during the startup
18428     code or during the application.  In particular, 'EIND' is not
18429     saved/restored in function or interrupt service routine
18430     prologue/epilogue.
18431
18432   * For indirect calls to functions and computed goto, the linker
18433     generates _stubs_.  Stubs are jump pads sometimes also called
18434     _trampolines_.  Thus, the indirect call/jump jumps to such a stub.
18435     The stub contains a direct jump to the desired address.
18436
18437   * Linker relaxation must be turned on so that the linker generates
18438     the stubs correctly in all situations.  See the compiler option
18439     '-mrelax' and the linker option '--relax'.  There are corner cases
18440     where the linker is supposed to generate stubs but aborts without
18441     relaxation and without a helpful error message.
18442
18443   * The default linker script is arranged for code with 'EIND = 0'.  If
18444     code is supposed to work for a setup with 'EIND != 0', a custom
18445     linker script has to be used in order to place the sections whose
18446     name start with '.trampolines' into the segment where 'EIND' points
18447     to.
18448
18449   * The startup code from libgcc never sets 'EIND'.  Notice that
18450     startup code is a blend of code from libgcc and AVR-LibC. For the
18451     impact of AVR-LibC on 'EIND', see the
18452     AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
18453
18454   * It is legitimate for user-specific startup code to set up 'EIND'
18455     early, for example by means of initialization code located in
18456     section '.init3'.  Such code runs prior to general startup code
18457     that initializes RAM and calls constructors, but after the bit of
18458     startup code from AVR-LibC that sets 'EIND' to the segment where
18459     the vector table is located.
18460          #include <avr/io.h>
18461
18462          static void
18463          __attribute__((section(".init3"),naked,used,no_instrument_function))
18464          init3_set_eind (void)
18465          {
18466            __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
18467                            "out %i0,r24" :: "n" (&EIND) : "r24","memory");
18468          }
18469
18470     The '__trampolines_start' symbol is defined in the linker script.
18471
18472   * Stubs are generated automatically by the linker if the following
18473     two conditions are met:
18474
18475        - The address of a label is taken by means of the 'gs' modifier
18476          (short for _generate stubs_) like so:
18477               LDI r24, lo8(gs(FUNC))
18478               LDI r25, hi8(gs(FUNC))
18479        - The final location of that label is in a code segment
18480          _outside_ the segment where the stubs are located.
18481
18482   * The compiler emits such 'gs' modifiers for code labels in the
18483     following situations:
18484        - Taking address of a function or code label.
18485        - Computed goto.
18486        - If prologue-save function is used, see '-mcall-prologues'
18487          command-line option.
18488        - Switch/case dispatch tables.  If you do not want such dispatch
18489          tables you can specify the '-fno-jump-tables' command-line
18490          option.
18491        - C and C++ constructors/destructors called during
18492          startup/shutdown.
18493        - If the tools hit a 'gs()' modifier explained above.
18494
18495   * Jumping to non-symbolic addresses like so is _not_ supported:
18496
18497          int main (void)
18498          {
18499              /* Call function at word address 0x2 */
18500              return ((int(*)(void)) 0x2)();
18501          }
18502
18503     Instead, a stub has to be set up, i.e. the function has to be
18504     called through a symbol ('func_4' in the example):
18505
18506          int main (void)
18507          {
18508              extern int func_4 (void);
18509
18510              /* Call function at byte address 0x4 */
18511              return func_4();
18512          }
18513
18514     and the application be linked with '-Wl,--defsym,func_4=0x4'.
18515     Alternatively, 'func_4' can be defined in the linker script.
18516
185173.19.6.2 Handling of the 'RAMPD', 'RAMPX', 'RAMPY' and 'RAMPZ' Special Function Registers
18518.........................................................................................
18519
18520Some AVR devices support memories larger than the 64 KiB range that can
18521be accessed with 16-bit pointers.  To access memory locations outside
18522this 64 KiB range, the content of a 'RAMP' register is used as high part
18523of the address: The 'X', 'Y', 'Z' address register is concatenated with
18524the 'RAMPX', 'RAMPY', 'RAMPZ' special function register, respectively,
18525to get a wide address.  Similarly, 'RAMPD' is used together with direct
18526addressing.
18527
18528   * The startup code initializes the 'RAMP' special function registers
18529     with zero.
18530
18531   * If a *note named address space: AVR Named Address Spaces. other
18532     than generic or '__flash' is used, then 'RAMPZ' is set as needed
18533     before the operation.
18534
18535   * If the device supports RAM larger than 64 KiB and the compiler
18536     needs to change 'RAMPZ' to accomplish an operation, 'RAMPZ' is
18537     reset to zero after the operation.
18538
18539   * If the device comes with a specific 'RAMP' register, the ISR
18540     prologue/epilogue saves/restores that SFR and initializes it with
18541     zero in case the ISR code might (implicitly) use it.
18542
18543   * RAM larger than 64 KiB is not supported by GCC for AVR targets.  If
18544     you use inline assembler to read from locations outside the 16-bit
18545     address range and change one of the 'RAMP' registers, you must
18546     reset it to zero after the access.
18547
185483.19.6.3 AVR Built-in Macros
18549............................
18550
18551GCC defines several built-in macros so that the user code can test for
18552the presence or absence of features.  Almost any of the following
18553built-in macros are deduced from device capabilities and thus triggered
18554by the '-mmcu=' command-line option.
18555
18556 For even more AVR-specific built-in macros see *note AVR Named Address
18557Spaces:: and *note AVR Built-in Functions::.
18558
18559'__AVR_ARCH__'
18560     Build-in macro that resolves to a decimal number that identifies
18561     the architecture and depends on the '-mmcu=MCU' option.  Possible
18562     values are:
18563
18564     '2', '25', '3', '31', '35', '4', '5', '51', '6'
18565
18566     for MCU='avr2', 'avr25', 'avr3', 'avr31', 'avr35', 'avr4', 'avr5',
18567     'avr51', 'avr6',
18568
18569     respectively and
18570
18571     '100', '102', '103', '104', '105', '106', '107'
18572
18573     for MCU='avrtiny', 'avrxmega2', 'avrxmega3', 'avrxmega4',
18574     'avrxmega5', 'avrxmega6', 'avrxmega7', respectively.  If MCU
18575     specifies a device, this built-in macro is set accordingly.  For
18576     example, with '-mmcu=atmega8' the macro is defined to '4'.
18577
18578'__AVR_DEVICE__'
18579     Setting '-mmcu=DEVICE' defines this built-in macro which reflects
18580     the device's name.  For example, '-mmcu=atmega8' defines the
18581     built-in macro '__AVR_ATmega8__', '-mmcu=attiny261a' defines
18582     '__AVR_ATtiny261A__', etc.
18583
18584     The built-in macros' names follow the scheme '__AVR_DEVICE__' where
18585     DEVICE is the device name as from the AVR user manual.  The
18586     difference between DEVICE in the built-in macro and DEVICE in
18587     '-mmcu=DEVICE' is that the latter is always lowercase.
18588
18589     If DEVICE is not a device but only a core architecture like
18590     'avr51', this macro is not defined.
18591
18592'__AVR_DEVICE_NAME__'
18593     Setting '-mmcu=DEVICE' defines this built-in macro to the device's
18594     name.  For example, with '-mmcu=atmega8' the macro is defined to
18595     'atmega8'.
18596
18597     If DEVICE is not a device but only a core architecture like
18598     'avr51', this macro is not defined.
18599
18600'__AVR_XMEGA__'
18601     The device / architecture belongs to the XMEGA family of devices.
18602
18603'__AVR_HAVE_ELPM__'
18604     The device has the 'ELPM' instruction.
18605
18606'__AVR_HAVE_ELPMX__'
18607     The device has the 'ELPM RN,Z' and 'ELPM RN,Z+' instructions.
18608
18609'__AVR_HAVE_MOVW__'
18610     The device has the 'MOVW' instruction to perform 16-bit
18611     register-register moves.
18612
18613'__AVR_HAVE_LPMX__'
18614     The device has the 'LPM RN,Z' and 'LPM RN,Z+' instructions.
18615
18616'__AVR_HAVE_MUL__'
18617     The device has a hardware multiplier.
18618
18619'__AVR_HAVE_JMP_CALL__'
18620     The device has the 'JMP' and 'CALL' instructions.  This is the case
18621     for devices with more than 8 KiB of program memory.
18622
18623'__AVR_HAVE_EIJMP_EICALL__'
18624'__AVR_3_BYTE_PC__'
18625     The device has the 'EIJMP' and 'EICALL' instructions.  This is the
18626     case for devices with more than 128 KiB of program memory.  This
18627     also means that the program counter (PC) is 3 bytes wide.
18628
18629'__AVR_2_BYTE_PC__'
18630     The program counter (PC) is 2 bytes wide.  This is the case for
18631     devices with up to 128 KiB of program memory.
18632
18633'__AVR_HAVE_8BIT_SP__'
18634'__AVR_HAVE_16BIT_SP__'
18635     The stack pointer (SP) register is treated as 8-bit respectively
18636     16-bit register by the compiler.  The definition of these macros is
18637     affected by '-mtiny-stack'.
18638
18639'__AVR_HAVE_SPH__'
18640'__AVR_SP8__'
18641     The device has the SPH (high part of stack pointer) special
18642     function register or has an 8-bit stack pointer, respectively.  The
18643     definition of these macros is affected by '-mmcu=' and in the cases
18644     of '-mmcu=avr2' and '-mmcu=avr25' also by '-msp8'.
18645
18646'__AVR_HAVE_RAMPD__'
18647'__AVR_HAVE_RAMPX__'
18648'__AVR_HAVE_RAMPY__'
18649'__AVR_HAVE_RAMPZ__'
18650     The device has the 'RAMPD', 'RAMPX', 'RAMPY', 'RAMPZ' special
18651     function register, respectively.
18652
18653'__NO_INTERRUPTS__'
18654     This macro reflects the '-mno-interrupts' command-line option.
18655
18656'__AVR_ERRATA_SKIP__'
18657'__AVR_ERRATA_SKIP_JMP_CALL__'
18658     Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
18659     instructions because of a hardware erratum.  Skip instructions are
18660     'SBRS', 'SBRC', 'SBIS', 'SBIC' and 'CPSE'.  The second macro is
18661     only defined if '__AVR_HAVE_JMP_CALL__' is also set.
18662
18663'__AVR_ISA_RMW__'
18664     The device has Read-Modify-Write instructions (XCH, LAC, LAS and
18665     LAT).
18666
18667'__AVR_SFR_OFFSET__=OFFSET'
18668     Instructions that can address I/O special function registers
18669     directly like 'IN', 'OUT', 'SBI', etc. may use a different address
18670     as if addressed by an instruction to access RAM like 'LD' or 'STS'.
18671     This offset depends on the device architecture and has to be
18672     subtracted from the RAM address in order to get the respective
18673     I/O address.
18674
18675'__AVR_SHORT_CALLS__'
18676     The '-mshort-calls' command line option is set.
18677
18678'__AVR_PM_BASE_ADDRESS__=ADDR'
18679     Some devices support reading from flash memory by means of 'LD*'
18680     instructions.  The flash memory is seen in the data address space
18681     at an offset of '__AVR_PM_BASE_ADDRESS__'.  If this macro is not
18682     defined, this feature is not available.  If defined, the address
18683     space is linear and there is no need to put '.rodata' into RAM.
18684     This is handled by the default linker description file, and is
18685     currently available for 'avrtiny' and 'avrxmega3'.  Even more
18686     convenient, there is no need to use address spaces like '__flash'
18687     or features like attribute 'progmem' and 'pgm_read_*'.
18688
18689'__WITH_AVRLIBC__'
18690     The compiler is configured to be used together with AVR-Libc.  See
18691     the '--with-avrlibc' configure option.
18692
18693'__HAVE_DOUBLE_MULTILIB__'
18694     Defined if '-mdouble=' acts as a multilib option.
18695
18696'__HAVE_DOUBLE32__'
18697'__HAVE_DOUBLE64__'
18698     Defined if the compiler supports 32-bit double resp.  64-bit
18699     double.  The actual layout is specified by option '-mdouble='.
18700
18701'__DEFAULT_DOUBLE__'
18702     The size in bits of 'double' if '-mdouble=' is not set.  To test
18703     the layout of 'double' in a program, use the built-in macro
18704     '__SIZEOF_DOUBLE__'.
18705
18706'__HAVE_LONG_DOUBLE32__'
18707'__HAVE_LONG_DOUBLE64__'
18708'__HAVE_LONG_DOUBLE_MULTILIB__'
18709'__DEFAULT_LONG_DOUBLE__'
18710     Same as above, but for 'long double' instead of 'double'.
18711
18712'__WITH_DOUBLE_COMPARISON__'
18713     Reflects the '--with-double-comparison={tristate|bool|libf7}'
18714     configure option (https://gcc.gnu.org/install/configure.html#avr)
18715     and is defined to '2' or '3'.
18716
18717'__WITH_LIBF7_LIBGCC__'
18718'__WITH_LIBF7_MATH__'
18719'__WITH_LIBF7_MATH_SYMBOLS__'
18720     Reflects the '--with-libf7={libgcc|math|math-symbols}'
18721     configure option (https://gcc.gnu.org/install/configure.html#avr).
18722
18723
18724File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
18725
187263.19.7 Blackfin Options
18727-----------------------
18728
18729'-mcpu=CPU[-SIREVISION]'
18730     Specifies the name of the target Blackfin processor.  Currently,
18731     CPU can be one of 'bf512', 'bf514', 'bf516', 'bf518', 'bf522',
18732     'bf523', 'bf524', 'bf525', 'bf526', 'bf527', 'bf531', 'bf532',
18733     'bf533', 'bf534', 'bf536', 'bf537', 'bf538', 'bf539', 'bf542',
18734     'bf544', 'bf547', 'bf548', 'bf549', 'bf542m', 'bf544m', 'bf547m',
18735     'bf548m', 'bf549m', 'bf561', 'bf592'.
18736
18737     The optional SIREVISION specifies the silicon revision of the
18738     target Blackfin processor.  Any workarounds available for the
18739     targeted silicon revision are enabled.  If SIREVISION is 'none', no
18740     workarounds are enabled.  If SIREVISION is 'any', all workarounds
18741     for the targeted processor are enabled.  The '__SILICON_REVISION__'
18742     macro is defined to two hexadecimal digits representing the major
18743     and minor numbers in the silicon revision.  If SIREVISION is
18744     'none', the '__SILICON_REVISION__' is not defined.  If SIREVISION
18745     is 'any', the '__SILICON_REVISION__' is defined to be '0xffff'.  If
18746     this optional SIREVISION is not used, GCC assumes the latest known
18747     silicon revision of the targeted Blackfin processor.
18748
18749     GCC defines a preprocessor macro for the specified CPU.  For the
18750     'bfin-elf' toolchain, this option causes the hardware BSP provided
18751     by libgloss to be linked in if '-msim' is not given.
18752
18753     Without this option, 'bf532' is used as the processor by default.
18754
18755     Note that support for 'bf561' is incomplete.  For 'bf561', only the
18756     preprocessor macro is defined.
18757
18758'-msim'
18759     Specifies that the program will be run on the simulator.  This
18760     causes the simulator BSP provided by libgloss to be linked in.
18761     This option has effect only for 'bfin-elf' toolchain.  Certain
18762     other options, such as '-mid-shared-library' and '-mfdpic', imply
18763     '-msim'.
18764
18765'-momit-leaf-frame-pointer'
18766     Don't keep the frame pointer in a register for leaf functions.
18767     This avoids the instructions to save, set up and restore frame
18768     pointers and makes an extra register available in leaf functions.
18769
18770'-mspecld-anomaly'
18771     When enabled, the compiler ensures that the generated code does not
18772     contain speculative loads after jump instructions.  If this option
18773     is used, '__WORKAROUND_SPECULATIVE_LOADS' is defined.
18774
18775'-mno-specld-anomaly'
18776     Don't generate extra code to prevent speculative loads from
18777     occurring.
18778
18779'-mcsync-anomaly'
18780     When enabled, the compiler ensures that the generated code does not
18781     contain CSYNC or SSYNC instructions too soon after conditional
18782     branches.  If this option is used, '__WORKAROUND_SPECULATIVE_SYNCS'
18783     is defined.
18784
18785'-mno-csync-anomaly'
18786     Don't generate extra code to prevent CSYNC or SSYNC instructions
18787     from occurring too soon after a conditional branch.
18788
18789'-mlow64k'
18790     When enabled, the compiler is free to take advantage of the
18791     knowledge that the entire program fits into the low 64k of memory.
18792
18793'-mno-low64k'
18794     Assume that the program is arbitrarily large.  This is the default.
18795
18796'-mstack-check-l1'
18797     Do stack checking using information placed into L1 scratchpad
18798     memory by the uClinux kernel.
18799
18800'-mid-shared-library'
18801     Generate code that supports shared libraries via the library ID
18802     method.  This allows for execute in place and shared libraries in
18803     an environment without virtual memory management.  This option
18804     implies '-fPIC'.  With a 'bfin-elf' target, this option implies
18805     '-msim'.
18806
18807'-mno-id-shared-library'
18808     Generate code that doesn't assume ID-based shared libraries are
18809     being used.  This is the default.
18810
18811'-mleaf-id-shared-library'
18812     Generate code that supports shared libraries via the library ID
18813     method, but assumes that this library or executable won't link
18814     against any other ID shared libraries.  That allows the compiler to
18815     use faster code for jumps and calls.
18816
18817'-mno-leaf-id-shared-library'
18818     Do not assume that the code being compiled won't link against any
18819     ID shared libraries.  Slower code is generated for jump and call
18820     insns.
18821
18822'-mshared-library-id=n'
18823     Specifies the identification number of the ID-based shared library
18824     being compiled.  Specifying a value of 0 generates more compact
18825     code; specifying other values forces the allocation of that number
18826     to the current library but is no more space- or time-efficient than
18827     omitting this option.
18828
18829'-msep-data'
18830     Generate code that allows the data segment to be located in a
18831     different area of memory from the text segment.  This allows for
18832     execute in place in an environment without virtual memory
18833     management by eliminating relocations against the text section.
18834
18835'-mno-sep-data'
18836     Generate code that assumes that the data segment follows the text
18837     segment.  This is the default.
18838
18839'-mlong-calls'
18840'-mno-long-calls'
18841     Tells the compiler to perform function calls by first loading the
18842     address of the function into a register and then performing a
18843     subroutine call on this register.  This switch is needed if the
18844     target function lies outside of the 24-bit addressing range of the
18845     offset-based version of subroutine call instruction.
18846
18847     This feature is not enabled by default.  Specifying
18848     '-mno-long-calls' restores the default behavior.  Note these
18849     switches have no effect on how the compiler generates code to
18850     handle function calls via function pointers.
18851
18852'-mfast-fp'
18853     Link with the fast floating-point library.  This library relaxes
18854     some of the IEEE floating-point standard's rules for checking
18855     inputs against Not-a-Number (NAN), in the interest of performance.
18856
18857'-minline-plt'
18858     Enable inlining of PLT entries in function calls to functions that
18859     are not known to bind locally.  It has no effect without '-mfdpic'.
18860
18861'-mmulticore'
18862     Build a standalone application for multicore Blackfin processors.
18863     This option causes proper start files and link scripts supporting
18864     multicore to be used, and defines the macro '__BFIN_MULTICORE'.  It
18865     can only be used with '-mcpu=bf561[-SIREVISION]'.
18866
18867     This option can be used with '-mcorea' or '-mcoreb', which selects
18868     the one-application-per-core programming model.  Without '-mcorea'
18869     or '-mcoreb', the single-application/dual-core programming model is
18870     used.  In this model, the main function of Core B should be named
18871     as 'coreb_main'.
18872
18873     If this option is not used, the single-core application programming
18874     model is used.
18875
18876'-mcorea'
18877     Build a standalone application for Core A of BF561 when using the
18878     one-application-per-core programming model.  Proper start files and
18879     link scripts are used to support Core A, and the macro
18880     '__BFIN_COREA' is defined.  This option can only be used in
18881     conjunction with '-mmulticore'.
18882
18883'-mcoreb'
18884     Build a standalone application for Core B of BF561 when using the
18885     one-application-per-core programming model.  Proper start files and
18886     link scripts are used to support Core B, and the macro
18887     '__BFIN_COREB' is defined.  When this option is used, 'coreb_main'
18888     should be used instead of 'main'.  This option can only be used in
18889     conjunction with '-mmulticore'.
18890
18891'-msdram'
18892     Build a standalone application for SDRAM. Proper start files and
18893     link scripts are used to put the application into SDRAM, and the
18894     macro '__BFIN_SDRAM' is defined.  The loader should initialize
18895     SDRAM before loading the application.
18896
18897'-micplb'
18898     Assume that ICPLBs are enabled at run time.  This has an effect on
18899     certain anomaly workarounds.  For Linux targets, the default is to
18900     assume ICPLBs are enabled; for standalone applications the default
18901     is off.
18902
18903
18904File: gcc.info,  Node: C6X Options,  Next: CRIS Options,  Prev: Blackfin Options,  Up: Submodel Options
18905
189063.19.8 C6X Options
18907------------------
18908
18909'-march=NAME'
18910     This specifies the name of the target architecture.  GCC uses this
18911     name to determine what kind of instructions it can emit when
18912     generating assembly code.  Permissible names are: 'c62x', 'c64x',
18913     'c64x+', 'c67x', 'c67x+', 'c674x'.
18914
18915'-mbig-endian'
18916     Generate code for a big-endian target.
18917
18918'-mlittle-endian'
18919     Generate code for a little-endian target.  This is the default.
18920
18921'-msim'
18922     Choose startup files and linker script suitable for the simulator.
18923
18924'-msdata=default'
18925     Put small global and static data in the '.neardata' section, which
18926     is pointed to by register 'B14'.  Put small uninitialized global
18927     and static data in the '.bss' section, which is adjacent to the
18928     '.neardata' section.  Put small read-only data into the '.rodata'
18929     section.  The corresponding sections used for large pieces of data
18930     are '.fardata', '.far' and '.const'.
18931
18932'-msdata=all'
18933     Put all data, not just small objects, into the sections reserved
18934     for small data, and use addressing relative to the 'B14' register
18935     to access them.
18936
18937'-msdata=none'
18938     Make no use of the sections reserved for small data, and use
18939     absolute addresses to access all data.  Put all initialized global
18940     and static data in the '.fardata' section, and all uninitialized
18941     data in the '.far' section.  Put all constant data into the
18942     '.const' section.
18943
18944
18945File: gcc.info,  Node: CRIS Options,  Next: CR16 Options,  Prev: C6X Options,  Up: Submodel Options
18946
189473.19.9 CRIS Options
18948-------------------
18949
18950These options are defined specifically for the CRIS ports.
18951
18952'-march=ARCHITECTURE-TYPE'
18953'-mcpu=ARCHITECTURE-TYPE'
18954     Generate code for the specified architecture.  The choices for
18955     ARCHITECTURE-TYPE are 'v3', 'v8' and 'v10' for respectively
18956     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is 'v0' except for
18957     cris-axis-linux-gnu, where the default is 'v10'.
18958
18959'-mtune=ARCHITECTURE-TYPE'
18960     Tune to ARCHITECTURE-TYPE everything applicable about the generated
18961     code, except for the ABI and the set of available instructions.
18962     The choices for ARCHITECTURE-TYPE are the same as for
18963     '-march=ARCHITECTURE-TYPE'.
18964
18965'-mmax-stack-frame=N'
18966     Warn when the stack frame of a function exceeds N bytes.
18967
18968'-metrax4'
18969'-metrax100'
18970     The options '-metrax4' and '-metrax100' are synonyms for
18971     '-march=v3' and '-march=v8' respectively.
18972
18973'-mmul-bug-workaround'
18974'-mno-mul-bug-workaround'
18975     Work around a bug in the 'muls' and 'mulu' instructions for CPU
18976     models where it applies.  This option is active by default.
18977
18978'-mpdebug'
18979     Enable CRIS-specific verbose debug-related information in the
18980     assembly code.  This option also has the effect of turning off the
18981     '#NO_APP' formatted-code indicator to the assembler at the
18982     beginning of the assembly file.
18983
18984'-mcc-init'
18985     Do not use condition-code results from previous instruction; always
18986     emit compare and test instructions before use of condition codes.
18987
18988'-mno-side-effects'
18989     Do not emit instructions with side effects in addressing modes
18990     other than post-increment.
18991
18992'-mstack-align'
18993'-mno-stack-align'
18994'-mdata-align'
18995'-mno-data-align'
18996'-mconst-align'
18997'-mno-const-align'
18998     These options ('no-' options) arrange (eliminate arrangements) for
18999     the stack frame, individual data and constants to be aligned for
19000     the maximum single data access size for the chosen CPU model.  The
19001     default is to arrange for 32-bit alignment.  ABI details such as
19002     structure layout are not affected by these options.
19003
19004'-m32-bit'
19005'-m16-bit'
19006'-m8-bit'
19007     Similar to the stack- data- and const-align options above, these
19008     options arrange for stack frame, writable data and constants to all
19009     be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
19010     alignment.
19011
19012'-mno-prologue-epilogue'
19013'-mprologue-epilogue'
19014     With '-mno-prologue-epilogue', the normal function prologue and
19015     epilogue which set up the stack frame are omitted and no return
19016     instructions or return sequences are generated in the code.  Use
19017     this option only together with visual inspection of the compiled
19018     code: no warnings or errors are generated when call-saved registers
19019     must be saved, or storage for local variables needs to be
19020     allocated.
19021
19022'-mno-gotplt'
19023'-mgotplt'
19024     With '-fpic' and '-fPIC', don't generate (do generate) instruction
19025     sequences that load addresses for functions from the PLT part of
19026     the GOT rather than (traditional on other architectures) calls to
19027     the PLT.  The default is '-mgotplt'.
19028
19029'-melf'
19030     Legacy no-op option only recognized with the cris-axis-elf and
19031     cris-axis-linux-gnu targets.
19032
19033'-mlinux'
19034     Legacy no-op option only recognized with the cris-axis-linux-gnu
19035     target.
19036
19037'-sim'
19038     This option, recognized for the cris-axis-elf, arranges to link
19039     with input-output functions from a simulator library.  Code,
19040     initialized data and zero-initialized data are allocated
19041     consecutively.
19042
19043'-sim2'
19044     Like '-sim', but pass linker options to locate initialized data at
19045     0x40000000 and zero-initialized data at 0x80000000.
19046
19047
19048File: gcc.info,  Node: CR16 Options,  Next: C-SKY Options,  Prev: CRIS Options,  Up: Submodel Options
19049
190503.19.10 CR16 Options
19051--------------------
19052
19053These options are defined specifically for the CR16 ports.
19054
19055'-mmac'
19056     Enable the use of multiply-accumulate instructions.  Disabled by
19057     default.
19058
19059'-mcr16cplus'
19060'-mcr16c'
19061     Generate code for CR16C or CR16C+ architecture.  CR16C+
19062     architecture is default.
19063
19064'-msim'
19065     Links the library libsim.a which is in compatible with simulator.
19066     Applicable to ELF compiler only.
19067
19068'-mint32'
19069     Choose integer type as 32-bit wide.
19070
19071'-mbit-ops'
19072     Generates 'sbit'/'cbit' instructions for bit manipulations.
19073
19074'-mdata-model=MODEL'
19075     Choose a data model.  The choices for MODEL are 'near', 'far' or
19076     'medium'.  'medium' is default.  However, 'far' is not valid with
19077     '-mcr16c', as the CR16C architecture does not support the far data
19078     model.
19079
19080
19081File: gcc.info,  Node: C-SKY Options,  Next: Darwin Options,  Prev: CR16 Options,  Up: Submodel Options
19082
190833.19.11 C-SKY Options
19084---------------------
19085
19086GCC supports these options when compiling for C-SKY V2 processors.
19087
19088'-march=ARCH'
19089     Specify the C-SKY target architecture.  Valid values for ARCH are:
19090     'ck801', 'ck802', 'ck803', 'ck807', and 'ck810'.  The default is
19091     'ck810'.
19092
19093'-mcpu=CPU'
19094     Specify the C-SKY target processor.  Valid values for CPU are:
19095     'ck801', 'ck801t', 'ck802', 'ck802t', 'ck802j', 'ck803', 'ck803h',
19096     'ck803t', 'ck803ht', 'ck803f', 'ck803fh', 'ck803e', 'ck803eh',
19097     'ck803et', 'ck803eht', 'ck803ef', 'ck803efh', 'ck803ft',
19098     'ck803eft', 'ck803efht', 'ck803r1', 'ck803hr1', 'ck803tr1',
19099     'ck803htr1', 'ck803fr1', 'ck803fhr1', 'ck803er1', 'ck803ehr1',
19100     'ck803etr1', 'ck803ehtr1', 'ck803efr1', 'ck803efhr1', 'ck803ftr1',
19101     'ck803eftr1', 'ck803efhtr1', 'ck803s', 'ck803st', 'ck803se',
19102     'ck803sf', 'ck803sef', 'ck803seft', 'ck807e', 'ck807ef', 'ck807',
19103     'ck807f', 'ck810e', 'ck810et', 'ck810ef', 'ck810eft', 'ck810',
19104     'ck810v', 'ck810f', 'ck810t', 'ck810fv', 'ck810tv', 'ck810ft', and
19105     'ck810ftv'.
19106
19107'-mbig-endian'
19108'-EB'
19109'-mlittle-endian'
19110'-EL'
19111
19112     Select big- or little-endian code.  The default is little-endian.
19113
19114'-mhard-float'
19115'-msoft-float'
19116
19117     Select hardware or software floating-point implementations.  The
19118     default is soft float.
19119
19120'-mdouble-float'
19121'-mno-double-float'
19122     When '-mhard-float' is in effect, enable generation of
19123     double-precision float instructions.  This is the default except
19124     when compiling for CK803.
19125
19126'-mfdivdu'
19127'-mno-fdivdu'
19128     When '-mhard-float' is in effect, enable generation of 'frecipd',
19129     'fsqrtd', and 'fdivd' instructions.  This is the default except
19130     when compiling for CK803.
19131
19132'-mfpu=FPU'
19133     Select the floating-point processor.  This option can only be used
19134     with '-mhard-float'.  Values for FPU are 'fpv2_sf' (equivalent to
19135     '-mno-double-float -mno-fdivdu'), 'fpv2' ('-mdouble-float
19136     -mno-divdu'), and 'fpv2_divd' ('-mdouble-float -mdivdu').
19137
19138'-melrw'
19139'-mno-elrw'
19140     Enable the extended 'lrw' instruction.  This option defaults to on
19141     for CK801 and off otherwise.
19142
19143'-mistack'
19144'-mno-istack'
19145     Enable interrupt stack instructions; the default is off.
19146
19147     The '-mistack' option is required to handle the 'interrupt' and
19148     'isr' function attributes (*note C-SKY Function Attributes::).
19149
19150'-mmp'
19151     Enable multiprocessor instructions; the default is off.
19152
19153'-mcp'
19154     Enable coprocessor instructions; the default is off.
19155
19156'-mcache'
19157     Enable coprocessor instructions; the default is off.
19158
19159'-msecurity'
19160     Enable C-SKY security instructions; the default is off.
19161
19162'-mtrust'
19163     Enable C-SKY trust instructions; the default is off.
19164
19165'-mdsp'
19166'-medsp'
19167'-mvdsp'
19168     Enable C-SKY DSP, Enhanced DSP, or Vector DSP instructions,
19169     respectively.  All of these options default to off.
19170
19171'-mdiv'
19172'-mno-div'
19173     Generate divide instructions.  Default is off.
19174
19175'-msmart'
19176'-mno-smart'
19177     Generate code for Smart Mode, using only registers numbered 0-7 to
19178     allow use of 16-bit instructions.  This option is ignored for CK801
19179     where this is the required behavior, and it defaults to on for
19180     CK802.  For other targets, the default is off.
19181
19182'-mhigh-registers'
19183'-mno-high-registers'
19184     Generate code using the high registers numbered 16-31.  This option
19185     is not supported on CK801, CK802, or CK803, and is enabled by
19186     default for other processors.
19187
19188'-manchor'
19189'-mno-anchor'
19190     Generate code using global anchor symbol addresses.
19191
19192'-mpushpop'
19193'-mno-pushpop'
19194     Generate code using 'push' and 'pop' instructions.  This option
19195     defaults to on.
19196
19197'-mmultiple-stld'
19198'-mstm'
19199'-mno-multiple-stld'
19200'-mno-stm'
19201     Generate code using 'stm' and 'ldm' instructions.  This option
19202     isn't supported on CK801 but is enabled by default on other
19203     processors.
19204
19205'-mconstpool'
19206'-mno-constpool'
19207     Create constant pools in the compiler instead of deferring it to
19208     the assembler.  This option is the default and required for correct
19209     code generation on CK801 and CK802, and is optional on other
19210     processors.
19211
19212'-mstack-size'
19213'-mno-stack-size'
19214     Emit '.stack_size' directives for each function in the assembly
19215     output.  This option defaults to off.
19216
19217'-mccrt'
19218'-mno-ccrt'
19219     Generate code for the C-SKY compiler runtime instead of libgcc.
19220     This option defaults to off.
19221
19222'-mbranch-cost=N'
19223     Set the branch costs to roughly 'n' instructions.  The default is
19224     1.
19225
19226'-msched-prolog'
19227'-mno-sched-prolog'
19228     Permit scheduling of function prologue and epilogue sequences.
19229     Using this option can result in code that is not compliant with the
19230     C-SKY V2 ABI prologue requirements and that cannot be debugged or
19231     backtraced.  It is disabled by default.
19232
19233
19234File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: C-SKY Options,  Up: Submodel Options
19235
192363.19.12 Darwin Options
19237----------------------
19238
19239These options are defined for all architectures running the Darwin
19240operating system.
19241
19242 FSF GCC on Darwin does not create "fat" object files; it creates an
19243object file for the single architecture that GCC was built to target.
19244Apple's GCC on Darwin does create "fat" files if multiple '-arch'
19245options are used; it does so by running the compiler or linker multiple
19246times and joining the results together with 'lipo'.
19247
19248 The subtype of the file created (like 'ppc7400' or 'ppc970' or 'i686')
19249is determined by the flags that specify the ISA that GCC is targeting,
19250like '-mcpu' or '-march'.  The '-force_cpusubtype_ALL' option can be
19251used to override this.
19252
19253 The Darwin tools vary in their behavior when presented with an ISA
19254mismatch.  The assembler, 'as', only permits instructions to be used
19255that are valid for the subtype of the file it is generating, so you
19256cannot put 64-bit instructions in a 'ppc750' object file.  The linker
19257for shared libraries, '/usr/bin/libtool', fails and prints an error if
19258asked to create a shared library with a less restrictive subtype than
19259its input files (for instance, trying to put a 'ppc970' object file in a
19260'ppc7400' library).  The linker for executables, 'ld', quietly gives the
19261executable the most restrictive subtype of any of its input files.
19262
19263'-FDIR'
19264     Add the framework directory DIR to the head of the list of
19265     directories to be searched for header files.  These directories are
19266     interleaved with those specified by '-I' options and are scanned in
19267     a left-to-right order.
19268
19269     A framework directory is a directory with frameworks in it.  A
19270     framework is a directory with a 'Headers' and/or 'PrivateHeaders'
19271     directory contained directly in it that ends in '.framework'.  The
19272     name of a framework is the name of this directory excluding the
19273     '.framework'.  Headers associated with the framework are found in
19274     one of those two directories, with 'Headers' being searched first.
19275     A subframework is a framework directory that is in a framework's
19276     'Frameworks' directory.  Includes of subframework headers can only
19277     appear in a header of a framework that contains the subframework,
19278     or in a sibling subframework header.  Two subframeworks are
19279     siblings if they occur in the same framework.  A subframework
19280     should not have the same name as a framework; a warning is issued
19281     if this is violated.  Currently a subframework cannot have
19282     subframeworks; in the future, the mechanism may be extended to
19283     support this.  The standard frameworks can be found in
19284     '/System/Library/Frameworks' and '/Library/Frameworks'.  An example
19285     include looks like '#include <Framework/header.h>', where
19286     'Framework' denotes the name of the framework and 'header.h' is
19287     found in the 'PrivateHeaders' or 'Headers' directory.
19288
19289'-iframeworkDIR'
19290     Like '-F' except the directory is a treated as a system directory.
19291     The main difference between this '-iframework' and '-F' is that
19292     with '-iframework' the compiler does not warn about constructs
19293     contained within header files found via DIR.  This option is valid
19294     only for the C family of languages.
19295
19296'-gused'
19297     Emit debugging information for symbols that are used.  For stabs
19298     debugging format, this enables '-feliminate-unused-debug-symbols'.
19299     This is by default ON.
19300
19301'-gfull'
19302     Emit debugging information for all symbols and types.
19303
19304'-mmacosx-version-min=VERSION'
19305     The earliest version of MacOS X that this executable will run on is
19306     VERSION.  Typical values of VERSION include '10.1', '10.2', and
19307     '10.3.9'.
19308
19309     If the compiler was built to use the system's headers by default,
19310     then the default for this option is the system version on which the
19311     compiler is running, otherwise the default is to make choices that
19312     are compatible with as many systems and code bases as possible.
19313
19314'-mkernel'
19315     Enable kernel development mode.  The '-mkernel' option sets
19316     '-static', '-fno-common', '-fno-use-cxa-atexit', '-fno-exceptions',
19317     '-fno-non-call-exceptions', '-fapple-kext', '-fno-weak' and
19318     '-fno-rtti' where applicable.  This mode also sets '-mno-altivec',
19319     '-msoft-float', '-fno-builtin' and '-mlong-branch' for PowerPC
19320     targets.
19321
19322'-mone-byte-bool'
19323     Override the defaults for 'bool' so that 'sizeof(bool)==1'.  By
19324     default 'sizeof(bool)' is '4' when compiling for Darwin/PowerPC and
19325     '1' when compiling for Darwin/x86, so this option has no effect on
19326     x86.
19327
19328     *Warning:* The '-mone-byte-bool' switch causes GCC to generate code
19329     that is not binary compatible with code generated without that
19330     switch.  Using this switch may require recompiling all other
19331     modules in a program, including system libraries.  Use this switch
19332     to conform to a non-default data model.
19333
19334'-mfix-and-continue'
19335'-ffix-and-continue'
19336'-findirect-data'
19337     Generate code suitable for fast turnaround development, such as to
19338     allow GDB to dynamically load '.o' files into already-running
19339     programs.  '-findirect-data' and '-ffix-and-continue' are provided
19340     for backwards compatibility.
19341
19342'-all_load'
19343     Loads all members of static archive libraries.  See man ld(1) for
19344     more information.
19345
19346'-arch_errors_fatal'
19347     Cause the errors having to do with files that have the wrong
19348     architecture to be fatal.
19349
19350'-bind_at_load'
19351     Causes the output file to be marked such that the dynamic linker
19352     will bind all undefined references when the file is loaded or
19353     launched.
19354
19355'-bundle'
19356     Produce a Mach-o bundle format file.  See man ld(1) for more
19357     information.
19358
19359'-bundle_loader EXECUTABLE'
19360     This option specifies the EXECUTABLE that will load the build
19361     output file being linked.  See man ld(1) for more information.
19362
19363'-dynamiclib'
19364     When passed this option, GCC produces a dynamic library instead of
19365     an executable when linking, using the Darwin 'libtool' command.
19366
19367'-force_cpusubtype_ALL'
19368     This causes GCC's output file to have the 'ALL' subtype, instead of
19369     one controlled by the '-mcpu' or '-march' option.
19370
19371'-allowable_client CLIENT_NAME'
19372'-client_name'
19373'-compatibility_version'
19374'-current_version'
19375'-dead_strip'
19376'-dependency-file'
19377'-dylib_file'
19378'-dylinker_install_name'
19379'-dynamic'
19380'-exported_symbols_list'
19381'-filelist'
19382'-flat_namespace'
19383'-force_flat_namespace'
19384'-headerpad_max_install_names'
19385'-image_base'
19386'-init'
19387'-install_name'
19388'-keep_private_externs'
19389'-multi_module'
19390'-multiply_defined'
19391'-multiply_defined_unused'
19392'-noall_load'
19393'-no_dead_strip_inits_and_terms'
19394'-nofixprebinding'
19395'-nomultidefs'
19396'-noprebind'
19397'-noseglinkedit'
19398'-pagezero_size'
19399'-prebind'
19400'-prebind_all_twolevel_modules'
19401'-private_bundle'
19402'-read_only_relocs'
19403'-sectalign'
19404'-sectobjectsymbols'
19405'-whyload'
19406'-seg1addr'
19407'-sectcreate'
19408'-sectobjectsymbols'
19409'-sectorder'
19410'-segaddr'
19411'-segs_read_only_addr'
19412'-segs_read_write_addr'
19413'-seg_addr_table'
19414'-seg_addr_table_filename'
19415'-seglinkedit'
19416'-segprot'
19417'-segs_read_only_addr'
19418'-segs_read_write_addr'
19419'-single_module'
19420'-static'
19421'-sub_library'
19422'-sub_umbrella'
19423'-twolevel_namespace'
19424'-umbrella'
19425'-undefined'
19426'-unexported_symbols_list'
19427'-weak_reference_mismatches'
19428'-whatsloaded'
19429     These options are passed to the Darwin linker.  The Darwin linker
19430     man page describes them in detail.
19431
19432
19433File: gcc.info,  Node: DEC Alpha Options,  Next: eBPF Options,  Prev: Darwin Options,  Up: Submodel Options
19434
194353.19.13 DEC Alpha Options
19436-------------------------
19437
19438These '-m' options are defined for the DEC Alpha implementations:
19439
19440'-mno-soft-float'
19441'-msoft-float'
19442     Use (do not use) the hardware floating-point instructions for
19443     floating-point operations.  When '-msoft-float' is specified,
19444     functions in 'libgcc.a' are used to perform floating-point
19445     operations.  Unless they are replaced by routines that emulate the
19446     floating-point operations, or compiled in such a way as to call
19447     such emulations routines, these routines issue floating-point
19448     operations.  If you are compiling for an Alpha without
19449     floating-point operations, you must ensure that the library is
19450     built so as not to call them.
19451
19452     Note that Alpha implementations without floating-point operations
19453     are required to have floating-point registers.
19454
19455'-mfp-reg'
19456'-mno-fp-regs'
19457     Generate code that uses (does not use) the floating-point register
19458     set.  '-mno-fp-regs' implies '-msoft-float'.  If the floating-point
19459     register set is not used, floating-point operands are passed in
19460     integer registers as if they were integers and floating-point
19461     results are passed in '$0' instead of '$f0'.  This is a
19462     non-standard calling sequence, so any function with a
19463     floating-point argument or return value called by code compiled
19464     with '-mno-fp-regs' must also be compiled with that option.
19465
19466     A typical use of this option is building a kernel that does not
19467     use, and hence need not save and restore, any floating-point
19468     registers.
19469
19470'-mieee'
19471     The Alpha architecture implements floating-point hardware optimized
19472     for maximum performance.  It is mostly compliant with the IEEE
19473     floating-point standard.  However, for full compliance, software
19474     assistance is required.  This option generates code fully
19475     IEEE-compliant code _except_ that the INEXACT-FLAG is not
19476     maintained (see below).  If this option is turned on, the
19477     preprocessor macro '_IEEE_FP' is defined during compilation.  The
19478     resulting code is less efficient but is able to correctly support
19479     denormalized numbers and exceptional IEEE values such as
19480     not-a-number and plus/minus infinity.  Other Alpha compilers call
19481     this option '-ieee_with_no_inexact'.
19482
19483'-mieee-with-inexact'
19484     This is like '-mieee' except the generated code also maintains the
19485     IEEE INEXACT-FLAG.  Turning on this option causes the generated
19486     code to implement fully-compliant IEEE math.  In addition to
19487     '_IEEE_FP', '_IEEE_FP_EXACT' is defined as a preprocessor macro.
19488     On some Alpha implementations the resulting code may execute
19489     significantly slower than the code generated by default.  Since
19490     there is very little code that depends on the INEXACT-FLAG, you
19491     should normally not specify this option.  Other Alpha compilers
19492     call this option '-ieee_with_inexact'.
19493
19494'-mfp-trap-mode=TRAP-MODE'
19495     This option controls what floating-point related traps are enabled.
19496     Other Alpha compilers call this option '-fptm TRAP-MODE'.  The trap
19497     mode can be set to one of four values:
19498
19499     'n'
19500          This is the default (normal) setting.  The only traps that are
19501          enabled are the ones that cannot be disabled in software
19502          (e.g., division by zero trap).
19503
19504     'u'
19505          In addition to the traps enabled by 'n', underflow traps are
19506          enabled as well.
19507
19508     'su'
19509          Like 'u', but the instructions are marked to be safe for
19510          software completion (see Alpha architecture manual for
19511          details).
19512
19513     'sui'
19514          Like 'su', but inexact traps are enabled as well.
19515
19516'-mfp-rounding-mode=ROUNDING-MODE'
19517     Selects the IEEE rounding mode.  Other Alpha compilers call this
19518     option '-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
19519
19520     'n'
19521          Normal IEEE rounding mode.  Floating-point numbers are rounded
19522          towards the nearest machine number or towards the even machine
19523          number in case of a tie.
19524
19525     'm'
19526          Round towards minus infinity.
19527
19528     'c'
19529          Chopped rounding mode.  Floating-point numbers are rounded
19530          towards zero.
19531
19532     'd'
19533          Dynamic rounding mode.  A field in the floating-point control
19534          register (FPCR, see Alpha architecture reference manual)
19535          controls the rounding mode in effect.  The C library
19536          initializes this register for rounding towards plus infinity.
19537          Thus, unless your program modifies the FPCR, 'd' corresponds
19538          to round towards plus infinity.
19539
19540'-mtrap-precision=TRAP-PRECISION'
19541     In the Alpha architecture, floating-point traps are imprecise.
19542     This means without software assistance it is impossible to recover
19543     from a floating trap and program execution normally needs to be
19544     terminated.  GCC can generate code that can assist operating system
19545     trap handlers in determining the exact location that caused a
19546     floating-point trap.  Depending on the requirements of an
19547     application, different levels of precisions can be selected:
19548
19549     'p'
19550          Program precision.  This option is the default and means a
19551          trap handler can only identify which program caused a
19552          floating-point exception.
19553
19554     'f'
19555          Function precision.  The trap handler can determine the
19556          function that caused a floating-point exception.
19557
19558     'i'
19559          Instruction precision.  The trap handler can determine the
19560          exact instruction that caused a floating-point exception.
19561
19562     Other Alpha compilers provide the equivalent options called
19563     '-scope_safe' and '-resumption_safe'.
19564
19565'-mieee-conformant'
19566     This option marks the generated code as IEEE conformant.  You must
19567     not use this option unless you also specify '-mtrap-precision=i'
19568     and either '-mfp-trap-mode=su' or '-mfp-trap-mode=sui'.  Its only
19569     effect is to emit the line '.eflag 48' in the function prologue of
19570     the generated assembly file.
19571
19572'-mbuild-constants'
19573     Normally GCC examines a 32- or 64-bit integer constant to see if it
19574     can construct it from smaller constants in two or three
19575     instructions.  If it cannot, it outputs the constant as a literal
19576     and generates code to load it from the data segment at run time.
19577
19578     Use this option to require GCC to construct _all_ integer constants
19579     using code, even if it takes more instructions (the maximum is
19580     six).
19581
19582     You typically use this option to build a shared library dynamic
19583     loader.  Itself a shared library, it must relocate itself in memory
19584     before it can find the variables and constants in its own data
19585     segment.
19586
19587'-mbwx'
19588'-mno-bwx'
19589'-mcix'
19590'-mno-cix'
19591'-mfix'
19592'-mno-fix'
19593'-mmax'
19594'-mno-max'
19595     Indicate whether GCC should generate code to use the optional BWX,
19596     CIX, FIX and MAX instruction sets.  The default is to use the
19597     instruction sets supported by the CPU type specified via '-mcpu='
19598     option or that of the CPU on which GCC was built if none is
19599     specified.
19600
19601'-mfloat-vax'
19602'-mfloat-ieee'
19603     Generate code that uses (does not use) VAX F and G floating-point
19604     arithmetic instead of IEEE single and double precision.
19605
19606'-mexplicit-relocs'
19607'-mno-explicit-relocs'
19608     Older Alpha assemblers provided no way to generate symbol
19609     relocations except via assembler macros.  Use of these macros does
19610     not allow optimal instruction scheduling.  GNU binutils as of
19611     version 2.12 supports a new syntax that allows the compiler to
19612     explicitly mark which relocations should apply to which
19613     instructions.  This option is mostly useful for debugging, as GCC
19614     detects the capabilities of the assembler when it is built and sets
19615     the default accordingly.
19616
19617'-msmall-data'
19618'-mlarge-data'
19619     When '-mexplicit-relocs' is in effect, static data is accessed via
19620     "gp-relative" relocations.  When '-msmall-data' is used, objects 8
19621     bytes long or smaller are placed in a "small data area" (the
19622     '.sdata' and '.sbss' sections) and are accessed via 16-bit
19623     relocations off of the '$gp' register.  This limits the size of the
19624     small data area to 64KB, but allows the variables to be directly
19625     accessed via a single instruction.
19626
19627     The default is '-mlarge-data'.  With this option the data area is
19628     limited to just below 2GB.  Programs that require more than 2GB of
19629     data must use 'malloc' or 'mmap' to allocate the data in the heap
19630     instead of in the program's data segment.
19631
19632     When generating code for shared libraries, '-fpic' implies
19633     '-msmall-data' and '-fPIC' implies '-mlarge-data'.
19634
19635'-msmall-text'
19636'-mlarge-text'
19637     When '-msmall-text' is used, the compiler assumes that the code of
19638     the entire program (or shared library) fits in 4MB, and is thus
19639     reachable with a branch instruction.  When '-msmall-data' is used,
19640     the compiler can assume that all local symbols share the same '$gp'
19641     value, and thus reduce the number of instructions required for a
19642     function call from 4 to 1.
19643
19644     The default is '-mlarge-text'.
19645
19646'-mcpu=CPU_TYPE'
19647     Set the instruction set and instruction scheduling parameters for
19648     machine type CPU_TYPE.  You can specify either the 'EV' style name
19649     or the corresponding chip number.  GCC supports scheduling
19650     parameters for the EV4, EV5 and EV6 family of processors and
19651     chooses the default values for the instruction set from the
19652     processor you specify.  If you do not specify a processor type, GCC
19653     defaults to the processor on which the compiler was built.
19654
19655     Supported values for CPU_TYPE are
19656
19657     'ev4'
19658     'ev45'
19659     '21064'
19660          Schedules as an EV4 and has no instruction set extensions.
19661
19662     'ev5'
19663     '21164'
19664          Schedules as an EV5 and has no instruction set extensions.
19665
19666     'ev56'
19667     '21164a'
19668          Schedules as an EV5 and supports the BWX extension.
19669
19670     'pca56'
19671     '21164pc'
19672     '21164PC'
19673          Schedules as an EV5 and supports the BWX and MAX extensions.
19674
19675     'ev6'
19676     '21264'
19677          Schedules as an EV6 and supports the BWX, FIX, and MAX
19678          extensions.
19679
19680     'ev67'
19681     '21264a'
19682          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
19683          extensions.
19684
19685     Native toolchains also support the value 'native', which selects
19686     the best architecture option for the host processor.
19687     '-mcpu=native' has no effect if GCC does not recognize the
19688     processor.
19689
19690'-mtune=CPU_TYPE'
19691     Set only the instruction scheduling parameters for machine type
19692     CPU_TYPE.  The instruction set is not changed.
19693
19694     Native toolchains also support the value 'native', which selects
19695     the best architecture option for the host processor.
19696     '-mtune=native' has no effect if GCC does not recognize the
19697     processor.
19698
19699'-mmemory-latency=TIME'
19700     Sets the latency the scheduler should assume for typical memory
19701     references as seen by the application.  This number is highly
19702     dependent on the memory access patterns used by the application and
19703     the size of the external cache on the machine.
19704
19705     Valid options for TIME are
19706
19707     'NUMBER'
19708          A decimal number representing clock cycles.
19709
19710     'L1'
19711     'L2'
19712     'L3'
19713     'main'
19714          The compiler contains estimates of the number of clock cycles
19715          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
19716          (also called Dcache, Scache, and Bcache), as well as to main
19717          memory.  Note that L3 is only valid for EV5.
19718
19719
19720File: gcc.info,  Node: eBPF Options,  Next: FR30 Options,  Prev: DEC Alpha Options,  Up: Submodel Options
19721
197223.19.14 eBPF Options
19723--------------------
19724
19725'-mframe-limit=BYTES'
19726     This specifies the hard limit for frame sizes, in bytes.
19727     Currently, the value that can be specified should be less than or
19728     equal to '32767'.  Defaults to whatever limit is imposed by the
19729     version of the Linux kernel targeted.
19730
19731'-mkernel=VERSION'
19732     This specifies the minimum version of the kernel that will run the
19733     compiled program.  GCC uses this version to determine which
19734     instructions to use, what kernel helpers to allow, etc.  Currently,
19735     VERSION can be one of '4.0', '4.1', '4.2', '4.3', '4.4', '4.5',
19736     '4.6', '4.7', '4.8', '4.9', '4.10', '4.11', '4.12', '4.13', '4.14',
19737     '4.15', '4.16', '4.17', '4.18', '4.19', '4.20', '5.0', '5.1',
19738     '5.2', 'latest' and 'native'.
19739
19740'-mbig-endian'
19741     Generate code for a big-endian target.
19742
19743'-mlittle-endian'
19744     Generate code for a little-endian target.  This is the default.
19745
19746'-mxbpf'
19747     Generate code for an expanded version of BPF, which relaxes some of
19748     the restrictions imposed by the BPF architecture:
19749        - Save and restore callee-saved registers at function entry and
19750          exit, respectively.
19751
19752
19753File: gcc.info,  Node: FR30 Options,  Next: FT32 Options,  Prev: eBPF Options,  Up: Submodel Options
19754
197553.19.15 FR30 Options
19756--------------------
19757
19758These options are defined specifically for the FR30 port.
19759
19760'-msmall-model'
19761     Use the small address space model.  This can produce smaller code,
19762     but it does assume that all symbolic values and addresses fit into
19763     a 20-bit range.
19764
19765'-mno-lsim'
19766     Assume that runtime support has been provided and so there is no
19767     need to include the simulator library ('libsim.a') on the linker
19768     command line.
19769
19770
19771File: gcc.info,  Node: FT32 Options,  Next: FRV Options,  Prev: FR30 Options,  Up: Submodel Options
19772
197733.19.16 FT32 Options
19774--------------------
19775
19776These options are defined specifically for the FT32 port.
19777
19778'-msim'
19779     Specifies that the program will be run on the simulator.  This
19780     causes an alternate runtime startup and library to be linked.  You
19781     must not use this option when generating programs that will run on
19782     real hardware; you must provide your own runtime library for
19783     whatever I/O functions are needed.
19784
19785'-mlra'
19786     Enable Local Register Allocation.  This is still experimental for
19787     FT32, so by default the compiler uses standard reload.
19788
19789'-mnodiv'
19790     Do not use div and mod instructions.
19791
19792'-mft32b'
19793     Enable use of the extended instructions of the FT32B processor.
19794
19795'-mcompress'
19796     Compress all code using the Ft32B code compression scheme.
19797
19798'-mnopm'
19799     Do not generate code that reads program memory.
19800
19801
19802File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FT32 Options,  Up: Submodel Options
19803
198043.19.17 FRV Options
19805-------------------
19806
19807'-mgpr-32'
19808
19809     Only use the first 32 general-purpose registers.
19810
19811'-mgpr-64'
19812
19813     Use all 64 general-purpose registers.
19814
19815'-mfpr-32'
19816
19817     Use only the first 32 floating-point registers.
19818
19819'-mfpr-64'
19820
19821     Use all 64 floating-point registers.
19822
19823'-mhard-float'
19824
19825     Use hardware instructions for floating-point operations.
19826
19827'-msoft-float'
19828
19829     Use library routines for floating-point operations.
19830
19831'-malloc-cc'
19832
19833     Dynamically allocate condition code registers.
19834
19835'-mfixed-cc'
19836
19837     Do not try to dynamically allocate condition code registers, only
19838     use 'icc0' and 'fcc0'.
19839
19840'-mdword'
19841
19842     Change ABI to use double word insns.
19843
19844'-mno-dword'
19845
19846     Do not use double word instructions.
19847
19848'-mdouble'
19849
19850     Use floating-point double instructions.
19851
19852'-mno-double'
19853
19854     Do not use floating-point double instructions.
19855
19856'-mmedia'
19857
19858     Use media instructions.
19859
19860'-mno-media'
19861
19862     Do not use media instructions.
19863
19864'-mmuladd'
19865
19866     Use multiply and add/subtract instructions.
19867
19868'-mno-muladd'
19869
19870     Do not use multiply and add/subtract instructions.
19871
19872'-mfdpic'
19873
19874     Select the FDPIC ABI, which uses function descriptors to represent
19875     pointers to functions.  Without any PIC/PIE-related options, it
19876     implies '-fPIE'.  With '-fpic' or '-fpie', it assumes GOT entries
19877     and small data are within a 12-bit range from the GOT base address;
19878     with '-fPIC' or '-fPIE', GOT offsets are computed with 32 bits.
19879     With a 'bfin-elf' target, this option implies '-msim'.
19880
19881'-minline-plt'
19882
19883     Enable inlining of PLT entries in function calls to functions that
19884     are not known to bind locally.  It has no effect without '-mfdpic'.
19885     It's enabled by default if optimizing for speed and compiling for
19886     shared libraries (i.e., '-fPIC' or '-fpic'), or when an
19887     optimization option such as '-O3' or above is present in the
19888     command line.
19889
19890'-mTLS'
19891
19892     Assume a large TLS segment when generating thread-local code.
19893
19894'-mtls'
19895
19896     Do not assume a large TLS segment when generating thread-local
19897     code.
19898
19899'-mgprel-ro'
19900
19901     Enable the use of 'GPREL' relocations in the FDPIC ABI for data
19902     that is known to be in read-only sections.  It's enabled by
19903     default, except for '-fpic' or '-fpie': even though it may help
19904     make the global offset table smaller, it trades 1 instruction for
19905     4.  With '-fPIC' or '-fPIE', it trades 3 instructions for 4, one of
19906     which may be shared by multiple symbols, and it avoids the need for
19907     a GOT entry for the referenced symbol, so it's more likely to be a
19908     win.  If it is not, '-mno-gprel-ro' can be used to disable it.
19909
19910'-multilib-library-pic'
19911
19912     Link with the (library, not FD) pic libraries.  It's implied by
19913     '-mlibrary-pic', as well as by '-fPIC' and '-fpic' without
19914     '-mfdpic'.  You should never have to use it explicitly.
19915
19916'-mlinked-fp'
19917
19918     Follow the EABI requirement of always creating a frame pointer
19919     whenever a stack frame is allocated.  This option is enabled by
19920     default and can be disabled with '-mno-linked-fp'.
19921
19922'-mlong-calls'
19923
19924     Use indirect addressing to call functions outside the current
19925     compilation unit.  This allows the functions to be placed anywhere
19926     within the 32-bit address space.
19927
19928'-malign-labels'
19929
19930     Try to align labels to an 8-byte boundary by inserting NOPs into
19931     the previous packet.  This option only has an effect when VLIW
19932     packing is enabled.  It doesn't create new packets; it merely adds
19933     NOPs to existing ones.
19934
19935'-mlibrary-pic'
19936
19937     Generate position-independent EABI code.
19938
19939'-macc-4'
19940
19941     Use only the first four media accumulator registers.
19942
19943'-macc-8'
19944
19945     Use all eight media accumulator registers.
19946
19947'-mpack'
19948
19949     Pack VLIW instructions.
19950
19951'-mno-pack'
19952
19953     Do not pack VLIW instructions.
19954
19955'-mno-eflags'
19956
19957     Do not mark ABI switches in e_flags.
19958
19959'-mcond-move'
19960
19961     Enable the use of conditional-move instructions (default).
19962
19963     This switch is mainly for debugging the compiler and will likely be
19964     removed in a future version.
19965
19966'-mno-cond-move'
19967
19968     Disable the use of conditional-move instructions.
19969
19970     This switch is mainly for debugging the compiler and will likely be
19971     removed in a future version.
19972
19973'-mscc'
19974
19975     Enable the use of conditional set instructions (default).
19976
19977     This switch is mainly for debugging the compiler and will likely be
19978     removed in a future version.
19979
19980'-mno-scc'
19981
19982     Disable the use of conditional set instructions.
19983
19984     This switch is mainly for debugging the compiler and will likely be
19985     removed in a future version.
19986
19987'-mcond-exec'
19988
19989     Enable the use of conditional execution (default).
19990
19991     This switch is mainly for debugging the compiler and will likely be
19992     removed in a future version.
19993
19994'-mno-cond-exec'
19995
19996     Disable the use of conditional execution.
19997
19998     This switch is mainly for debugging the compiler and will likely be
19999     removed in a future version.
20000
20001'-mvliw-branch'
20002
20003     Run a pass to pack branches into VLIW instructions (default).
20004
20005     This switch is mainly for debugging the compiler and will likely be
20006     removed in a future version.
20007
20008'-mno-vliw-branch'
20009
20010     Do not run a pass to pack branches into VLIW instructions.
20011
20012     This switch is mainly for debugging the compiler and will likely be
20013     removed in a future version.
20014
20015'-mmulti-cond-exec'
20016
20017     Enable optimization of '&&' and '||' in conditional execution
20018     (default).
20019
20020     This switch is mainly for debugging the compiler and will likely be
20021     removed in a future version.
20022
20023'-mno-multi-cond-exec'
20024
20025     Disable optimization of '&&' and '||' in conditional execution.
20026
20027     This switch is mainly for debugging the compiler and will likely be
20028     removed in a future version.
20029
20030'-mnested-cond-exec'
20031
20032     Enable nested conditional execution optimizations (default).
20033
20034     This switch is mainly for debugging the compiler and will likely be
20035     removed in a future version.
20036
20037'-mno-nested-cond-exec'
20038
20039     Disable nested conditional execution optimizations.
20040
20041     This switch is mainly for debugging the compiler and will likely be
20042     removed in a future version.
20043
20044'-moptimize-membar'
20045
20046     This switch removes redundant 'membar' instructions from the
20047     compiler-generated code.  It is enabled by default.
20048
20049'-mno-optimize-membar'
20050
20051     This switch disables the automatic removal of redundant 'membar'
20052     instructions from the generated code.
20053
20054'-mtomcat-stats'
20055
20056     Cause gas to print out tomcat statistics.
20057
20058'-mcpu=CPU'
20059
20060     Select the processor type for which to generate code.  Possible
20061     values are 'frv', 'fr550', 'tomcat', 'fr500', 'fr450', 'fr405',
20062     'fr400', 'fr300' and 'simple'.
20063
20064
20065File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
20066
200673.19.18 GNU/Linux Options
20068-------------------------
20069
20070These '-m' options are defined for GNU/Linux targets:
20071
20072'-mglibc'
20073     Use the GNU C library.  This is the default except on
20074     '*-*-linux-*uclibc*', '*-*-linux-*musl*' and '*-*-linux-*android*'
20075     targets.
20076
20077'-muclibc'
20078     Use uClibc C library.  This is the default on '*-*-linux-*uclibc*'
20079     targets.
20080
20081'-mmusl'
20082     Use the musl C library.  This is the default on '*-*-linux-*musl*'
20083     targets.
20084
20085'-mbionic'
20086     Use Bionic C library.  This is the default on '*-*-linux-*android*'
20087     targets.
20088
20089'-mandroid'
20090     Compile code compatible with Android platform.  This is the default
20091     on '*-*-linux-*android*' targets.
20092
20093     When compiling, this option enables '-mbionic', '-fPIC',
20094     '-fno-exceptions' and '-fno-rtti' by default.  When linking, this
20095     option makes the GCC driver pass Android-specific options to the
20096     linker.  Finally, this option causes the preprocessor macro
20097     '__ANDROID__' to be defined.
20098
20099'-tno-android-cc'
20100     Disable compilation effects of '-mandroid', i.e., do not enable
20101     '-mbionic', '-fPIC', '-fno-exceptions' and '-fno-rtti' by default.
20102
20103'-tno-android-ld'
20104     Disable linking effects of '-mandroid', i.e., pass standard Linux
20105     linking options to the linker.
20106
20107
20108File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
20109
201103.19.19 H8/300 Options
20111----------------------
20112
20113These '-m' options are defined for the H8/300 implementations:
20114
20115'-mrelax'
20116     Shorten some address references at link time, when possible; uses
20117     the linker option '-relax'.  *Note 'ld' and the H8/300: (ld)H8/300,
20118     for a fuller description.
20119
20120'-mh'
20121     Generate code for the H8/300H.
20122
20123'-ms'
20124     Generate code for the H8S.
20125
20126'-mn'
20127     Generate code for the H8S and H8/300H in the normal mode.  This
20128     switch must be used either with '-mh' or '-ms'.
20129
20130'-ms2600'
20131     Generate code for the H8S/2600.  This switch must be used with
20132     '-ms'.
20133
20134'-mexr'
20135     Extended registers are stored on stack before execution of function
20136     with monitor attribute.  Default option is '-mexr'.  This option is
20137     valid only for H8S targets.
20138
20139'-mno-exr'
20140     Extended registers are not stored on stack before execution of
20141     function with monitor attribute.  Default option is '-mno-exr'.
20142     This option is valid only for H8S targets.
20143
20144'-mint32'
20145     Make 'int' data 32 bits by default.
20146
20147'-malign-300'
20148     On the H8/300H and H8S, use the same alignment rules as for the
20149     H8/300.  The default for the H8/300H and H8S is to align longs and
20150     floats on 4-byte boundaries.  '-malign-300' causes them to be
20151     aligned on 2-byte boundaries.  This option has no effect on the
20152     H8/300.
20153
20154
20155File: gcc.info,  Node: HPPA Options,  Next: IA-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
20156
201573.19.20 HPPA Options
20158--------------------
20159
20160These '-m' options are defined for the HPPA family of computers:
20161
20162'-march=ARCHITECTURE-TYPE'
20163     Generate code for the specified architecture.  The choices for
20164     ARCHITECTURE-TYPE are '1.0' for PA 1.0, '1.1' for PA 1.1, and '2.0'
20165     for PA 2.0 processors.  Refer to '/usr/lib/sched.models' on an
20166     HP-UX system to determine the proper architecture option for your
20167     machine.  Code compiled for lower numbered architectures runs on
20168     higher numbered architectures, but not the other way around.
20169
20170'-mpa-risc-1-0'
20171'-mpa-risc-1-1'
20172'-mpa-risc-2-0'
20173     Synonyms for '-march=1.0', '-march=1.1', and '-march=2.0'
20174     respectively.
20175
20176'-mcaller-copies'
20177     The caller copies function arguments passed by hidden reference.
20178     This option should be used with care as it is not compatible with
20179     the default 32-bit runtime.  However, only aggregates larger than
20180     eight bytes are passed by hidden reference and the option provides
20181     better compatibility with OpenMP.
20182
20183'-mjump-in-delay'
20184     This option is ignored and provided for compatibility purposes
20185     only.
20186
20187'-mdisable-fpregs'
20188     Prevent floating-point registers from being used in any manner.
20189     This is necessary for compiling kernels that perform lazy context
20190     switching of floating-point registers.  If you use this option and
20191     attempt to perform floating-point operations, the compiler aborts.
20192
20193'-mdisable-indexing'
20194     Prevent the compiler from using indexing address modes.  This
20195     avoids some rather obscure problems when compiling MIG generated
20196     code under MACH.
20197
20198'-mno-space-regs'
20199     Generate code that assumes the target has no space registers.  This
20200     allows GCC to generate faster indirect calls and use unscaled index
20201     address modes.
20202
20203     Such code is suitable for level 0 PA systems and kernels.
20204
20205'-mfast-indirect-calls'
20206     Generate code that assumes calls never cross space boundaries.
20207     This allows GCC to emit code that performs faster indirect calls.
20208
20209     This option does not work in the presence of shared libraries or
20210     nested functions.
20211
20212'-mfixed-range=REGISTER-RANGE'
20213     Generate code treating the given register range as fixed registers.
20214     A fixed register is one that the register allocator cannot use.
20215     This is useful when compiling kernel code.  A register range is
20216     specified as two registers separated by a dash.  Multiple register
20217     ranges can be specified separated by a comma.
20218
20219'-mlong-load-store'
20220     Generate 3-instruction load and store sequences as sometimes
20221     required by the HP-UX 10 linker.  This is equivalent to the '+k'
20222     option to the HP compilers.
20223
20224'-mportable-runtime'
20225     Use the portable calling conventions proposed by HP for ELF
20226     systems.
20227
20228'-mgas'
20229     Enable the use of assembler directives only GAS understands.
20230
20231'-mschedule=CPU-TYPE'
20232     Schedule code according to the constraints for the machine type
20233     CPU-TYPE.  The choices for CPU-TYPE are '700' '7100', '7100LC',
20234     '7200', '7300' and '8000'.  Refer to '/usr/lib/sched.models' on an
20235     HP-UX system to determine the proper scheduling option for your
20236     machine.  The default scheduling is '8000'.
20237
20238'-mlinker-opt'
20239     Enable the optimization pass in the HP-UX linker.  Note this makes
20240     symbolic debugging impossible.  It also triggers a bug in the HP-UX
20241     8 and HP-UX 9 linkers in which they give bogus error messages when
20242     linking some programs.
20243
20244'-msoft-float'
20245     Generate output containing library calls for floating point.
20246     *Warning:* the requisite libraries are not available for all HPPA
20247     targets.  Normally the facilities of the machine's usual C compiler
20248     are used, but this cannot be done directly in cross-compilation.
20249     You must make your own arrangements to provide suitable library
20250     functions for cross-compilation.
20251
20252     '-msoft-float' changes the calling convention in the output file;
20253     therefore, it is only useful if you compile _all_ of a program with
20254     this option.  In particular, you need to compile 'libgcc.a', the
20255     library that comes with GCC, with '-msoft-float' in order for this
20256     to work.
20257
20258'-msio'
20259     Generate the predefine, '_SIO', for server IO.  The default is
20260     '-mwsio'.  This generates the predefines, '__hp9000s700',
20261     '__hp9000s700__' and '_WSIO', for workstation IO.  These options
20262     are available under HP-UX and HI-UX.
20263
20264'-mgnu-ld'
20265     Use options specific to GNU 'ld'.  This passes '-shared' to 'ld'
20266     when building a shared library.  It is the default when GCC is
20267     configured, explicitly or implicitly, with the GNU linker.  This
20268     option does not affect which 'ld' is called; it only changes what
20269     parameters are passed to that 'ld'.  The 'ld' that is called is
20270     determined by the '--with-ld' configure option, GCC's program
20271     search path, and finally by the user's 'PATH'.  The linker used by
20272     GCC can be printed using 'which `gcc -print-prog-name=ld`'.  This
20273     option is only available on the 64-bit HP-UX GCC, i.e. configured
20274     with 'hppa*64*-*-hpux*'.
20275
20276'-mhp-ld'
20277     Use options specific to HP 'ld'.  This passes '-b' to 'ld' when
20278     building a shared library and passes '+Accept TypeMismatch' to 'ld'
20279     on all links.  It is the default when GCC is configured, explicitly
20280     or implicitly, with the HP linker.  This option does not affect
20281     which 'ld' is called; it only changes what parameters are passed to
20282     that 'ld'.  The 'ld' that is called is determined by the
20283     '--with-ld' configure option, GCC's program search path, and
20284     finally by the user's 'PATH'.  The linker used by GCC can be
20285     printed using 'which `gcc -print-prog-name=ld`'.  This option is
20286     only available on the 64-bit HP-UX GCC, i.e. configured with
20287     'hppa*64*-*-hpux*'.
20288
20289'-mlong-calls'
20290     Generate code that uses long call sequences.  This ensures that a
20291     call is always able to reach linker generated stubs.  The default
20292     is to generate long calls only when the distance from the call site
20293     to the beginning of the function or translation unit, as the case
20294     may be, exceeds a predefined limit set by the branch type being
20295     used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
20296     respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
20297     always limited at 240,000 bytes.
20298
20299     Distances are measured from the beginning of functions when using
20300     the '-ffunction-sections' option, or when using the '-mgas' and
20301     '-mno-portable-runtime' options together under HP-UX with the SOM
20302     linker.
20303
20304     It is normally not desirable to use this option as it degrades
20305     performance.  However, it may be useful in large applications,
20306     particularly when partial linking is used to build the application.
20307
20308     The types of long calls used depends on the capabilities of the
20309     assembler and linker, and the type of code being generated.  The
20310     impact on systems that support long absolute calls, and long pic
20311     symbol-difference or pc-relative calls should be relatively small.
20312     However, an indirect call is used on 32-bit ELF systems in pic code
20313     and it is quite long.
20314
20315'-munix=UNIX-STD'
20316     Generate compiler predefines and select a startfile for the
20317     specified UNIX standard.  The choices for UNIX-STD are '93', '95'
20318     and '98'.  '93' is supported on all HP-UX versions.  '95' is
20319     available on HP-UX 10.10 and later.  '98' is available on HP-UX
20320     11.11 and later.  The default values are '93' for HP-UX 10.00, '95'
20321     for HP-UX 10.10 though to 11.00, and '98' for HP-UX 11.11 and
20322     later.
20323
20324     '-munix=93' provides the same predefines as GCC 3.3 and 3.4.
20325     '-munix=95' provides additional predefines for 'XOPEN_UNIX' and
20326     '_XOPEN_SOURCE_EXTENDED', and the startfile 'unix95.o'.
20327     '-munix=98' provides additional predefines for '_XOPEN_UNIX',
20328     '_XOPEN_SOURCE_EXTENDED', '_INCLUDE__STDC_A1_SOURCE' and
20329     '_INCLUDE_XOPEN_SOURCE_500', and the startfile 'unix98.o'.
20330
20331     It is _important_ to note that this option changes the interfaces
20332     for various library routines.  It also affects the operational
20333     behavior of the C library.  Thus, _extreme_ care is needed in using
20334     this option.
20335
20336     Library code that is intended to operate with more than one UNIX
20337     standard must test, set and restore the variable
20338     '__xpg4_extended_mask' as appropriate.  Most GNU software doesn't
20339     provide this capability.
20340
20341'-nolibdld'
20342     Suppress the generation of link options to search libdld.sl when
20343     the '-static' option is specified on HP-UX 10 and later.
20344
20345'-static'
20346     The HP-UX implementation of setlocale in libc has a dependency on
20347     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
20348     when the '-static' option is specified, special link options are
20349     needed to resolve this dependency.
20350
20351     On HP-UX 10 and later, the GCC driver adds the necessary options to
20352     link with libdld.sl when the '-static' option is specified.  This
20353     causes the resulting binary to be dynamic.  On the 64-bit port, the
20354     linkers generate dynamic binaries by default in any case.  The
20355     '-nolibdld' option can be used to prevent the GCC driver from
20356     adding these link options.
20357
20358'-threads'
20359     Add support for multithreading with the "dce thread" library under
20360     HP-UX.  This option sets flags for both the preprocessor and
20361     linker.
20362
20363
20364File: gcc.info,  Node: IA-64 Options,  Next: LM32 Options,  Prev: HPPA Options,  Up: Submodel Options
20365
203663.19.21 IA-64 Options
20367---------------------
20368
20369These are the '-m' options defined for the Intel IA-64 architecture.
20370
20371'-mbig-endian'
20372     Generate code for a big-endian target.  This is the default for
20373     HP-UX.
20374
20375'-mlittle-endian'
20376     Generate code for a little-endian target.  This is the default for
20377     AIX5 and GNU/Linux.
20378
20379'-mgnu-as'
20380'-mno-gnu-as'
20381     Generate (or don't) code for the GNU assembler.  This is the
20382     default.
20383
20384'-mgnu-ld'
20385'-mno-gnu-ld'
20386     Generate (or don't) code for the GNU linker.  This is the default.
20387
20388'-mno-pic'
20389     Generate code that does not use a global pointer register.  The
20390     result is not position independent code, and violates the IA-64
20391     ABI.
20392
20393'-mvolatile-asm-stop'
20394'-mno-volatile-asm-stop'
20395     Generate (or don't) a stop bit immediately before and after
20396     volatile asm statements.
20397
20398'-mregister-names'
20399'-mno-register-names'
20400     Generate (or don't) 'in', 'loc', and 'out' register names for the
20401     stacked registers.  This may make assembler output more readable.
20402
20403'-mno-sdata'
20404'-msdata'
20405     Disable (or enable) optimizations that use the small data section.
20406     This may be useful for working around optimizer bugs.
20407
20408'-mconstant-gp'
20409     Generate code that uses a single constant global pointer value.
20410     This is useful when compiling kernel code.
20411
20412'-mauto-pic'
20413     Generate code that is self-relocatable.  This implies
20414     '-mconstant-gp'.  This is useful when compiling firmware code.
20415
20416'-minline-float-divide-min-latency'
20417     Generate code for inline divides of floating-point values using the
20418     minimum latency algorithm.
20419
20420'-minline-float-divide-max-throughput'
20421     Generate code for inline divides of floating-point values using the
20422     maximum throughput algorithm.
20423
20424'-mno-inline-float-divide'
20425     Do not generate inline code for divides of floating-point values.
20426
20427'-minline-int-divide-min-latency'
20428     Generate code for inline divides of integer values using the
20429     minimum latency algorithm.
20430
20431'-minline-int-divide-max-throughput'
20432     Generate code for inline divides of integer values using the
20433     maximum throughput algorithm.
20434
20435'-mno-inline-int-divide'
20436     Do not generate inline code for divides of integer values.
20437
20438'-minline-sqrt-min-latency'
20439     Generate code for inline square roots using the minimum latency
20440     algorithm.
20441
20442'-minline-sqrt-max-throughput'
20443     Generate code for inline square roots using the maximum throughput
20444     algorithm.
20445
20446'-mno-inline-sqrt'
20447     Do not generate inline code for 'sqrt'.
20448
20449'-mfused-madd'
20450'-mno-fused-madd'
20451     Do (don't) generate code that uses the fused multiply/add or
20452     multiply/subtract instructions.  The default is to use these
20453     instructions.
20454
20455'-mno-dwarf2-asm'
20456'-mdwarf2-asm'
20457     Don't (or do) generate assembler code for the DWARF line number
20458     debugging info.  This may be useful when not using the GNU
20459     assembler.
20460
20461'-mearly-stop-bits'
20462'-mno-early-stop-bits'
20463     Allow stop bits to be placed earlier than immediately preceding the
20464     instruction that triggered the stop bit.  This can improve
20465     instruction scheduling, but does not always do so.
20466
20467'-mfixed-range=REGISTER-RANGE'
20468     Generate code treating the given register range as fixed registers.
20469     A fixed register is one that the register allocator cannot use.
20470     This is useful when compiling kernel code.  A register range is
20471     specified as two registers separated by a dash.  Multiple register
20472     ranges can be specified separated by a comma.
20473
20474'-mtls-size=TLS-SIZE'
20475     Specify bit size of immediate TLS offsets.  Valid values are 14,
20476     22, and 64.
20477
20478'-mtune=CPU-TYPE'
20479     Tune the instruction scheduling for a particular CPU, Valid values
20480     are 'itanium', 'itanium1', 'merced', 'itanium2', and 'mckinley'.
20481
20482'-milp32'
20483'-mlp64'
20484     Generate code for a 32-bit or 64-bit environment.  The 32-bit
20485     environment sets int, long and pointer to 32 bits.  The 64-bit
20486     environment sets int to 32 bits and long and pointer to 64 bits.
20487     These are HP-UX specific flags.
20488
20489'-mno-sched-br-data-spec'
20490'-msched-br-data-spec'
20491     (Dis/En)able data speculative scheduling before reload.  This
20492     results in generation of 'ld.a' instructions and the corresponding
20493     check instructions ('ld.c' / 'chk.a').  The default setting is
20494     disabled.
20495
20496'-msched-ar-data-spec'
20497'-mno-sched-ar-data-spec'
20498     (En/Dis)able data speculative scheduling after reload.  This
20499     results in generation of 'ld.a' instructions and the corresponding
20500     check instructions ('ld.c' / 'chk.a').  The default setting is
20501     enabled.
20502
20503'-mno-sched-control-spec'
20504'-msched-control-spec'
20505     (Dis/En)able control speculative scheduling.  This feature is
20506     available only during region scheduling (i.e. before reload).  This
20507     results in generation of the 'ld.s' instructions and the
20508     corresponding check instructions 'chk.s'.  The default setting is
20509     disabled.
20510
20511'-msched-br-in-data-spec'
20512'-mno-sched-br-in-data-spec'
20513     (En/Dis)able speculative scheduling of the instructions that are
20514     dependent on the data speculative loads before reload.  This is
20515     effective only with '-msched-br-data-spec' enabled.  The default
20516     setting is enabled.
20517
20518'-msched-ar-in-data-spec'
20519'-mno-sched-ar-in-data-spec'
20520     (En/Dis)able speculative scheduling of the instructions that are
20521     dependent on the data speculative loads after reload.  This is
20522     effective only with '-msched-ar-data-spec' enabled.  The default
20523     setting is enabled.
20524
20525'-msched-in-control-spec'
20526'-mno-sched-in-control-spec'
20527     (En/Dis)able speculative scheduling of the instructions that are
20528     dependent on the control speculative loads.  This is effective only
20529     with '-msched-control-spec' enabled.  The default setting is
20530     enabled.
20531
20532'-mno-sched-prefer-non-data-spec-insns'
20533'-msched-prefer-non-data-spec-insns'
20534     If enabled, data-speculative instructions are chosen for schedule
20535     only if there are no other choices at the moment.  This makes the
20536     use of the data speculation much more conservative.  The default
20537     setting is disabled.
20538
20539'-mno-sched-prefer-non-control-spec-insns'
20540'-msched-prefer-non-control-spec-insns'
20541     If enabled, control-speculative instructions are chosen for
20542     schedule only if there are no other choices at the moment.  This
20543     makes the use of the control speculation much more conservative.
20544     The default setting is disabled.
20545
20546'-mno-sched-count-spec-in-critical-path'
20547'-msched-count-spec-in-critical-path'
20548     If enabled, speculative dependencies are considered during
20549     computation of the instructions priorities.  This makes the use of
20550     the speculation a bit more conservative.  The default setting is
20551     disabled.
20552
20553'-msched-spec-ldc'
20554     Use a simple data speculation check.  This option is on by default.
20555
20556'-msched-control-spec-ldc'
20557     Use a simple check for control speculation.  This option is on by
20558     default.
20559
20560'-msched-stop-bits-after-every-cycle'
20561     Place a stop bit after every cycle when scheduling.  This option is
20562     on by default.
20563
20564'-msched-fp-mem-deps-zero-cost'
20565     Assume that floating-point stores and loads are not likely to cause
20566     a conflict when placed into the same instruction group.  This
20567     option is disabled by default.
20568
20569'-msel-sched-dont-check-control-spec'
20570     Generate checks for control speculation in selective scheduling.
20571     This flag is disabled by default.
20572
20573'-msched-max-memory-insns=MAX-INSNS'
20574     Limit on the number of memory insns per instruction group, giving
20575     lower priority to subsequent memory insns attempting to schedule in
20576     the same instruction group.  Frequently useful to prevent cache
20577     bank conflicts.  The default value is 1.
20578
20579'-msched-max-memory-insns-hard-limit'
20580     Makes the limit specified by 'msched-max-memory-insns' a hard
20581     limit, disallowing more than that number in an instruction group.
20582     Otherwise, the limit is "soft", meaning that non-memory operations
20583     are preferred when the limit is reached, but memory operations may
20584     still be scheduled.
20585
20586
20587File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64 Options,  Up: Submodel Options
20588
205893.19.22 LM32 Options
20590--------------------
20591
20592These '-m' options are defined for the LatticeMico32 architecture:
20593
20594'-mbarrel-shift-enabled'
20595     Enable barrel-shift instructions.
20596
20597'-mdivide-enabled'
20598     Enable divide and modulus instructions.
20599
20600'-mmultiply-enabled'
20601     Enable multiply instructions.
20602
20603'-msign-extend-enabled'
20604     Enable sign extend instructions.
20605
20606'-muser-enabled'
20607     Enable user-defined instructions.
20608
20609
20610File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
20611
206123.19.23 M32C Options
20613--------------------
20614
20615'-mcpu=NAME'
20616     Select the CPU for which code is generated.  NAME may be one of
20617     'r8c' for the R8C/Tiny series, 'm16c' for the M16C (up to /60)
20618     series, 'm32cm' for the M16C/80 series, or 'm32c' for the M32C/80
20619     series.
20620
20621'-msim'
20622     Specifies that the program will be run on the simulator.  This
20623     causes an alternate runtime library to be linked in which supports,
20624     for example, file I/O.  You must not use this option when
20625     generating programs that will run on real hardware; you must
20626     provide your own runtime library for whatever I/O functions are
20627     needed.
20628
20629'-memregs=NUMBER'
20630     Specifies the number of memory-based pseudo-registers GCC uses
20631     during code generation.  These pseudo-registers are used like real
20632     registers, so there is a tradeoff between GCC's ability to fit the
20633     code into available registers, and the performance penalty of using
20634     memory instead of registers.  Note that all modules in a program
20635     must be compiled with the same value for this option.  Because of
20636     that, you must not use this option with GCC's default runtime
20637     libraries.
20638
20639
20640File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
20641
206423.19.24 M32R/D Options
20643----------------------
20644
20645These '-m' options are defined for Renesas M32R/D architectures:
20646
20647'-m32r2'
20648     Generate code for the M32R/2.
20649
20650'-m32rx'
20651     Generate code for the M32R/X.
20652
20653'-m32r'
20654     Generate code for the M32R.  This is the default.
20655
20656'-mmodel=small'
20657     Assume all objects live in the lower 16MB of memory (so that their
20658     addresses can be loaded with the 'ld24' instruction), and assume
20659     all subroutines are reachable with the 'bl' instruction.  This is
20660     the default.
20661
20662     The addressability of a particular object can be set with the
20663     'model' attribute.
20664
20665'-mmodel=medium'
20666     Assume objects may be anywhere in the 32-bit address space (the
20667     compiler generates 'seth/add3' instructions to load their
20668     addresses), and assume all subroutines are reachable with the 'bl'
20669     instruction.
20670
20671'-mmodel=large'
20672     Assume objects may be anywhere in the 32-bit address space (the
20673     compiler generates 'seth/add3' instructions to load their
20674     addresses), and assume subroutines may not be reachable with the
20675     'bl' instruction (the compiler generates the much slower
20676     'seth/add3/jl' instruction sequence).
20677
20678'-msdata=none'
20679     Disable use of the small data area.  Variables are put into one of
20680     '.data', '.bss', or '.rodata' (unless the 'section' attribute has
20681     been specified).  This is the default.
20682
20683     The small data area consists of sections '.sdata' and '.sbss'.
20684     Objects may be explicitly put in the small data area with the
20685     'section' attribute using one of these sections.
20686
20687'-msdata=sdata'
20688     Put small global and static data in the small data area, but do not
20689     generate special code to reference them.
20690
20691'-msdata=use'
20692     Put small global and static data in the small data area, and
20693     generate special instructions to reference them.
20694
20695'-G NUM'
20696     Put global and static objects less than or equal to NUM bytes into
20697     the small data or BSS sections instead of the normal data or BSS
20698     sections.  The default value of NUM is 8.  The '-msdata' option
20699     must be set to one of 'sdata' or 'use' for this option to have any
20700     effect.
20701
20702     All modules should be compiled with the same '-G NUM' value.
20703     Compiling with different values of NUM may or may not work; if it
20704     doesn't the linker gives an error message--incorrect code is not
20705     generated.
20706
20707'-mdebug'
20708     Makes the M32R-specific code in the compiler display some
20709     statistics that might help in debugging programs.
20710
20711'-malign-loops'
20712     Align all loops to a 32-byte boundary.
20713
20714'-mno-align-loops'
20715     Do not enforce a 32-byte alignment for loops.  This is the default.
20716
20717'-missue-rate=NUMBER'
20718     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
20719
20720'-mbranch-cost=NUMBER'
20721     NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
20722     over conditional code, if it is 2, then the opposite applies.
20723
20724'-mflush-trap=NUMBER'
20725     Specifies the trap number to use to flush the cache.  The default
20726     is 12.  Valid numbers are between 0 and 15 inclusive.
20727
20728'-mno-flush-trap'
20729     Specifies that the cache cannot be flushed by using a trap.
20730
20731'-mflush-func=NAME'
20732     Specifies the name of the operating system function to call to
20733     flush the cache.  The default is '_flush_cache', but a function
20734     call is only used if a trap is not available.
20735
20736'-mno-flush-func'
20737     Indicates that there is no OS function for flushing the cache.
20738
20739
20740File: gcc.info,  Node: M680x0 Options,  Next: MCore Options,  Prev: M32R/D Options,  Up: Submodel Options
20741
207423.19.25 M680x0 Options
20743----------------------
20744
20745These are the '-m' options defined for M680x0 and ColdFire processors.
20746The default settings depend on which architecture was selected when the
20747compiler was configured; the defaults for the most common choices are
20748given below.
20749
20750'-march=ARCH'
20751     Generate code for a specific M680x0 or ColdFire instruction set
20752     architecture.  Permissible values of ARCH for M680x0 architectures
20753     are: '68000', '68010', '68020', '68030', '68040', '68060' and
20754     'cpu32'.  ColdFire architectures are selected according to
20755     Freescale's ISA classification and the permissible values are:
20756     'isaa', 'isaaplus', 'isab' and 'isac'.
20757
20758     GCC defines a macro '__mcfARCH__' whenever it is generating code
20759     for a ColdFire target.  The ARCH in this macro is one of the
20760     '-march' arguments given above.
20761
20762     When used together, '-march' and '-mtune' select code that runs on
20763     a family of similar processors but that is optimized for a
20764     particular microarchitecture.
20765
20766'-mcpu=CPU'
20767     Generate code for a specific M680x0 or ColdFire processor.  The
20768     M680x0 CPUs are: '68000', '68010', '68020', '68030', '68040',
20769     '68060', '68302', '68332' and 'cpu32'.  The ColdFire CPUs are given
20770     by the table below, which also classifies the CPUs into families:
20771
20772     *Family*       *'-mcpu' arguments*
20773     '51'           '51' '51ac' '51ag' '51cn' '51em' '51je' '51jf' '51jg'
20774                    '51jm' '51mm' '51qe' '51qm'
20775     '5206'         '5202' '5204' '5206'
20776     '5206e'        '5206e'
20777     '5208'         '5207' '5208'
20778     '5211a'        '5210a' '5211a'
20779     '5213'         '5211' '5212' '5213'
20780     '5216'         '5214' '5216'
20781     '52235'        '52230' '52231' '52232' '52233' '52234' '52235'
20782     '5225'         '5224' '5225'
20783     '52259'        '52252' '52254' '52255' '52256' '52258' '52259'
20784     '5235'         '5232' '5233' '5234' '5235' '523x'
20785     '5249'         '5249'
20786     '5250'         '5250'
20787     '5271'         '5270' '5271'
20788     '5272'         '5272'
20789     '5275'         '5274' '5275'
20790     '5282'         '5280' '5281' '5282' '528x'
20791     '53017'        '53011' '53012' '53013' '53014' '53015' '53016' '53017'
20792     '5307'         '5307'
20793     '5329'         '5327' '5328' '5329' '532x'
20794     '5373'         '5372' '5373' '537x'
20795     '5407'         '5407'
20796     '5475'         '5470' '5471' '5472' '5473' '5474' '5475' '547x' '5480'
20797                    '5481' '5482' '5483' '5484' '5485'
20798
20799     '-mcpu=CPU' overrides '-march=ARCH' if ARCH is compatible with CPU.
20800     Other combinations of '-mcpu' and '-march' are rejected.
20801
20802     GCC defines the macro '__mcf_cpu_CPU' when ColdFire target CPU is
20803     selected.  It also defines '__mcf_family_FAMILY', where the value
20804     of FAMILY is given by the table above.
20805
20806'-mtune=TUNE'
20807     Tune the code for a particular microarchitecture within the
20808     constraints set by '-march' and '-mcpu'.  The M680x0
20809     microarchitectures are: '68000', '68010', '68020', '68030',
20810     '68040', '68060' and 'cpu32'.  The ColdFire microarchitectures are:
20811     'cfv1', 'cfv2', 'cfv3', 'cfv4' and 'cfv4e'.
20812
20813     You can also use '-mtune=68020-40' for code that needs to run
20814     relatively well on 68020, 68030 and 68040 targets.
20815     '-mtune=68020-60' is similar but includes 68060 targets as well.
20816     These two options select the same tuning decisions as '-m68020-40'
20817     and '-m68020-60' respectively.
20818
20819     GCC defines the macros '__mcARCH' and '__mcARCH__' when tuning for
20820     680x0 architecture ARCH.  It also defines 'mcARCH' unless either
20821     '-ansi' or a non-GNU '-std' option is used.  If GCC is tuning for a
20822     range of architectures, as selected by '-mtune=68020-40' or
20823     '-mtune=68020-60', it defines the macros for every architecture in
20824     the range.
20825
20826     GCC also defines the macro '__mUARCH__' when tuning for ColdFire
20827     microarchitecture UARCH, where UARCH is one of the arguments given
20828     above.
20829
20830'-m68000'
20831'-mc68000'
20832     Generate output for a 68000.  This is the default when the compiler
20833     is configured for 68000-based systems.  It is equivalent to
20834     '-march=68000'.
20835
20836     Use this option for microcontrollers with a 68000 or EC000 core,
20837     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
20838
20839'-m68010'
20840     Generate output for a 68010.  This is the default when the compiler
20841     is configured for 68010-based systems.  It is equivalent to
20842     '-march=68010'.
20843
20844'-m68020'
20845'-mc68020'
20846     Generate output for a 68020.  This is the default when the compiler
20847     is configured for 68020-based systems.  It is equivalent to
20848     '-march=68020'.
20849
20850'-m68030'
20851     Generate output for a 68030.  This is the default when the compiler
20852     is configured for 68030-based systems.  It is equivalent to
20853     '-march=68030'.
20854
20855'-m68040'
20856     Generate output for a 68040.  This is the default when the compiler
20857     is configured for 68040-based systems.  It is equivalent to
20858     '-march=68040'.
20859
20860     This option inhibits the use of 68881/68882 instructions that have
20861     to be emulated by software on the 68040.  Use this option if your
20862     68040 does not have code to emulate those instructions.
20863
20864'-m68060'
20865     Generate output for a 68060.  This is the default when the compiler
20866     is configured for 68060-based systems.  It is equivalent to
20867     '-march=68060'.
20868
20869     This option inhibits the use of 68020 and 68881/68882 instructions
20870     that have to be emulated by software on the 68060.  Use this option
20871     if your 68060 does not have code to emulate those instructions.
20872
20873'-mcpu32'
20874     Generate output for a CPU32.  This is the default when the compiler
20875     is configured for CPU32-based systems.  It is equivalent to
20876     '-march=cpu32'.
20877
20878     Use this option for microcontrollers with a CPU32 or CPU32+ core,
20879     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
20880     68341, 68349 and 68360.
20881
20882'-m5200'
20883     Generate output for a 520X ColdFire CPU.  This is the default when
20884     the compiler is configured for 520X-based systems.  It is
20885     equivalent to '-mcpu=5206', and is now deprecated in favor of that
20886     option.
20887
20888     Use this option for microcontroller with a 5200 core, including the
20889     MCF5202, MCF5203, MCF5204 and MCF5206.
20890
20891'-m5206e'
20892     Generate output for a 5206e ColdFire CPU.  The option is now
20893     deprecated in favor of the equivalent '-mcpu=5206e'.
20894
20895'-m528x'
20896     Generate output for a member of the ColdFire 528X family.  The
20897     option is now deprecated in favor of the equivalent '-mcpu=528x'.
20898
20899'-m5307'
20900     Generate output for a ColdFire 5307 CPU.  The option is now
20901     deprecated in favor of the equivalent '-mcpu=5307'.
20902
20903'-m5407'
20904     Generate output for a ColdFire 5407 CPU.  The option is now
20905     deprecated in favor of the equivalent '-mcpu=5407'.
20906
20907'-mcfv4e'
20908     Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
20909     This includes use of hardware floating-point instructions.  The
20910     option is equivalent to '-mcpu=547x', and is now deprecated in
20911     favor of that option.
20912
20913'-m68020-40'
20914     Generate output for a 68040, without using any of the new
20915     instructions.  This results in code that can run relatively
20916     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
20917     generated code does use the 68881 instructions that are emulated on
20918     the 68040.
20919
20920     The option is equivalent to '-march=68020' '-mtune=68020-40'.
20921
20922'-m68020-60'
20923     Generate output for a 68060, without using any of the new
20924     instructions.  This results in code that can run relatively
20925     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
20926     generated code does use the 68881 instructions that are emulated on
20927     the 68060.
20928
20929     The option is equivalent to '-march=68020' '-mtune=68020-60'.
20930
20931'-mhard-float'
20932'-m68881'
20933     Generate floating-point instructions.  This is the default for
20934     68020 and above, and for ColdFire devices that have an FPU.  It
20935     defines the macro '__HAVE_68881__' on M680x0 targets and
20936     '__mcffpu__' on ColdFire targets.
20937
20938'-msoft-float'
20939     Do not generate floating-point instructions; use library calls
20940     instead.  This is the default for 68000, 68010, and 68832 targets.
20941     It is also the default for ColdFire devices that have no FPU.
20942
20943'-mdiv'
20944'-mno-div'
20945     Generate (do not generate) ColdFire hardware divide and remainder
20946     instructions.  If '-march' is used without '-mcpu', the default is
20947     "on" for ColdFire architectures and "off" for M680x0 architectures.
20948     Otherwise, the default is taken from the target CPU (either the
20949     default CPU, or the one specified by '-mcpu').  For example, the
20950     default is "off" for '-mcpu=5206' and "on" for '-mcpu=5206e'.
20951
20952     GCC defines the macro '__mcfhwdiv__' when this option is enabled.
20953
20954'-mshort'
20955     Consider type 'int' to be 16 bits wide, like 'short int'.
20956     Additionally, parameters passed on the stack are also aligned to a
20957     16-bit boundary even on targets whose API mandates promotion to
20958     32-bit.
20959
20960'-mno-short'
20961     Do not consider type 'int' to be 16 bits wide.  This is the
20962     default.
20963
20964'-mnobitfield'
20965'-mno-bitfield'
20966     Do not use the bit-field instructions.  The '-m68000', '-mcpu32'
20967     and '-m5200' options imply '-mnobitfield'.
20968
20969'-mbitfield'
20970     Do use the bit-field instructions.  The '-m68020' option implies
20971     '-mbitfield'.  This is the default if you use a configuration
20972     designed for a 68020.
20973
20974'-mrtd'
20975     Use a different function-calling convention, in which functions
20976     that take a fixed number of arguments return with the 'rtd'
20977     instruction, which pops their arguments while returning.  This
20978     saves one instruction in the caller since there is no need to pop
20979     the arguments there.
20980
20981     This calling convention is incompatible with the one normally used
20982     on Unix, so you cannot use it if you need to call libraries
20983     compiled with the Unix compiler.
20984
20985     Also, you must provide function prototypes for all functions that
20986     take variable numbers of arguments (including 'printf'); otherwise
20987     incorrect code is generated for calls to those functions.
20988
20989     In addition, seriously incorrect code results if you call a
20990     function with too many arguments.  (Normally, extra arguments are
20991     harmlessly ignored.)
20992
20993     The 'rtd' instruction is supported by the 68010, 68020, 68030,
20994     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
20995
20996     The default is '-mno-rtd'.
20997
20998'-malign-int'
20999'-mno-align-int'
21000     Control whether GCC aligns 'int', 'long', 'long long', 'float',
21001     'double', and 'long double' variables on a 32-bit boundary
21002     ('-malign-int') or a 16-bit boundary ('-mno-align-int').  Aligning
21003     variables on 32-bit boundaries produces code that runs somewhat
21004     faster on processors with 32-bit busses at the expense of more
21005     memory.
21006
21007     *Warning:* if you use the '-malign-int' switch, GCC aligns
21008     structures containing the above types differently than most
21009     published application binary interface specifications for the m68k.
21010
21011     Use the pc-relative addressing mode of the 68000 directly, instead
21012     of using a global offset table.  At present, this option implies
21013     '-fpic', allowing at most a 16-bit offset for pc-relative
21014     addressing.  '-fPIC' is not presently supported with '-mpcrel',
21015     though this could be supported for 68020 and higher processors.
21016
21017'-mno-strict-align'
21018'-mstrict-align'
21019     Do not (do) assume that unaligned memory references are handled by
21020     the system.
21021
21022'-msep-data'
21023     Generate code that allows the data segment to be located in a
21024     different area of memory from the text segment.  This allows for
21025     execute-in-place in an environment without virtual memory
21026     management.  This option implies '-fPIC'.
21027
21028'-mno-sep-data'
21029     Generate code that assumes that the data segment follows the text
21030     segment.  This is the default.
21031
21032'-mid-shared-library'
21033     Generate code that supports shared libraries via the library ID
21034     method.  This allows for execute-in-place and shared libraries in
21035     an environment without virtual memory management.  This option
21036     implies '-fPIC'.
21037
21038'-mno-id-shared-library'
21039     Generate code that doesn't assume ID-based shared libraries are
21040     being used.  This is the default.
21041
21042'-mshared-library-id=n'
21043     Specifies the identification number of the ID-based shared library
21044     being compiled.  Specifying a value of 0 generates more compact
21045     code; specifying other values forces the allocation of that number
21046     to the current library, but is no more space- or time-efficient
21047     than omitting this option.
21048
21049'-mxgot'
21050'-mno-xgot'
21051     When generating position-independent code for ColdFire, generate
21052     code that works if the GOT has more than 8192 entries.  This code
21053     is larger and slower than code generated without this option.  On
21054     M680x0 processors, this option is not needed; '-fPIC' suffices.
21055
21056     GCC normally uses a single instruction to load values from the GOT.
21057     While this is relatively efficient, it only works if the GOT is
21058     smaller than about 64k.  Anything larger causes the linker to
21059     report an error such as:
21060
21061          relocation truncated to fit: R_68K_GOT16O foobar
21062
21063     If this happens, you should recompile your code with '-mxgot'.  It
21064     should then work with very large GOTs.  However, code generated
21065     with '-mxgot' is less efficient, since it takes 4 instructions to
21066     fetch the value of a global symbol.
21067
21068     Note that some linkers, including newer versions of the GNU linker,
21069     can create multiple GOTs and sort GOT entries.  If you have such a
21070     linker, you should only need to use '-mxgot' when compiling a
21071     single object file that accesses more than 8192 GOT entries.  Very
21072     few do.
21073
21074     These options have no effect unless GCC is generating
21075     position-independent code.
21076
21077'-mlong-jump-table-offsets'
21078     Use 32-bit offsets in 'switch' tables.  The default is to use
21079     16-bit offsets.
21080
21081
21082File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M680x0 Options,  Up: Submodel Options
21083
210843.19.26 MCore Options
21085---------------------
21086
21087These are the '-m' options defined for the Motorola M*Core processors.
21088
21089'-mhardlit'
21090'-mno-hardlit'
21091     Inline constants into the code stream if it can be done in two
21092     instructions or less.
21093
21094'-mdiv'
21095'-mno-div'
21096     Use the divide instruction.  (Enabled by default).
21097
21098'-mrelax-immediate'
21099'-mno-relax-immediate'
21100     Allow arbitrary-sized immediates in bit operations.
21101
21102'-mwide-bitfields'
21103'-mno-wide-bitfields'
21104     Always treat bit-fields as 'int'-sized.
21105
21106'-m4byte-functions'
21107'-mno-4byte-functions'
21108     Force all functions to be aligned to a 4-byte boundary.
21109
21110'-mcallgraph-data'
21111'-mno-callgraph-data'
21112     Emit callgraph information.
21113
21114'-mslow-bytes'
21115'-mno-slow-bytes'
21116     Prefer word access when reading byte quantities.
21117
21118'-mlittle-endian'
21119'-mbig-endian'
21120     Generate code for a little-endian target.
21121
21122'-m210'
21123'-m340'
21124     Generate code for the 210 processor.
21125
21126'-mno-lsim'
21127     Assume that runtime support has been provided and so omit the
21128     simulator library ('libsim.a)' from the linker command line.
21129
21130'-mstack-increment=SIZE'
21131     Set the maximum amount for a single stack increment operation.
21132     Large values can increase the speed of programs that contain
21133     functions that need a large amount of stack space, but they can
21134     also trigger a segmentation fault if the stack is extended too
21135     much.  The default value is 0x1000.
21136
21137
21138File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
21139
211403.19.27 MeP Options
21141-------------------
21142
21143'-mabsdiff'
21144     Enables the 'abs' instruction, which is the absolute difference
21145     between two registers.
21146
21147'-mall-opts'
21148     Enables all the optional instructions--average, multiply, divide,
21149     bit operations, leading zero, absolute difference, min/max, clip,
21150     and saturation.
21151
21152'-maverage'
21153     Enables the 'ave' instruction, which computes the average of two
21154     registers.
21155
21156'-mbased=N'
21157     Variables of size N bytes or smaller are placed in the '.based'
21158     section by default.  Based variables use the '$tp' register as a
21159     base register, and there is a 128-byte limit to the '.based'
21160     section.
21161
21162'-mbitops'
21163     Enables the bit operation instructions--bit test ('btstm'), set
21164     ('bsetm'), clear ('bclrm'), invert ('bnotm'), and test-and-set
21165     ('tas').
21166
21167'-mc=NAME'
21168     Selects which section constant data is placed in.  NAME may be
21169     'tiny', 'near', or 'far'.
21170
21171'-mclip'
21172     Enables the 'clip' instruction.  Note that '-mclip' is not useful
21173     unless you also provide '-mminmax'.
21174
21175'-mconfig=NAME'
21176     Selects one of the built-in core configurations.  Each MeP chip has
21177     one or more modules in it; each module has a core CPU and a variety
21178     of coprocessors, optional instructions, and peripherals.  The
21179     'MeP-Integrator' tool, not part of GCC, provides these
21180     configurations through this option; using this option is the same
21181     as using all the corresponding command-line options.  The default
21182     configuration is 'default'.
21183
21184'-mcop'
21185     Enables the coprocessor instructions.  By default, this is a 32-bit
21186     coprocessor.  Note that the coprocessor is normally enabled via the
21187     '-mconfig=' option.
21188
21189'-mcop32'
21190     Enables the 32-bit coprocessor's instructions.
21191
21192'-mcop64'
21193     Enables the 64-bit coprocessor's instructions.
21194
21195'-mivc2'
21196     Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
21197
21198'-mdc'
21199     Causes constant variables to be placed in the '.near' section.
21200
21201'-mdiv'
21202     Enables the 'div' and 'divu' instructions.
21203
21204'-meb'
21205     Generate big-endian code.
21206
21207'-mel'
21208     Generate little-endian code.
21209
21210'-mio-volatile'
21211     Tells the compiler that any variable marked with the 'io' attribute
21212     is to be considered volatile.
21213
21214'-ml'
21215     Causes variables to be assigned to the '.far' section by default.
21216
21217'-mleadz'
21218     Enables the 'leadz' (leading zero) instruction.
21219
21220'-mm'
21221     Causes variables to be assigned to the '.near' section by default.
21222
21223'-mminmax'
21224     Enables the 'min' and 'max' instructions.
21225
21226'-mmult'
21227     Enables the multiplication and multiply-accumulate instructions.
21228
21229'-mno-opts'
21230     Disables all the optional instructions enabled by '-mall-opts'.
21231
21232'-mrepeat'
21233     Enables the 'repeat' and 'erepeat' instructions, used for
21234     low-overhead looping.
21235
21236'-ms'
21237     Causes all variables to default to the '.tiny' section.  Note that
21238     there is a 65536-byte limit to this section.  Accesses to these
21239     variables use the '%gp' base register.
21240
21241'-msatur'
21242     Enables the saturation instructions.  Note that the compiler does
21243     not currently generate these itself, but this option is included
21244     for compatibility with other tools, like 'as'.
21245
21246'-msdram'
21247     Link the SDRAM-based runtime instead of the default ROM-based
21248     runtime.
21249
21250'-msim'
21251     Link the simulator run-time libraries.
21252
21253'-msimnovec'
21254     Link the simulator runtime libraries, excluding built-in support
21255     for reset and exception vectors and tables.
21256
21257'-mtf'
21258     Causes all functions to default to the '.far' section.  Without
21259     this option, functions default to the '.near' section.
21260
21261'-mtiny=N'
21262     Variables that are N bytes or smaller are allocated to the '.tiny'
21263     section.  These variables use the '$gp' base register.  The default
21264     for this option is 4, but note that there's a 65536-byte limit to
21265     the '.tiny' section.
21266
21267
21268File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
21269
212703.19.28 MicroBlaze Options
21271--------------------------
21272
21273'-msoft-float'
21274     Use software emulation for floating point (default).
21275
21276'-mhard-float'
21277     Use hardware floating-point instructions.
21278
21279'-mmemcpy'
21280     Do not optimize block moves, use 'memcpy'.
21281
21282'-mno-clearbss'
21283     This option is deprecated.  Use '-fno-zero-initialized-in-bss'
21284     instead.
21285
21286'-mcpu=CPU-TYPE'
21287     Use features of, and schedule code for, the given CPU. Supported
21288     values are in the format 'vX.YY.Z', where X is a major version, YY
21289     is the minor version, and Z is compatibility code.  Example values
21290     are 'v3.00.a', 'v4.00.b', 'v5.00.a', 'v5.00.b', 'v6.00.a'.
21291
21292'-mxl-soft-mul'
21293     Use software multiply emulation (default).
21294
21295'-mxl-soft-div'
21296     Use software emulation for divides (default).
21297
21298'-mxl-barrel-shift'
21299     Use the hardware barrel shifter.
21300
21301'-mxl-pattern-compare'
21302     Use pattern compare instructions.
21303
21304'-msmall-divides'
21305     Use table lookup optimization for small signed integer divisions.
21306
21307'-mxl-stack-check'
21308     This option is deprecated.  Use '-fstack-check' instead.
21309
21310'-mxl-gp-opt'
21311     Use GP-relative '.sdata'/'.sbss' sections.
21312
21313'-mxl-multiply-high'
21314     Use multiply high instructions for high part of 32x32 multiply.
21315
21316'-mxl-float-convert'
21317     Use hardware floating-point conversion instructions.
21318
21319'-mxl-float-sqrt'
21320     Use hardware floating-point square root instruction.
21321
21322'-mbig-endian'
21323     Generate code for a big-endian target.
21324
21325'-mlittle-endian'
21326     Generate code for a little-endian target.
21327
21328'-mxl-reorder'
21329     Use reorder instructions (swap and byte reversed load/store).
21330
21331'-mxl-mode-APP-MODEL'
21332     Select application model APP-MODEL.  Valid models are
21333     'executable'
21334          normal executable (default), uses startup code 'crt0.o'.
21335
21336     '-mpic-data-is-text-relative'
21337          Assume that the displacement between the text and data
21338          segments is fixed at static link time.  This allows data to be
21339          referenced by offset from start of text address instead of GOT
21340          since PC-relative addressing is not supported.
21341
21342     'xmdstub'
21343          for use with Xilinx Microprocessor Debugger (XMD) based
21344          software intrusive debug agent called xmdstub.  This uses
21345          startup file 'crt1.o' and sets the start address of the
21346          program to 0x800.
21347
21348     'bootstrap'
21349          for applications that are loaded using a bootloader.  This
21350          model uses startup file 'crt2.o' which does not contain a
21351          processor reset vector handler.  This is suitable for
21352          transferring control on a processor reset to the bootloader
21353          rather than the application.
21354
21355     'novectors'
21356          for applications that do not require any of the MicroBlaze
21357          vectors.  This option may be useful for applications running
21358          within a monitoring application.  This model uses 'crt3.o' as
21359          a startup file.
21360
21361     Option '-xl-mode-APP-MODEL' is a deprecated alias for
21362     '-mxl-mode-APP-MODEL'.
21363
21364
21365File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
21366
213673.19.29 MIPS Options
21368--------------------
21369
21370'-EB'
21371     Generate big-endian code.
21372
21373'-EL'
21374     Generate little-endian code.  This is the default for 'mips*el-*-*'
21375     configurations.
21376
21377'-march=ARCH'
21378     Generate code that runs on ARCH, which can be the name of a generic
21379     MIPS ISA, or the name of a particular processor.  The ISA names
21380     are: 'mips1', 'mips2', 'mips3', 'mips4', 'mips32', 'mips32r2',
21381     'mips32r3', 'mips32r5', 'mips32r6', 'mips64', 'mips64r2',
21382     'mips64r3', 'mips64r5' and 'mips64r6'.  The processor names are:
21383     '4kc', '4km', '4kp', '4ksc', '4kec', '4kem', '4kep', '4ksd', '5kc',
21384     '5kf', '20kc', '24kc', '24kf2_1', '24kf1_1', '24kec', '24kef2_1',
21385     '24kef1_1', '34kc', '34kf2_1', '34kf1_1', '34kn', '74kc',
21386     '74kf2_1', '74kf1_1', '74kf3_2', '1004kc', '1004kf2_1',
21387     '1004kf1_1', 'i6400', 'i6500', 'interaptiv', 'loongson2e',
21388     'loongson2f', 'loongson3a', 'gs464', 'gs464e', 'gs264e', 'm4k',
21389     'm14k', 'm14kc', 'm14ke', 'm14kec', 'm5100', 'm5101', 'octeon',
21390     'octeon+', 'octeon2', 'octeon3', 'orion', 'p5600', 'p6600',
21391     'r2000', 'r3000', 'r3900', 'r4000', 'r4400', 'r4600', 'r4650',
21392     'r4700', 'r5900', 'r6000', 'r8000', 'rm7000', 'rm9000', 'r10000',
21393     'r12000', 'r14000', 'r16000', 'sb1', 'sr71000', 'vr4100', 'vr4111',
21394     'vr4120', 'vr4130', 'vr4300', 'vr5000', 'vr5400', 'vr5500', 'xlr'
21395     and 'xlp'.  The special value 'from-abi' selects the most
21396     compatible architecture for the selected ABI (that is, 'mips1' for
21397     32-bit ABIs and 'mips3' for 64-bit ABIs).
21398
21399     The native Linux/GNU toolchain also supports the value 'native',
21400     which selects the best architecture option for the host processor.
21401     '-march=native' has no effect if GCC does not recognize the
21402     processor.
21403
21404     In processor names, a final '000' can be abbreviated as 'k' (for
21405     example, '-march=r2k').  Prefixes are optional, and 'vr' may be
21406     written 'r'.
21407
21408     Names of the form 'Nf2_1' refer to processors with FPUs clocked at
21409     half the rate of the core, names of the form 'Nf1_1' refer to
21410     processors with FPUs clocked at the same rate as the core, and
21411     names of the form 'Nf3_2' refer to processors with FPUs clocked a
21412     ratio of 3:2 with respect to the core.  For compatibility reasons,
21413     'Nf' is accepted as a synonym for 'Nf2_1' while 'Nx' and 'Bfx' are
21414     accepted as synonyms for 'Nf1_1'.
21415
21416     GCC defines two macros based on the value of this option.  The
21417     first is '_MIPS_ARCH', which gives the name of target architecture,
21418     as a string.  The second has the form '_MIPS_ARCH_FOO', where FOO
21419     is the capitalized value of '_MIPS_ARCH'.  For example,
21420     '-march=r2000' sets '_MIPS_ARCH' to '"r2000"' and defines the macro
21421     '_MIPS_ARCH_R2000'.
21422
21423     Note that the '_MIPS_ARCH' macro uses the processor names given
21424     above.  In other words, it has the full prefix and does not
21425     abbreviate '000' as 'k'.  In the case of 'from-abi', the macro
21426     names the resolved architecture (either '"mips1"' or '"mips3"').
21427     It names the default architecture when no '-march' option is given.
21428
21429'-mtune=ARCH'
21430     Optimize for ARCH.  Among other things, this option controls the
21431     way instructions are scheduled, and the perceived cost of
21432     arithmetic operations.  The list of ARCH values is the same as for
21433     '-march'.
21434
21435     When this option is not used, GCC optimizes for the processor
21436     specified by '-march'.  By using '-march' and '-mtune' together, it
21437     is possible to generate code that runs on a family of processors,
21438     but optimize the code for one particular member of that family.
21439
21440     '-mtune' defines the macros '_MIPS_TUNE' and '_MIPS_TUNE_FOO',
21441     which work in the same way as the '-march' ones described above.
21442
21443'-mips1'
21444     Equivalent to '-march=mips1'.
21445
21446'-mips2'
21447     Equivalent to '-march=mips2'.
21448
21449'-mips3'
21450     Equivalent to '-march=mips3'.
21451
21452'-mips4'
21453     Equivalent to '-march=mips4'.
21454
21455'-mips32'
21456     Equivalent to '-march=mips32'.
21457
21458'-mips32r3'
21459     Equivalent to '-march=mips32r3'.
21460
21461'-mips32r5'
21462     Equivalent to '-march=mips32r5'.
21463
21464'-mips32r6'
21465     Equivalent to '-march=mips32r6'.
21466
21467'-mips64'
21468     Equivalent to '-march=mips64'.
21469
21470'-mips64r2'
21471     Equivalent to '-march=mips64r2'.
21472
21473'-mips64r3'
21474     Equivalent to '-march=mips64r3'.
21475
21476'-mips64r5'
21477     Equivalent to '-march=mips64r5'.
21478
21479'-mips64r6'
21480     Equivalent to '-march=mips64r6'.
21481
21482'-mips16'
21483'-mno-mips16'
21484     Generate (do not generate) MIPS16 code.  If GCC is targeting a
21485     MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
21486
21487     MIPS16 code generation can also be controlled on a per-function
21488     basis by means of 'mips16' and 'nomips16' attributes.  *Note
21489     Function Attributes::, for more information.
21490
21491'-mflip-mips16'
21492     Generate MIPS16 code on alternating functions.  This option is
21493     provided for regression testing of mixed MIPS16/non-MIPS16 code
21494     generation, and is not intended for ordinary use in compiling user
21495     code.
21496
21497'-minterlink-compressed'
21498'-mno-interlink-compressed'
21499     Require (do not require) that code using the standard
21500     (uncompressed) MIPS ISA be link-compatible with MIPS16 and
21501     microMIPS code, and vice versa.
21502
21503     For example, code using the standard ISA encoding cannot jump
21504     directly to MIPS16 or microMIPS code; it must either use a call or
21505     an indirect jump.  '-minterlink-compressed' therefore disables
21506     direct jumps unless GCC knows that the target of the jump is not
21507     compressed.
21508
21509'-minterlink-mips16'
21510'-mno-interlink-mips16'
21511     Aliases of '-minterlink-compressed' and
21512     '-mno-interlink-compressed'.  These options predate the microMIPS
21513     ASE and are retained for backwards compatibility.
21514
21515'-mabi=32'
21516'-mabi=o64'
21517'-mabi=n32'
21518'-mabi=64'
21519'-mabi=eabi'
21520     Generate code for the given ABI.
21521
21522     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
21523     generates 64-bit code when you select a 64-bit architecture, but
21524     you can use '-mgp32' to get 32-bit code instead.
21525
21526     For information about the O64 ABI, see
21527     <http://gcc.gnu.org/projects/mipso64-abi.html>.
21528
21529     GCC supports a variant of the o32 ABI in which floating-point
21530     registers are 64 rather than 32 bits wide.  You can select this
21531     combination with '-mabi=32' '-mfp64'.  This ABI relies on the
21532     'mthc1' and 'mfhc1' instructions and is therefore only supported
21533     for MIPS32R2, MIPS32R3 and MIPS32R5 processors.
21534
21535     The register assignments for arguments and return values remain the
21536     same, but each scalar value is passed in a single 64-bit register
21537     rather than a pair of 32-bit registers.  For example, scalar
21538     floating-point values are returned in '$f0' only, not a '$f0'/'$f1'
21539     pair.  The set of call-saved registers also remains the same in
21540     that the even-numbered double-precision registers are saved.
21541
21542     Two additional variants of the o32 ABI are supported to enable a
21543     transition from 32-bit to 64-bit registers.  These are FPXX
21544     ('-mfpxx') and FP64A ('-mfp64' '-mno-odd-spreg').  The FPXX
21545     extension mandates that all code must execute correctly when run
21546     using 32-bit or 64-bit registers.  The code can be interlinked with
21547     either FP32 or FP64, but not both.  The FP64A extension is similar
21548     to the FP64 extension but forbids the use of odd-numbered
21549     single-precision registers.  This can be used in conjunction with
21550     the 'FRE' mode of FPUs in MIPS32R5 processors and allows both FP32
21551     and FP64A code to interlink and run in the same process without
21552     changing FPU modes.
21553
21554'-mabicalls'
21555'-mno-abicalls'
21556     Generate (do not generate) code that is suitable for SVR4-style
21557     dynamic objects.  '-mabicalls' is the default for SVR4-based
21558     systems.
21559
21560'-mshared'
21561'-mno-shared'
21562     Generate (do not generate) code that is fully position-independent,
21563     and that can therefore be linked into shared libraries.  This
21564     option only affects '-mabicalls'.
21565
21566     All '-mabicalls' code has traditionally been position-independent,
21567     regardless of options like '-fPIC' and '-fpic'.  However, as an
21568     extension, the GNU toolchain allows executables to use absolute
21569     accesses for locally-binding symbols.  It can also use shorter GP
21570     initialization sequences and generate direct calls to
21571     locally-defined functions.  This mode is selected by '-mno-shared'.
21572
21573     '-mno-shared' depends on binutils 2.16 or higher and generates
21574     objects that can only be linked by the GNU linker.  However, the
21575     option does not affect the ABI of the final executable; it only
21576     affects the ABI of relocatable objects.  Using '-mno-shared'
21577     generally makes executables both smaller and quicker.
21578
21579     '-mshared' is the default.
21580
21581'-mplt'
21582'-mno-plt'
21583     Assume (do not assume) that the static and dynamic linkers support
21584     PLTs and copy relocations.  This option only affects '-mno-shared
21585     -mabicalls'.  For the n64 ABI, this option has no effect without
21586     '-msym32'.
21587
21588     You can make '-mplt' the default by configuring GCC with
21589     '--with-mips-plt'.  The default is '-mno-plt' otherwise.
21590
21591'-mxgot'
21592'-mno-xgot'
21593     Lift (do not lift) the usual restrictions on the size of the global
21594     offset table.
21595
21596     GCC normally uses a single instruction to load values from the GOT.
21597     While this is relatively efficient, it only works if the GOT is
21598     smaller than about 64k.  Anything larger causes the linker to
21599     report an error such as:
21600
21601          relocation truncated to fit: R_MIPS_GOT16 foobar
21602
21603     If this happens, you should recompile your code with '-mxgot'.
21604     This works with very large GOTs, although the code is also less
21605     efficient, since it takes three instructions to fetch the value of
21606     a global symbol.
21607
21608     Note that some linkers can create multiple GOTs.  If you have such
21609     a linker, you should only need to use '-mxgot' when a single object
21610     file accesses more than 64k's worth of GOT entries.  Very few do.
21611
21612     These options have no effect unless GCC is generating position
21613     independent code.
21614
21615'-mgp32'
21616     Assume that general-purpose registers are 32 bits wide.
21617
21618'-mgp64'
21619     Assume that general-purpose registers are 64 bits wide.
21620
21621'-mfp32'
21622     Assume that floating-point registers are 32 bits wide.
21623
21624'-mfp64'
21625     Assume that floating-point registers are 64 bits wide.
21626
21627'-mfpxx'
21628     Do not assume the width of floating-point registers.
21629
21630'-mhard-float'
21631     Use floating-point coprocessor instructions.
21632
21633'-msoft-float'
21634     Do not use floating-point coprocessor instructions.  Implement
21635     floating-point calculations using library calls instead.
21636
21637'-mno-float'
21638     Equivalent to '-msoft-float', but additionally asserts that the
21639     program being compiled does not perform any floating-point
21640     operations.  This option is presently supported only by some
21641     bare-metal MIPS configurations, where it may select a special set
21642     of libraries that lack all floating-point support (including, for
21643     example, the floating-point 'printf' formats).  If code compiled
21644     with '-mno-float' accidentally contains floating-point operations,
21645     it is likely to suffer a link-time or run-time failure.
21646
21647'-msingle-float'
21648     Assume that the floating-point coprocessor only supports
21649     single-precision operations.
21650
21651'-mdouble-float'
21652     Assume that the floating-point coprocessor supports
21653     double-precision operations.  This is the default.
21654
21655'-modd-spreg'
21656'-mno-odd-spreg'
21657     Enable the use of odd-numbered single-precision floating-point
21658     registers for the o32 ABI. This is the default for processors that
21659     are known to support these registers.  When using the o32 FPXX ABI,
21660     '-mno-odd-spreg' is set by default.
21661
21662'-mabs=2008'
21663'-mabs=legacy'
21664     These options control the treatment of the special not-a-number
21665     (NaN) IEEE 754 floating-point data with the 'abs.fmt' and 'neg.fmt'
21666     machine instructions.
21667
21668     By default or when '-mabs=legacy' is used the legacy treatment is
21669     selected.  In this case these instructions are considered
21670     arithmetic and avoided where correct operation is required and the
21671     input operand might be a NaN. A longer sequence of instructions
21672     that manipulate the sign bit of floating-point datum manually is
21673     used instead unless the '-ffinite-math-only' option has also been
21674     specified.
21675
21676     The '-mabs=2008' option selects the IEEE 754-2008 treatment.  In
21677     this case these instructions are considered non-arithmetic and
21678     therefore operating correctly in all cases, including in particular
21679     where the input operand is a NaN. These instructions are therefore
21680     always used for the respective operations.
21681
21682'-mnan=2008'
21683'-mnan=legacy'
21684     These options control the encoding of the special not-a-number
21685     (NaN) IEEE 754 floating-point data.
21686
21687     The '-mnan=legacy' option selects the legacy encoding.  In this
21688     case quiet NaNs (qNaNs) are denoted by the first bit of their
21689     trailing significand field being 0, whereas signaling NaNs (sNaNs)
21690     are denoted by the first bit of their trailing significand field
21691     being 1.
21692
21693     The '-mnan=2008' option selects the IEEE 754-2008 encoding.  In
21694     this case qNaNs are denoted by the first bit of their trailing
21695     significand field being 1, whereas sNaNs are denoted by the first
21696     bit of their trailing significand field being 0.
21697
21698     The default is '-mnan=legacy' unless GCC has been configured with
21699     '--with-nan=2008'.
21700
21701'-mllsc'
21702'-mno-llsc'
21703     Use (do not use) 'll', 'sc', and 'sync' instructions to implement
21704     atomic memory built-in functions.  When neither option is
21705     specified, GCC uses the instructions if the target architecture
21706     supports them.
21707
21708     '-mllsc' is useful if the runtime environment can emulate the
21709     instructions and '-mno-llsc' can be useful when compiling for
21710     nonstandard ISAs.  You can make either option the default by
21711     configuring GCC with '--with-llsc' and '--without-llsc'
21712     respectively.  '--with-llsc' is the default for some
21713     configurations; see the installation documentation for details.
21714
21715'-mdsp'
21716'-mno-dsp'
21717     Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
21718     Built-in Functions::.  This option defines the preprocessor macro
21719     '__mips_dsp'.  It also defines '__mips_dsp_rev' to 1.
21720
21721'-mdspr2'
21722'-mno-dspr2'
21723     Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
21724     Built-in Functions::.  This option defines the preprocessor macros
21725     '__mips_dsp' and '__mips_dspr2'.  It also defines '__mips_dsp_rev'
21726     to 2.
21727
21728'-msmartmips'
21729'-mno-smartmips'
21730     Use (do not use) the MIPS SmartMIPS ASE.
21731
21732'-mpaired-single'
21733'-mno-paired-single'
21734     Use (do not use) paired-single floating-point instructions.  *Note
21735     MIPS Paired-Single Support::.  This option requires hardware
21736     floating-point support to be enabled.
21737
21738'-mdmx'
21739'-mno-mdmx'
21740     Use (do not use) MIPS Digital Media Extension instructions.  This
21741     option can only be used when generating 64-bit code and requires
21742     hardware floating-point support to be enabled.
21743
21744'-mips3d'
21745'-mno-mips3d'
21746     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
21747     Functions::.  The option '-mips3d' implies '-mpaired-single'.
21748
21749'-mmicromips'
21750'-mno-micromips'
21751     Generate (do not generate) microMIPS code.
21752
21753     MicroMIPS code generation can also be controlled on a per-function
21754     basis by means of 'micromips' and 'nomicromips' attributes.  *Note
21755     Function Attributes::, for more information.
21756
21757'-mmt'
21758'-mno-mt'
21759     Use (do not use) MT Multithreading instructions.
21760
21761'-mmcu'
21762'-mno-mcu'
21763     Use (do not use) the MIPS MCU ASE instructions.
21764
21765'-meva'
21766'-mno-eva'
21767     Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
21768
21769'-mvirt'
21770'-mno-virt'
21771     Use (do not use) the MIPS Virtualization (VZ) instructions.
21772
21773'-mxpa'
21774'-mno-xpa'
21775     Use (do not use) the MIPS eXtended Physical Address (XPA)
21776     instructions.
21777
21778'-mcrc'
21779'-mno-crc'
21780     Use (do not use) the MIPS Cyclic Redundancy Check (CRC)
21781     instructions.
21782
21783'-mginv'
21784'-mno-ginv'
21785     Use (do not use) the MIPS Global INValidate (GINV) instructions.
21786
21787'-mloongson-mmi'
21788'-mno-loongson-mmi'
21789     Use (do not use) the MIPS Loongson MultiMedia extensions
21790     Instructions (MMI).
21791
21792'-mloongson-ext'
21793'-mno-loongson-ext'
21794     Use (do not use) the MIPS Loongson EXTensions (EXT) instructions.
21795
21796'-mloongson-ext2'
21797'-mno-loongson-ext2'
21798     Use (do not use) the MIPS Loongson EXTensions r2 (EXT2)
21799     instructions.
21800
21801'-mlong64'
21802     Force 'long' types to be 64 bits wide.  See '-mlong32' for an
21803     explanation of the default and the way that the pointer size is
21804     determined.
21805
21806'-mlong32'
21807     Force 'long', 'int', and pointer types to be 32 bits wide.
21808
21809     The default size of 'int's, 'long's and pointers depends on the
21810     ABI.  All the supported ABIs use 32-bit 'int's.  The n64 ABI uses
21811     64-bit 'long's, as does the 64-bit EABI; the others use 32-bit
21812     'long's.  Pointers are the same size as 'long's, or the same size
21813     as integer registers, whichever is smaller.
21814
21815'-msym32'
21816'-mno-sym32'
21817     Assume (do not assume) that all symbols have 32-bit values,
21818     regardless of the selected ABI.  This option is useful in
21819     combination with '-mabi=64' and '-mno-abicalls' because it allows
21820     GCC to generate shorter and faster references to symbolic
21821     addresses.
21822
21823'-G NUM'
21824     Put definitions of externally-visible data in a small data section
21825     if that data is no bigger than NUM bytes.  GCC can then generate
21826     more efficient accesses to the data; see '-mgpopt' for details.
21827
21828     The default '-G' option depends on the configuration.
21829
21830'-mlocal-sdata'
21831'-mno-local-sdata'
21832     Extend (do not extend) the '-G' behavior to local data too, such as
21833     to static variables in C.  '-mlocal-sdata' is the default for all
21834     configurations.
21835
21836     If the linker complains that an application is using too much small
21837     data, you might want to try rebuilding the less
21838     performance-critical parts with '-mno-local-sdata'.  You might also
21839     want to build large libraries with '-mno-local-sdata', so that the
21840     libraries leave more room for the main program.
21841
21842'-mextern-sdata'
21843'-mno-extern-sdata'
21844     Assume (do not assume) that externally-defined data is in a small
21845     data section if the size of that data is within the '-G' limit.
21846     '-mextern-sdata' is the default for all configurations.
21847
21848     If you compile a module MOD with '-mextern-sdata' '-G NUM'
21849     '-mgpopt', and MOD references a variable VAR that is no bigger than
21850     NUM bytes, you must make sure that VAR is placed in a small data
21851     section.  If VAR is defined by another module, you must either
21852     compile that module with a high-enough '-G' setting or attach a
21853     'section' attribute to VAR's definition.  If VAR is common, you
21854     must link the application with a high-enough '-G' setting.
21855
21856     The easiest way of satisfying these restrictions is to compile and
21857     link every module with the same '-G' option.  However, you may wish
21858     to build a library that supports several different small data
21859     limits.  You can do this by compiling the library with the highest
21860     supported '-G' setting and additionally using '-mno-extern-sdata'
21861     to stop the library from making assumptions about
21862     externally-defined data.
21863
21864'-mgpopt'
21865'-mno-gpopt'
21866     Use (do not use) GP-relative accesses for symbols that are known to
21867     be in a small data section; see '-G', '-mlocal-sdata' and
21868     '-mextern-sdata'.  '-mgpopt' is the default for all configurations.
21869
21870     '-mno-gpopt' is useful for cases where the '$gp' register might not
21871     hold the value of '_gp'.  For example, if the code is part of a
21872     library that might be used in a boot monitor, programs that call
21873     boot monitor routines pass an unknown value in '$gp'.  (In such
21874     situations, the boot monitor itself is usually compiled with
21875     '-G0'.)
21876
21877     '-mno-gpopt' implies '-mno-local-sdata' and '-mno-extern-sdata'.
21878
21879'-membedded-data'
21880'-mno-embedded-data'
21881     Allocate variables to the read-only data section first if possible,
21882     then next in the small data section if possible, otherwise in data.
21883     This gives slightly slower code than the default, but reduces the
21884     amount of RAM required when executing, and thus may be preferred
21885     for some embedded systems.
21886
21887'-muninit-const-in-rodata'
21888'-mno-uninit-const-in-rodata'
21889     Put uninitialized 'const' variables in the read-only data section.
21890     This option is only meaningful in conjunction with
21891     '-membedded-data'.
21892
21893'-mcode-readable=SETTING'
21894     Specify whether GCC may generate code that reads from executable
21895     sections.  There are three possible settings:
21896
21897     '-mcode-readable=yes'
21898          Instructions may freely access executable sections.  This is
21899          the default setting.
21900
21901     '-mcode-readable=pcrel'
21902          MIPS16 PC-relative load instructions can access executable
21903          sections, but other instructions must not do so.  This option
21904          is useful on 4KSc and 4KSd processors when the code TLBs have
21905          the Read Inhibit bit set.  It is also useful on processors
21906          that can be configured to have a dual instruction/data SRAM
21907          interface and that, like the M4K, automatically redirect
21908          PC-relative loads to the instruction RAM.
21909
21910     '-mcode-readable=no'
21911          Instructions must not access executable sections.  This option
21912          can be useful on targets that are configured to have a dual
21913          instruction/data SRAM interface but that (unlike the M4K) do
21914          not automatically redirect PC-relative loads to the
21915          instruction RAM.
21916
21917'-msplit-addresses'
21918'-mno-split-addresses'
21919     Enable (disable) use of the '%hi()' and '%lo()' assembler
21920     relocation operators.  This option has been superseded by
21921     '-mexplicit-relocs' but is retained for backwards compatibility.
21922
21923'-mexplicit-relocs'
21924'-mno-explicit-relocs'
21925     Use (do not use) assembler relocation operators when dealing with
21926     symbolic addresses.  The alternative, selected by
21927     '-mno-explicit-relocs', is to use assembler macros instead.
21928
21929     '-mexplicit-relocs' is the default if GCC was configured to use an
21930     assembler that supports relocation operators.
21931
21932'-mcheck-zero-division'
21933'-mno-check-zero-division'
21934     Trap (do not trap) on integer division by zero.
21935
21936     The default is '-mcheck-zero-division'.
21937
21938'-mdivide-traps'
21939'-mdivide-breaks'
21940     MIPS systems check for division by zero by generating either a
21941     conditional trap or a break instruction.  Using traps results in
21942     smaller code, but is only supported on MIPS II and later.  Also,
21943     some versions of the Linux kernel have a bug that prevents trap
21944     from generating the proper signal ('SIGFPE').  Use '-mdivide-traps'
21945     to allow conditional traps on architectures that support them and
21946     '-mdivide-breaks' to force the use of breaks.
21947
21948     The default is usually '-mdivide-traps', but this can be overridden
21949     at configure time using '--with-divide=breaks'.  Divide-by-zero
21950     checks can be completely disabled using '-mno-check-zero-division'.
21951
21952'-mload-store-pairs'
21953'-mno-load-store-pairs'
21954     Enable (disable) an optimization that pairs consecutive load or
21955     store instructions to enable load/store bonding.  This option is
21956     enabled by default but only takes effect when the selected
21957     architecture is known to support bonding.
21958
21959'-mmemcpy'
21960'-mno-memcpy'
21961     Force (do not force) the use of 'memcpy' for non-trivial block
21962     moves.  The default is '-mno-memcpy', which allows GCC to inline
21963     most constant-sized copies.
21964
21965'-mlong-calls'
21966'-mno-long-calls'
21967     Disable (do not disable) use of the 'jal' instruction.  Calling
21968     functions using 'jal' is more efficient but requires the caller and
21969     callee to be in the same 256 megabyte segment.
21970
21971     This option has no effect on abicalls code.  The default is
21972     '-mno-long-calls'.
21973
21974'-mmad'
21975'-mno-mad'
21976     Enable (disable) use of the 'mad', 'madu' and 'mul' instructions,
21977     as provided by the R4650 ISA.
21978
21979'-mimadd'
21980'-mno-imadd'
21981     Enable (disable) use of the 'madd' and 'msub' integer instructions.
21982     The default is '-mimadd' on architectures that support 'madd' and
21983     'msub' except for the 74k architecture where it was found to
21984     generate slower code.
21985
21986'-mfused-madd'
21987'-mno-fused-madd'
21988     Enable (disable) use of the floating-point multiply-accumulate
21989     instructions, when they are available.  The default is
21990     '-mfused-madd'.
21991
21992     On the R8000 CPU when multiply-accumulate instructions are used,
21993     the intermediate product is calculated to infinite precision and is
21994     not subject to the FCSR Flush to Zero bit.  This may be undesirable
21995     in some circumstances.  On other processors the result is
21996     numerically identical to the equivalent computation using separate
21997     multiply, add, subtract and negate instructions.
21998
21999'-nocpp'
22000     Tell the MIPS assembler to not run its preprocessor over user
22001     assembler files (with a '.s' suffix) when assembling them.
22002
22003'-mfix-24k'
22004'-mno-fix-24k'
22005     Work around the 24K E48 (lost data on stores during refill) errata.
22006     The workarounds are implemented by the assembler rather than by
22007     GCC.
22008
22009'-mfix-r4000'
22010'-mno-fix-r4000'
22011     Work around certain R4000 CPU errata:
22012        - A double-word or a variable shift may give an incorrect result
22013          if executed immediately after starting an integer division.
22014        - A double-word or a variable shift may give an incorrect result
22015          if executed while an integer multiplication is in progress.
22016        - An integer division may give an incorrect result if started in
22017          a delay slot of a taken branch or a jump.
22018
22019'-mfix-r4400'
22020'-mno-fix-r4400'
22021     Work around certain R4400 CPU errata:
22022        - A double-word or a variable shift may give an incorrect result
22023          if executed immediately after starting an integer division.
22024
22025'-mfix-r10000'
22026'-mno-fix-r10000'
22027     Work around certain R10000 errata:
22028        - 'll'/'sc' sequences may not behave atomically on revisions
22029          prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
22030
22031     This option can only be used if the target architecture supports
22032     branch-likely instructions.  '-mfix-r10000' is the default when
22033     '-march=r10000' is used; '-mno-fix-r10000' is the default
22034     otherwise.
22035
22036'-mfix-r5900'
22037'-mno-fix-r5900'
22038     Do not attempt to schedule the preceding instruction into the delay
22039     slot of a branch instruction placed at the end of a short loop of
22040     six instructions or fewer and always schedule a 'nop' instruction
22041     there instead.  The short loop bug under certain conditions causes
22042     loops to execute only once or twice, due to a hardware bug in the
22043     R5900 chip.  The workaround is implemented by the assembler rather
22044     than by GCC.
22045
22046'-mfix-rm7000'
22047'-mno-fix-rm7000'
22048     Work around the RM7000 'dmult'/'dmultu' errata.  The workarounds
22049     are implemented by the assembler rather than by GCC.
22050
22051'-mfix-vr4120'
22052'-mno-fix-vr4120'
22053     Work around certain VR4120 errata:
22054        - 'dmultu' does not always produce the correct result.
22055        - 'div' and 'ddiv' do not always produce the correct result if
22056          one of the operands is negative.
22057     The workarounds for the division errata rely on special functions
22058     in 'libgcc.a'.  At present, these functions are only provided by
22059     the 'mips64vr*-elf' configurations.
22060
22061     Other VR4120 errata require a NOP to be inserted between certain
22062     pairs of instructions.  These errata are handled by the assembler,
22063     not by GCC itself.
22064
22065'-mfix-vr4130'
22066     Work around the VR4130 'mflo'/'mfhi' errata.  The workarounds are
22067     implemented by the assembler rather than by GCC, although GCC
22068     avoids using 'mflo' and 'mfhi' if the VR4130 'macc', 'macchi',
22069     'dmacc' and 'dmacchi' instructions are available instead.
22070
22071'-mfix-sb1'
22072'-mno-fix-sb1'
22073     Work around certain SB-1 CPU core errata.  (This flag currently
22074     works around the SB-1 revision 2 "F1" and "F2" floating-point
22075     errata.)
22076
22077'-mr10k-cache-barrier=SETTING'
22078     Specify whether GCC should insert cache barriers to avoid the side
22079     effects of speculation on R10K processors.
22080
22081     In common with many processors, the R10K tries to predict the
22082     outcome of a conditional branch and speculatively executes
22083     instructions from the "taken" branch.  It later aborts these
22084     instructions if the predicted outcome is wrong.  However, on the
22085     R10K, even aborted instructions can have side effects.
22086
22087     This problem only affects kernel stores and, depending on the
22088     system, kernel loads.  As an example, a speculatively-executed
22089     store may load the target memory into cache and mark the cache line
22090     as dirty, even if the store itself is later aborted.  If a DMA
22091     operation writes to the same area of memory before the "dirty" line
22092     is flushed, the cached data overwrites the DMA-ed data.  See the
22093     R10K processor manual for a full description, including other
22094     potential problems.
22095
22096     One workaround is to insert cache barrier instructions before every
22097     memory access that might be speculatively executed and that might
22098     have side effects even if aborted.  '-mr10k-cache-barrier=SETTING'
22099     controls GCC's implementation of this workaround.  It assumes that
22100     aborted accesses to any byte in the following regions does not have
22101     side effects:
22102
22103       1. the memory occupied by the current function's stack frame;
22104
22105       2. the memory occupied by an incoming stack argument;
22106
22107       3. the memory occupied by an object with a link-time-constant
22108          address.
22109
22110     It is the kernel's responsibility to ensure that speculative
22111     accesses to these regions are indeed safe.
22112
22113     If the input program contains a function declaration such as:
22114
22115          void foo (void);
22116
22117     then the implementation of 'foo' must allow 'j foo' and 'jal foo'
22118     to be executed speculatively.  GCC honors this restriction for
22119     functions it compiles itself.  It expects non-GCC functions (such
22120     as hand-written assembly code) to do the same.
22121
22122     The option has three forms:
22123
22124     '-mr10k-cache-barrier=load-store'
22125          Insert a cache barrier before a load or store that might be
22126          speculatively executed and that might have side effects even
22127          if aborted.
22128
22129     '-mr10k-cache-barrier=store'
22130          Insert a cache barrier before a store that might be
22131          speculatively executed and that might have side effects even
22132          if aborted.
22133
22134     '-mr10k-cache-barrier=none'
22135          Disable the insertion of cache barriers.  This is the default
22136          setting.
22137
22138'-mflush-func=FUNC'
22139'-mno-flush-func'
22140     Specifies the function to call to flush the I and D caches, or to
22141     not call any such function.  If called, the function must take the
22142     same arguments as the common '_flush_func', that is, the address of
22143     the memory range for which the cache is being flushed, the size of
22144     the memory range, and the number 3 (to flush both caches).  The
22145     default depends on the target GCC was configured for, but commonly
22146     is either '_flush_func' or '__cpu_flush'.
22147
22148'mbranch-cost=NUM'
22149     Set the cost of branches to roughly NUM "simple" instructions.
22150     This cost is only a heuristic and is not guaranteed to produce
22151     consistent results across releases.  A zero cost redundantly
22152     selects the default, which is based on the '-mtune' setting.
22153
22154'-mbranch-likely'
22155'-mno-branch-likely'
22156     Enable or disable use of Branch Likely instructions, regardless of
22157     the default for the selected architecture.  By default, Branch
22158     Likely instructions may be generated if they are supported by the
22159     selected architecture.  An exception is for the MIPS32 and MIPS64
22160     architectures and processors that implement those architectures;
22161     for those, Branch Likely instructions are not be generated by
22162     default because the MIPS32 and MIPS64 architectures specifically
22163     deprecate their use.
22164
22165'-mcompact-branches=never'
22166'-mcompact-branches=optimal'
22167'-mcompact-branches=always'
22168     These options control which form of branches will be generated.
22169     The default is '-mcompact-branches=optimal'.
22170
22171     The '-mcompact-branches=never' option ensures that compact branch
22172     instructions will never be generated.
22173
22174     The '-mcompact-branches=always' option ensures that a compact
22175     branch instruction will be generated if available.  If a compact
22176     branch instruction is not available, a delay slot form of the
22177     branch will be used instead.
22178
22179     This option is supported from MIPS Release 6 onwards.
22180
22181     The '-mcompact-branches=optimal' option will cause a delay slot
22182     branch to be used if one is available in the current ISA and the
22183     delay slot is successfully filled.  If the delay slot is not
22184     filled, a compact branch will be chosen if one is available.
22185
22186'-mfp-exceptions'
22187'-mno-fp-exceptions'
22188     Specifies whether FP exceptions are enabled.  This affects how FP
22189     instructions are scheduled for some processors.  The default is
22190     that FP exceptions are enabled.
22191
22192     For instance, on the SB-1, if FP exceptions are disabled, and we
22193     are emitting 64-bit code, then we can use both FP pipes.
22194     Otherwise, we can only use one FP pipe.
22195
22196'-mvr4130-align'
22197'-mno-vr4130-align'
22198     The VR4130 pipeline is two-way superscalar, but can only issue two
22199     instructions together if the first one is 8-byte aligned.  When
22200     this option is enabled, GCC aligns pairs of instructions that it
22201     thinks should execute in parallel.
22202
22203     This option only has an effect when optimizing for the VR4130.  It
22204     normally makes code faster, but at the expense of making it bigger.
22205     It is enabled by default at optimization level '-O3'.
22206
22207'-msynci'
22208'-mno-synci'
22209     Enable (disable) generation of 'synci' instructions on
22210     architectures that support it.  The 'synci' instructions (if
22211     enabled) are generated when '__builtin___clear_cache' is compiled.
22212
22213     This option defaults to '-mno-synci', but the default can be
22214     overridden by configuring GCC with '--with-synci'.
22215
22216     When compiling code for single processor systems, it is generally
22217     safe to use 'synci'.  However, on many multi-core (SMP) systems, it
22218     does not invalidate the instruction caches on all cores and may
22219     lead to undefined behavior.
22220
22221'-mrelax-pic-calls'
22222'-mno-relax-pic-calls'
22223     Try to turn PIC calls that are normally dispatched via register
22224     '$25' into direct calls.  This is only possible if the linker can
22225     resolve the destination at link time and if the destination is
22226     within range for a direct call.
22227
22228     '-mrelax-pic-calls' is the default if GCC was configured to use an
22229     assembler and a linker that support the '.reloc' assembly directive
22230     and '-mexplicit-relocs' is in effect.  With '-mno-explicit-relocs',
22231     this optimization can be performed by the assembler and the linker
22232     alone without help from the compiler.
22233
22234'-mmcount-ra-address'
22235'-mno-mcount-ra-address'
22236     Emit (do not emit) code that allows '_mcount' to modify the calling
22237     function's return address.  When enabled, this option extends the
22238     usual '_mcount' interface with a new RA-ADDRESS parameter, which
22239     has type 'intptr_t *' and is passed in register '$12'.  '_mcount'
22240     can then modify the return address by doing both of the following:
22241        * Returning the new address in register '$31'.
22242        * Storing the new address in '*RA-ADDRESS', if RA-ADDRESS is
22243          nonnull.
22244
22245     The default is '-mno-mcount-ra-address'.
22246
22247'-mframe-header-opt'
22248'-mno-frame-header-opt'
22249     Enable (disable) frame header optimization in the o32 ABI. When
22250     using the o32 ABI, calling functions will allocate 16 bytes on the
22251     stack for the called function to write out register arguments.
22252     When enabled, this optimization will suppress the allocation of the
22253     frame header if it can be determined that it is unused.
22254
22255     This optimization is off by default at all optimization levels.
22256
22257'-mlxc1-sxc1'
22258'-mno-lxc1-sxc1'
22259     When applicable, enable (disable) the generation of 'lwxc1',
22260     'swxc1', 'ldxc1', 'sdxc1' instructions.  Enabled by default.
22261
22262'-mmadd4'
22263'-mno-madd4'
22264     When applicable, enable (disable) the generation of 4-operand
22265     'madd.s', 'madd.d' and related instructions.  Enabled by default.
22266
22267
22268File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
22269
222703.19.30 MMIX Options
22271--------------------
22272
22273These options are defined for the MMIX:
22274
22275'-mlibfuncs'
22276'-mno-libfuncs'
22277     Specify that intrinsic library functions are being compiled,
22278     passing all values in registers, no matter the size.
22279
22280'-mepsilon'
22281'-mno-epsilon'
22282     Generate floating-point comparison instructions that compare with
22283     respect to the 'rE' epsilon register.
22284
22285'-mabi=mmixware'
22286'-mabi=gnu'
22287     Generate code that passes function parameters and return values
22288     that (in the called function) are seen as registers '$0' and up, as
22289     opposed to the GNU ABI which uses global registers '$231' and up.
22290
22291'-mzero-extend'
22292'-mno-zero-extend'
22293     When reading data from memory in sizes shorter than 64 bits, use
22294     (do not use) zero-extending load instructions by default, rather
22295     than sign-extending ones.
22296
22297'-mknuthdiv'
22298'-mno-knuthdiv'
22299     Make the result of a division yielding a remainder have the same
22300     sign as the divisor.  With the default, '-mno-knuthdiv', the sign
22301     of the remainder follows the sign of the dividend.  Both methods
22302     are arithmetically valid, the latter being almost exclusively used.
22303
22304'-mtoplevel-symbols'
22305'-mno-toplevel-symbols'
22306     Prepend (do not prepend) a ':' to all global symbols, so the
22307     assembly code can be used with the 'PREFIX' assembly directive.
22308
22309'-melf'
22310     Generate an executable in the ELF format, rather than the default
22311     'mmo' format used by the 'mmix' simulator.
22312
22313'-mbranch-predict'
22314'-mno-branch-predict'
22315     Use (do not use) the probable-branch instructions, when static
22316     branch prediction indicates a probable branch.
22317
22318'-mbase-addresses'
22319'-mno-base-addresses'
22320     Generate (do not generate) code that uses _base addresses_.  Using
22321     a base address automatically generates a request (handled by the
22322     assembler and the linker) for a constant to be set up in a global
22323     register.  The register is used for one or more base address
22324     requests within the range 0 to 255 from the value held in the
22325     register.  The generally leads to short and fast code, but the
22326     number of different data items that can be addressed is limited.
22327     This means that a program that uses lots of static data may require
22328     '-mno-base-addresses'.
22329
22330'-msingle-exit'
22331'-mno-single-exit'
22332     Force (do not force) generated code to have a single exit point in
22333     each function.
22334
22335
22336File: gcc.info,  Node: MN10300 Options,  Next: Moxie Options,  Prev: MMIX Options,  Up: Submodel Options
22337
223383.19.31 MN10300 Options
22339-----------------------
22340
22341These '-m' options are defined for Matsushita MN10300 architectures:
22342
22343'-mmult-bug'
22344     Generate code to avoid bugs in the multiply instructions for the
22345     MN10300 processors.  This is the default.
22346
22347'-mno-mult-bug'
22348     Do not generate code to avoid bugs in the multiply instructions for
22349     the MN10300 processors.
22350
22351'-mam33'
22352     Generate code using features specific to the AM33 processor.
22353
22354'-mno-am33'
22355     Do not generate code using features specific to the AM33 processor.
22356     This is the default.
22357
22358'-mam33-2'
22359     Generate code using features specific to the AM33/2.0 processor.
22360
22361'-mam34'
22362     Generate code using features specific to the AM34 processor.
22363
22364'-mtune=CPU-TYPE'
22365     Use the timing characteristics of the indicated CPU type when
22366     scheduling instructions.  This does not change the targeted
22367     processor type.  The CPU type must be one of 'mn10300', 'am33',
22368     'am33-2' or 'am34'.
22369
22370'-mreturn-pointer-on-d0'
22371     When generating a function that returns a pointer, return the
22372     pointer in both 'a0' and 'd0'.  Otherwise, the pointer is returned
22373     only in 'a0', and attempts to call such functions without a
22374     prototype result in errors.  Note that this option is on by
22375     default; use '-mno-return-pointer-on-d0' to disable it.
22376
22377'-mno-crt0'
22378     Do not link in the C run-time initialization object file.
22379
22380'-mrelax'
22381     Indicate to the linker that it should perform a relaxation
22382     optimization pass to shorten branches, calls and absolute memory
22383     addresses.  This option only has an effect when used on the command
22384     line for the final link step.
22385
22386     This option makes symbolic debugging impossible.
22387
22388'-mliw'
22389     Allow the compiler to generate _Long Instruction Word_ instructions
22390     if the target is the 'AM33' or later.  This is the default.  This
22391     option defines the preprocessor macro '__LIW__'.
22392
22393'-mno-liw'
22394     Do not allow the compiler to generate _Long Instruction Word_
22395     instructions.  This option defines the preprocessor macro
22396     '__NO_LIW__'.
22397
22398'-msetlb'
22399     Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
22400     if the target is the 'AM33' or later.  This is the default.  This
22401     option defines the preprocessor macro '__SETLB__'.
22402
22403'-mno-setlb'
22404     Do not allow the compiler to generate _SETLB_ or _Lcc_
22405     instructions.  This option defines the preprocessor macro
22406     '__NO_SETLB__'.
22407
22408
22409File: gcc.info,  Node: Moxie Options,  Next: MSP430 Options,  Prev: MN10300 Options,  Up: Submodel Options
22410
224113.19.32 Moxie Options
22412---------------------
22413
22414'-meb'
22415     Generate big-endian code.  This is the default for 'moxie-*-*'
22416     configurations.
22417
22418'-mel'
22419     Generate little-endian code.
22420
22421'-mmul.x'
22422     Generate mul.x and umul.x instructions.  This is the default for
22423     'moxiebox-*-*' configurations.
22424
22425'-mno-crt0'
22426     Do not link in the C run-time initialization object file.
22427
22428
22429File: gcc.info,  Node: MSP430 Options,  Next: NDS32 Options,  Prev: Moxie Options,  Up: Submodel Options
22430
224313.19.33 MSP430 Options
22432----------------------
22433
22434These options are defined for the MSP430:
22435
22436'-masm-hex'
22437     Force assembly output to always use hex constants.  Normally such
22438     constants are signed decimals, but this option is available for
22439     testsuite and/or aesthetic purposes.
22440
22441'-mmcu='
22442     Select the MCU to target.  This is used to create a C preprocessor
22443     symbol based upon the MCU name, converted to upper case and pre-
22444     and post-fixed with '__'.  This in turn is used by the 'msp430.h'
22445     header file to select an MCU-specific supplementary header file.
22446
22447     The option also sets the ISA to use.  If the MCU name is one that
22448     is known to only support the 430 ISA then that is selected,
22449     otherwise the 430X ISA is selected.  A generic MCU name of 'msp430'
22450     can also be used to select the 430 ISA. Similarly the generic
22451     'msp430x' MCU name selects the 430X ISA.
22452
22453     In addition an MCU-specific linker script is added to the linker
22454     command line.  The script's name is the name of the MCU with '.ld'
22455     appended.  Thus specifying '-mmcu=xxx' on the 'gcc' command line
22456     defines the C preprocessor symbol '__XXX__' and cause the linker to
22457     search for a script called 'xxx.ld'.
22458
22459     The ISA and hardware multiply supported for the different MCUs is
22460     hard-coded into GCC. However, an external 'devices.csv' file can be
22461     used to extend device support beyond those that have been
22462     hard-coded.
22463
22464     GCC searches for the 'devices.csv' file using the following methods
22465     in the given precedence order, where the first method takes
22466     precendence over the second which takes precedence over the third.
22467
22468     Include path specified with '-I' and '-L'
22469          'devices.csv' will be searched for in each of the directories
22470          specified by include paths and linker library search paths.
22471     Path specified by the environment variable 'MSP430_GCC_INCLUDE_DIR'
22472          Define the value of the global environment variable
22473          'MSP430_GCC_INCLUDE_DIR' to the full path to the directory
22474          containing devices.csv, and GCC will search this directory for
22475          devices.csv.  If devices.csv is found, this directory will
22476          also be registered as an include path, and linker library
22477          path.  Header files and linker scripts in this directory can
22478          therefore be used without manually specifying '-I' and '-L' on
22479          the command line.
22480     The 'msp430-elf{,bare}/include/devices' directory
22481          Finally, GCC will examine 'msp430-elf{,bare}/include/devices'
22482          from the toolchain root directory.  This directory does not
22483          exist in a default installation, but if the user has created
22484          it and copied 'devices.csv' there, then the MCU data will be
22485          read.  As above, this directory will also be registered as an
22486          include path, and linker library path.
22487
22488     If none of the above search methods find 'devices.csv', then the
22489     hard-coded MCU data is used.
22490
22491'-mwarn-mcu'
22492'-mno-warn-mcu'
22493     This option enables or disables warnings about conflicts between
22494     the MCU name specified by the '-mmcu' option and the ISA set by the
22495     '-mcpu' option and/or the hardware multiply support set by the
22496     '-mhwmult' option.  It also toggles warnings about unrecognized MCU
22497     names.  This option is on by default.
22498
22499'-mcpu='
22500     Specifies the ISA to use.  Accepted values are 'msp430', 'msp430x'
22501     and 'msp430xv2'.  This option is deprecated.  The '-mmcu=' option
22502     should be used to select the ISA.
22503
22504'-msim'
22505     Link to the simulator runtime libraries and linker script.
22506     Overrides any scripts that would be selected by the '-mmcu='
22507     option.
22508
22509'-mlarge'
22510     Use large-model addressing (20-bit pointers, 32-bit 'size_t').
22511
22512'-msmall'
22513     Use small-model addressing (16-bit pointers, 16-bit 'size_t').
22514
22515'-mrelax'
22516     This option is passed to the assembler and linker, and allows the
22517     linker to perform certain optimizations that cannot be done until
22518     the final link.
22519
22520'mhwmult='
22521     Describes the type of hardware multiply supported by the target.
22522     Accepted values are 'none' for no hardware multiply, '16bit' for
22523     the original 16-bit-only multiply supported by early MCUs.  '32bit'
22524     for the 16/32-bit multiply supported by later MCUs and 'f5series'
22525     for the 16/32-bit multiply supported by F5-series MCUs.  A value of
22526     'auto' can also be given.  This tells GCC to deduce the hardware
22527     multiply support based upon the MCU name provided by the '-mmcu'
22528     option.  If no '-mmcu' option is specified or if the MCU name is
22529     not recognized then no hardware multiply support is assumed.
22530     'auto' is the default setting.
22531
22532     Hardware multiplies are normally performed by calling a library
22533     routine.  This saves space in the generated code.  When compiling
22534     at '-O3' or higher however the hardware multiplier is invoked
22535     inline.  This makes for bigger, but faster code.
22536
22537     The hardware multiply routines disable interrupts whilst running
22538     and restore the previous interrupt state when they finish.  This
22539     makes them safe to use inside interrupt handlers as well as in
22540     normal code.
22541
22542'-minrt'
22543     Enable the use of a minimum runtime environment - no static
22544     initializers or constructors.  This is intended for
22545     memory-constrained devices.  The compiler includes special symbols
22546     in some objects that tell the linker and runtime which code
22547     fragments are required.
22548
22549'-mtiny-printf'
22550     Enable reduced code size 'printf' and 'puts' library functions.
22551     The 'tiny' implementations of these functions are not reentrant, so
22552     must be used with caution in multi-threaded applications.
22553
22554     Support for streams has been removed and the string to be printed
22555     will always be sent to stdout via the 'write' syscall.  The string
22556     is not buffered before it is sent to write.
22557
22558     This option requires Newlib Nano IO, so GCC must be configured with
22559     '--enable-newlib-nano-formatted-io'.
22560
22561'-mcode-region='
22562'-mdata-region='
22563     These options tell the compiler where to place functions and data
22564     that do not have one of the 'lower', 'upper', 'either' or 'section'
22565     attributes.  Possible values are 'lower', 'upper', 'either' or
22566     'any'.  The first three behave like the corresponding attribute.
22567     The fourth possible value - 'any' - is the default.  It leaves
22568     placement entirely up to the linker script and how it assigns the
22569     standard sections ('.text', '.data', etc) to the memory regions.
22570
22571'-msilicon-errata='
22572     This option passes on a request to assembler to enable the fixes
22573     for the named silicon errata.
22574
22575'-msilicon-errata-warn='
22576     This option passes on a request to the assembler to enable warning
22577     messages when a silicon errata might need to be applied.
22578
22579'-mwarn-devices-csv'
22580'-mno-warn-devices-csv'
22581     Warn if 'devices.csv' is not found or there are problem parsing it
22582     (default: on).
22583
22584
22585File: gcc.info,  Node: NDS32 Options,  Next: Nios II Options,  Prev: MSP430 Options,  Up: Submodel Options
22586
225873.19.34 NDS32 Options
22588---------------------
22589
22590These options are defined for NDS32 implementations:
22591
22592'-mbig-endian'
22593     Generate code in big-endian mode.
22594
22595'-mlittle-endian'
22596     Generate code in little-endian mode.
22597
22598'-mreduced-regs'
22599     Use reduced-set registers for register allocation.
22600
22601'-mfull-regs'
22602     Use full-set registers for register allocation.
22603
22604'-mcmov'
22605     Generate conditional move instructions.
22606
22607'-mno-cmov'
22608     Do not generate conditional move instructions.
22609
22610'-mext-perf'
22611     Generate performance extension instructions.
22612
22613'-mno-ext-perf'
22614     Do not generate performance extension instructions.
22615
22616'-mext-perf2'
22617     Generate performance extension 2 instructions.
22618
22619'-mno-ext-perf2'
22620     Do not generate performance extension 2 instructions.
22621
22622'-mext-string'
22623     Generate string extension instructions.
22624
22625'-mno-ext-string'
22626     Do not generate string extension instructions.
22627
22628'-mv3push'
22629     Generate v3 push25/pop25 instructions.
22630
22631'-mno-v3push'
22632     Do not generate v3 push25/pop25 instructions.
22633
22634'-m16-bit'
22635     Generate 16-bit instructions.
22636
22637'-mno-16-bit'
22638     Do not generate 16-bit instructions.
22639
22640'-misr-vector-size=NUM'
22641     Specify the size of each interrupt vector, which must be 4 or 16.
22642
22643'-mcache-block-size=NUM'
22644     Specify the size of each cache block, which must be a power of 2
22645     between 4 and 512.
22646
22647'-march=ARCH'
22648     Specify the name of the target architecture.
22649
22650'-mcmodel=CODE-MODEL'
22651     Set the code model to one of
22652     'small'
22653          All the data and read-only data segments must be within 512KB
22654          addressing space.  The text segment must be within 16MB
22655          addressing space.
22656     'medium'
22657          The data segment must be within 512KB while the read-only data
22658          segment can be within 4GB addressing space.  The text segment
22659          should be still within 16MB addressing space.
22660     'large'
22661          All the text and data segments can be within 4GB addressing
22662          space.
22663
22664'-mctor-dtor'
22665     Enable constructor/destructor feature.
22666
22667'-mrelax'
22668     Guide linker to relax instructions.
22669
22670
22671File: gcc.info,  Node: Nios II Options,  Next: Nvidia PTX Options,  Prev: NDS32 Options,  Up: Submodel Options
22672
226733.19.35 Nios II Options
22674-----------------------
22675
22676These are the options defined for the Altera Nios II processor.
22677
22678'-G NUM'
22679     Put global and static objects less than or equal to NUM bytes into
22680     the small data or BSS sections instead of the normal data or BSS
22681     sections.  The default value of NUM is 8.
22682
22683'-mgpopt=OPTION'
22684'-mgpopt'
22685'-mno-gpopt'
22686     Generate (do not generate) GP-relative accesses.  The following
22687     OPTION names are recognized:
22688
22689     'none'
22690          Do not generate GP-relative accesses.
22691
22692     'local'
22693          Generate GP-relative accesses for small data objects that are
22694          not external, weak, or uninitialized common symbols.  Also use
22695          GP-relative addressing for objects that have been explicitly
22696          placed in a small data section via a 'section' attribute.
22697
22698     'global'
22699          As for 'local', but also generate GP-relative accesses for
22700          small data objects that are external, weak, or common.  If you
22701          use this option, you must ensure that all parts of your
22702          program (including libraries) are compiled with the same '-G'
22703          setting.
22704
22705     'data'
22706          Generate GP-relative accesses for all data objects in the
22707          program.  If you use this option, the entire data and BSS
22708          segments of your program must fit in 64K of memory and you
22709          must use an appropriate linker script to allocate them within
22710          the addressable range of the global pointer.
22711
22712     'all'
22713          Generate GP-relative addresses for function pointers as well
22714          as data pointers.  If you use this option, the entire text,
22715          data, and BSS segments of your program must fit in 64K of
22716          memory and you must use an appropriate linker script to
22717          allocate them within the addressable range of the global
22718          pointer.
22719
22720     '-mgpopt' is equivalent to '-mgpopt=local', and '-mno-gpopt' is
22721     equivalent to '-mgpopt=none'.
22722
22723     The default is '-mgpopt' except when '-fpic' or '-fPIC' is
22724     specified to generate position-independent code.  Note that the
22725     Nios II ABI does not permit GP-relative accesses from shared
22726     libraries.
22727
22728     You may need to specify '-mno-gpopt' explicitly when building
22729     programs that include large amounts of small data, including large
22730     GOT data sections.  In this case, the 16-bit offset for GP-relative
22731     addressing may not be large enough to allow access to the entire
22732     small data section.
22733
22734'-mgprel-sec=REGEXP'
22735     This option specifies additional section names that can be accessed
22736     via GP-relative addressing.  It is most useful in conjunction with
22737     'section' attributes on variable declarations (*note Common
22738     Variable Attributes::) and a custom linker script.  The REGEXP is a
22739     POSIX Extended Regular Expression.
22740
22741     This option does not affect the behavior of the '-G' option, and
22742     the specified sections are in addition to the standard '.sdata' and
22743     '.sbss' small-data sections that are recognized by '-mgpopt'.
22744
22745'-mr0rel-sec=REGEXP'
22746     This option specifies names of sections that can be accessed via a
22747     16-bit offset from 'r0'; that is, in the low 32K or high 32K of the
22748     32-bit address space.  It is most useful in conjunction with
22749     'section' attributes on variable declarations (*note Common
22750     Variable Attributes::) and a custom linker script.  The REGEXP is a
22751     POSIX Extended Regular Expression.
22752
22753     In contrast to the use of GP-relative addressing for small data,
22754     zero-based addressing is never generated by default and there are
22755     no conventional section names used in standard linker scripts for
22756     sections in the low or high areas of memory.
22757
22758'-mel'
22759'-meb'
22760     Generate little-endian (default) or big-endian (experimental) code,
22761     respectively.
22762
22763'-march=ARCH'
22764     This specifies the name of the target Nios II architecture.  GCC
22765     uses this name to determine what kind of instructions it can emit
22766     when generating assembly code.  Permissible names are: 'r1', 'r2'.
22767
22768     The preprocessor macro '__nios2_arch__' is available to programs,
22769     with value 1 or 2, indicating the targeted ISA level.
22770
22771'-mbypass-cache'
22772'-mno-bypass-cache'
22773     Force all load and store instructions to always bypass cache by
22774     using I/O variants of the instructions.  The default is not to
22775     bypass the cache.
22776
22777'-mno-cache-volatile'
22778'-mcache-volatile'
22779     Volatile memory access bypass the cache using the I/O variants of
22780     the load and store instructions.  The default is not to bypass the
22781     cache.
22782
22783'-mno-fast-sw-div'
22784'-mfast-sw-div'
22785     Do not use table-based fast divide for small numbers.  The default
22786     is to use the fast divide at '-O3' and above.
22787
22788'-mno-hw-mul'
22789'-mhw-mul'
22790'-mno-hw-mulx'
22791'-mhw-mulx'
22792'-mno-hw-div'
22793'-mhw-div'
22794     Enable or disable emitting 'mul', 'mulx' and 'div' family of
22795     instructions by the compiler.  The default is to emit 'mul' and not
22796     emit 'div' and 'mulx'.
22797
22798'-mbmx'
22799'-mno-bmx'
22800'-mcdx'
22801'-mno-cdx'
22802     Enable or disable generation of Nios II R2 BMX (bit manipulation)
22803     and CDX (code density) instructions.  Enabling these instructions
22804     also requires '-march=r2'.  Since these instructions are optional
22805     extensions to the R2 architecture, the default is not to emit them.
22806
22807'-mcustom-INSN=N'
22808'-mno-custom-INSN'
22809     Each '-mcustom-INSN=N' option enables use of a custom instruction
22810     with encoding N when generating code that uses INSN.  For example,
22811     '-mcustom-fadds=253' generates custom instruction 253 for
22812     single-precision floating-point add operations instead of the
22813     default behavior of using a library call.
22814
22815     The following values of INSN are supported.  Except as otherwise
22816     noted, floating-point operations are expected to be implemented
22817     with normal IEEE 754 semantics and correspond directly to the C
22818     operators or the equivalent GCC built-in functions (*note Other
22819     Builtins::).
22820
22821     Single-precision floating point:
22822
22823     'fadds', 'fsubs', 'fdivs', 'fmuls'
22824          Binary arithmetic operations.
22825
22826     'fnegs'
22827          Unary negation.
22828
22829     'fabss'
22830          Unary absolute value.
22831
22832     'fcmpeqs', 'fcmpges', 'fcmpgts', 'fcmples', 'fcmplts', 'fcmpnes'
22833          Comparison operations.
22834
22835     'fmins', 'fmaxs'
22836          Floating-point minimum and maximum.  These instructions are
22837          only generated if '-ffinite-math-only' is specified.
22838
22839     'fsqrts'
22840          Unary square root operation.
22841
22842     'fcoss', 'fsins', 'ftans', 'fatans', 'fexps', 'flogs'
22843          Floating-point trigonometric and exponential functions.  These
22844          instructions are only generated if
22845          '-funsafe-math-optimizations' is also specified.
22846
22847     Double-precision floating point:
22848
22849     'faddd', 'fsubd', 'fdivd', 'fmuld'
22850          Binary arithmetic operations.
22851
22852     'fnegd'
22853          Unary negation.
22854
22855     'fabsd'
22856          Unary absolute value.
22857
22858     'fcmpeqd', 'fcmpged', 'fcmpgtd', 'fcmpled', 'fcmpltd', 'fcmpned'
22859          Comparison operations.
22860
22861     'fmind', 'fmaxd'
22862          Double-precision minimum and maximum.  These instructions are
22863          only generated if '-ffinite-math-only' is specified.
22864
22865     'fsqrtd'
22866          Unary square root operation.
22867
22868     'fcosd', 'fsind', 'ftand', 'fatand', 'fexpd', 'flogd'
22869          Double-precision trigonometric and exponential functions.
22870          These instructions are only generated if
22871          '-funsafe-math-optimizations' is also specified.
22872
22873     Conversions:
22874     'fextsd'
22875          Conversion from single precision to double precision.
22876
22877     'ftruncds'
22878          Conversion from double precision to single precision.
22879
22880     'fixsi', 'fixsu', 'fixdi', 'fixdu'
22881          Conversion from floating point to signed or unsigned integer
22882          types, with truncation towards zero.
22883
22884     'round'
22885          Conversion from single-precision floating point to signed
22886          integer, rounding to the nearest integer and ties away from
22887          zero.  This corresponds to the '__builtin_lroundf' function
22888          when '-fno-math-errno' is used.
22889
22890     'floatis', 'floatus', 'floatid', 'floatud'
22891          Conversion from signed or unsigned integer types to
22892          floating-point types.
22893
22894     In addition, all of the following transfer instructions for
22895     internal registers X and Y must be provided to use any of the
22896     double-precision floating-point instructions.  Custom instructions
22897     taking two double-precision source operands expect the first
22898     operand in the 64-bit register X. The other operand (or only
22899     operand of a unary operation) is given to the custom arithmetic
22900     instruction with the least significant half in source register SRC1
22901     and the most significant half in SRC2.  A custom instruction that
22902     returns a double-precision result returns the most significant 32
22903     bits in the destination register and the other half in 32-bit
22904     register Y. GCC automatically generates the necessary code
22905     sequences to write register X and/or read register Y when
22906     double-precision floating-point instructions are used.
22907
22908     'fwrx'
22909          Write SRC1 into the least significant half of X and SRC2 into
22910          the most significant half of X.
22911
22912     'fwry'
22913          Write SRC1 into Y.
22914
22915     'frdxhi', 'frdxlo'
22916          Read the most or least (respectively) significant half of X
22917          and store it in DEST.
22918
22919     'frdy'
22920          Read the value of Y and store it into DEST.
22921
22922     Note that you can gain more local control over generation of Nios
22923     II custom instructions by using the 'target("custom-INSN=N")' and
22924     'target("no-custom-INSN")' function attributes (*note Function
22925     Attributes::) or pragmas (*note Function Specific Option
22926     Pragmas::).
22927
22928'-mcustom-fpu-cfg=NAME'
22929
22930     This option enables a predefined, named set of custom instruction
22931     encodings (see '-mcustom-INSN' above).  Currently, the following
22932     sets are defined:
22933
22934     '-mcustom-fpu-cfg=60-1' is equivalent to:
22935          -mcustom-fmuls=252
22936          -mcustom-fadds=253
22937          -mcustom-fsubs=254
22938          -fsingle-precision-constant
22939
22940     '-mcustom-fpu-cfg=60-2' is equivalent to:
22941          -mcustom-fmuls=252
22942          -mcustom-fadds=253
22943          -mcustom-fsubs=254
22944          -mcustom-fdivs=255
22945          -fsingle-precision-constant
22946
22947     '-mcustom-fpu-cfg=72-3' is equivalent to:
22948          -mcustom-floatus=243
22949          -mcustom-fixsi=244
22950          -mcustom-floatis=245
22951          -mcustom-fcmpgts=246
22952          -mcustom-fcmples=249
22953          -mcustom-fcmpeqs=250
22954          -mcustom-fcmpnes=251
22955          -mcustom-fmuls=252
22956          -mcustom-fadds=253
22957          -mcustom-fsubs=254
22958          -mcustom-fdivs=255
22959          -fsingle-precision-constant
22960
22961     Custom instruction assignments given by individual '-mcustom-INSN='
22962     options override those given by '-mcustom-fpu-cfg=', regardless of
22963     the order of the options on the command line.
22964
22965     Note that you can gain more local control over selection of a FPU
22966     configuration by using the 'target("custom-fpu-cfg=NAME")' function
22967     attribute (*note Function Attributes::) or pragma (*note Function
22968     Specific Option Pragmas::).
22969
22970 These additional '-m' options are available for the Altera Nios II ELF
22971(bare-metal) target:
22972
22973'-mhal'
22974     Link with HAL BSP. This suppresses linking with the GCC-provided C
22975     runtime startup and termination code, and is typically used in
22976     conjunction with '-msys-crt0=' to specify the location of the
22977     alternate startup code provided by the HAL BSP.
22978
22979'-msmallc'
22980     Link with a limited version of the C library, '-lsmallc', rather
22981     than Newlib.
22982
22983'-msys-crt0=STARTFILE'
22984     STARTFILE is the file name of the startfile (crt0) to use when
22985     linking.  This option is only useful in conjunction with '-mhal'.
22986
22987'-msys-lib=SYSTEMLIB'
22988     SYSTEMLIB is the library name of the library that provides
22989     low-level system calls required by the C library, e.g. 'read' and
22990     'write'.  This option is typically used to link with a library
22991     provided by a HAL BSP.
22992
22993
22994File: gcc.info,  Node: Nvidia PTX Options,  Next: OpenRISC Options,  Prev: Nios II Options,  Up: Submodel Options
22995
229963.19.36 Nvidia PTX Options
22997--------------------------
22998
22999These options are defined for Nvidia PTX:
23000
23001'-m32'
23002'-m64'
23003     Generate code for 32-bit or 64-bit ABI.
23004
23005'-misa=ISA-STRING'
23006     Generate code for given the specified PTX ISA (e.g. 'sm_35').  ISA
23007     strings must be lower-case.  Valid ISA strings include 'sm_30' and
23008     'sm_35'.  The default ISA is sm_30.
23009
23010'-mmainkernel'
23011     Link in code for a __main kernel.  This is for stand-alone instead
23012     of offloading execution.
23013
23014'-moptimize'
23015     Apply partitioned execution optimizations.  This is the default
23016     when any level of optimization is selected.
23017
23018'-msoft-stack'
23019     Generate code that does not use '.local' memory directly for stack
23020     storage.  Instead, a per-warp stack pointer is maintained
23021     explicitly.  This enables variable-length stack allocation (with
23022     variable-length arrays or 'alloca'), and when global memory is used
23023     for underlying storage, makes it possible to access automatic
23024     variables from other threads, or with atomic instructions.  This
23025     code generation variant is used for OpenMP offloading, but the
23026     option is exposed on its own for the purpose of testing the
23027     compiler; to generate code suitable for linking into programs using
23028     OpenMP offloading, use option '-mgomp'.
23029
23030'-muniform-simt'
23031     Switch to code generation variant that allows to execute all
23032     threads in each warp, while maintaining memory state and side
23033     effects as if only one thread in each warp was active outside of
23034     OpenMP SIMD regions.  All atomic operations and calls to runtime
23035     (malloc, free, vprintf) are conditionally executed (iff current
23036     lane index equals the master lane index), and the register being
23037     assigned is copied via a shuffle instruction from the master lane.
23038     Outside of SIMD regions lane 0 is the master; inside, each thread
23039     sees itself as the master.  Shared memory array 'int __nvptx_uni[]'
23040     stores all-zeros or all-ones bitmasks for each warp, indicating
23041     current mode (0 outside of SIMD regions).  Each thread can
23042     bitwise-and the bitmask at position 'tid.y' with current lane index
23043     to compute the master lane index.
23044
23045'-mgomp'
23046     Generate code for use in OpenMP offloading: enables '-msoft-stack'
23047     and '-muniform-simt' options, and selects corresponding multilib
23048     variant.
23049
23050
23051File: gcc.info,  Node: OpenRISC Options,  Next: PDP-11 Options,  Prev: Nvidia PTX Options,  Up: Submodel Options
23052
230533.19.37 OpenRISC Options
23054------------------------
23055
23056These options are defined for OpenRISC:
23057
23058'-mboard=NAME'
23059     Configure a board specific runtime.  This will be passed to the
23060     linker for newlib board library linking.  The default is 'or1ksim'.
23061
23062'-mnewlib'
23063     This option is ignored; it is for compatibility purposes only.
23064     This used to select linker and preprocessor options for use with
23065     newlib.
23066
23067'-msoft-div'
23068'-mhard-div'
23069     Select software or hardware divide ('l.div', 'l.divu')
23070     instructions.  This default is hardware divide.
23071
23072'-msoft-mul'
23073'-mhard-mul'
23074     Select software or hardware multiply ('l.mul', 'l.muli')
23075     instructions.  This default is hardware multiply.
23076
23077'-msoft-float'
23078'-mhard-float'
23079     Select software or hardware for floating point operations.  The
23080     default is software.
23081
23082'-mdouble-float'
23083     When '-mhard-float' is selected, enables generation of
23084     double-precision floating point instructions.  By default functions
23085     from 'libgcc' are used to perform double-precision floating point
23086     operations.
23087
23088'-munordered-float'
23089     When '-mhard-float' is selected, enables generation of unordered
23090     floating point compare and set flag ('lf.sfun*') instructions.  By
23091     default functions from 'libgcc' are used to perform unordered
23092     floating point compare and set flag operations.
23093
23094'-mcmov'
23095     Enable generation of conditional move ('l.cmov') instructions.  By
23096     default the equivalent will be generated using set and branch.
23097
23098'-mror'
23099     Enable generation of rotate right ('l.ror') instructions.  By
23100     default functions from 'libgcc' are used to perform rotate right
23101     operations.
23102
23103'-mrori'
23104     Enable generation of rotate right with immediate ('l.rori')
23105     instructions.  By default functions from 'libgcc' are used to
23106     perform rotate right with immediate operations.
23107
23108'-msext'
23109     Enable generation of sign extension ('l.ext*') instructions.  By
23110     default memory loads are used to perform sign extension.
23111
23112'-msfimm'
23113     Enable generation of compare and set flag with immediate ('l.sf*i')
23114     instructions.  By default extra instructions will be generated to
23115     store the immediate to a register first.
23116
23117'-mshftimm'
23118     Enable generation of shift with immediate ('l.srai', 'l.srli',
23119     'l.slli') instructions.  By default extra instructions will be
23120     generated to store the immediate to a register first.
23121
23122
23123File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: OpenRISC Options,  Up: Submodel Options
23124
231253.19.38 PDP-11 Options
23126----------------------
23127
23128These options are defined for the PDP-11:
23129
23130'-mfpu'
23131     Use hardware FPP floating point.  This is the default.  (FIS
23132     floating point on the PDP-11/40 is not supported.)  Implies -m45.
23133
23134'-msoft-float'
23135     Do not use hardware floating point.
23136
23137'-mac0'
23138     Return floating-point results in ac0 (fr0 in Unix assembler
23139     syntax).
23140
23141'-mno-ac0'
23142     Return floating-point results in memory.  This is the default.
23143
23144'-m40'
23145     Generate code for a PDP-11/40.  Implies -msoft-float -mno-split.
23146
23147'-m45'
23148     Generate code for a PDP-11/45.  This is the default.
23149
23150'-m10'
23151     Generate code for a PDP-11/10.  Implies -msoft-float -mno-split.
23152
23153'-mint16'
23154'-mno-int32'
23155     Use 16-bit 'int'.  This is the default.
23156
23157'-mint32'
23158'-mno-int16'
23159     Use 32-bit 'int'.
23160
23161'-msplit'
23162     Target has split instruction and data space.  Implies -m45.
23163
23164'-munix-asm'
23165     Use Unix assembler syntax.
23166
23167'-mdec-asm'
23168     Use DEC assembler syntax.
23169
23170'-mgnu-asm'
23171     Use GNU assembler syntax.  This is the default.
23172
23173'-mlra'
23174     Use the new LRA register allocator.  By default, the old "reload"
23175     allocator is used.
23176
23177
23178File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
23179
231803.19.39 picoChip Options
23181------------------------
23182
23183These '-m' options are defined for picoChip implementations:
23184
23185'-mae=AE_TYPE'
23186     Set the instruction set, register set, and instruction scheduling
23187     parameters for array element type AE_TYPE.  Supported values for
23188     AE_TYPE are 'ANY', 'MUL', and 'MAC'.
23189
23190     '-mae=ANY' selects a completely generic AE type.  Code generated
23191     with this option runs on any of the other AE types.  The code is
23192     not as efficient as it would be if compiled for a specific AE type,
23193     and some types of operation (e.g., multiplication) do not work
23194     properly on all types of AE.
23195
23196     '-mae=MUL' selects a MUL AE type.  This is the most useful AE type
23197     for compiled code, and is the default.
23198
23199     '-mae=MAC' selects a DSP-style MAC AE. Code compiled with this
23200     option may suffer from poor performance of byte (char)
23201     manipulation, since the DSP AE does not provide hardware support
23202     for byte load/stores.
23203
23204'-msymbol-as-address'
23205     Enable the compiler to directly use a symbol name as an address in
23206     a load/store instruction, without first loading it into a register.
23207     Typically, the use of this option generates larger programs, which
23208     run faster than when the option isn't used.  However, the results
23209     vary from program to program, so it is left as a user option,
23210     rather than being permanently enabled.
23211
23212'-mno-inefficient-warnings'
23213     Disables warnings about the generation of inefficient code.  These
23214     warnings can be generated, for example, when compiling code that
23215     performs byte-level memory operations on the MAC AE type.  The MAC
23216     AE has no hardware support for byte-level memory operations, so all
23217     byte load/stores must be synthesized from word load/store
23218     operations.  This is inefficient and a warning is generated to
23219     indicate that you should rewrite the code to avoid byte operations,
23220     or to target an AE type that has the necessary hardware support.
23221     This option disables these warnings.
23222
23223
23224File: gcc.info,  Node: PowerPC Options,  Next: PRU Options,  Prev: picoChip Options,  Up: Submodel Options
23225
232263.19.40 PowerPC Options
23227-----------------------
23228
23229These are listed under *Note RS/6000 and PowerPC Options::.
23230
23231
23232File: gcc.info,  Node: PRU Options,  Next: RISC-V Options,  Prev: PowerPC Options,  Up: Submodel Options
23233
232343.19.41 PRU Options
23235-------------------
23236
23237These command-line options are defined for PRU target:
23238
23239'-minrt'
23240     Link with a minimum runtime environment, with no support for static
23241     initializers and constructors.  Using this option can significantly
23242     reduce the size of the final ELF binary.  Beware that the compiler
23243     could still generate code with static initializers and
23244     constructors.  It is up to the programmer to ensure that the source
23245     program will not use those features.
23246
23247'-mmcu=MCU'
23248     Specify the PRU MCU variant to use.  Check Newlib for the exact
23249     list of supported MCUs.
23250
23251'-mno-relax'
23252     Make GCC pass the '--no-relax' command-line option to the linker
23253     instead of the '--relax' option.
23254
23255'-mloop'
23256     Allow (or do not allow) GCC to use the LOOP instruction.
23257
23258'-mabi=VARIANT'
23259     Specify the ABI variant to output code for.  '-mabi=ti' selects the
23260     unmodified TI ABI while '-mabi=gnu' selects a GNU variant that
23261     copes more naturally with certain GCC assumptions.  These are the
23262     differences:
23263
23264     'Function Pointer Size'
23265          TI ABI specifies that function (code) pointers are 16-bit,
23266          whereas GNU supports only 32-bit data and code pointers.
23267
23268     'Optional Return Value Pointer'
23269          Function return values larger than 64 bits are passed by using
23270          a hidden pointer as the first argument of the function.  TI
23271          ABI, though, mandates that the pointer can be NULL in case the
23272          caller is not using the returned value.  GNU always passes and
23273          expects a valid return value pointer.
23274
23275     The current '-mabi=ti' implementation simply raises a compile error
23276     when any of the above code constructs is detected.  As a
23277     consequence the standard C library cannot be built and it is
23278     omitted when linking with '-mabi=ti'.
23279
23280     Relaxation is a GNU feature and for safety reasons is disabled when
23281     using '-mabi=ti'.  The TI toolchain does not emit relocations for
23282     QBBx instructions, so the GNU linker cannot adjust them when
23283     shortening adjacent LDI32 pseudo instructions.
23284
23285
23286File: gcc.info,  Node: RISC-V Options,  Next: RL78 Options,  Prev: PRU Options,  Up: Submodel Options
23287
232883.19.42 RISC-V Options
23289----------------------
23290
23291These command-line options are defined for RISC-V targets:
23292
23293'-mbranch-cost=N'
23294     Set the cost of branches to roughly N instructions.
23295
23296'-mplt'
23297'-mno-plt'
23298     When generating PIC code, do or don't allow the use of PLTs.
23299     Ignored for non-PIC. The default is '-mplt'.
23300
23301'-mabi=ABI-STRING'
23302     Specify integer and floating-point calling convention.  ABI-STRING
23303     contains two parts: the size of integer types and the registers
23304     used for floating-point types.  For example '-march=rv64ifd
23305     -mabi=lp64d' means that 'long' and pointers are 64-bit (implicitly
23306     defining 'int' to be 32-bit), and that floating-point values up to
23307     64 bits wide are passed in F registers.  Contrast this with
23308     '-march=rv64ifd -mabi=lp64f', which still allows the compiler to
23309     generate code that uses the F and D extensions but only allows
23310     floating-point values up to 32 bits long to be passed in registers;
23311     or '-march=rv64ifd -mabi=lp64', in which no floating-point
23312     arguments will be passed in registers.
23313
23314     The default for this argument is system dependent, users who want a
23315     specific calling convention should specify one explicitly.  The
23316     valid calling conventions are: 'ilp32', 'ilp32f', 'ilp32d', 'lp64',
23317     'lp64f', and 'lp64d'.  Some calling conventions are impossible to
23318     implement on some ISAs: for example, '-march=rv32if -mabi=ilp32d'
23319     is invalid because the ABI requires 64-bit values be passed in F
23320     registers, but F registers are only 32 bits wide.  There is also
23321     the 'ilp32e' ABI that can only be used with the 'rv32e'
23322     architecture.  This ABI is not well specified at present, and is
23323     subject to change.
23324
23325'-mfdiv'
23326'-mno-fdiv'
23327     Do or don't use hardware floating-point divide and square root
23328     instructions.  This requires the F or D extensions for
23329     floating-point registers.  The default is to use them if the
23330     specified architecture has these instructions.
23331
23332'-mdiv'
23333'-mno-div'
23334     Do or don't use hardware instructions for integer division.  This
23335     requires the M extension.  The default is to use them if the
23336     specified architecture has these instructions.
23337
23338'-march=ISA-STRING'
23339     Generate code for given RISC-V ISA (e.g. 'rv64im').  ISA strings
23340     must be lower-case.  Examples include 'rv64i', 'rv32g', 'rv32e',
23341     and 'rv32imaf'.
23342
23343'-mtune=PROCESSOR-STRING'
23344     Optimize the output for the given processor, specified by
23345     microarchitecture name.  Permissible values for this option are:
23346     'rocket', 'sifive-3-series', 'sifive-5-series', 'sifive-7-series',
23347     and 'size'.
23348
23349     When '-mtune=' is not specified, the default is 'rocket'.
23350
23351     The 'size' choice is not intended for use by end-users.  This is
23352     used when '-Os' is specified.  It overrides the instruction cost
23353     info provided by '-mtune=', but does not override the pipeline
23354     info.  This helps reduce code size while still giving good
23355     performance.
23356
23357'-mpreferred-stack-boundary=NUM'
23358     Attempt to keep the stack boundary aligned to a 2 raised to NUM
23359     byte boundary.  If '-mpreferred-stack-boundary' is not specified,
23360     the default is 4 (16 bytes or 128-bits).
23361
23362     *Warning:* If you use this switch, then you must build all modules
23363     with the same value, including any libraries.  This includes the
23364     system libraries and startup modules.
23365
23366'-msmall-data-limit=N'
23367     Put global and static data smaller than N bytes into a special
23368     section (on some targets).
23369
23370'-msave-restore'
23371'-mno-save-restore'
23372     Do or don't use smaller but slower prologue and epilogue code that
23373     uses library function calls.  The default is to use fast inline
23374     prologues and epilogues.
23375
23376'-mstrict-align'
23377'-mno-strict-align'
23378     Do not or do generate unaligned memory accesses.  The default is
23379     set depending on whether the processor we are optimizing for
23380     supports fast unaligned access or not.
23381
23382'-mcmodel=medlow'
23383     Generate code for the medium-low code model.  The program and its
23384     statically defined symbols must lie within a single 2 GiB address
23385     range and must lie between absolute addresses -2 GiB and +2 GiB.
23386     Programs can be statically or dynamically linked.  This is the
23387     default code model.
23388
23389'-mcmodel=medany'
23390     Generate code for the medium-any code model.  The program and its
23391     statically defined symbols must be within any single 2 GiB address
23392     range.  Programs can be statically or dynamically linked.
23393
23394'-mexplicit-relocs'
23395'-mno-exlicit-relocs'
23396     Use or do not use assembler relocation operators when dealing with
23397     symbolic addresses.  The alternative is to use assembler macros
23398     instead, which may limit optimization.
23399
23400'-mrelax'
23401'-mno-relax'
23402     Take advantage of linker relaxations to reduce the number of
23403     instructions required to materialize symbol addresses.  The default
23404     is to take advantage of linker relaxations.
23405
23406'-memit-attribute'
23407'-mno-emit-attribute'
23408     Emit (do not emit) RISC-V attribute to record extra information
23409     into ELF objects.  This feature requires at least binutils 2.32.
23410
23411'-malign-data=TYPE'
23412     Control how GCC aligns variables and constants of array, structure,
23413     or union types.  Supported values for TYPE are 'xlen' which uses x
23414     register width as the alignment value, and 'natural' which uses
23415     natural alignment.  'xlen' is the default.
23416
23417
23418File: gcc.info,  Node: RL78 Options,  Next: RS/6000 and PowerPC Options,  Prev: RISC-V Options,  Up: Submodel Options
23419
234203.19.43 RL78 Options
23421--------------------
23422
23423'-msim'
23424     Links in additional target libraries to support operation within a
23425     simulator.
23426
23427'-mmul=none'
23428'-mmul=g10'
23429'-mmul=g13'
23430'-mmul=g14'
23431'-mmul=rl78'
23432     Specifies the type of hardware multiplication and division support
23433     to be used.  The simplest is 'none', which uses software for both
23434     multiplication and division.  This is the default.  The 'g13' value
23435     is for the hardware multiply/divide peripheral found on the
23436     RL78/G13 (S2 core) targets.  The 'g14' value selects the use of the
23437     multiplication and division instructions supported by the RL78/G14
23438     (S3 core) parts.  The value 'rl78' is an alias for 'g14' and the
23439     value 'mg10' is an alias for 'none'.
23440
23441     In addition a C preprocessor macro is defined, based upon the
23442     setting of this option.  Possible values are: '__RL78_MUL_NONE__',
23443     '__RL78_MUL_G13__' or '__RL78_MUL_G14__'.
23444
23445'-mcpu=g10'
23446'-mcpu=g13'
23447'-mcpu=g14'
23448'-mcpu=rl78'
23449     Specifies the RL78 core to target.  The default is the G14 core,
23450     also known as an S3 core or just RL78.  The G13 or S2 core does not
23451     have multiply or divide instructions, instead it uses a hardware
23452     peripheral for these operations.  The G10 or S1 core does not have
23453     register banks, so it uses a different calling convention.
23454
23455     If this option is set it also selects the type of hardware multiply
23456     support to use, unless this is overridden by an explicit
23457     '-mmul=none' option on the command line.  Thus specifying
23458     '-mcpu=g13' enables the use of the G13 hardware multiply peripheral
23459     and specifying '-mcpu=g10' disables the use of hardware
23460     multiplications altogether.
23461
23462     Note, although the RL78/G14 core is the default target, specifying
23463     '-mcpu=g14' or '-mcpu=rl78' on the command line does change the
23464     behavior of the toolchain since it also enables G14 hardware
23465     multiply support.  If these options are not specified on the
23466     command line then software multiplication routines will be used
23467     even though the code targets the RL78 core.  This is for backwards
23468     compatibility with older toolchains which did not have hardware
23469     multiply and divide support.
23470
23471     In addition a C preprocessor macro is defined, based upon the
23472     setting of this option.  Possible values are: '__RL78_G10__',
23473     '__RL78_G13__' or '__RL78_G14__'.
23474
23475'-mg10'
23476'-mg13'
23477'-mg14'
23478'-mrl78'
23479     These are aliases for the corresponding '-mcpu=' option.  They are
23480     provided for backwards compatibility.
23481
23482'-mallregs'
23483     Allow the compiler to use all of the available registers.  By
23484     default registers 'r24..r31' are reserved for use in interrupt
23485     handlers.  With this option enabled these registers can be used in
23486     ordinary functions as well.
23487
23488'-m64bit-doubles'
23489'-m32bit-doubles'
23490     Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
23491     bits ('-m32bit-doubles') in size.  The default is
23492     '-m32bit-doubles'.
23493
23494'-msave-mduc-in-interrupts'
23495'-mno-save-mduc-in-interrupts'
23496     Specifies that interrupt handler functions should preserve the MDUC
23497     registers.  This is only necessary if normal code might use the
23498     MDUC registers, for example because it performs multiplication and
23499     division operations.  The default is to ignore the MDUC registers
23500     as this makes the interrupt handlers faster.  The target option
23501     -mg13 needs to be passed for this to work as this feature is only
23502     available on the G13 target (S2 core).  The MDUC registers will
23503     only be saved if the interrupt handler performs a multiplication or
23504     division operation or it calls another function.
23505
23506
23507File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: RL78 Options,  Up: Submodel Options
23508
235093.19.44 IBM RS/6000 and PowerPC Options
23510---------------------------------------
23511
23512These '-m' options are defined for the IBM RS/6000 and PowerPC:
23513'-mpowerpc-gpopt'
23514'-mno-powerpc-gpopt'
23515'-mpowerpc-gfxopt'
23516'-mno-powerpc-gfxopt'
23517'-mpowerpc64'
23518'-mno-powerpc64'
23519'-mmfcrf'
23520'-mno-mfcrf'
23521'-mpopcntb'
23522'-mno-popcntb'
23523'-mpopcntd'
23524'-mno-popcntd'
23525'-mfprnd'
23526'-mno-fprnd'
23527'-mcmpb'
23528'-mno-cmpb'
23529'-mhard-dfp'
23530'-mno-hard-dfp'
23531     You use these options to specify which instructions are available
23532     on the processor you are using.  The default value of these options
23533     is determined when configuring GCC.  Specifying the
23534     '-mcpu=CPU_TYPE' overrides the specification of these options.  We
23535     recommend you use the '-mcpu=CPU_TYPE' option rather than the
23536     options listed above.
23537
23538     Specifying '-mpowerpc-gpopt' allows GCC to use the optional PowerPC
23539     architecture instructions in the General Purpose group, including
23540     floating-point square root.  Specifying '-mpowerpc-gfxopt' allows
23541     GCC to use the optional PowerPC architecture instructions in the
23542     Graphics group, including floating-point select.
23543
23544     The '-mmfcrf' option allows GCC to generate the move from condition
23545     register field instruction implemented on the POWER4 processor and
23546     other processors that support the PowerPC V2.01 architecture.  The
23547     '-mpopcntb' option allows GCC to generate the popcount and
23548     double-precision FP reciprocal estimate instruction implemented on
23549     the POWER5 processor and other processors that support the PowerPC
23550     V2.02 architecture.  The '-mpopcntd' option allows GCC to generate
23551     the popcount instruction implemented on the POWER7 processor and
23552     other processors that support the PowerPC V2.06 architecture.  The
23553     '-mfprnd' option allows GCC to generate the FP round to integer
23554     instructions implemented on the POWER5+ processor and other
23555     processors that support the PowerPC V2.03 architecture.  The
23556     '-mcmpb' option allows GCC to generate the compare bytes
23557     instruction implemented on the POWER6 processor and other
23558     processors that support the PowerPC V2.05 architecture.  The
23559     '-mhard-dfp' option allows GCC to generate the decimal
23560     floating-point instructions implemented on some POWER processors.
23561
23562     The '-mpowerpc64' option allows GCC to generate the additional
23563     64-bit instructions that are found in the full PowerPC64
23564     architecture and to treat GPRs as 64-bit, doubleword quantities.
23565     GCC defaults to '-mno-powerpc64'.
23566
23567'-mcpu=CPU_TYPE'
23568     Set architecture type, register usage, and instruction scheduling
23569     parameters for machine type CPU_TYPE.  Supported values for
23570     CPU_TYPE are '401', '403', '405', '405fp', '440', '440fp', '464',
23571     '464fp', '476', '476fp', '505', '601', '602', '603', '603e', '604',
23572     '604e', '620', '630', '740', '7400', '7450', '750', '801', '821',
23573     '823', '860', '970', '8540', 'a2', 'e300c2', 'e300c3', 'e500mc',
23574     'e500mc64', 'e5500', 'e6500', 'ec603e', 'G3', 'G4', 'G5', 'titan',
23575     'power3', 'power4', 'power5', 'power5+', 'power6', 'power6x',
23576     'power7', 'power8', 'power9', 'power10', 'powerpc', 'powerpc64',
23577     'powerpc64le', 'rs64', and 'native'.
23578
23579     '-mcpu=powerpc', '-mcpu=powerpc64', and '-mcpu=powerpc64le' specify
23580     pure 32-bit PowerPC (either endian), 64-bit big endian PowerPC and
23581     64-bit little endian PowerPC architecture machine types, with an
23582     appropriate, generic processor model assumed for scheduling
23583     purposes.
23584
23585     Specifying 'native' as cpu type detects and selects the
23586     architecture option that corresponds to the host processor of the
23587     system performing the compilation.  '-mcpu=native' has no effect if
23588     GCC does not recognize the processor.
23589
23590     The other options specify a specific processor.  Code generated
23591     under those options runs best on that processor, and may not run at
23592     all on others.
23593
23594     The '-mcpu' options automatically enable or disable the following
23595     options:
23596
23597          -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
23598          -mpopcntb  -mpopcntd  -mpowerpc64
23599          -mpowerpc-gpopt  -mpowerpc-gfxopt
23600          -mmulhw  -mdlmzb  -mmfpgpr  -mvsx
23601          -mcrypto  -mhtm  -mpower8-fusion  -mpower8-vector
23602          -mquad-memory  -mquad-memory-atomic  -mfloat128
23603          -mfloat128-hardware -mprefixed -mpcrel -mmma
23604
23605     The particular options set for any particular CPU varies between
23606     compiler versions, depending on what setting seems to produce
23607     optimal code for that CPU; it doesn't necessarily reflect the
23608     actual hardware's capabilities.  If you wish to set an individual
23609     option to a particular value, you may specify it after the '-mcpu'
23610     option, like '-mcpu=970 -mno-altivec'.
23611
23612     On AIX, the '-maltivec' and '-mpowerpc64' options are not enabled
23613     or disabled by the '-mcpu' option at present because AIX does not
23614     have full support for these options.  You may still enable or
23615     disable them individually if you're sure it'll work in your
23616     environment.
23617
23618'-mtune=CPU_TYPE'
23619     Set the instruction scheduling parameters for machine type
23620     CPU_TYPE, but do not set the architecture type or register usage,
23621     as '-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
23622     for '-mtune' as for '-mcpu'.  If both are specified, the code
23623     generated uses the architecture and registers set by '-mcpu', but
23624     the scheduling parameters set by '-mtune'.
23625
23626'-mcmodel=small'
23627     Generate PowerPC64 code for the small model: The TOC is limited to
23628     64k.
23629
23630'-mcmodel=medium'
23631     Generate PowerPC64 code for the medium model: The TOC and other
23632     static data may be up to a total of 4G in size.  This is the
23633     default for 64-bit Linux.
23634
23635'-mcmodel=large'
23636     Generate PowerPC64 code for the large model: The TOC may be up to
23637     4G in size.  Other data and code is only limited by the 64-bit
23638     address space.
23639
23640'-maltivec'
23641'-mno-altivec'
23642     Generate code that uses (does not use) AltiVec instructions, and
23643     also enable the use of built-in functions that allow more direct
23644     access to the AltiVec instruction set.  You may also need to set
23645     '-mabi=altivec' to adjust the current ABI with AltiVec ABI
23646     enhancements.
23647
23648     When '-maltivec' is used, the element order for AltiVec intrinsics
23649     such as 'vec_splat', 'vec_extract', and 'vec_insert' match array
23650     element order corresponding to the endianness of the target.  That
23651     is, element zero identifies the leftmost element in a vector
23652     register when targeting a big-endian platform, and identifies the
23653     rightmost element in a vector register when targeting a
23654     little-endian platform.
23655
23656'-mvrsave'
23657'-mno-vrsave'
23658     Generate VRSAVE instructions when generating AltiVec code.
23659
23660'-msecure-plt'
23661     Generate code that allows 'ld' and 'ld.so' to build executables and
23662     shared libraries with non-executable '.plt' and '.got' sections.
23663     This is a PowerPC 32-bit SYSV ABI option.
23664
23665'-mbss-plt'
23666     Generate code that uses a BSS '.plt' section that 'ld.so' fills in,
23667     and requires '.plt' and '.got' sections that are both writable and
23668     executable.  This is a PowerPC 32-bit SYSV ABI option.
23669
23670'-misel'
23671'-mno-isel'
23672     This switch enables or disables the generation of ISEL
23673     instructions.
23674
23675'-mvsx'
23676'-mno-vsx'
23677     Generate code that uses (does not use) vector/scalar (VSX)
23678     instructions, and also enable the use of built-in functions that
23679     allow more direct access to the VSX instruction set.
23680
23681'-mcrypto'
23682'-mno-crypto'
23683     Enable the use (disable) of the built-in functions that allow
23684     direct access to the cryptographic instructions that were added in
23685     version 2.07 of the PowerPC ISA.
23686
23687'-mhtm'
23688'-mno-htm'
23689     Enable (disable) the use of the built-in functions that allow
23690     direct access to the Hardware Transactional Memory (HTM)
23691     instructions that were added in version 2.07 of the PowerPC ISA.
23692
23693'-mpower8-fusion'
23694'-mno-power8-fusion'
23695     Generate code that keeps (does not keeps) some integer operations
23696     adjacent so that the instructions can be fused together on power8
23697     and later processors.
23698
23699'-mpower8-vector'
23700'-mno-power8-vector'
23701     Generate code that uses (does not use) the vector and scalar
23702     instructions that were added in version 2.07 of the PowerPC ISA.
23703     Also enable the use of built-in functions that allow more direct
23704     access to the vector instructions.
23705
23706'-mquad-memory'
23707'-mno-quad-memory'
23708     Generate code that uses (does not use) the non-atomic quad word
23709     memory instructions.  The '-mquad-memory' option requires use of
23710     64-bit mode.
23711
23712'-mquad-memory-atomic'
23713'-mno-quad-memory-atomic'
23714     Generate code that uses (does not use) the atomic quad word memory
23715     instructions.  The '-mquad-memory-atomic' option requires use of
23716     64-bit mode.
23717
23718'-mfloat128'
23719'-mno-float128'
23720     Enable/disable the __FLOAT128 keyword for IEEE 128-bit floating
23721     point and use either software emulation for IEEE 128-bit floating
23722     point or hardware instructions.
23723
23724     The VSX instruction set ('-mvsx') must be enabled to use the IEEE
23725     128-bit floating point support.  The IEEE 128-bit floating point is
23726     only supported on Linux.
23727
23728     The default for '-mfloat128' is enabled on PowerPC Linux systems
23729     using the VSX instruction set, and disabled on other systems.
23730
23731     If you use the ISA 3.0 instruction set ('-mpower9-vector' or
23732     '-mcpu=power9') on a 64-bit system, the IEEE 128-bit floating point
23733     support will also enable the generation of ISA 3.0 IEEE 128-bit
23734     floating point instructions.  Otherwise, if you do not specify to
23735     generate ISA 3.0 instructions or you are targeting a 32-bit big
23736     endian system, IEEE 128-bit floating point will be done with
23737     software emulation.
23738
23739'-mfloat128-hardware'
23740'-mno-float128-hardware'
23741     Enable/disable using ISA 3.0 hardware instructions to support the
23742     __FLOAT128 data type.
23743
23744     The default for '-mfloat128-hardware' is enabled on PowerPC Linux
23745     systems using the ISA 3.0 instruction set, and disabled on other
23746     systems.
23747
23748'-m32'
23749'-m64'
23750     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
23751     targets (including GNU/Linux).  The 32-bit environment sets int,
23752     long and pointer to 32 bits and generates code that runs on any
23753     PowerPC variant.  The 64-bit environment sets int to 32 bits and
23754     long and pointer to 64 bits, and generates code for PowerPC64, as
23755     for '-mpowerpc64'.
23756
23757'-mfull-toc'
23758'-mno-fp-in-toc'
23759'-mno-sum-in-toc'
23760'-mminimal-toc'
23761     Modify generation of the TOC (Table Of Contents), which is created
23762     for every executable file.  The '-mfull-toc' option is selected by
23763     default.  In that case, GCC allocates at least one TOC entry for
23764     each unique non-automatic variable reference in your program.  GCC
23765     also places floating-point constants in the TOC.  However, only
23766     16,384 entries are available in the TOC.
23767
23768     If you receive a linker error message that saying you have
23769     overflowed the available TOC space, you can reduce the amount of
23770     TOC space used with the '-mno-fp-in-toc' and '-mno-sum-in-toc'
23771     options.  '-mno-fp-in-toc' prevents GCC from putting floating-point
23772     constants in the TOC and '-mno-sum-in-toc' forces GCC to generate
23773     code to calculate the sum of an address and a constant at run time
23774     instead of putting that sum into the TOC.  You may specify one or
23775     both of these options.  Each causes GCC to produce very slightly
23776     slower and larger code at the expense of conserving TOC space.
23777
23778     If you still run out of space in the TOC even when you specify both
23779     of these options, specify '-mminimal-toc' instead.  This option
23780     causes GCC to make only one TOC entry for every file.  When you
23781     specify this option, GCC produces code that is slower and larger
23782     but which uses extremely little TOC space.  You may wish to use
23783     this option only on files that contain less frequently-executed
23784     code.
23785
23786'-maix64'
23787'-maix32'
23788     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
23789     64-bit 'long' type, and the infrastructure needed to support them.
23790     Specifying '-maix64' implies '-mpowerpc64', while '-maix32'
23791     disables the 64-bit ABI and implies '-mno-powerpc64'.  GCC defaults
23792     to '-maix32'.
23793
23794'-mxl-compat'
23795'-mno-xl-compat'
23796     Produce code that conforms more closely to IBM XL compiler
23797     semantics when using AIX-compatible ABI.  Pass floating-point
23798     arguments to prototyped functions beyond the register save area
23799     (RSA) on the stack in addition to argument FPRs.  Do not assume
23800     that most significant double in 128-bit long double value is
23801     properly rounded when comparing values and converting to double.
23802     Use XL symbol names for long double support routines.
23803
23804     The AIX calling convention was extended but not initially
23805     documented to handle an obscure K&R C case of calling a function
23806     that takes the address of its arguments with fewer arguments than
23807     declared.  IBM XL compilers access floating-point arguments that do
23808     not fit in the RSA from the stack when a subroutine is compiled
23809     without optimization.  Because always storing floating-point
23810     arguments on the stack is inefficient and rarely needed, this
23811     option is not enabled by default and only is necessary when calling
23812     subroutines compiled by IBM XL compilers without optimization.
23813
23814'-mpe'
23815     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
23816     application written to use message passing with special startup
23817     code to enable the application to run.  The system must have PE
23818     installed in the standard location ('/usr/lpp/ppe.poe/'), or the
23819     'specs' file must be overridden with the '-specs=' option to
23820     specify the appropriate directory location.  The Parallel
23821     Environment does not support threads, so the '-mpe' option and the
23822     '-pthread' option are incompatible.
23823
23824'-malign-natural'
23825'-malign-power'
23826     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
23827     '-malign-natural' overrides the ABI-defined alignment of larger
23828     types, such as floating-point doubles, on their natural size-based
23829     boundary.  The option '-malign-power' instructs GCC to follow the
23830     ABI-specified alignment rules.  GCC defaults to the standard
23831     alignment defined in the ABI.
23832
23833     On 64-bit Darwin, natural alignment is the default, and
23834     '-malign-power' is not supported.
23835
23836'-msoft-float'
23837'-mhard-float'
23838     Generate code that does not use (uses) the floating-point register
23839     set.  Software floating-point emulation is provided if you use the
23840     '-msoft-float' option, and pass the option to GCC when linking.
23841
23842'-mmultiple'
23843'-mno-multiple'
23844     Generate code that uses (does not use) the load multiple word
23845     instructions and the store multiple word instructions.  These
23846     instructions are generated by default on POWER systems, and not
23847     generated on PowerPC systems.  Do not use '-mmultiple' on
23848     little-endian PowerPC systems, since those instructions do not work
23849     when the processor is in little-endian mode.  The exceptions are
23850     PPC740 and PPC750 which permit these instructions in little-endian
23851     mode.
23852
23853'-mupdate'
23854'-mno-update'
23855     Generate code that uses (does not use) the load or store
23856     instructions that update the base register to the address of the
23857     calculated memory location.  These instructions are generated by
23858     default.  If you use '-mno-update', there is a small window between
23859     the time that the stack pointer is updated and the address of the
23860     previous frame is stored, which means code that walks the stack
23861     frame across interrupts or signals may get corrupted data.
23862
23863'-mavoid-indexed-addresses'
23864'-mno-avoid-indexed-addresses'
23865     Generate code that tries to avoid (not avoid) the use of indexed
23866     load or store instructions.  These instructions can incur a
23867     performance penalty on Power6 processors in certain situations,
23868     such as when stepping through large arrays that cross a 16M
23869     boundary.  This option is enabled by default when targeting Power6
23870     and disabled otherwise.
23871
23872'-mfused-madd'
23873'-mno-fused-madd'
23874     Generate code that uses (does not use) the floating-point multiply
23875     and accumulate instructions.  These instructions are generated by
23876     default if hardware floating point is used.  The machine-dependent
23877     '-mfused-madd' option is now mapped to the machine-independent
23878     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
23879     '-ffp-contract=off'.
23880
23881'-mmulhw'
23882'-mno-mulhw'
23883     Generate code that uses (does not use) the half-word multiply and
23884     multiply-accumulate instructions on the IBM 405, 440, 464 and 476
23885     processors.  These instructions are generated by default when
23886     targeting those processors.
23887
23888'-mdlmzb'
23889'-mno-dlmzb'
23890     Generate code that uses (does not use) the string-search 'dlmzb'
23891     instruction on the IBM 405, 440, 464 and 476 processors.  This
23892     instruction is generated by default when targeting those
23893     processors.
23894
23895'-mno-bit-align'
23896'-mbit-align'
23897     On System V.4 and embedded PowerPC systems do not (do) force
23898     structures and unions that contain bit-fields to be aligned to the
23899     base type of the bit-field.
23900
23901     For example, by default a structure containing nothing but 8
23902     'unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
23903     and has a size of 4 bytes.  By using '-mno-bit-align', the
23904     structure is aligned to a 1-byte boundary and is 1 byte in size.
23905
23906'-mno-strict-align'
23907'-mstrict-align'
23908     On System V.4 and embedded PowerPC systems do not (do) assume that
23909     unaligned memory references are handled by the system.
23910
23911'-mrelocatable'
23912'-mno-relocatable'
23913     Generate code that allows (does not allow) a static executable to
23914     be relocated to a different address at run time.  A simple embedded
23915     PowerPC system loader should relocate the entire contents of
23916     '.got2' and 4-byte locations listed in the '.fixup' section, a
23917     table of 32-bit addresses generated by this option.  For this to
23918     work, all objects linked together must be compiled with
23919     '-mrelocatable' or '-mrelocatable-lib'.  '-mrelocatable' code
23920     aligns the stack to an 8-byte boundary.
23921
23922'-mrelocatable-lib'
23923'-mno-relocatable-lib'
23924     Like '-mrelocatable', '-mrelocatable-lib' generates a '.fixup'
23925     section to allow static executables to be relocated at run time,
23926     but '-mrelocatable-lib' does not use the smaller stack alignment of
23927     '-mrelocatable'.  Objects compiled with '-mrelocatable-lib' may be
23928     linked with objects compiled with any combination of the
23929     '-mrelocatable' options.
23930
23931'-mno-toc'
23932'-mtoc'
23933     On System V.4 and embedded PowerPC systems do not (do) assume that
23934     register 2 contains a pointer to a global area pointing to the
23935     addresses used in the program.
23936
23937'-mlittle'
23938'-mlittle-endian'
23939     On System V.4 and embedded PowerPC systems compile code for the
23940     processor in little-endian mode.  The '-mlittle-endian' option is
23941     the same as '-mlittle'.
23942
23943'-mbig'
23944'-mbig-endian'
23945     On System V.4 and embedded PowerPC systems compile code for the
23946     processor in big-endian mode.  The '-mbig-endian' option is the
23947     same as '-mbig'.
23948
23949'-mdynamic-no-pic'
23950     On Darwin and Mac OS X systems, compile code so that it is not
23951     relocatable, but that its external references are relocatable.  The
23952     resulting code is suitable for applications, but not shared
23953     libraries.
23954
23955'-msingle-pic-base'
23956     Treat the register used for PIC addressing as read-only, rather
23957     than loading it in the prologue for each function.  The runtime
23958     system is responsible for initializing this register with an
23959     appropriate value before execution begins.
23960
23961'-mprioritize-restricted-insns=PRIORITY'
23962     This option controls the priority that is assigned to dispatch-slot
23963     restricted instructions during the second scheduling pass.  The
23964     argument PRIORITY takes the value '0', '1', or '2' to assign no,
23965     highest, or second-highest (respectively) priority to dispatch-slot
23966     restricted instructions.
23967
23968'-msched-costly-dep=DEPENDENCE_TYPE'
23969     This option controls which dependences are considered costly by the
23970     target during instruction scheduling.  The argument DEPENDENCE_TYPE
23971     takes one of the following values:
23972
23973     'no'
23974          No dependence is costly.
23975
23976     'all'
23977          All dependences are costly.
23978
23979     'true_store_to_load'
23980          A true dependence from store to load is costly.
23981
23982     'store_to_load'
23983          Any dependence from store to load is costly.
23984
23985     NUMBER
23986          Any dependence for which the latency is greater than or equal
23987          to NUMBER is costly.
23988
23989'-minsert-sched-nops=SCHEME'
23990     This option controls which NOP insertion scheme is used during the
23991     second scheduling pass.  The argument SCHEME takes one of the
23992     following values:
23993
23994     'no'
23995          Don't insert NOPs.
23996
23997     'pad'
23998          Pad with NOPs any dispatch group that has vacant issue slots,
23999          according to the scheduler's grouping.
24000
24001     'regroup_exact'
24002          Insert NOPs to force costly dependent insns into separate
24003          groups.  Insert exactly as many NOPs as needed to force an
24004          insn to a new group, according to the estimated processor
24005          grouping.
24006
24007     NUMBER
24008          Insert NOPs to force costly dependent insns into separate
24009          groups.  Insert NUMBER NOPs to force an insn to a new group.
24010
24011'-mcall-sysv'
24012     On System V.4 and embedded PowerPC systems compile code using
24013     calling conventions that adhere to the March 1995 draft of the
24014     System V Application Binary Interface, PowerPC processor
24015     supplement.  This is the default unless you configured GCC using
24016     'powerpc-*-eabiaix'.
24017
24018'-mcall-sysv-eabi'
24019'-mcall-eabi'
24020     Specify both '-mcall-sysv' and '-meabi' options.
24021
24022'-mcall-sysv-noeabi'
24023     Specify both '-mcall-sysv' and '-mno-eabi' options.
24024
24025'-mcall-aixdesc'
24026     On System V.4 and embedded PowerPC systems compile code for the AIX
24027     operating system.
24028
24029'-mcall-linux'
24030     On System V.4 and embedded PowerPC systems compile code for the
24031     Linux-based GNU system.
24032
24033'-mcall-freebsd'
24034     On System V.4 and embedded PowerPC systems compile code for the
24035     FreeBSD operating system.
24036
24037'-mcall-netbsd'
24038     On System V.4 and embedded PowerPC systems compile code for the
24039     NetBSD operating system.
24040
24041'-mcall-openbsd'
24042     On System V.4 and embedded PowerPC systems compile code for the
24043     OpenBSD operating system.
24044
24045'-mtraceback=TRACEBACK_TYPE'
24046     Select the type of traceback table.  Valid values for
24047     TRACEBACK_TYPE are 'full', 'part', and 'no'.
24048
24049'-maix-struct-return'
24050     Return all structures in memory (as specified by the AIX ABI).
24051
24052'-msvr4-struct-return'
24053     Return structures smaller than 8 bytes in registers (as specified
24054     by the SVR4 ABI).
24055
24056'-mabi=ABI-TYPE'
24057     Extend the current ABI with a particular extension, or remove such
24058     extension.  Valid values are: 'altivec', 'no-altivec',
24059     'ibmlongdouble', 'ieeelongdouble', 'elfv1', 'elfv2', and for AIX:
24060     'vec-extabi', 'vec-default'.
24061
24062'-mabi=ibmlongdouble'
24063     Change the current ABI to use IBM extended-precision long double.
24064     This is not likely to work if your system defaults to using IEEE
24065     extended-precision long double.  If you change the long double type
24066     from IEEE extended-precision, the compiler will issue a warning
24067     unless you use the '-Wno-psabi' option.  Requires
24068     '-mlong-double-128' to be enabled.
24069
24070'-mabi=ieeelongdouble'
24071     Change the current ABI to use IEEE extended-precision long double.
24072     This is not likely to work if your system defaults to using IBM
24073     extended-precision long double.  If you change the long double type
24074     from IBM extended-precision, the compiler will issue a warning
24075     unless you use the '-Wno-psabi' option.  Requires
24076     '-mlong-double-128' to be enabled.
24077
24078'-mabi=elfv1'
24079     Change the current ABI to use the ELFv1 ABI. This is the default
24080     ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
24081     ABI requires special system support and is likely to fail in
24082     spectacular ways.
24083
24084'-mabi=elfv2'
24085     Change the current ABI to use the ELFv2 ABI. This is the default
24086     ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
24087     ABI requires special system support and is likely to fail in
24088     spectacular ways.
24089
24090'-mgnu-attribute'
24091'-mno-gnu-attribute'
24092     Emit .gnu_attribute assembly directives to set tag/value pairs in a
24093     .gnu.attributes section that specify ABI variations in function
24094     parameters or return values.
24095
24096'-mprototype'
24097'-mno-prototype'
24098     On System V.4 and embedded PowerPC systems assume that all calls to
24099     variable argument functions are properly prototyped.  Otherwise,
24100     the compiler must insert an instruction before every non-prototyped
24101     call to set or clear bit 6 of the condition code register ('CR') to
24102     indicate whether floating-point values are passed in the
24103     floating-point registers in case the function takes variable
24104     arguments.  With '-mprototype', only calls to prototyped variable
24105     argument functions set or clear the bit.
24106
24107'-msim'
24108     On embedded PowerPC systems, assume that the startup module is
24109     called 'sim-crt0.o' and that the standard C libraries are
24110     'libsim.a' and 'libc.a'.  This is the default for
24111     'powerpc-*-eabisim' configurations.
24112
24113'-mmvme'
24114     On embedded PowerPC systems, assume that the startup module is
24115     called 'crt0.o' and the standard C libraries are 'libmvme.a' and
24116     'libc.a'.
24117
24118'-mads'
24119     On embedded PowerPC systems, assume that the startup module is
24120     called 'crt0.o' and the standard C libraries are 'libads.a' and
24121     'libc.a'.
24122
24123'-myellowknife'
24124     On embedded PowerPC systems, assume that the startup module is
24125     called 'crt0.o' and the standard C libraries are 'libyk.a' and
24126     'libc.a'.
24127
24128'-mvxworks'
24129     On System V.4 and embedded PowerPC systems, specify that you are
24130     compiling for a VxWorks system.
24131
24132'-memb'
24133     On embedded PowerPC systems, set the 'PPC_EMB' bit in the ELF flags
24134     header to indicate that 'eabi' extended relocations are used.
24135
24136'-meabi'
24137'-mno-eabi'
24138     On System V.4 and embedded PowerPC systems do (do not) adhere to
24139     the Embedded Applications Binary Interface (EABI), which is a set
24140     of modifications to the System V.4 specifications.  Selecting
24141     '-meabi' means that the stack is aligned to an 8-byte boundary, a
24142     function '__eabi' is called from 'main' to set up the EABI
24143     environment, and the '-msdata' option can use both 'r2' and 'r13'
24144     to point to two separate small data areas.  Selecting '-mno-eabi'
24145     means that the stack is aligned to a 16-byte boundary, no EABI
24146     initialization function is called from 'main', and the '-msdata'
24147     option only uses 'r13' to point to a single small data area.  The
24148     '-meabi' option is on by default if you configured GCC using one of
24149     the 'powerpc*-*-eabi*' options.
24150
24151'-msdata=eabi'
24152     On System V.4 and embedded PowerPC systems, put small initialized
24153     'const' global and static data in the '.sdata2' section, which is
24154     pointed to by register 'r2'.  Put small initialized non-'const'
24155     global and static data in the '.sdata' section, which is pointed to
24156     by register 'r13'.  Put small uninitialized global and static data
24157     in the '.sbss' section, which is adjacent to the '.sdata' section.
24158     The '-msdata=eabi' option is incompatible with the '-mrelocatable'
24159     option.  The '-msdata=eabi' option also sets the '-memb' option.
24160
24161'-msdata=sysv'
24162     On System V.4 and embedded PowerPC systems, put small global and
24163     static data in the '.sdata' section, which is pointed to by
24164     register 'r13'.  Put small uninitialized global and static data in
24165     the '.sbss' section, which is adjacent to the '.sdata' section.
24166     The '-msdata=sysv' option is incompatible with the '-mrelocatable'
24167     option.
24168
24169'-msdata=default'
24170'-msdata'
24171     On System V.4 and embedded PowerPC systems, if '-meabi' is used,
24172     compile code the same as '-msdata=eabi', otherwise compile code the
24173     same as '-msdata=sysv'.
24174
24175'-msdata=data'
24176     On System V.4 and embedded PowerPC systems, put small global data
24177     in the '.sdata' section.  Put small uninitialized global data in
24178     the '.sbss' section.  Do not use register 'r13' to address small
24179     data however.  This is the default behavior unless other '-msdata'
24180     options are used.
24181
24182'-msdata=none'
24183'-mno-sdata'
24184     On embedded PowerPC systems, put all initialized global and static
24185     data in the '.data' section, and all uninitialized data in the
24186     '.bss' section.
24187
24188'-mreadonly-in-sdata'
24189     Put read-only objects in the '.sdata' section as well.  This is the
24190     default.
24191
24192'-mblock-move-inline-limit=NUM'
24193     Inline all block moves (such as calls to 'memcpy' or structure
24194     copies) less than or equal to NUM bytes.  The minimum value for NUM
24195     is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
24196     default value is target-specific.
24197
24198'-mblock-compare-inline-limit=NUM'
24199     Generate non-looping inline code for all block compares (such as
24200     calls to 'memcmp' or structure compares) less than or equal to NUM
24201     bytes.  If NUM is 0, all inline expansion (non-loop and loop) of
24202     block compare is disabled.  The default value is target-specific.
24203
24204'-mblock-compare-inline-loop-limit=NUM'
24205     Generate an inline expansion using loop code for all block compares
24206     that are less than or equal to NUM bytes, but greater than the
24207     limit for non-loop inline block compare expansion.  If the block
24208     length is not constant, at most NUM bytes will be compared before
24209     'memcmp' is called to compare the remainder of the block.  The
24210     default value is target-specific.
24211
24212'-mstring-compare-inline-limit=NUM'
24213     Compare at most NUM string bytes with inline code.  If the
24214     difference or end of string is not found at the end of the inline
24215     compare a call to 'strcmp' or 'strncmp' will take care of the rest
24216     of the comparison.  The default is 64 bytes.
24217
24218'-G NUM'
24219     On embedded PowerPC systems, put global and static items less than
24220     or equal to NUM bytes into the small data or BSS sections instead
24221     of the normal data or BSS section.  By default, NUM is 8.  The '-G
24222     NUM' switch is also passed to the linker.  All modules should be
24223     compiled with the same '-G NUM' value.
24224
24225'-mregnames'
24226'-mno-regnames'
24227     On System V.4 and embedded PowerPC systems do (do not) emit
24228     register names in the assembly language output using symbolic
24229     forms.
24230
24231'-mlongcall'
24232'-mno-longcall'
24233     By default assume that all calls are far away so that a longer and
24234     more expensive calling sequence is required.  This is required for
24235     calls farther than 32 megabytes (33,554,432 bytes) from the current
24236     location.  A short call is generated if the compiler knows the call
24237     cannot be that far away.  This setting can be overridden by the
24238     'shortcall' function attribute, or by '#pragma longcall(0)'.
24239
24240     Some linkers are capable of detecting out-of-range calls and
24241     generating glue code on the fly.  On these systems, long calls are
24242     unnecessary and generate slower code.  As of this writing, the AIX
24243     linker can do this, as can the GNU linker for PowerPC/64.  It is
24244     planned to add this feature to the GNU linker for 32-bit PowerPC
24245     systems as well.
24246
24247     On PowerPC64 ELFv2 and 32-bit PowerPC systems with newer GNU
24248     linkers, GCC can generate long calls using an inline PLT call
24249     sequence (see '-mpltseq').  PowerPC with '-mbss-plt' and PowerPC64
24250     ELFv1 (big-endian) do not support inline PLT calls.
24251
24252     On Darwin/PPC systems, '#pragma longcall' generates 'jbsr callee,
24253     L42', plus a "branch island" (glue code).  The two target addresses
24254     represent the callee and the branch island.  The Darwin/PPC linker
24255     prefers the first address and generates a 'bl callee' if the PPC
24256     'bl' instruction reaches the callee directly; otherwise, the linker
24257     generates 'bl L42' to call the branch island.  The branch island is
24258     appended to the body of the calling function; it computes the full
24259     32-bit address of the callee and jumps to it.
24260
24261     On Mach-O (Darwin) systems, this option directs the compiler emit
24262     to the glue for every direct call, and the Darwin linker decides
24263     whether to use or discard it.
24264
24265     In the future, GCC may ignore all longcall specifications when the
24266     linker is known to generate glue.
24267
24268'-mpltseq'
24269'-mno-pltseq'
24270     Implement (do not implement) -fno-plt and long calls using an
24271     inline PLT call sequence that supports lazy linking and long calls
24272     to functions in dlopen'd shared libraries.  Inline PLT calls are
24273     only supported on PowerPC64 ELFv2 and 32-bit PowerPC systems with
24274     newer GNU linkers, and are enabled by default if the support is
24275     detected when configuring GCC, and, in the case of 32-bit PowerPC,
24276     if GCC is configured with '--enable-secureplt'.  '-mpltseq' code
24277     and '-mbss-plt' 32-bit PowerPC relocatable objects may not be
24278     linked together.
24279
24280'-mtls-markers'
24281'-mno-tls-markers'
24282     Mark (do not mark) calls to '__tls_get_addr' with a relocation
24283     specifying the function argument.  The relocation allows the linker
24284     to reliably associate function call with argument setup
24285     instructions for TLS optimization, which in turn allows GCC to
24286     better schedule the sequence.
24287
24288'-mrecip'
24289'-mno-recip'
24290     This option enables use of the reciprocal estimate and reciprocal
24291     square root estimate instructions with additional Newton-Raphson
24292     steps to increase precision instead of doing a divide or square
24293     root and divide for floating-point arguments.  You should use the
24294     '-ffast-math' option when using '-mrecip' (or at least
24295     '-funsafe-math-optimizations', '-ffinite-math-only',
24296     '-freciprocal-math' and '-fno-trapping-math').  Note that while the
24297     throughput of the sequence is generally higher than the throughput
24298     of the non-reciprocal instruction, the precision of the sequence
24299     can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
24300     0.99999994) for reciprocal square roots.
24301
24302'-mrecip=OPT'
24303     This option controls which reciprocal estimate instructions may be
24304     used.  OPT is a comma-separated list of options, which may be
24305     preceded by a '!' to invert the option:
24306
24307     'all'
24308          Enable all estimate instructions.
24309
24310     'default'
24311          Enable the default instructions, equivalent to '-mrecip'.
24312
24313     'none'
24314          Disable all estimate instructions, equivalent to '-mno-recip'.
24315
24316     'div'
24317          Enable the reciprocal approximation instructions for both
24318          single and double precision.
24319
24320     'divf'
24321          Enable the single-precision reciprocal approximation
24322          instructions.
24323
24324     'divd'
24325          Enable the double-precision reciprocal approximation
24326          instructions.
24327
24328     'rsqrt'
24329          Enable the reciprocal square root approximation instructions
24330          for both single and double precision.
24331
24332     'rsqrtf'
24333          Enable the single-precision reciprocal square root
24334          approximation instructions.
24335
24336     'rsqrtd'
24337          Enable the double-precision reciprocal square root
24338          approximation instructions.
24339
24340     So, for example, '-mrecip=all,!rsqrtd' enables all of the
24341     reciprocal estimate instructions, except for the 'FRSQRTE',
24342     'XSRSQRTEDP', and 'XVRSQRTEDP' instructions which handle the
24343     double-precision reciprocal square root calculations.
24344
24345'-mrecip-precision'
24346'-mno-recip-precision'
24347     Assume (do not assume) that the reciprocal estimate instructions
24348     provide higher-precision estimates than is mandated by the PowerPC
24349     ABI. Selecting '-mcpu=power6', '-mcpu=power7' or '-mcpu=power8'
24350     automatically selects '-mrecip-precision'.  The double-precision
24351     square root estimate instructions are not generated by default on
24352     low-precision machines, since they do not provide an estimate that
24353     converges after three steps.
24354
24355'-mveclibabi=TYPE'
24356     Specifies the ABI type to use for vectorizing intrinsics using an
24357     external library.  The only type supported at present is 'mass',
24358     which specifies to use IBM's Mathematical Acceleration Subsystem
24359     (MASS) libraries for vectorizing intrinsics using external
24360     libraries.  GCC currently emits calls to 'acosd2', 'acosf4',
24361     'acoshd2', 'acoshf4', 'asind2', 'asinf4', 'asinhd2', 'asinhf4',
24362     'atan2d2', 'atan2f4', 'atand2', 'atanf4', 'atanhd2', 'atanhf4',
24363     'cbrtd2', 'cbrtf4', 'cosd2', 'cosf4', 'coshd2', 'coshf4', 'erfcd2',
24364     'erfcf4', 'erfd2', 'erff4', 'exp2d2', 'exp2f4', 'expd2', 'expf4',
24365     'expm1d2', 'expm1f4', 'hypotd2', 'hypotf4', 'lgammad2', 'lgammaf4',
24366     'log10d2', 'log10f4', 'log1pd2', 'log1pf4', 'log2d2', 'log2f4',
24367     'logd2', 'logf4', 'powd2', 'powf4', 'sind2', 'sinf4', 'sinhd2',
24368     'sinhf4', 'sqrtd2', 'sqrtf4', 'tand2', 'tanf4', 'tanhd2', and
24369     'tanhf4' when generating code for power7.  Both '-ftree-vectorize'
24370     and '-funsafe-math-optimizations' must also be enabled.  The MASS
24371     libraries must be specified at link time.
24372
24373'-mfriz'
24374'-mno-friz'
24375     Generate (do not generate) the 'friz' instruction when the
24376     '-funsafe-math-optimizations' option is used to optimize rounding
24377     of floating-point values to 64-bit integer and back to floating
24378     point.  The 'friz' instruction does not return the same value if
24379     the floating-point number is too large to fit in an integer.
24380
24381'-mpointers-to-nested-functions'
24382'-mno-pointers-to-nested-functions'
24383     Generate (do not generate) code to load up the static chain
24384     register ('r11') when calling through a pointer on AIX and 64-bit
24385     Linux systems where a function pointer points to a 3-word
24386     descriptor giving the function address, TOC value to be loaded in
24387     register 'r2', and static chain value to be loaded in register
24388     'r11'.  The '-mpointers-to-nested-functions' is on by default.  You
24389     cannot call through pointers to nested functions or pointers to
24390     functions compiled in other languages that use the static chain if
24391     you use '-mno-pointers-to-nested-functions'.
24392
24393'-msave-toc-indirect'
24394'-mno-save-toc-indirect'
24395     Generate (do not generate) code to save the TOC value in the
24396     reserved stack location in the function prologue if the function
24397     calls through a pointer on AIX and 64-bit Linux systems.  If the
24398     TOC value is not saved in the prologue, it is saved just before the
24399     call through the pointer.  The '-mno-save-toc-indirect' option is
24400     the default.
24401
24402'-mcompat-align-parm'
24403'-mno-compat-align-parm'
24404     Generate (do not generate) code to pass structure parameters with a
24405     maximum alignment of 64 bits, for compatibility with older versions
24406     of GCC.
24407
24408     Older versions of GCC (prior to 4.9.0) incorrectly did not align a
24409     structure parameter on a 128-bit boundary when that structure
24410     contained a member requiring 128-bit alignment.  This is corrected
24411     in more recent versions of GCC. This option may be used to generate
24412     code that is compatible with functions compiled with older versions
24413     of GCC.
24414
24415     The '-mno-compat-align-parm' option is the default.
24416
24417'-mstack-protector-guard=GUARD'
24418'-mstack-protector-guard-reg=REG'
24419'-mstack-protector-guard-offset=OFFSET'
24420'-mstack-protector-guard-symbol=SYMBOL'
24421     Generate stack protection code using canary at GUARD.  Supported
24422     locations are 'global' for global canary or 'tls' for per-thread
24423     canary in the TLS block (the default with GNU libc version 2.4 or
24424     later).
24425
24426     With the latter choice the options
24427     '-mstack-protector-guard-reg=REG' and
24428     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
24429     register to use as base register for reading the canary, and from
24430     what offset from that base register.  The default for those is as
24431     specified in the relevant ABI.
24432     '-mstack-protector-guard-symbol=SYMBOL' overrides the offset with a
24433     symbol reference to a canary in the TLS block.
24434
24435'-mpcrel'
24436'-mno-pcrel'
24437     Generate (do not generate) pc-relative addressing.  The '-mpcrel'
24438     option requires that the medium code model ('-mcmodel=medium') and
24439     prefixed addressing ('-mprefixed') options are enabled.
24440
24441'-mprefixed'
24442'-mno-prefixed'
24443     Generate (do not generate) addressing modes using prefixed load and
24444     store instructions.  The '-mprefixed' option requires that the
24445     option '-mcpu=power10' (or later) is enabled.
24446
24447'-mmma'
24448'-mno-mma'
24449     Generate (do not generate) the MMA instructions.  The '-mma' option
24450     requires that the option '-mcpu=power10' (or later) is enabled.
24451
24452
24453File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
24454
244553.19.45 RX Options
24456------------------
24457
24458These command-line options are defined for RX targets:
24459
24460'-m64bit-doubles'
24461'-m32bit-doubles'
24462     Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
24463     bits ('-m32bit-doubles') in size.  The default is
24464     '-m32bit-doubles'.  _Note_ RX floating-point hardware only works on
24465     32-bit values, which is why the default is '-m32bit-doubles'.
24466
24467'-fpu'
24468'-nofpu'
24469     Enables ('-fpu') or disables ('-nofpu') the use of RX
24470     floating-point hardware.  The default is enabled for the RX600
24471     series and disabled for the RX200 series.
24472
24473     Floating-point instructions are only generated for 32-bit
24474     floating-point values, however, so the FPU hardware is not used for
24475     doubles if the '-m64bit-doubles' option is used.
24476
24477     _Note_ If the '-fpu' option is enabled then
24478     '-funsafe-math-optimizations' is also enabled automatically.  This
24479     is because the RX FPU instructions are themselves unsafe.
24480
24481'-mcpu=NAME'
24482     Selects the type of RX CPU to be targeted.  Currently three types
24483     are supported, the generic 'RX600' and 'RX200' series hardware and
24484     the specific 'RX610' CPU. The default is 'RX600'.
24485
24486     The only difference between 'RX600' and 'RX610' is that the 'RX610'
24487     does not support the 'MVTIPL' instruction.
24488
24489     The 'RX200' series does not have a hardware floating-point unit and
24490     so '-nofpu' is enabled by default when this type is selected.
24491
24492'-mbig-endian-data'
24493'-mlittle-endian-data'
24494     Store data (but not code) in the big-endian format.  The default is
24495     '-mlittle-endian-data', i.e. to store data in the little-endian
24496     format.
24497
24498'-msmall-data-limit=N'
24499     Specifies the maximum size in bytes of global and static variables
24500     which can be placed into the small data area.  Using the small data
24501     area can lead to smaller and faster code, but the size of area is
24502     limited and it is up to the programmer to ensure that the area does
24503     not overflow.  Also when the small data area is used one of the
24504     RX's registers (usually 'r13') is reserved for use pointing to this
24505     area, so it is no longer available for use by the compiler.  This
24506     could result in slower and/or larger code if variables are pushed
24507     onto the stack instead of being held in this register.
24508
24509     Note, common variables (variables that have not been initialized)
24510     and constants are not placed into the small data area as they are
24511     assigned to other sections in the output executable.
24512
24513     The default value is zero, which disables this feature.  Note, this
24514     feature is not enabled by default with higher optimization levels
24515     ('-O2' etc) because of the potentially detrimental effects of
24516     reserving a register.  It is up to the programmer to experiment and
24517     discover whether this feature is of benefit to their program.  See
24518     the description of the '-mpid' option for a description of how the
24519     actual register to hold the small data area pointer is chosen.
24520
24521'-msim'
24522'-mno-sim'
24523     Use the simulator runtime.  The default is to use the libgloss
24524     board-specific runtime.
24525
24526'-mas100-syntax'
24527'-mno-as100-syntax'
24528     When generating assembler output use a syntax that is compatible
24529     with Renesas's AS100 assembler.  This syntax can also be handled by
24530     the GAS assembler, but it has some restrictions so it is not
24531     generated by default.
24532
24533'-mmax-constant-size=N'
24534     Specifies the maximum size, in bytes, of a constant that can be
24535     used as an operand in a RX instruction.  Although the RX
24536     instruction set does allow constants of up to 4 bytes in length to
24537     be used in instructions, a longer value equates to a longer
24538     instruction.  Thus in some circumstances it can be beneficial to
24539     restrict the size of constants that are used in instructions.
24540     Constants that are too big are instead placed into a constant pool
24541     and referenced via register indirection.
24542
24543     The value N can be between 0 and 4.  A value of 0 (the default) or
24544     4 means that constants of any size are allowed.
24545
24546'-mrelax'
24547     Enable linker relaxation.  Linker relaxation is a process whereby
24548     the linker attempts to reduce the size of a program by finding
24549     shorter versions of various instructions.  Disabled by default.
24550
24551'-mint-register=N'
24552     Specify the number of registers to reserve for fast interrupt
24553     handler functions.  The value N can be between 0 and 4.  A value of
24554     1 means that register 'r13' is reserved for the exclusive use of
24555     fast interrupt handlers.  A value of 2 reserves 'r13' and 'r12'.  A
24556     value of 3 reserves 'r13', 'r12' and 'r11', and a value of 4
24557     reserves 'r13' through 'r10'.  A value of 0, the default, does not
24558     reserve any registers.
24559
24560'-msave-acc-in-interrupts'
24561     Specifies that interrupt handler functions should preserve the
24562     accumulator register.  This is only necessary if normal code might
24563     use the accumulator register, for example because it performs
24564     64-bit multiplications.  The default is to ignore the accumulator
24565     as this makes the interrupt handlers faster.
24566
24567'-mpid'
24568'-mno-pid'
24569     Enables the generation of position independent data.  When enabled
24570     any access to constant data is done via an offset from a base
24571     address held in a register.  This allows the location of constant
24572     data to be determined at run time without requiring the executable
24573     to be relocated, which is a benefit to embedded applications with
24574     tight memory constraints.  Data that can be modified is not
24575     affected by this option.
24576
24577     Note, using this feature reserves a register, usually 'r13', for
24578     the constant data base address.  This can result in slower and/or
24579     larger code, especially in complicated functions.
24580
24581     The actual register chosen to hold the constant data base address
24582     depends upon whether the '-msmall-data-limit' and/or the
24583     '-mint-register' command-line options are enabled.  Starting with
24584     register 'r13' and proceeding downwards, registers are allocated
24585     first to satisfy the requirements of '-mint-register', then '-mpid'
24586     and finally '-msmall-data-limit'.  Thus it is possible for the
24587     small data area register to be 'r8' if both '-mint-register=4' and
24588     '-mpid' are specified on the command line.
24589
24590     By default this feature is not enabled.  The default can be
24591     restored via the '-mno-pid' command-line option.
24592
24593'-mno-warn-multiple-fast-interrupts'
24594'-mwarn-multiple-fast-interrupts'
24595     Prevents GCC from issuing a warning message if it finds more than
24596     one fast interrupt handler when it is compiling a file.  The
24597     default is to issue a warning for each extra fast interrupt handler
24598     found, as the RX only supports one such interrupt.
24599
24600'-mallow-string-insns'
24601'-mno-allow-string-insns'
24602     Enables or disables the use of the string manipulation instructions
24603     'SMOVF', 'SCMPU', 'SMOVB', 'SMOVU', 'SUNTIL' 'SWHILE' and also the
24604     'RMPA' instruction.  These instructions may prefetch data, which is
24605     not safe to do if accessing an I/O register.  (See section 12.2.7
24606     of the RX62N Group User's Manual for more information).
24607
24608     The default is to allow these instructions, but it is not possible
24609     for GCC to reliably detect all circumstances where a string
24610     instruction might be used to access an I/O register, so their use
24611     cannot be disabled automatically.  Instead it is reliant upon the
24612     programmer to use the '-mno-allow-string-insns' option if their
24613     program accesses I/O space.
24614
24615     When the instructions are enabled GCC defines the C preprocessor
24616     symbol '__RX_ALLOW_STRING_INSNS__', otherwise it defines the symbol
24617     '__RX_DISALLOW_STRING_INSNS__'.
24618
24619'-mjsr'
24620'-mno-jsr'
24621     Use only (or not only) 'JSR' instructions to access functions.
24622     This option can be used when code size exceeds the range of 'BSR'
24623     instructions.  Note that '-mno-jsr' does not mean to not use 'JSR'
24624     but instead means that any type of branch may be used.
24625
24626 _Note:_ The generic GCC command-line option '-ffixed-REG' has special
24627significance to the RX port when used with the 'interrupt' function
24628attribute.  This attribute indicates a function intended to process fast
24629interrupts.  GCC ensures that it only uses the registers 'r10', 'r11',
24630'r12' and/or 'r13' and only provided that the normal use of the
24631corresponding registers have been restricted via the '-ffixed-REG' or
24632'-mint-register' command-line options.
24633
24634
24635File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
24636
246373.19.46 S/390 and zSeries Options
24638---------------------------------
24639
24640These are the '-m' options defined for the S/390 and zSeries
24641architecture.
24642
24643'-mhard-float'
24644'-msoft-float'
24645     Use (do not use) the hardware floating-point instructions and
24646     registers for floating-point operations.  When '-msoft-float' is
24647     specified, functions in 'libgcc.a' are used to perform
24648     floating-point operations.  When '-mhard-float' is specified, the
24649     compiler generates IEEE floating-point instructions.  This is the
24650     default.
24651
24652'-mhard-dfp'
24653'-mno-hard-dfp'
24654     Use (do not use) the hardware decimal-floating-point instructions
24655     for decimal-floating-point operations.  When '-mno-hard-dfp' is
24656     specified, functions in 'libgcc.a' are used to perform
24657     decimal-floating-point operations.  When '-mhard-dfp' is specified,
24658     the compiler generates decimal-floating-point hardware
24659     instructions.  This is the default for '-march=z9-ec' or higher.
24660
24661'-mlong-double-64'
24662'-mlong-double-128'
24663     These switches control the size of 'long double' type.  A size of
24664     64 bits makes the 'long double' type equivalent to the 'double'
24665     type.  This is the default.
24666
24667'-mbackchain'
24668'-mno-backchain'
24669     Store (do not store) the address of the caller's frame as backchain
24670     pointer into the callee's stack frame.  A backchain may be needed
24671     to allow debugging using tools that do not understand DWARF call
24672     frame information.  When '-mno-packed-stack' is in effect, the
24673     backchain pointer is stored at the bottom of the stack frame; when
24674     '-mpacked-stack' is in effect, the backchain is placed into the
24675     topmost word of the 96/160 byte register save area.
24676
24677     In general, code compiled with '-mbackchain' is call-compatible
24678     with code compiled with '-mmo-backchain'; however, use of the
24679     backchain for debugging purposes usually requires that the whole
24680     binary is built with '-mbackchain'.  Note that the combination of
24681     '-mbackchain', '-mpacked-stack' and '-mhard-float' is not
24682     supported.  In order to build a linux kernel use '-msoft-float'.
24683
24684     The default is to not maintain the backchain.
24685
24686'-mpacked-stack'
24687'-mno-packed-stack'
24688     Use (do not use) the packed stack layout.  When '-mno-packed-stack'
24689     is specified, the compiler uses the all fields of the 96/160 byte
24690     register save area only for their default purpose; unused fields
24691     still take up stack space.  When '-mpacked-stack' is specified,
24692     register save slots are densely packed at the top of the register
24693     save area; unused space is reused for other purposes, allowing for
24694     more efficient use of the available stack space.  However, when
24695     '-mbackchain' is also in effect, the topmost word of the save area
24696     is always used to store the backchain, and the return address
24697     register is always saved two words below the backchain.
24698
24699     As long as the stack frame backchain is not used, code generated
24700     with '-mpacked-stack' is call-compatible with code generated with
24701     '-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
24702     for S/390 or zSeries generated code that uses the stack frame
24703     backchain at run time, not just for debugging purposes.  Such code
24704     is not call-compatible with code compiled with '-mpacked-stack'.
24705     Also, note that the combination of '-mbackchain', '-mpacked-stack'
24706     and '-mhard-float' is not supported.  In order to build a linux
24707     kernel use '-msoft-float'.
24708
24709     The default is to not use the packed stack layout.
24710
24711'-msmall-exec'
24712'-mno-small-exec'
24713     Generate (or do not generate) code using the 'bras' instruction to
24714     do subroutine calls.  This only works reliably if the total
24715     executable size does not exceed 64k.  The default is to use the
24716     'basr' instruction instead, which does not have this limitation.
24717
24718'-m64'
24719'-m31'
24720     When '-m31' is specified, generate code compliant to the GNU/Linux
24721     for S/390 ABI.  When '-m64' is specified, generate code compliant
24722     to the GNU/Linux for zSeries ABI.  This allows GCC in particular to
24723     generate 64-bit instructions.  For the 's390' targets, the default
24724     is '-m31', while the 's390x' targets default to '-m64'.
24725
24726'-mzarch'
24727'-mesa'
24728     When '-mzarch' is specified, generate code using the instructions
24729     available on z/Architecture.  When '-mesa' is specified, generate
24730     code using the instructions available on ESA/390.  Note that
24731     '-mesa' is not possible with '-m64'.  When generating code
24732     compliant to the GNU/Linux for S/390 ABI, the default is '-mesa'.
24733     When generating code compliant to the GNU/Linux for zSeries ABI,
24734     the default is '-mzarch'.
24735
24736'-mhtm'
24737'-mno-htm'
24738     The '-mhtm' option enables a set of builtins making use of
24739     instructions available with the transactional execution facility
24740     introduced with the IBM zEnterprise EC12 machine generation *note
24741     S/390 System z Built-in Functions::.  '-mhtm' is enabled by default
24742     when using '-march=zEC12'.
24743
24744'-mvx'
24745'-mno-vx'
24746     When '-mvx' is specified, generate code using the instructions
24747     available with the vector extension facility introduced with the
24748     IBM z13 machine generation.  This option changes the ABI for some
24749     vector type values with regard to alignment and calling
24750     conventions.  In case vector type values are being used in an
24751     ABI-relevant context a GAS '.gnu_attribute' command will be added
24752     to mark the resulting binary with the ABI used.  '-mvx' is enabled
24753     by default when using '-march=z13'.
24754
24755'-mzvector'
24756'-mno-zvector'
24757     The '-mzvector' option enables vector language extensions and
24758     builtins using instructions available with the vector extension
24759     facility introduced with the IBM z13 machine generation.  This
24760     option adds support for 'vector' to be used as a keyword to define
24761     vector type variables and arguments.  'vector' is only available
24762     when GNU extensions are enabled.  It will not be expanded when
24763     requesting strict standard compliance e.g. with '-std=c99'.  In
24764     addition to the GCC low-level builtins '-mzvector' enables a set of
24765     builtins added for compatibility with AltiVec-style implementations
24766     like Power and Cell.  In order to make use of these builtins the
24767     header file 'vecintrin.h' needs to be included.  '-mzvector' is
24768     disabled by default.
24769
24770'-mmvcle'
24771'-mno-mvcle'
24772     Generate (or do not generate) code using the 'mvcle' instruction to
24773     perform block moves.  When '-mno-mvcle' is specified, use a 'mvc'
24774     loop instead.  This is the default unless optimizing for size.
24775
24776'-mdebug'
24777'-mno-debug'
24778     Print (or do not print) additional debug information when
24779     compiling.  The default is to not print debug information.
24780
24781'-march=CPU-TYPE'
24782     Generate code that runs on CPU-TYPE, which is the name of a system
24783     representing a certain processor type.  Possible values for
24784     CPU-TYPE are 'z900'/'arch5', 'z990'/'arch6', 'z9-109',
24785     'z9-ec'/'arch7', 'z10'/'arch8', 'z196'/'arch9', 'zEC12',
24786     'z13'/'arch11', 'z14'/'arch12', 'z15'/'arch13', and 'native'.
24787
24788     The default is '-march=z900'.
24789
24790     Specifying 'native' as cpu type can be used to select the best
24791     architecture option for the host processor.  '-march=native' has no
24792     effect if GCC does not recognize the processor.
24793
24794'-mtune=CPU-TYPE'
24795     Tune to CPU-TYPE everything applicable about the generated code,
24796     except for the ABI and the set of available instructions.  The list
24797     of CPU-TYPE values is the same as for '-march'.  The default is the
24798     value used for '-march'.
24799
24800'-mtpf-trace'
24801'-mno-tpf-trace'
24802     Generate code that adds (does not add) in TPF OS specific branches
24803     to trace routines in the operating system.  This option is off by
24804     default, even when compiling for the TPF OS.
24805
24806'-mtpf-trace-skip'
24807'-mno-tpf-trace-skip'
24808     Generate code that changes (does not change) the default branch
24809     targets enabled by '-mtpf-trace' to point to specialized trace
24810     routines providing the ability of selectively skipping function
24811     trace entries for the TPF OS. This option is off by default, even
24812     when compiling for the TPF OS and specifying '-mtpf-trace'.
24813
24814'-mfused-madd'
24815'-mno-fused-madd'
24816     Generate code that uses (does not use) the floating-point multiply
24817     and accumulate instructions.  These instructions are generated by
24818     default if hardware floating point is used.
24819
24820'-mwarn-framesize=FRAMESIZE'
24821     Emit a warning if the current function exceeds the given frame
24822     size.  Because this is a compile-time check it doesn't need to be a
24823     real problem when the program runs.  It is intended to identify
24824     functions that most probably cause a stack overflow.  It is useful
24825     to be used in an environment with limited stack size e.g. the linux
24826     kernel.
24827
24828'-mwarn-dynamicstack'
24829     Emit a warning if the function calls 'alloca' or uses
24830     dynamically-sized arrays.  This is generally a bad idea with a
24831     limited stack size.
24832
24833'-mstack-guard=STACK-GUARD'
24834'-mstack-size=STACK-SIZE'
24835     If these options are provided the S/390 back end emits additional
24836     instructions in the function prologue that trigger a trap if the
24837     stack size is STACK-GUARD bytes above the STACK-SIZE (remember that
24838     the stack on S/390 grows downward).  If the STACK-GUARD option is
24839     omitted the smallest power of 2 larger than the frame size of the
24840     compiled function is chosen.  These options are intended to be used
24841     to help debugging stack overflow problems.  The additionally
24842     emitted code causes only little overhead and hence can also be used
24843     in production-like systems without greater performance degradation.
24844     The given values have to be exact powers of 2 and STACK-SIZE has to
24845     be greater than STACK-GUARD without exceeding 64k.  In order to be
24846     efficient the extra code makes the assumption that the stack starts
24847     at an address aligned to the value given by STACK-SIZE.  The
24848     STACK-GUARD option can only be used in conjunction with STACK-SIZE.
24849
24850'-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS'
24851     If the hotpatch option is enabled, a "hot-patching" function
24852     prologue is generated for all functions in the compilation unit.
24853     The funtion label is prepended with the given number of two-byte
24854     NOP instructions (PRE-HALFWORDS, maximum 1000000).  After the
24855     label, 2 * POST-HALFWORDS bytes are appended, using the largest NOP
24856     like instructions the architecture allows (maximum 1000000).
24857
24858     If both arguments are zero, hotpatching is disabled.
24859
24860     This option can be overridden for individual functions with the
24861     'hotpatch' attribute.
24862
24863
24864File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
24865
248663.19.47 Score Options
24867---------------------
24868
24869These options are defined for Score implementations:
24870
24871'-meb'
24872     Compile code for big-endian mode.  This is the default.
24873
24874'-mel'
24875     Compile code for little-endian mode.
24876
24877'-mnhwloop'
24878     Disable generation of 'bcnz' instructions.
24879
24880'-muls'
24881     Enable generation of unaligned load and store instructions.
24882
24883'-mmac'
24884     Enable the use of multiply-accumulate instructions.  Disabled by
24885     default.
24886
24887'-mscore5'
24888     Specify the SCORE5 as the target architecture.
24889
24890'-mscore5u'
24891     Specify the SCORE5U of the target architecture.
24892
24893'-mscore7'
24894     Specify the SCORE7 as the target architecture.  This is the
24895     default.
24896
24897'-mscore7d'
24898     Specify the SCORE7D as the target architecture.
24899
24900
24901File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
24902
249033.19.48 SH Options
24904------------------
24905
24906These '-m' options are defined for the SH implementations:
24907
24908'-m1'
24909     Generate code for the SH1.
24910
24911'-m2'
24912     Generate code for the SH2.
24913
24914'-m2e'
24915     Generate code for the SH2e.
24916
24917'-m2a-nofpu'
24918     Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
24919     way that the floating-point unit is not used.
24920
24921'-m2a-single-only'
24922     Generate code for the SH2a-FPU, in such a way that no
24923     double-precision floating-point operations are used.
24924
24925'-m2a-single'
24926     Generate code for the SH2a-FPU assuming the floating-point unit is
24927     in single-precision mode by default.
24928
24929'-m2a'
24930     Generate code for the SH2a-FPU assuming the floating-point unit is
24931     in double-precision mode by default.
24932
24933'-m3'
24934     Generate code for the SH3.
24935
24936'-m3e'
24937     Generate code for the SH3e.
24938
24939'-m4-nofpu'
24940     Generate code for the SH4 without a floating-point unit.
24941
24942'-m4-single-only'
24943     Generate code for the SH4 with a floating-point unit that only
24944     supports single-precision arithmetic.
24945
24946'-m4-single'
24947     Generate code for the SH4 assuming the floating-point unit is in
24948     single-precision mode by default.
24949
24950'-m4'
24951     Generate code for the SH4.
24952
24953'-m4-100'
24954     Generate code for SH4-100.
24955
24956'-m4-100-nofpu'
24957     Generate code for SH4-100 in such a way that the floating-point
24958     unit is not used.
24959
24960'-m4-100-single'
24961     Generate code for SH4-100 assuming the floating-point unit is in
24962     single-precision mode by default.
24963
24964'-m4-100-single-only'
24965     Generate code for SH4-100 in such a way that no double-precision
24966     floating-point operations are used.
24967
24968'-m4-200'
24969     Generate code for SH4-200.
24970
24971'-m4-200-nofpu'
24972     Generate code for SH4-200 without in such a way that the
24973     floating-point unit is not used.
24974
24975'-m4-200-single'
24976     Generate code for SH4-200 assuming the floating-point unit is in
24977     single-precision mode by default.
24978
24979'-m4-200-single-only'
24980     Generate code for SH4-200 in such a way that no double-precision
24981     floating-point operations are used.
24982
24983'-m4-300'
24984     Generate code for SH4-300.
24985
24986'-m4-300-nofpu'
24987     Generate code for SH4-300 without in such a way that the
24988     floating-point unit is not used.
24989
24990'-m4-300-single'
24991     Generate code for SH4-300 in such a way that no double-precision
24992     floating-point operations are used.
24993
24994'-m4-300-single-only'
24995     Generate code for SH4-300 in such a way that no double-precision
24996     floating-point operations are used.
24997
24998'-m4-340'
24999     Generate code for SH4-340 (no MMU, no FPU).
25000
25001'-m4-500'
25002     Generate code for SH4-500 (no FPU). Passes '-isa=sh4-nofpu' to the
25003     assembler.
25004
25005'-m4a-nofpu'
25006     Generate code for the SH4al-dsp, or for a SH4a in such a way that
25007     the floating-point unit is not used.
25008
25009'-m4a-single-only'
25010     Generate code for the SH4a, in such a way that no double-precision
25011     floating-point operations are used.
25012
25013'-m4a-single'
25014     Generate code for the SH4a assuming the floating-point unit is in
25015     single-precision mode by default.
25016
25017'-m4a'
25018     Generate code for the SH4a.
25019
25020'-m4al'
25021     Same as '-m4a-nofpu', except that it implicitly passes '-dsp' to
25022     the assembler.  GCC doesn't generate any DSP instructions at the
25023     moment.
25024
25025'-mb'
25026     Compile code for the processor in big-endian mode.
25027
25028'-ml'
25029     Compile code for the processor in little-endian mode.
25030
25031'-mdalign'
25032     Align doubles at 64-bit boundaries.  Note that this changes the
25033     calling conventions, and thus some functions from the standard C
25034     library do not work unless you recompile it first with '-mdalign'.
25035
25036'-mrelax'
25037     Shorten some address references at link time, when possible; uses
25038     the linker option '-relax'.
25039
25040'-mbigtable'
25041     Use 32-bit offsets in 'switch' tables.  The default is to use
25042     16-bit offsets.
25043
25044'-mbitops'
25045     Enable the use of bit manipulation instructions on SH2A.
25046
25047'-mfmovd'
25048     Enable the use of the instruction 'fmovd'.  Check '-mdalign' for
25049     alignment constraints.
25050
25051'-mrenesas'
25052     Comply with the calling conventions defined by Renesas.
25053
25054'-mno-renesas'
25055     Comply with the calling conventions defined for GCC before the
25056     Renesas conventions were available.  This option is the default for
25057     all targets of the SH toolchain.
25058
25059'-mnomacsave'
25060     Mark the 'MAC' register as call-clobbered, even if '-mrenesas' is
25061     given.
25062
25063'-mieee'
25064'-mno-ieee'
25065     Control the IEEE compliance of floating-point comparisons, which
25066     affects the handling of cases where the result of a comparison is
25067     unordered.  By default '-mieee' is implicitly enabled.  If
25068     '-ffinite-math-only' is enabled '-mno-ieee' is implicitly set,
25069     which results in faster floating-point greater-equal and less-equal
25070     comparisons.  The implicit settings can be overridden by specifying
25071     either '-mieee' or '-mno-ieee'.
25072
25073'-minline-ic_invalidate'
25074     Inline code to invalidate instruction cache entries after setting
25075     up nested function trampolines.  This option has no effect if
25076     '-musermode' is in effect and the selected code generation option
25077     (e.g. '-m4') does not allow the use of the 'icbi' instruction.  If
25078     the selected code generation option does not allow the use of the
25079     'icbi' instruction, and '-musermode' is not in effect, the inlined
25080     code manipulates the instruction cache address array directly with
25081     an associative write.  This not only requires privileged mode at
25082     run time, but it also fails if the cache line had been mapped via
25083     the TLB and has become unmapped.
25084
25085'-misize'
25086     Dump instruction size and location in the assembly code.
25087
25088'-mpadstruct'
25089     This option is deprecated.  It pads structures to multiple of 4
25090     bytes, which is incompatible with the SH ABI.
25091
25092'-matomic-model=MODEL'
25093     Sets the model of atomic operations and additional parameters as a
25094     comma separated list.  For details on the atomic built-in functions
25095     see *note __atomic Builtins::.  The following models and parameters
25096     are supported:
25097
25098     'none'
25099          Disable compiler generated atomic sequences and emit library
25100          calls for atomic operations.  This is the default if the
25101          target is not 'sh*-*-linux*'.
25102
25103     'soft-gusa'
25104          Generate GNU/Linux compatible gUSA software atomic sequences
25105          for the atomic built-in functions.  The generated atomic
25106          sequences require additional support from the
25107          interrupt/exception handling code of the system and are only
25108          suitable for SH3* and SH4* single-core systems.  This option
25109          is enabled by default when the target is 'sh*-*-linux*' and
25110          SH3* or SH4*.  When the target is SH4A, this option also
25111          partially utilizes the hardware atomic instructions 'movli.l'
25112          and 'movco.l' to create more efficient code, unless 'strict'
25113          is specified.
25114
25115     'soft-tcb'
25116          Generate software atomic sequences that use a variable in the
25117          thread control block.  This is a variation of the gUSA
25118          sequences which can also be used on SH1* and SH2* targets.
25119          The generated atomic sequences require additional support from
25120          the interrupt/exception handling code of the system and are
25121          only suitable for single-core systems.  When using this model,
25122          the 'gbr-offset=' parameter has to be specified as well.
25123
25124     'soft-imask'
25125          Generate software atomic sequences that temporarily disable
25126          interrupts by setting 'SR.IMASK = 1111'.  This model works
25127          only when the program runs in privileged mode and is only
25128          suitable for single-core systems.  Additional support from the
25129          interrupt/exception handling code of the system is not
25130          required.  This model is enabled by default when the target is
25131          'sh*-*-linux*' and SH1* or SH2*.
25132
25133     'hard-llcs'
25134          Generate hardware atomic sequences using the 'movli.l' and
25135          'movco.l' instructions only.  This is only available on SH4A
25136          and is suitable for multi-core systems.  Since the hardware
25137          instructions support only 32 bit atomic variables access to 8
25138          or 16 bit variables is emulated with 32 bit accesses.  Code
25139          compiled with this option is also compatible with other
25140          software atomic model interrupt/exception handling systems if
25141          executed on an SH4A system.  Additional support from the
25142          interrupt/exception handling code of the system is not
25143          required for this model.
25144
25145     'gbr-offset='
25146          This parameter specifies the offset in bytes of the variable
25147          in the thread control block structure that should be used by
25148          the generated atomic sequences when the 'soft-tcb' model has
25149          been selected.  For other models this parameter is ignored.
25150          The specified value must be an integer multiple of four and in
25151          the range 0-1020.
25152
25153     'strict'
25154          This parameter prevents mixed usage of multiple atomic models,
25155          even if they are compatible, and makes the compiler generate
25156          atomic sequences of the specified model only.
25157
25158'-mtas'
25159     Generate the 'tas.b' opcode for '__atomic_test_and_set'.  Notice
25160     that depending on the particular hardware and software
25161     configuration this can degrade overall performance due to the
25162     operand cache line flushes that are implied by the 'tas.b'
25163     instruction.  On multi-core SH4A processors the 'tas.b' instruction
25164     must be used with caution since it can result in data corruption
25165     for certain cache configurations.
25166
25167'-mprefergot'
25168     When generating position-independent code, emit function calls
25169     using the Global Offset Table instead of the Procedure Linkage
25170     Table.
25171
25172'-musermode'
25173'-mno-usermode'
25174     Don't allow (allow) the compiler generating privileged mode code.
25175     Specifying '-musermode' also implies '-mno-inline-ic_invalidate' if
25176     the inlined code would not work in user mode.  '-musermode' is the
25177     default when the target is 'sh*-*-linux*'.  If the target is SH1*
25178     or SH2* '-musermode' has no effect, since there is no user mode.
25179
25180'-multcost=NUMBER'
25181     Set the cost to assume for a multiply insn.
25182
25183'-mdiv=STRATEGY'
25184     Set the division strategy to be used for integer division
25185     operations.  STRATEGY can be one of:
25186
25187     'call-div1'
25188          Calls a library function that uses the single-step division
25189          instruction 'div1' to perform the operation.  Division by zero
25190          calculates an unspecified result and does not trap.  This is
25191          the default except for SH4, SH2A and SHcompact.
25192
25193     'call-fp'
25194          Calls a library function that performs the operation in double
25195          precision floating point.  Division by zero causes a
25196          floating-point exception.  This is the default for SHcompact
25197          with FPU. Specifying this for targets that do not have a
25198          double precision FPU defaults to 'call-div1'.
25199
25200     'call-table'
25201          Calls a library function that uses a lookup table for small
25202          divisors and the 'div1' instruction with case distinction for
25203          larger divisors.  Division by zero calculates an unspecified
25204          result and does not trap.  This is the default for SH4.
25205          Specifying this for targets that do not have dynamic shift
25206          instructions defaults to 'call-div1'.
25207
25208     When a division strategy has not been specified the default
25209     strategy is selected based on the current target.  For SH2A the
25210     default strategy is to use the 'divs' and 'divu' instructions
25211     instead of library function calls.
25212
25213'-maccumulate-outgoing-args'
25214     Reserve space once for outgoing arguments in the function prologue
25215     rather than around each call.  Generally beneficial for performance
25216     and size.  Also needed for unwinding to avoid changing the stack
25217     frame around conditional code.
25218
25219'-mdivsi3_libfunc=NAME'
25220     Set the name of the library function used for 32-bit signed
25221     division to NAME.  This only affects the name used in the 'call'
25222     division strategies, and the compiler still expects the same sets
25223     of input/output/clobbered registers as if this option were not
25224     present.
25225
25226'-mfixed-range=REGISTER-RANGE'
25227     Generate code treating the given register range as fixed registers.
25228     A fixed register is one that the register allocator cannot use.
25229     This is useful when compiling kernel code.  A register range is
25230     specified as two registers separated by a dash.  Multiple register
25231     ranges can be specified separated by a comma.
25232
25233'-mbranch-cost=NUM'
25234     Assume NUM to be the cost for a branch instruction.  Higher numbers
25235     make the compiler try to generate more branch-free code if
25236     possible.  If not specified the value is selected depending on the
25237     processor type that is being compiled for.
25238
25239'-mzdcbranch'
25240'-mno-zdcbranch'
25241     Assume (do not assume) that zero displacement conditional branch
25242     instructions 'bt' and 'bf' are fast.  If '-mzdcbranch' is
25243     specified, the compiler prefers zero displacement branch code
25244     sequences.  This is enabled by default when generating code for SH4
25245     and SH4A. It can be explicitly disabled by specifying
25246     '-mno-zdcbranch'.
25247
25248'-mcbranch-force-delay-slot'
25249     Force the usage of delay slots for conditional branches, which
25250     stuffs the delay slot with a 'nop' if a suitable instruction cannot
25251     be found.  By default this option is disabled.  It can be enabled
25252     to work around hardware bugs as found in the original SH7055.
25253
25254'-mfused-madd'
25255'-mno-fused-madd'
25256     Generate code that uses (does not use) the floating-point multiply
25257     and accumulate instructions.  These instructions are generated by
25258     default if hardware floating point is used.  The machine-dependent
25259     '-mfused-madd' option is now mapped to the machine-independent
25260     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
25261     '-ffp-contract=off'.
25262
25263'-mfsca'
25264'-mno-fsca'
25265     Allow or disallow the compiler to emit the 'fsca' instruction for
25266     sine and cosine approximations.  The option '-mfsca' must be used
25267     in combination with '-funsafe-math-optimizations'.  It is enabled
25268     by default when generating code for SH4A. Using '-mno-fsca'
25269     disables sine and cosine approximations even if
25270     '-funsafe-math-optimizations' is in effect.
25271
25272'-mfsrra'
25273'-mno-fsrra'
25274     Allow or disallow the compiler to emit the 'fsrra' instruction for
25275     reciprocal square root approximations.  The option '-mfsrra' must
25276     be used in combination with '-funsafe-math-optimizations' and
25277     '-ffinite-math-only'.  It is enabled by default when generating
25278     code for SH4A. Using '-mno-fsrra' disables reciprocal square root
25279     approximations even if '-funsafe-math-optimizations' and
25280     '-ffinite-math-only' are in effect.
25281
25282'-mpretend-cmove'
25283     Prefer zero-displacement conditional branches for conditional move
25284     instruction patterns.  This can result in faster code on the SH4
25285     processor.
25286
25287'-mfdpic'
25288     Generate code using the FDPIC ABI.
25289
25290
25291File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
25292
252933.19.49 Solaris 2 Options
25294-------------------------
25295
25296These '-m' options are supported on Solaris 2:
25297
25298'-mclear-hwcap'
25299     '-mclear-hwcap' tells the compiler to remove the hardware
25300     capabilities generated by the Solaris assembler.  This is only
25301     necessary when object files use ISA extensions not supported by the
25302     current machine, but check at runtime whether or not to use them.
25303
25304'-mimpure-text'
25305     '-mimpure-text', used in addition to '-shared', tells the compiler
25306     to not pass '-z text' to the linker when linking a shared object.
25307     Using this option, you can link position-dependent code into a
25308     shared object.
25309
25310     '-mimpure-text' suppresses the "relocations remain against
25311     allocatable but non-writable sections" linker error message.
25312     However, the necessary relocations trigger copy-on-write, and the
25313     shared object is not actually shared across processes.  Instead of
25314     using '-mimpure-text', you should compile all source code with
25315     '-fpic' or '-fPIC'.
25316
25317 These switches are supported in addition to the above on Solaris 2:
25318
25319'-pthreads'
25320     This is a synonym for '-pthread'.
25321
25322
25323File: gcc.info,  Node: SPARC Options,  Next: System V Options,  Prev: Solaris 2 Options,  Up: Submodel Options
25324
253253.19.50 SPARC Options
25326---------------------
25327
25328These '-m' options are supported on the SPARC:
25329
25330'-mno-app-regs'
25331'-mapp-regs'
25332     Specify '-mapp-regs' to generate output using the global registers
25333     2 through 4, which the SPARC SVR4 ABI reserves for applications.
25334     Like the global register 1, each global register 2 through 4 is
25335     then treated as an allocable register that is clobbered by function
25336     calls.  This is the default.
25337
25338     To be fully SVR4 ABI-compliant at the cost of some performance
25339     loss, specify '-mno-app-regs'.  You should compile libraries and
25340     system software with this option.
25341
25342'-mflat'
25343'-mno-flat'
25344     With '-mflat', the compiler does not generate save/restore
25345     instructions and uses a "flat" or single register window model.
25346     This model is compatible with the regular register window model.
25347     The local registers and the input registers (0-5) are still treated
25348     as "call-saved" registers and are saved on the stack as needed.
25349
25350     With '-mno-flat' (the default), the compiler generates save/restore
25351     instructions (except for leaf functions).  This is the normal
25352     operating mode.
25353
25354'-mfpu'
25355'-mhard-float'
25356     Generate output containing floating-point instructions.  This is
25357     the default.
25358
25359'-mno-fpu'
25360'-msoft-float'
25361     Generate output containing library calls for floating point.
25362     *Warning:* the requisite libraries are not available for all SPARC
25363     targets.  Normally the facilities of the machine's usual C compiler
25364     are used, but this cannot be done directly in cross-compilation.
25365     You must make your own arrangements to provide suitable library
25366     functions for cross-compilation.  The embedded targets
25367     'sparc-*-aout' and 'sparclite-*-*' do provide software
25368     floating-point support.
25369
25370     '-msoft-float' changes the calling convention in the output file;
25371     therefore, it is only useful if you compile _all_ of a program with
25372     this option.  In particular, you need to compile 'libgcc.a', the
25373     library that comes with GCC, with '-msoft-float' in order for this
25374     to work.
25375
25376'-mhard-quad-float'
25377     Generate output containing quad-word (long double) floating-point
25378     instructions.
25379
25380'-msoft-quad-float'
25381     Generate output containing library calls for quad-word (long
25382     double) floating-point instructions.  The functions called are
25383     those specified in the SPARC ABI.  This is the default.
25384
25385     As of this writing, there are no SPARC implementations that have
25386     hardware support for the quad-word floating-point instructions.
25387     They all invoke a trap handler for one of these instructions, and
25388     then the trap handler emulates the effect of the instruction.
25389     Because of the trap handler overhead, this is much slower than
25390     calling the ABI library routines.  Thus the '-msoft-quad-float'
25391     option is the default.
25392
25393'-mno-unaligned-doubles'
25394'-munaligned-doubles'
25395     Assume that doubles have 8-byte alignment.  This is the default.
25396
25397     With '-munaligned-doubles', GCC assumes that doubles have 8-byte
25398     alignment only if they are contained in another type, or if they
25399     have an absolute address.  Otherwise, it assumes they have 4-byte
25400     alignment.  Specifying this option avoids some rare compatibility
25401     problems with code generated by other compilers.  It is not the
25402     default because it results in a performance loss, especially for
25403     floating-point code.
25404
25405'-muser-mode'
25406'-mno-user-mode'
25407     Do not generate code that can only run in supervisor mode.  This is
25408     relevant only for the 'casa' instruction emitted for the LEON3
25409     processor.  This is the default.
25410
25411'-mfaster-structs'
25412'-mno-faster-structs'
25413     With '-mfaster-structs', the compiler assumes that structures
25414     should have 8-byte alignment.  This enables the use of pairs of
25415     'ldd' and 'std' instructions for copies in structure assignment, in
25416     place of twice as many 'ld' and 'st' pairs.  However, the use of
25417     this changed alignment directly violates the SPARC ABI.  Thus, it's
25418     intended only for use on targets where the developer acknowledges
25419     that their resulting code is not directly in line with the rules of
25420     the ABI.
25421
25422'-mstd-struct-return'
25423'-mno-std-struct-return'
25424     With '-mstd-struct-return', the compiler generates checking code in
25425     functions returning structures or unions to detect size mismatches
25426     between the two sides of function calls, as per the 32-bit ABI.
25427
25428     The default is '-mno-std-struct-return'.  This option has no effect
25429     in 64-bit mode.
25430
25431'-mlra'
25432'-mno-lra'
25433     Enable Local Register Allocation.  This is the default for SPARC
25434     since GCC 7 so '-mno-lra' needs to be passed to get old Reload.
25435
25436'-mcpu=CPU_TYPE'
25437     Set the instruction set, register set, and instruction scheduling
25438     parameters for machine type CPU_TYPE.  Supported values for
25439     CPU_TYPE are 'v7', 'cypress', 'v8', 'supersparc', 'hypersparc',
25440     'leon', 'leon3', 'leon3v7', 'leon5', 'sparclite', 'f930', 'f934',
25441     'sparclite86x', 'sparclet', 'tsc701', 'v9', 'ultrasparc',
25442     'ultrasparc3', 'niagara', 'niagara2', 'niagara3', 'niagara4',
25443     'niagara7' and 'm8'.
25444
25445     Native Solaris and GNU/Linux toolchains also support the value
25446     'native', which selects the best architecture option for the host
25447     processor.  '-mcpu=native' has no effect if GCC does not recognize
25448     the processor.
25449
25450     Default instruction scheduling parameters are used for values that
25451     select an architecture and not an implementation.  These are 'v7',
25452     'v8', 'sparclite', 'sparclet', 'v9'.
25453
25454     Here is a list of each supported architecture and their supported
25455     implementations.
25456
25457     v7
25458          cypress, leon3v7
25459
25460     v8
25461          supersparc, hypersparc, leon, leon3, leon5
25462
25463     sparclite
25464          f930, f934, sparclite86x
25465
25466     sparclet
25467          tsc701
25468
25469     v9
25470          ultrasparc, ultrasparc3, niagara, niagara2, niagara3,
25471          niagara4, niagara7, m8
25472
25473     By default (unless configured otherwise), GCC generates code for
25474     the V7 variant of the SPARC architecture.  With '-mcpu=cypress',
25475     the compiler additionally optimizes it for the Cypress CY7C602
25476     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
25477     also appropriate for the older SPARCStation 1, 2, IPX etc.
25478
25479     With '-mcpu=v8', GCC generates code for the V8 variant of the SPARC
25480     architecture.  The only difference from V7 code is that the
25481     compiler emits the integer multiply and integer divide instructions
25482     which exist in SPARC-V8 but not in SPARC-V7.  With
25483     '-mcpu=supersparc', the compiler additionally optimizes it for the
25484     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
25485     series.
25486
25487     With '-mcpu=sparclite', GCC generates code for the SPARClite
25488     variant of the SPARC architecture.  This adds the integer multiply,
25489     integer divide step and scan ('ffs') instructions which exist in
25490     SPARClite but not in SPARC-V7.  With '-mcpu=f930', the compiler
25491     additionally optimizes it for the Fujitsu MB86930 chip, which is
25492     the original SPARClite, with no FPU.  With '-mcpu=f934', the
25493     compiler additionally optimizes it for the Fujitsu MB86934 chip,
25494     which is the more recent SPARClite with FPU.
25495
25496     With '-mcpu=sparclet', GCC generates code for the SPARClet variant
25497     of the SPARC architecture.  This adds the integer multiply,
25498     multiply/accumulate, integer divide step and scan ('ffs')
25499     instructions which exist in SPARClet but not in SPARC-V7.  With
25500     '-mcpu=tsc701', the compiler additionally optimizes it for the
25501     TEMIC SPARClet chip.
25502
25503     With '-mcpu=v9', GCC generates code for the V9 variant of the SPARC
25504     architecture.  This adds 64-bit integer and floating-point move
25505     instructions, 3 additional floating-point condition code registers
25506     and conditional move instructions.  With '-mcpu=ultrasparc', the
25507     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
25508     chips.  With '-mcpu=ultrasparc3', the compiler additionally
25509     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
25510     chips.  With '-mcpu=niagara', the compiler additionally optimizes
25511     it for Sun UltraSPARC T1 chips.  With '-mcpu=niagara2', the
25512     compiler additionally optimizes it for Sun UltraSPARC T2 chips.
25513     With '-mcpu=niagara3', the compiler additionally optimizes it for
25514     Sun UltraSPARC T3 chips.  With '-mcpu=niagara4', the compiler
25515     additionally optimizes it for Sun UltraSPARC T4 chips.  With
25516     '-mcpu=niagara7', the compiler additionally optimizes it for Oracle
25517     SPARC M7 chips.  With '-mcpu=m8', the compiler additionally
25518     optimizes it for Oracle M8 chips.
25519
25520'-mtune=CPU_TYPE'
25521     Set the instruction scheduling parameters for machine type
25522     CPU_TYPE, but do not set the instruction set or register set that
25523     the option '-mcpu=CPU_TYPE' does.
25524
25525     The same values for '-mcpu=CPU_TYPE' can be used for
25526     '-mtune=CPU_TYPE', but the only useful values are those that select
25527     a particular CPU implementation.  Those are 'cypress',
25528     'supersparc', 'hypersparc', 'leon', 'leon3', 'leon3v7', 'leon5',
25529     'f930', 'f934', 'sparclite86x', 'tsc701', 'ultrasparc',
25530     'ultrasparc3', 'niagara', 'niagara2', 'niagara3', 'niagara4',
25531     'niagara7' and 'm8'.  With native Solaris and GNU/Linux toolchains,
25532     'native' can also be used.
25533
25534'-mv8plus'
25535'-mno-v8plus'
25536     With '-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
25537     difference from the V8 ABI is that the global and out registers are
25538     considered 64 bits wide.  This is enabled by default on Solaris in
25539     32-bit mode for all SPARC-V9 processors.
25540
25541'-mvis'
25542'-mno-vis'
25543     With '-mvis', GCC generates code that takes advantage of the
25544     UltraSPARC Visual Instruction Set extensions.  The default is
25545     '-mno-vis'.
25546
25547'-mvis2'
25548'-mno-vis2'
25549     With '-mvis2', GCC generates code that takes advantage of version
25550     2.0 of the UltraSPARC Visual Instruction Set extensions.  The
25551     default is '-mvis2' when targeting a cpu that supports such
25552     instructions, such as UltraSPARC-III and later.  Setting '-mvis2'
25553     also sets '-mvis'.
25554
25555'-mvis3'
25556'-mno-vis3'
25557     With '-mvis3', GCC generates code that takes advantage of version
25558     3.0 of the UltraSPARC Visual Instruction Set extensions.  The
25559     default is '-mvis3' when targeting a cpu that supports such
25560     instructions, such as niagara-3 and later.  Setting '-mvis3' also
25561     sets '-mvis2' and '-mvis'.
25562
25563'-mvis4'
25564'-mno-vis4'
25565     With '-mvis4', GCC generates code that takes advantage of version
25566     4.0 of the UltraSPARC Visual Instruction Set extensions.  The
25567     default is '-mvis4' when targeting a cpu that supports such
25568     instructions, such as niagara-7 and later.  Setting '-mvis4' also
25569     sets '-mvis3', '-mvis2' and '-mvis'.
25570
25571'-mvis4b'
25572'-mno-vis4b'
25573     With '-mvis4b', GCC generates code that takes advantage of version
25574     4.0 of the UltraSPARC Visual Instruction Set extensions, plus the
25575     additional VIS instructions introduced in the Oracle SPARC
25576     Architecture 2017.  The default is '-mvis4b' when targeting a cpu
25577     that supports such instructions, such as m8 and later.  Setting
25578     '-mvis4b' also sets '-mvis4', '-mvis3', '-mvis2' and '-mvis'.
25579
25580'-mcbcond'
25581'-mno-cbcond'
25582     With '-mcbcond', GCC generates code that takes advantage of the
25583     UltraSPARC Compare-and-Branch-on-Condition instructions.  The
25584     default is '-mcbcond' when targeting a CPU that supports such
25585     instructions, such as Niagara-4 and later.
25586
25587'-mfmaf'
25588'-mno-fmaf'
25589     With '-mfmaf', GCC generates code that takes advantage of the
25590     UltraSPARC Fused Multiply-Add Floating-point instructions.  The
25591     default is '-mfmaf' when targeting a CPU that supports such
25592     instructions, such as Niagara-3 and later.
25593
25594'-mfsmuld'
25595'-mno-fsmuld'
25596     With '-mfsmuld', GCC generates code that takes advantage of the
25597     Floating-point Multiply Single to Double (FsMULd) instruction.  The
25598     default is '-mfsmuld' when targeting a CPU supporting the
25599     architecture versions V8 or V9 with FPU except '-mcpu=leon'.
25600
25601'-mpopc'
25602'-mno-popc'
25603     With '-mpopc', GCC generates code that takes advantage of the
25604     UltraSPARC Population Count instruction.  The default is '-mpopc'
25605     when targeting a CPU that supports such an instruction, such as
25606     Niagara-2 and later.
25607
25608'-msubxc'
25609'-mno-subxc'
25610     With '-msubxc', GCC generates code that takes advantage of the
25611     UltraSPARC Subtract-Extended-with-Carry instruction.  The default
25612     is '-msubxc' when targeting a CPU that supports such an
25613     instruction, such as Niagara-7 and later.
25614
25615'-mfix-at697f'
25616     Enable the documented workaround for the single erratum of the
25617     Atmel AT697F processor (which corresponds to erratum #13 of the
25618     AT697E processor).
25619
25620'-mfix-ut699'
25621     Enable the documented workarounds for the floating-point errata and
25622     the data cache nullify errata of the UT699 processor.
25623
25624'-mfix-ut700'
25625     Enable the documented workaround for the back-to-back store errata
25626     of the UT699E/UT700 processor.
25627
25628'-mfix-gr712rc'
25629     Enable the documented workaround for the back-to-back store errata
25630     of the GR712RC processor.
25631
25632 These '-m' options are supported in addition to the above on SPARC-V9
25633processors in 64-bit environments:
25634
25635'-m32'
25636'-m64'
25637     Generate code for a 32-bit or 64-bit environment.  The 32-bit
25638     environment sets int, long and pointer to 32 bits.  The 64-bit
25639     environment sets int to 32 bits and long and pointer to 64 bits.
25640
25641'-mcmodel=WHICH'
25642     Set the code model to one of
25643
25644     'medlow'
25645          The Medium/Low code model: 64-bit addresses, programs must be
25646          linked in the low 32 bits of memory.  Programs can be
25647          statically or dynamically linked.
25648
25649     'medmid'
25650          The Medium/Middle code model: 64-bit addresses, programs must
25651          be linked in the low 44 bits of memory, the text and data
25652          segments must be less than 2GB in size and the data segment
25653          must be located within 2GB of the text segment.
25654
25655     'medany'
25656          The Medium/Anywhere code model: 64-bit addresses, programs may
25657          be linked anywhere in memory, the text and data segments must
25658          be less than 2GB in size and the data segment must be located
25659          within 2GB of the text segment.
25660
25661     'embmedany'
25662          The Medium/Anywhere code model for embedded systems: 64-bit
25663          addresses, the text and data segments must be less than 2GB in
25664          size, both starting anywhere in memory (determined at link
25665          time).  The global register %g4 points to the base of the data
25666          segment.  Programs are statically linked and PIC is not
25667          supported.
25668
25669'-mmemory-model=MEM-MODEL'
25670     Set the memory model in force on the processor to one of
25671
25672     'default'
25673          The default memory model for the processor and operating
25674          system.
25675
25676     'rmo'
25677          Relaxed Memory Order
25678
25679     'pso'
25680          Partial Store Order
25681
25682     'tso'
25683          Total Store Order
25684
25685     'sc'
25686          Sequential Consistency
25687
25688     These memory models are formally defined in Appendix D of the
25689     SPARC-V9 architecture manual, as set in the processor's 'PSTATE.MM'
25690     field.
25691
25692'-mstack-bias'
25693'-mno-stack-bias'
25694     With '-mstack-bias', GCC assumes that the stack pointer, and frame
25695     pointer if present, are offset by -2047 which must be added back
25696     when making stack frame references.  This is the default in 64-bit
25697     mode.  Otherwise, assume no such offset is present.
25698
25699
25700File: gcc.info,  Node: System V Options,  Next: TILE-Gx Options,  Prev: SPARC Options,  Up: Submodel Options
25701
257023.19.51 Options for System V
25703----------------------------
25704
25705These additional options are available on System V Release 4 for
25706compatibility with other compilers on those systems:
25707
25708'-G'
25709     Create a shared object.  It is recommended that '-symbolic' or
25710     '-shared' be used instead.
25711
25712'-Qy'
25713     Identify the versions of each tool used by the compiler, in a
25714     '.ident' assembler directive in the output.
25715
25716'-Qn'
25717     Refrain from adding '.ident' directives to the output file (this is
25718     the default).
25719
25720'-YP,DIRS'
25721     Search the directories DIRS, and no others, for libraries specified
25722     with '-l'.
25723
25724'-Ym,DIR'
25725     Look in the directory DIR to find the M4 preprocessor.  The
25726     assembler uses this option.
25727
25728
25729File: gcc.info,  Node: TILE-Gx Options,  Next: TILEPro Options,  Prev: System V Options,  Up: Submodel Options
25730
257313.19.52 TILE-Gx Options
25732-----------------------
25733
25734These '-m' options are supported on the TILE-Gx:
25735
25736'-mcmodel=small'
25737     Generate code for the small model.  The distance for direct calls
25738     is limited to 500M in either direction.  PC-relative addresses are
25739     32 bits.  Absolute addresses support the full address range.
25740
25741'-mcmodel=large'
25742     Generate code for the large model.  There is no limitation on call
25743     distance, pc-relative addresses, or absolute addresses.
25744
25745'-mcpu=NAME'
25746     Selects the type of CPU to be targeted.  Currently the only
25747     supported type is 'tilegx'.
25748
25749'-m32'
25750'-m64'
25751     Generate code for a 32-bit or 64-bit environment.  The 32-bit
25752     environment sets int, long, and pointer to 32 bits.  The 64-bit
25753     environment sets int to 32 bits and long and pointer to 64 bits.
25754
25755'-mbig-endian'
25756'-mlittle-endian'
25757     Generate code in big/little endian mode, respectively.
25758
25759
25760File: gcc.info,  Node: TILEPro Options,  Next: V850 Options,  Prev: TILE-Gx Options,  Up: Submodel Options
25761
257623.19.53 TILEPro Options
25763-----------------------
25764
25765These '-m' options are supported on the TILEPro:
25766
25767'-mcpu=NAME'
25768     Selects the type of CPU to be targeted.  Currently the only
25769     supported type is 'tilepro'.
25770
25771'-m32'
25772     Generate code for a 32-bit environment, which sets int, long, and
25773     pointer to 32 bits.  This is the only supported behavior so the
25774     flag is essentially ignored.
25775
25776
25777File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TILEPro Options,  Up: Submodel Options
25778
257793.19.54 V850 Options
25780--------------------
25781
25782These '-m' options are defined for V850 implementations:
25783
25784'-mlong-calls'
25785'-mno-long-calls'
25786     Treat all calls as being far away (near).  If calls are assumed to
25787     be far away, the compiler always loads the function's address into
25788     a register, and calls indirect through the pointer.
25789
25790'-mno-ep'
25791'-mep'
25792     Do not optimize (do optimize) basic blocks that use the same index
25793     pointer 4 or more times to copy pointer into the 'ep' register, and
25794     use the shorter 'sld' and 'sst' instructions.  The '-mep' option is
25795     on by default if you optimize.
25796
25797'-mno-prolog-function'
25798'-mprolog-function'
25799     Do not use (do use) external functions to save and restore
25800     registers at the prologue and epilogue of a function.  The external
25801     functions are slower, but use less code space if more than one
25802     function saves the same number of registers.  The
25803     '-mprolog-function' option is on by default if you optimize.
25804
25805'-mspace'
25806     Try to make the code as small as possible.  At present, this just
25807     turns on the '-mep' and '-mprolog-function' options.
25808
25809'-mtda=N'
25810     Put static or global variables whose size is N bytes or less into
25811     the tiny data area that register 'ep' points to.  The tiny data
25812     area can hold up to 256 bytes in total (128 bytes for byte
25813     references).
25814
25815'-msda=N'
25816     Put static or global variables whose size is N bytes or less into
25817     the small data area that register 'gp' points to.  The small data
25818     area can hold up to 64 kilobytes.
25819
25820'-mzda=N'
25821     Put static or global variables whose size is N bytes or less into
25822     the first 32 kilobytes of memory.
25823
25824'-mv850'
25825     Specify that the target processor is the V850.
25826
25827'-mv850e3v5'
25828     Specify that the target processor is the V850E3V5.  The
25829     preprocessor constant '__v850e3v5__' is defined if this option is
25830     used.
25831
25832'-mv850e2v4'
25833     Specify that the target processor is the V850E3V5.  This is an
25834     alias for the '-mv850e3v5' option.
25835
25836'-mv850e2v3'
25837     Specify that the target processor is the V850E2V3.  The
25838     preprocessor constant '__v850e2v3__' is defined if this option is
25839     used.
25840
25841'-mv850e2'
25842     Specify that the target processor is the V850E2.  The preprocessor
25843     constant '__v850e2__' is defined if this option is used.
25844
25845'-mv850e1'
25846     Specify that the target processor is the V850E1.  The preprocessor
25847     constants '__v850e1__' and '__v850e__' are defined if this option
25848     is used.
25849
25850'-mv850es'
25851     Specify that the target processor is the V850ES. This is an alias
25852     for the '-mv850e1' option.
25853
25854'-mv850e'
25855     Specify that the target processor is the V850E.  The preprocessor
25856     constant '__v850e__' is defined if this option is used.
25857
25858     If neither '-mv850' nor '-mv850e' nor '-mv850e1' nor '-mv850e2' nor
25859     '-mv850e2v3' nor '-mv850e3v5' are defined then a default target
25860     processor is chosen and the relevant '__v850*__' preprocessor
25861     constant is defined.
25862
25863     The preprocessor constants '__v850' and '__v851__' are always
25864     defined, regardless of which processor variant is the target.
25865
25866'-mdisable-callt'
25867'-mno-disable-callt'
25868     This option suppresses generation of the 'CALLT' instruction for
25869     the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
25870     v850 architecture.
25871
25872     This option is enabled by default when the RH850 ABI is in use (see
25873     '-mrh850-abi'), and disabled by default when the GCC ABI is in use.
25874     If 'CALLT' instructions are being generated then the C preprocessor
25875     symbol '__V850_CALLT__' is defined.
25876
25877'-mrelax'
25878'-mno-relax'
25879     Pass on (or do not pass on) the '-mrelax' command-line option to
25880     the assembler.
25881
25882'-mlong-jumps'
25883'-mno-long-jumps'
25884     Disable (or re-enable) the generation of PC-relative jump
25885     instructions.
25886
25887'-msoft-float'
25888'-mhard-float'
25889     Disable (or re-enable) the generation of hardware floating point
25890     instructions.  This option is only significant when the target
25891     architecture is 'V850E2V3' or higher.  If hardware floating point
25892     instructions are being generated then the C preprocessor symbol
25893     '__FPU_OK__' is defined, otherwise the symbol '__NO_FPU__' is
25894     defined.
25895
25896'-mloop'
25897     Enables the use of the e3v5 LOOP instruction.  The use of this
25898     instruction is not enabled by default when the e3v5 architecture is
25899     selected because its use is still experimental.
25900
25901'-mrh850-abi'
25902'-mghs'
25903     Enables support for the RH850 version of the V850 ABI. This is the
25904     default.  With this version of the ABI the following rules apply:
25905
25906        * Integer sized structures and unions are returned via a memory
25907          pointer rather than a register.
25908
25909        * Large structures and unions (more than 8 bytes in size) are
25910          passed by value.
25911
25912        * Functions are aligned to 16-bit boundaries.
25913
25914        * The '-m8byte-align' command-line option is supported.
25915
25916        * The '-mdisable-callt' command-line option is enabled by
25917          default.  The '-mno-disable-callt' command-line option is not
25918          supported.
25919
25920     When this version of the ABI is enabled the C preprocessor symbol
25921     '__V850_RH850_ABI__' is defined.
25922
25923'-mgcc-abi'
25924     Enables support for the old GCC version of the V850 ABI. With this
25925     version of the ABI the following rules apply:
25926
25927        * Integer sized structures and unions are returned in register
25928          'r10'.
25929
25930        * Large structures and unions (more than 8 bytes in size) are
25931          passed by reference.
25932
25933        * Functions are aligned to 32-bit boundaries, unless optimizing
25934          for size.
25935
25936        * The '-m8byte-align' command-line option is not supported.
25937
25938        * The '-mdisable-callt' command-line option is supported but not
25939          enabled by default.
25940
25941     When this version of the ABI is enabled the C preprocessor symbol
25942     '__V850_GCC_ABI__' is defined.
25943
25944'-m8byte-align'
25945'-mno-8byte-align'
25946     Enables support for 'double' and 'long long' types to be aligned on
25947     8-byte boundaries.  The default is to restrict the alignment of all
25948     objects to at most 4-bytes.  When '-m8byte-align' is in effect the
25949     C preprocessor symbol '__V850_8BYTE_ALIGN__' is defined.
25950
25951'-mbig-switch'
25952     Generate code suitable for big switch tables.  Use this option only
25953     if the assembler/linker complain about out of range branches within
25954     a switch table.
25955
25956'-mapp-regs'
25957     This option causes r2 and r5 to be used in the code generated by
25958     the compiler.  This setting is the default.
25959
25960'-mno-app-regs'
25961     This option causes r2 and r5 to be treated as fixed registers.
25962
25963
25964File: gcc.info,  Node: VAX Options,  Next: Visium Options,  Prev: V850 Options,  Up: Submodel Options
25965
259663.19.55 VAX Options
25967-------------------
25968
25969These '-m' options are defined for the VAX:
25970
25971'-munix'
25972     Do not output certain jump instructions ('aobleq' and so on) that
25973     the Unix assembler for the VAX cannot handle across long ranges.
25974
25975'-mgnu'
25976     Do output those jump instructions, on the assumption that the GNU
25977     assembler is being used.
25978
25979'-mg'
25980     Output code for G-format floating-point numbers instead of
25981     D-format.
25982
25983
25984File: gcc.info,  Node: Visium Options,  Next: VMS Options,  Prev: VAX Options,  Up: Submodel Options
25985
259863.19.56 Visium Options
25987----------------------
25988
25989'-mdebug'
25990     A program which performs file I/O and is destined to run on an MCM
25991     target should be linked with this option.  It causes the libraries
25992     libc.a and libdebug.a to be linked.  The program should be run on
25993     the target under the control of the GDB remote debugging stub.
25994
25995'-msim'
25996     A program which performs file I/O and is destined to run on the
25997     simulator should be linked with option.  This causes libraries
25998     libc.a and libsim.a to be linked.
25999
26000'-mfpu'
26001'-mhard-float'
26002     Generate code containing floating-point instructions.  This is the
26003     default.
26004
26005'-mno-fpu'
26006'-msoft-float'
26007     Generate code containing library calls for floating-point.
26008
26009     '-msoft-float' changes the calling convention in the output file;
26010     therefore, it is only useful if you compile _all_ of a program with
26011     this option.  In particular, you need to compile 'libgcc.a', the
26012     library that comes with GCC, with '-msoft-float' in order for this
26013     to work.
26014
26015'-mcpu=CPU_TYPE'
26016     Set the instruction set, register set, and instruction scheduling
26017     parameters for machine type CPU_TYPE.  Supported values for
26018     CPU_TYPE are 'mcm', 'gr5' and 'gr6'.
26019
26020     'mcm' is a synonym of 'gr5' present for backward compatibility.
26021
26022     By default (unless configured otherwise), GCC generates code for
26023     the GR5 variant of the Visium architecture.
26024
26025     With '-mcpu=gr6', GCC generates code for the GR6 variant of the
26026     Visium architecture.  The only difference from GR5 code is that the
26027     compiler will generate block move instructions.
26028
26029'-mtune=CPU_TYPE'
26030     Set the instruction scheduling parameters for machine type
26031     CPU_TYPE, but do not set the instruction set or register set that
26032     the option '-mcpu=CPU_TYPE' would.
26033
26034'-msv-mode'
26035     Generate code for the supervisor mode, where there are no
26036     restrictions on the access to general registers.  This is the
26037     default.
26038
26039'-muser-mode'
26040     Generate code for the user mode, where the access to some general
26041     registers is forbidden: on the GR5, registers r24 to r31 cannot be
26042     accessed in this mode; on the GR6, only registers r29 to r31 are
26043     affected.
26044
26045
26046File: gcc.info,  Node: VMS Options,  Next: VxWorks Options,  Prev: Visium Options,  Up: Submodel Options
26047
260483.19.57 VMS Options
26049-------------------
26050
26051These '-m' options are defined for the VMS implementations:
26052
26053'-mvms-return-codes'
26054     Return VMS condition codes from 'main'.  The default is to return
26055     POSIX-style condition (e.g. error) codes.
26056
26057'-mdebug-main=PREFIX'
26058     Flag the first routine whose name starts with PREFIX as the main
26059     routine for the debugger.
26060
26061'-mmalloc64'
26062     Default to 64-bit memory allocation routines.
26063
26064'-mpointer-size=SIZE'
26065     Set the default size of pointers.  Possible options for SIZE are
26066     '32' or 'short' for 32 bit pointers, '64' or 'long' for 64 bit
26067     pointers, and 'no' for supporting only 32 bit pointers.  The later
26068     option disables 'pragma pointer_size'.
26069
26070
26071File: gcc.info,  Node: VxWorks Options,  Next: x86 Options,  Prev: VMS Options,  Up: Submodel Options
26072
260733.19.58 VxWorks Options
26074-----------------------
26075
26076The options in this section are defined for all VxWorks targets.
26077Options specific to the target hardware are listed with the other
26078options for that target.
26079
26080'-mrtp'
26081     GCC can generate code for both VxWorks kernels and real time
26082     processes (RTPs).  This option switches from the former to the
26083     latter.  It also defines the preprocessor macro '__RTP__'.
26084
26085'-non-static'
26086     Link an RTP executable against shared libraries rather than static
26087     libraries.  The options '-static' and '-shared' can also be used
26088     for RTPs (*note Link Options::); '-static' is the default.
26089
26090'-Bstatic'
26091'-Bdynamic'
26092     These options are passed down to the linker.  They are defined for
26093     compatibility with Diab.
26094
26095'-Xbind-lazy'
26096     Enable lazy binding of function calls.  This option is equivalent
26097     to '-Wl,-z,now' and is defined for compatibility with Diab.
26098
26099'-Xbind-now'
26100     Disable lazy binding of function calls.  This option is the default
26101     and is defined for compatibility with Diab.
26102
26103
26104File: gcc.info,  Node: x86 Options,  Next: x86 Windows Options,  Prev: VxWorks Options,  Up: Submodel Options
26105
261063.19.59 x86 Options
26107-------------------
26108
26109These '-m' options are defined for the x86 family of computers.
26110
26111'-march=CPU-TYPE'
26112     Generate instructions for the machine type CPU-TYPE.  In contrast
26113     to '-mtune=CPU-TYPE', which merely tunes the generated code for the
26114     specified CPU-TYPE, '-march=CPU-TYPE' allows GCC to generate code
26115     that may not run at all on processors other than the one indicated.
26116     Specifying '-march=CPU-TYPE' implies '-mtune=CPU-TYPE'.
26117
26118     The choices for CPU-TYPE are:
26119
26120     'native'
26121          This selects the CPU to generate code for at compilation time
26122          by determining the processor type of the compiling machine.
26123          Using '-march=native' enables all instruction subsets
26124          supported by the local machine (hence the result might not run
26125          on different machines).  Using '-mtune=native' produces code
26126          optimized for the local machine under the constraints of the
26127          selected instruction set.
26128
26129     'x86-64'
26130          A generic CPU with 64-bit extensions.
26131
26132     'i386'
26133          Original Intel i386 CPU.
26134
26135     'i486'
26136          Intel i486 CPU.  (No scheduling is implemented for this chip.)
26137
26138     'i586'
26139     'pentium'
26140          Intel Pentium CPU with no MMX support.
26141
26142     'lakemont'
26143          Intel Lakemont MCU, based on Intel Pentium CPU.
26144
26145     'pentium-mmx'
26146          Intel Pentium MMX CPU, based on Pentium core with MMX
26147          instruction set support.
26148
26149     'pentiumpro'
26150          Intel Pentium Pro CPU.
26151
26152     'i686'
26153          When used with '-march', the Pentium Pro instruction set is
26154          used, so the code runs on all i686 family chips.  When used
26155          with '-mtune', it has the same meaning as 'generic'.
26156
26157     'pentium2'
26158          Intel Pentium II CPU, based on Pentium Pro core with MMX
26159          instruction set support.
26160
26161     'pentium3'
26162     'pentium3m'
26163          Intel Pentium III CPU, based on Pentium Pro core with MMX and
26164          SSE instruction set support.
26165
26166     'pentium-m'
26167          Intel Pentium M; low-power version of Intel Pentium III CPU
26168          with MMX, SSE and SSE2 instruction set support.  Used by
26169          Centrino notebooks.
26170
26171     'pentium4'
26172     'pentium4m'
26173          Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
26174          support.
26175
26176     'prescott'
26177          Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2
26178          and SSE3 instruction set support.
26179
26180     'nocona'
26181          Improved version of Intel Pentium 4 CPU with 64-bit
26182          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
26183
26184     'core2'
26185          Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
26186          and SSSE3 instruction set support.
26187
26188     'nehalem'
26189          Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2,
26190          SSE3, SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set
26191          support.
26192
26193     'westmere'
26194          Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
26195          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL
26196          instruction set support.
26197
26198     'sandybridge'
26199          Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
26200          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL
26201          instruction set support.
26202
26203     'ivybridge'
26204          Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
26205          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL,
26206          FSGSBASE, RDRND and F16C instruction set support.
26207
26208     'haswell'
26209          Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
26210          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
26211          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction
26212          set support.
26213
26214     'broadwell'
26215          Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
26216          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
26217          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED ADCX and
26218          PREFETCHW instruction set support.
26219
26220     'skylake'
26221          Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE,
26222          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
26223          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
26224          PREFETCHW, CLFLUSHOPT, XSAVEC and XSAVES instruction set
26225          support.
26226
26227     'bonnell'
26228          Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
26229          SSE2, SSE3 and SSSE3 instruction set support.
26230
26231     'silvermont'
26232          Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
26233          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
26234          PCLMUL and RDRND instruction set support.
26235
26236     'goldmont'
26237          Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE,
26238          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
26239          PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT and FSGSBASE
26240          instruction set support.
26241
26242     'goldmont-plus'
26243          Intel Goldmont Plus CPU with 64-bit extensions, MOVBE, MMX,
26244          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES,
26245          PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT,
26246          FSGSBASE, PTWRITE, RDPID, SGX and UMIP instruction set
26247          support.
26248
26249     'tremont'
26250          Intel Tremont CPU with 64-bit extensions, MOVBE, MMX, SSE,
26251          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
26252          PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE,
26253          PTWRITE, RDPID, SGX, UMIP, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B,
26254          CLDEMOTE and WAITPKG instruction set support.
26255
26256     'knl'
26257          Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX,
26258          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2,
26259          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
26260          ADCX, PREFETCHW, PREFETCHWT1, AVX512F, AVX512PF, AVX512ER and
26261          AVX512CD instruction set support.
26262
26263     'knm'
26264          Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX,
26265          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2,
26266          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
26267          ADCX, PREFETCHW, PREFETCHWT1, AVX512F, AVX512PF, AVX512ER,
26268          AVX512CD, AVX5124VNNIW, AVX5124FMAPS and AVX512VPOPCNTDQ
26269          instruction set support.
26270
26271     'skylake-avx512'
26272          Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX,
26273          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
26274          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
26275          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
26276          CLWB, AVX512VL, AVX512BW, AVX512DQ and AVX512CD instruction
26277          set support.
26278
26279     'cannonlake'
26280          Intel Cannonlake Server CPU with 64-bit extensions, MOVBE,
26281          MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
26282          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
26283          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
26284          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
26285          AVX512IFMA, SHA and UMIP instruction set support.
26286
26287     'icelake-client'
26288          Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX,
26289          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
26290          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
26291          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
26292          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
26293          AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2,
26294          AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES
26295          instruction set support.
26296
26297     'icelake-server'
26298          Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX,
26299          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
26300          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
26301          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
26302          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
26303          AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2,
26304          AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES,
26305          PCONFIG and WBNOINVD instruction set support.
26306
26307     'cascadelake'
26308          Intel Cascadelake CPU with 64-bit extensions, MOVBE, MMX, SSE,
26309          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
26310          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
26311          ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB,
26312          AVX512VL, AVX512BW, AVX512DQ, AVX512CD and AVX512VNNI
26313          instruction set support.
26314
26315     'cooperlake'
26316          Intel cooperlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
26317          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
26318          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
26319          ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB,
26320          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI and
26321          AVX512BF16 instruction set support.
26322
26323     'tigerlake'
26324          Intel Tigerlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
26325          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
26326          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
26327          ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
26328          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
26329          AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2,
26330          AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES,
26331          PCONFIG, WBNOINVD, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT and
26332          KEYLOCKER instruction set support.
26333
26334     'k6'
26335          AMD K6 CPU with MMX instruction set support.
26336
26337     'k6-2'
26338     'k6-3'
26339          Improved versions of AMD K6 CPU with MMX and 3DNow!
26340          instruction set support.
26341
26342     'athlon'
26343     'athlon-tbird'
26344          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
26345          prefetch instructions support.
26346
26347     'athlon-4'
26348     'athlon-xp'
26349     'athlon-mp'
26350          Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
26351          full SSE instruction set support.
26352
26353     'k8'
26354     'opteron'
26355     'athlon64'
26356     'athlon-fx'
26357          Processors based on the AMD K8 core with x86-64 instruction
26358          set support, including the AMD Opteron, Athlon 64, and Athlon
26359          64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
26360          enhanced 3DNow! and 64-bit instruction set extensions.)
26361
26362     'k8-sse3'
26363     'opteron-sse3'
26364     'athlon64-sse3'
26365          Improved versions of AMD K8 cores with SSE3 instruction set
26366          support.
26367
26368     'amdfam10'
26369     'barcelona'
26370          CPUs based on AMD Family 10h cores with x86-64 instruction set
26371          support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
26372          enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
26373
26374     'bdver1'
26375          CPUs based on AMD Family 15h cores with x86-64 instruction set
26376          support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCLMUL,
26377          CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
26378          and 64-bit instruction set extensions.)
26379
26380     'bdver2'
26381          AMD Family 15h core based CPUs with x86-64 instruction set
26382          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP,
26383          LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
26384          SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
26385
26386     'bdver3'
26387          AMD Family 15h core based CPUs with x86-64 instruction set
26388          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE,
26389          AVX, XOP, LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
26390          SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
26391          extensions.)
26392
26393     'bdver4'
26394          AMD Family 15h core based CPUs with x86-64 instruction set
26395          support.  (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
26396          FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCLMUL, CX16, MOVBE, MMX,
26397          SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
26398          instruction set extensions.)
26399
26400     'znver1'
26401          AMD Family 17h core based CPUs with x86-64 instruction set
26402          support.  (This supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX,
26403          AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCLMUL, CX16,
26404          MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2,
26405          ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit
26406          instruction set extensions.)
26407
26408     'znver2'
26409          AMD Family 17h core based CPUs with x86-64 instruction set
26410          support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
26411          FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
26412          PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
26413          SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT,
26414          RDPID, WBNOINVD, and 64-bit instruction set extensions.)
26415
26416     'znver3'
26417          AMD Family 19h core based CPUs with x86-64 instruction set
26418          support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
26419          FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
26420          PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
26421          SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT,
26422          RDPID, WBNOINVD, PKU, VPCLMULQDQ, VAES, and 64-bit instruction
26423          set extensions.)
26424
26425     'btver1'
26426          CPUs based on AMD Family 14h cores with x86-64 instruction set
26427          support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
26428          CX16, ABM and 64-bit instruction set extensions.)
26429
26430     'btver2'
26431          CPUs based on AMD Family 16h cores with x86-64 instruction set
26432          support.  This includes MOVBE, F16C, BMI, AVX, PCLMUL, AES,
26433          SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
26434          and 64-bit instruction set extensions.
26435
26436     'winchip-c6'
26437          IDT WinChip C6 CPU, dealt in same way as i486 with additional
26438          MMX instruction set support.
26439
26440     'winchip2'
26441          IDT WinChip 2 CPU, dealt in same way as i486 with additional
26442          MMX and 3DNow! instruction set support.
26443
26444     'c3'
26445          VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
26446          scheduling is implemented for this chip.)
26447
26448     'c3-2'
26449          VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
26450          support.  (No scheduling is implemented for this chip.)
26451
26452     'c7'
26453          VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction
26454          set support.  (No scheduling is implemented for this chip.)
26455
26456     'samuel-2'
26457          VIA Eden Samuel 2 CPU with MMX and 3DNow! instruction set
26458          support.  (No scheduling is implemented for this chip.)
26459
26460     'nehemiah'
26461          VIA Eden Nehemiah CPU with MMX and SSE instruction set
26462          support.  (No scheduling is implemented for this chip.)
26463
26464     'esther'
26465          VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction
26466          set support.  (No scheduling is implemented for this chip.)
26467
26468     'eden-x2'
26469          VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3
26470          instruction set support.  (No scheduling is implemented for
26471          this chip.)
26472
26473     'eden-x4'
26474          VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3,
26475          SSE4.1, SSE4.2, AVX and AVX2 instruction set support.  (No
26476          scheduling is implemented for this chip.)
26477
26478     'nano'
26479          Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and
26480          SSSE3 instruction set support.  (No scheduling is implemented
26481          for this chip.)
26482
26483     'nano-1000'
26484          VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
26485          instruction set support.  (No scheduling is implemented for
26486          this chip.)
26487
26488     'nano-2000'
26489          VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
26490          instruction set support.  (No scheduling is implemented for
26491          this chip.)
26492
26493     'nano-3000'
26494          VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and
26495          SSE4.1 instruction set support.  (No scheduling is implemented
26496          for this chip.)
26497
26498     'nano-x2'
26499          VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3,
26500          SSSE3 and SSE4.1 instruction set support.  (No scheduling is
26501          implemented for this chip.)
26502
26503     'nano-x4'
26504          VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3,
26505          SSSE3 and SSE4.1 instruction set support.  (No scheduling is
26506          implemented for this chip.)
26507
26508     'geode'
26509          AMD Geode embedded processor with MMX and 3DNow! instruction
26510          set support.
26511
26512'-mtune=CPU-TYPE'
26513     Tune to CPU-TYPE everything applicable about the generated code,
26514     except for the ABI and the set of available instructions.  While
26515     picking a specific CPU-TYPE schedules things appropriately for that
26516     particular chip, the compiler does not generate any code that
26517     cannot run on the default machine type unless you use a
26518     '-march=CPU-TYPE' option.  For example, if GCC is configured for
26519     i686-pc-linux-gnu then '-mtune=pentium4' generates code that is
26520     tuned for Pentium 4 but still runs on i686 machines.
26521
26522     The choices for CPU-TYPE are the same as for '-march'.  In
26523     addition, '-mtune' supports 2 extra choices for CPU-TYPE:
26524
26525     'generic'
26526          Produce code optimized for the most common IA32/AMD64/EM64T
26527          processors.  If you know the CPU on which your code will run,
26528          then you should use the corresponding '-mtune' or '-march'
26529          option instead of '-mtune=generic'.  But, if you do not know
26530          exactly what CPU users of your application will have, then you
26531          should use this option.
26532
26533          As new processors are deployed in the marketplace, the
26534          behavior of this option will change.  Therefore, if you
26535          upgrade to a newer version of GCC, code generation controlled
26536          by this option will change to reflect the processors that are
26537          most common at the time that version of GCC is released.
26538
26539          There is no '-march=generic' option because '-march' indicates
26540          the instruction set the compiler can use, and there is no
26541          generic instruction set applicable to all processors.  In
26542          contrast, '-mtune' indicates the processor (or, in this case,
26543          collection of processors) for which the code is optimized.
26544
26545     'intel'
26546          Produce code optimized for the most current Intel processors,
26547          which are Haswell and Silvermont for this version of GCC. If
26548          you know the CPU on which your code will run, then you should
26549          use the corresponding '-mtune' or '-march' option instead of
26550          '-mtune=intel'.  But, if you want your application performs
26551          better on both Haswell and Silvermont, then you should use
26552          this option.
26553
26554          As new Intel processors are deployed in the marketplace, the
26555          behavior of this option will change.  Therefore, if you
26556          upgrade to a newer version of GCC, code generation controlled
26557          by this option will change to reflect the most current Intel
26558          processors at the time that version of GCC is released.
26559
26560          There is no '-march=intel' option because '-march' indicates
26561          the instruction set the compiler can use, and there is no
26562          common instruction set applicable to all processors.  In
26563          contrast, '-mtune' indicates the processor (or, in this case,
26564          collection of processors) for which the code is optimized.
26565
26566'-mcpu=CPU-TYPE'
26567     A deprecated synonym for '-mtune'.
26568
26569'-mfpmath=UNIT'
26570     Generate floating-point arithmetic for selected unit UNIT.  The
26571     choices for UNIT are:
26572
26573     '387'
26574          Use the standard 387 floating-point coprocessor present on the
26575          majority of chips and emulated otherwise.  Code compiled with
26576          this option runs almost everywhere.  The temporary results are
26577          computed in 80-bit precision instead of the precision
26578          specified by the type, resulting in slightly different results
26579          compared to most of other chips.  See '-ffloat-store' for more
26580          detailed description.
26581
26582          This is the default choice for non-Darwin x86-32 targets.
26583
26584     'sse'
26585          Use scalar floating-point instructions present in the SSE
26586          instruction set.  This instruction set is supported by Pentium
26587          III and newer chips, and in the AMD line by Athlon-4, Athlon
26588          XP and Athlon MP chips.  The earlier version of the SSE
26589          instruction set supports only single-precision arithmetic,
26590          thus the double and extended-precision arithmetic are still
26591          done using 387.  A later version, present only in Pentium 4
26592          and AMD x86-64 chips, supports double-precision arithmetic
26593          too.
26594
26595          For the x86-32 compiler, you must use '-march=CPU-TYPE',
26596          '-msse' or '-msse2' switches to enable SSE extensions and make
26597          this option effective.  For the x86-64 compiler, these
26598          extensions are enabled by default.
26599
26600          The resulting code should be considerably faster in the
26601          majority of cases and avoid the numerical instability problems
26602          of 387 code, but may break some existing code that expects
26603          temporaries to be 80 bits.
26604
26605          This is the default choice for the x86-64 compiler, Darwin
26606          x86-32 targets, and the default choice for x86-32 targets with
26607          the SSE2 instruction set when '-ffast-math' is enabled.
26608
26609     'sse,387'
26610     'sse+387'
26611     'both'
26612          Attempt to utilize both instruction sets at once.  This
26613          effectively doubles the amount of available registers, and on
26614          chips with separate execution units for 387 and SSE the
26615          execution resources too.  Use this option with care, as it is
26616          still experimental, because the GCC register allocator does
26617          not model separate functional units well, resulting in
26618          unstable performance.
26619
26620'-masm=DIALECT'
26621     Output assembly instructions using selected DIALECT.  Also affects
26622     which dialect is used for basic 'asm' (*note Basic Asm::) and
26623     extended 'asm' (*note Extended Asm::).  Supported choices (in
26624     dialect order) are 'att' or 'intel'.  The default is 'att'.  Darwin
26625     does not support 'intel'.
26626
26627'-mieee-fp'
26628'-mno-ieee-fp'
26629     Control whether or not the compiler uses IEEE floating-point
26630     comparisons.  These correctly handle the case where the result of a
26631     comparison is unordered.
26632
26633'-m80387'
26634'-mhard-float'
26635     Generate output containing 80387 instructions for floating point.
26636
26637'-mno-80387'
26638'-msoft-float'
26639     Generate output containing library calls for floating point.
26640
26641     *Warning:* the requisite libraries are not part of GCC.  Normally
26642     the facilities of the machine's usual C compiler are used, but this
26643     cannot be done directly in cross-compilation.  You must make your
26644     own arrangements to provide suitable library functions for
26645     cross-compilation.
26646
26647     On machines where a function returns floating-point results in the
26648     80387 register stack, some floating-point opcodes may be emitted
26649     even if '-msoft-float' is used.
26650
26651'-mno-fp-ret-in-387'
26652     Do not use the FPU registers for return values of functions.
26653
26654     The usual calling convention has functions return values of types
26655     'float' and 'double' in an FPU register, even if there is no FPU.
26656     The idea is that the operating system should emulate an FPU.
26657
26658     The option '-mno-fp-ret-in-387' causes such values to be returned
26659     in ordinary CPU registers instead.
26660
26661'-mno-fancy-math-387'
26662     Some 387 emulators do not support the 'sin', 'cos' and 'sqrt'
26663     instructions for the 387.  Specify this option to avoid generating
26664     those instructions.  This option is overridden when '-march'
26665     indicates that the target CPU always has an FPU and so the
26666     instruction does not need emulation.  These instructions are not
26667     generated unless you also use the '-funsafe-math-optimizations'
26668     switch.
26669
26670'-malign-double'
26671'-mno-align-double'
26672     Control whether GCC aligns 'double', 'long double', and 'long long'
26673     variables on a two-word boundary or a one-word boundary.  Aligning
26674     'double' variables on a two-word boundary produces code that runs
26675     somewhat faster on a Pentium at the expense of more memory.
26676
26677     On x86-64, '-malign-double' is enabled by default.
26678
26679     *Warning:* if you use the '-malign-double' switch, structures
26680     containing the above types are aligned differently than the
26681     published application binary interface specifications for the
26682     x86-32 and are not binary compatible with structures in code
26683     compiled without that switch.
26684
26685'-m96bit-long-double'
26686'-m128bit-long-double'
26687     These switches control the size of 'long double' type.  The x86-32
26688     application binary interface specifies the size to be 96 bits, so
26689     '-m96bit-long-double' is the default in 32-bit mode.
26690
26691     Modern architectures (Pentium and newer) prefer 'long double' to be
26692     aligned to an 8- or 16-byte boundary.  In arrays or structures
26693     conforming to the ABI, this is not possible.  So specifying
26694     '-m128bit-long-double' aligns 'long double' to a 16-byte boundary
26695     by padding the 'long double' with an additional 32-bit zero.
26696
26697     In the x86-64 compiler, '-m128bit-long-double' is the default
26698     choice as its ABI specifies that 'long double' is aligned on
26699     16-byte boundary.
26700
26701     Notice that neither of these options enable any extra precision
26702     over the x87 standard of 80 bits for a 'long double'.
26703
26704     *Warning:* if you override the default value for your target ABI,
26705     this changes the size of structures and arrays containing 'long
26706     double' variables, as well as modifying the function calling
26707     convention for functions taking 'long double'.  Hence they are not
26708     binary-compatible with code compiled without that switch.
26709
26710'-mlong-double-64'
26711'-mlong-double-80'
26712'-mlong-double-128'
26713     These switches control the size of 'long double' type.  A size of
26714     64 bits makes the 'long double' type equivalent to the 'double'
26715     type.  This is the default for 32-bit Bionic C library.  A size of
26716     128 bits makes the 'long double' type equivalent to the
26717     '__float128' type.  This is the default for 64-bit Bionic C
26718     library.
26719
26720     *Warning:* if you override the default value for your target ABI,
26721     this changes the size of structures and arrays containing 'long
26722     double' variables, as well as modifying the function calling
26723     convention for functions taking 'long double'.  Hence they are not
26724     binary-compatible with code compiled without that switch.
26725
26726'-malign-data=TYPE'
26727     Control how GCC aligns variables.  Supported values for TYPE are
26728     'compat' uses increased alignment value compatible uses GCC 4.8 and
26729     earlier, 'abi' uses alignment value as specified by the psABI, and
26730     'cacheline' uses increased alignment value to match the cache line
26731     size.  'compat' is the default.
26732
26733'-mlarge-data-threshold=THRESHOLD'
26734     When '-mcmodel=medium' is specified, data objects larger than
26735     THRESHOLD are placed in the large data section.  This value must be
26736     the same across all objects linked into the binary, and defaults to
26737     65535.
26738
26739'-mrtd'
26740     Use a different function-calling convention, in which functions
26741     that take a fixed number of arguments return with the 'ret NUM'
26742     instruction, which pops their arguments while returning.  This
26743     saves one instruction in the caller since there is no need to pop
26744     the arguments there.
26745
26746     You can specify that an individual function is called with this
26747     calling sequence with the function attribute 'stdcall'.  You can
26748     also override the '-mrtd' option by using the function attribute
26749     'cdecl'.  *Note Function Attributes::.
26750
26751     *Warning:* this calling convention is incompatible with the one
26752     normally used on Unix, so you cannot use it if you need to call
26753     libraries compiled with the Unix compiler.
26754
26755     Also, you must provide function prototypes for all functions that
26756     take variable numbers of arguments (including 'printf'); otherwise
26757     incorrect code is generated for calls to those functions.
26758
26759     In addition, seriously incorrect code results if you call a
26760     function with too many arguments.  (Normally, extra arguments are
26761     harmlessly ignored.)
26762
26763'-mregparm=NUM'
26764     Control how many registers are used to pass integer arguments.  By
26765     default, no registers are used to pass arguments, and at most 3
26766     registers can be used.  You can control this behavior for a
26767     specific function by using the function attribute 'regparm'.  *Note
26768     Function Attributes::.
26769
26770     *Warning:* if you use this switch, and NUM is nonzero, then you
26771     must build all modules with the same value, including any
26772     libraries.  This includes the system libraries and startup modules.
26773
26774'-msseregparm'
26775     Use SSE register passing conventions for float and double arguments
26776     and return values.  You can control this behavior for a specific
26777     function by using the function attribute 'sseregparm'.  *Note
26778     Function Attributes::.
26779
26780     *Warning:* if you use this switch then you must build all modules
26781     with the same value, including any libraries.  This includes the
26782     system libraries and startup modules.
26783
26784'-mvect8-ret-in-mem'
26785     Return 8-byte vectors in memory instead of MMX registers.  This is
26786     the default on VxWorks to match the ABI of the Sun Studio compilers
26787     until version 12.  _Only_ use this option if you need to remain
26788     compatible with existing code produced by those previous compiler
26789     versions or older versions of GCC.
26790
26791'-mpc32'
26792'-mpc64'
26793'-mpc80'
26794
26795     Set 80387 floating-point precision to 32, 64 or 80 bits.  When
26796     '-mpc32' is specified, the significands of results of
26797     floating-point operations are rounded to 24 bits (single
26798     precision); '-mpc64' rounds the significands of results of
26799     floating-point operations to 53 bits (double precision) and
26800     '-mpc80' rounds the significands of results of floating-point
26801     operations to 64 bits (extended double precision), which is the
26802     default.  When this option is used, floating-point operations in
26803     higher precisions are not available to the programmer without
26804     setting the FPU control word explicitly.
26805
26806     Setting the rounding of floating-point operations to less than the
26807     default 80 bits can speed some programs by 2% or more.  Note that
26808     some mathematical libraries assume that extended-precision (80-bit)
26809     floating-point operations are enabled by default; routines in such
26810     libraries could suffer significant loss of accuracy, typically
26811     through so-called "catastrophic cancellation", when this option is
26812     used to set the precision to less than extended precision.
26813
26814'-mstackrealign'
26815     Realign the stack at entry.  On the x86, the '-mstackrealign'
26816     option generates an alternate prologue and epilogue that realigns
26817     the run-time stack if necessary.  This supports mixing legacy codes
26818     that keep 4-byte stack alignment with modern codes that keep
26819     16-byte stack alignment for SSE compatibility.  See also the
26820     attribute 'force_align_arg_pointer', applicable to individual
26821     functions.
26822
26823'-mpreferred-stack-boundary=NUM'
26824     Attempt to keep the stack boundary aligned to a 2 raised to NUM
26825     byte boundary.  If '-mpreferred-stack-boundary' is not specified,
26826     the default is 4 (16 bytes or 128 bits).
26827
26828     *Warning:* When generating code for the x86-64 architecture with
26829     SSE extensions disabled, '-mpreferred-stack-boundary=3' can be used
26830     to keep the stack boundary aligned to 8 byte boundary.  Since
26831     x86-64 ABI require 16 byte stack alignment, this is ABI
26832     incompatible and intended to be used in controlled environment
26833     where stack space is important limitation.  This option leads to
26834     wrong code when functions compiled with 16 byte stack alignment
26835     (such as functions from a standard library) are called with
26836     misaligned stack.  In this case, SSE instructions may lead to
26837     misaligned memory access traps.  In addition, variable arguments
26838     are handled incorrectly for 16 byte aligned objects (including x87
26839     long double and __int128), leading to wrong results.  You must
26840     build all modules with '-mpreferred-stack-boundary=3', including
26841     any libraries.  This includes the system libraries and startup
26842     modules.
26843
26844'-mincoming-stack-boundary=NUM'
26845     Assume the incoming stack is aligned to a 2 raised to NUM byte
26846     boundary.  If '-mincoming-stack-boundary' is not specified, the one
26847     specified by '-mpreferred-stack-boundary' is used.
26848
26849     On Pentium and Pentium Pro, 'double' and 'long double' values
26850     should be aligned to an 8-byte boundary (see '-malign-double') or
26851     suffer significant run time performance penalties.  On Pentium III,
26852     the Streaming SIMD Extension (SSE) data type '__m128' may not work
26853     properly if it is not 16-byte aligned.
26854
26855     To ensure proper alignment of this values on the stack, the stack
26856     boundary must be as aligned as that required by any value stored on
26857     the stack.  Further, every function must be generated such that it
26858     keeps the stack aligned.  Thus calling a function compiled with a
26859     higher preferred stack boundary from a function compiled with a
26860     lower preferred stack boundary most likely misaligns the stack.  It
26861     is recommended that libraries that use callbacks always use the
26862     default setting.
26863
26864     This extra alignment does consume extra stack space, and generally
26865     increases code size.  Code that is sensitive to stack space usage,
26866     such as embedded systems and operating system kernels, may want to
26867     reduce the preferred alignment to '-mpreferred-stack-boundary=2'.
26868
26869'-mmmx'
26870'-msse'
26871'-msse2'
26872'-msse3'
26873'-mssse3'
26874'-msse4'
26875'-msse4a'
26876'-msse4.1'
26877'-msse4.2'
26878'-mavx'
26879'-mavx2'
26880'-mavx512f'
26881'-mavx512pf'
26882'-mavx512er'
26883'-mavx512cd'
26884'-mavx512vl'
26885'-mavx512bw'
26886'-mavx512dq'
26887'-mavx512ifma'
26888'-mavx512vbmi'
26889'-msha'
26890'-maes'
26891'-mpclmul'
26892'-mclflushopt'
26893'-mclwb'
26894'-mfsgsbase'
26895'-mptwrite'
26896'-mrdrnd'
26897'-mf16c'
26898'-mfma'
26899'-mpconfig'
26900'-mwbnoinvd'
26901'-mfma4'
26902'-mprfchw'
26903'-mrdpid'
26904'-mprefetchwt1'
26905'-mrdseed'
26906'-msgx'
26907'-mxop'
26908'-mlwp'
26909'-m3dnow'
26910'-m3dnowa'
26911'-mpopcnt'
26912'-mabm'
26913'-madx'
26914'-mbmi'
26915'-mbmi2'
26916'-mlzcnt'
26917'-mfxsr'
26918'-mxsave'
26919'-mxsaveopt'
26920'-mxsavec'
26921'-mxsaves'
26922'-mrtm'
26923'-mhle'
26924'-mtbm'
26925'-mmwaitx'
26926'-mclzero'
26927'-mpku'
26928'-mavx512vbmi2'
26929'-mavx512bf16'
26930'-mgfni'
26931'-mvaes'
26932'-mwaitpkg'
26933'-mvpclmulqdq'
26934'-mavx512bitalg'
26935'-mmovdiri'
26936'-mmovdir64b'
26937'-menqcmd'
26938'-mavx512vpopcntdq'
26939'-mavx512vp2intersect'
26940'-mavx5124fmaps'
26941'-mavx512vnni'
26942'-mavx5124vnniw'
26943'-mcldemote'
26944     These switches enable the use of instructions in the MMX, SSE,
26945     SSE2, SSE3, SSSE3, SSE4, SSE4A, SSE4.1, SSE4.2, AVX, AVX2, AVX512F,
26946     AVX512PF, AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ,
26947     AVX512IFMA, AVX512VBMI, SHA, AES, PCLMUL, CLFLUSHOPT, CLWB,
26948     FSGSBASE, PTWRITE, RDRND, F16C, FMA, PCONFIG, WBNOINVD, FMA4,
26949     PREFETCHW, RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP, 3DNow!,
26950     enhanced 3DNow!, POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE,
26951     XSAVEOPT, XSAVEC, XSAVES, RTM, HLE, TBM, MWAITX, CLZERO, PKU,
26952     AVX512VBMI2, GFNI, VAES, WAITPKG, VPCLMULQDQ, AVX512BITALG,
26953     MOVDIRI, MOVDIR64B, AVX512BF16, ENQCMD, AVX512VPOPCNTDQ,
26954     AVX5124FMAPS, AVX512VNNI, AVX5124VNNIW, or CLDEMOTE extended
26955     instruction sets.  Each has a corresponding '-mno-' option to
26956     disable use of these instructions.
26957
26958     These extensions are also available as built-in functions: see
26959     *note x86 Built-in Functions::, for details of the functions
26960     enabled and disabled by these switches.
26961
26962     To generate SSE/SSE2 instructions automatically from floating-point
26963     code (as opposed to 387 instructions), see '-mfpmath=sse'.
26964
26965     GCC depresses SSEx instructions when '-mavx' is used.  Instead, it
26966     generates new AVX instructions or AVX equivalence for all SSEx
26967     instructions when needed.
26968
26969     These options enable GCC to use these extended instructions in
26970     generated code, even without '-mfpmath=sse'.  Applications that
26971     perform run-time CPU detection must compile separate files for each
26972     supported architecture, using the appropriate flags.  In
26973     particular, the file containing the CPU detection code should be
26974     compiled without these options.
26975
26976'-mdump-tune-features'
26977     This option instructs GCC to dump the names of the x86 performance
26978     tuning features and default settings.  The names can be used in
26979     '-mtune-ctrl=FEATURE-LIST'.
26980
26981'-mtune-ctrl=FEATURE-LIST'
26982     This option is used to do fine grain control of x86 code generation
26983     features.  FEATURE-LIST is a comma separated list of FEATURE names.
26984     See also '-mdump-tune-features'.  When specified, the FEATURE is
26985     turned on if it is not preceded with '^', otherwise, it is turned
26986     off.  '-mtune-ctrl=FEATURE-LIST' is intended to be used by GCC
26987     developers.  Using it may lead to code paths not covered by testing
26988     and can potentially result in compiler ICEs or runtime errors.
26989
26990'-mno-default'
26991     This option instructs GCC to turn off all tunable features.  See
26992     also '-mtune-ctrl=FEATURE-LIST' and '-mdump-tune-features'.
26993
26994'-mcld'
26995     This option instructs GCC to emit a 'cld' instruction in the
26996     prologue of functions that use string instructions.  String
26997     instructions depend on the DF flag to select between autoincrement
26998     or autodecrement mode.  While the ABI specifies the DF flag to be
26999     cleared on function entry, some operating systems violate this
27000     specification by not clearing the DF flag in their exception
27001     dispatchers.  The exception handler can be invoked with the DF flag
27002     set, which leads to wrong direction mode when string instructions
27003     are used.  This option can be enabled by default on 32-bit x86
27004     targets by configuring GCC with the '--enable-cld' configure
27005     option.  Generation of 'cld' instructions can be suppressed with
27006     the '-mno-cld' compiler option in this case.
27007
27008'-mvzeroupper'
27009     This option instructs GCC to emit a 'vzeroupper' instruction before
27010     a transfer of control flow out of the function to minimize the AVX
27011     to SSE transition penalty as well as remove unnecessary 'zeroupper'
27012     intrinsics.
27013
27014'-mprefer-avx128'
27015     This option instructs GCC to use 128-bit AVX instructions instead
27016     of 256-bit AVX instructions in the auto-vectorizer.
27017
27018'-mprefer-vector-width=OPT'
27019     This option instructs GCC to use OPT-bit vector width in
27020     instructions instead of default on the selected platform.
27021
27022     'none'
27023          No extra limitations applied to GCC other than defined by the
27024          selected platform.
27025
27026     '128'
27027          Prefer 128-bit vector width for instructions.
27028
27029     '256'
27030          Prefer 256-bit vector width for instructions.
27031
27032     '512'
27033          Prefer 512-bit vector width for instructions.
27034
27035'-mcx16'
27036     This option enables GCC to generate 'CMPXCHG16B' instructions in
27037     64-bit code to implement compare-and-exchange operations on 16-byte
27038     aligned 128-bit objects.  This is useful for atomic updates of data
27039     structures exceeding one machine word in size.  The compiler uses
27040     this instruction to implement *note __sync Builtins::.  However,
27041     for *note __atomic Builtins:: operating on 128-bit integers, a
27042     library call is always used.
27043
27044'-msahf'
27045     This option enables generation of 'SAHF' instructions in 64-bit
27046     code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
27047     the introduction of Pentium 4 G1 step in December 2005, lacked the
27048     'LAHF' and 'SAHF' instructions which are supported by AMD64.  These
27049     are load and store instructions, respectively, for certain status
27050     flags.  In 64-bit mode, the 'SAHF' instruction is used to optimize
27051     'fmod', 'drem', and 'remainder' built-in functions; see *note Other
27052     Builtins:: for details.
27053
27054'-mmovbe'
27055     This option enables use of the 'movbe' instruction to implement
27056     '__builtin_bswap32' and '__builtin_bswap64'.
27057
27058'-mshstk'
27059     The '-mshstk' option enables shadow stack built-in functions from
27060     x86 Control-flow Enforcement Technology (CET).
27061
27062'-mcrc32'
27063     This option enables built-in functions '__builtin_ia32_crc32qi',
27064     '__builtin_ia32_crc32hi', '__builtin_ia32_crc32si' and
27065     '__builtin_ia32_crc32di' to generate the 'crc32' machine
27066     instruction.
27067
27068'-mrecip'
27069     This option enables use of 'RCPSS' and 'RSQRTSS' instructions (and
27070     their vectorized variants 'RCPPS' and 'RSQRTPS') with an additional
27071     Newton-Raphson step to increase precision instead of 'DIVSS' and
27072     'SQRTSS' (and their vectorized variants) for single-precision
27073     floating-point arguments.  These instructions are generated only
27074     when '-funsafe-math-optimizations' is enabled together with
27075     '-ffinite-math-only' and '-fno-trapping-math'.  Note that while the
27076     throughput of the sequence is higher than the throughput of the
27077     non-reciprocal instruction, the precision of the sequence can be
27078     decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
27079     0.99999994).
27080
27081     Note that GCC implements '1.0f/sqrtf(X)' in terms of 'RSQRTSS' (or
27082     'RSQRTPS') already with '-ffast-math' (or the above option
27083     combination), and doesn't need '-mrecip'.
27084
27085     Also note that GCC emits the above sequence with additional
27086     Newton-Raphson step for vectorized single-float division and
27087     vectorized 'sqrtf(X)' already with '-ffast-math' (or the above
27088     option combination), and doesn't need '-mrecip'.
27089
27090'-mrecip=OPT'
27091     This option controls which reciprocal estimate instructions may be
27092     used.  OPT is a comma-separated list of options, which may be
27093     preceded by a '!' to invert the option:
27094
27095     'all'
27096          Enable all estimate instructions.
27097
27098     'default'
27099          Enable the default instructions, equivalent to '-mrecip'.
27100
27101     'none'
27102          Disable all estimate instructions, equivalent to '-mno-recip'.
27103
27104     'div'
27105          Enable the approximation for scalar division.
27106
27107     'vec-div'
27108          Enable the approximation for vectorized division.
27109
27110     'sqrt'
27111          Enable the approximation for scalar square root.
27112
27113     'vec-sqrt'
27114          Enable the approximation for vectorized square root.
27115
27116     So, for example, '-mrecip=all,!sqrt' enables all of the reciprocal
27117     approximations, except for square root.
27118
27119'-mveclibabi=TYPE'
27120     Specifies the ABI type to use for vectorizing intrinsics using an
27121     external library.  Supported values for TYPE are 'svml' for the
27122     Intel short vector math library and 'acml' for the AMD math core
27123     library.  To use this option, both '-ftree-vectorize' and
27124     '-funsafe-math-optimizations' have to be enabled, and an SVML or
27125     ACML ABI-compatible library must be specified at link time.
27126
27127     GCC currently emits calls to 'vmldExp2', 'vmldLn2', 'vmldLog102',
27128     'vmldPow2', 'vmldTanh2', 'vmldTan2', 'vmldAtan2', 'vmldAtanh2',
27129     'vmldCbrt2', 'vmldSinh2', 'vmldSin2', 'vmldAsinh2', 'vmldAsin2',
27130     'vmldCosh2', 'vmldCos2', 'vmldAcosh2', 'vmldAcos2', 'vmlsExp4',
27131     'vmlsLn4', 'vmlsLog104', 'vmlsPow4', 'vmlsTanh4', 'vmlsTan4',
27132     'vmlsAtan4', 'vmlsAtanh4', 'vmlsCbrt4', 'vmlsSinh4', 'vmlsSin4',
27133     'vmlsAsinh4', 'vmlsAsin4', 'vmlsCosh4', 'vmlsCos4', 'vmlsAcosh4'
27134     and 'vmlsAcos4' for corresponding function type when
27135     '-mveclibabi=svml' is used, and '__vrd2_sin', '__vrd2_cos',
27136     '__vrd2_exp', '__vrd2_log', '__vrd2_log2', '__vrd2_log10',
27137     '__vrs4_sinf', '__vrs4_cosf', '__vrs4_expf', '__vrs4_logf',
27138     '__vrs4_log2f', '__vrs4_log10f' and '__vrs4_powf' for the
27139     corresponding function type when '-mveclibabi=acml' is used.
27140
27141'-mabi=NAME'
27142     Generate code for the specified calling convention.  Permissible
27143     values are 'sysv' for the ABI used on GNU/Linux and other systems,
27144     and 'ms' for the Microsoft ABI. The default is to use the Microsoft
27145     ABI when targeting Microsoft Windows and the SysV ABI on all other
27146     systems.  You can control this behavior for specific functions by
27147     using the function attributes 'ms_abi' and 'sysv_abi'.  *Note
27148     Function Attributes::.
27149
27150'-mforce-indirect-call'
27151     Force all calls to functions to be indirect.  This is useful when
27152     using Intel Processor Trace where it generates more precise timing
27153     information for function calls.
27154
27155'-mmanual-endbr'
27156     Insert ENDBR instruction at function entry only via the 'cf_check'
27157     function attribute.  This is useful when used with the option
27158     '-fcf-protection=branch' to control ENDBR insertion at the function
27159     entry.
27160
27161'-mcall-ms2sysv-xlogues'
27162     Due to differences in 64-bit ABIs, any Microsoft ABI function that
27163     calls a System V ABI function must consider RSI, RDI and XMM6-15 as
27164     clobbered.  By default, the code for saving and restoring these
27165     registers is emitted inline, resulting in fairly lengthy prologues
27166     and epilogues.  Using '-mcall-ms2sysv-xlogues' emits prologues and
27167     epilogues that use stubs in the static portion of libgcc to perform
27168     these saves and restores, thus reducing function size at the cost
27169     of a few extra instructions.
27170
27171'-mtls-dialect=TYPE'
27172     Generate code to access thread-local storage using the 'gnu' or
27173     'gnu2' conventions.  'gnu' is the conservative default; 'gnu2' is
27174     more efficient, but it may add compile- and run-time requirements
27175     that cannot be satisfied on all systems.
27176
27177'-mpush-args'
27178'-mno-push-args'
27179     Use PUSH operations to store outgoing parameters.  This method is
27180     shorter and usually equally fast as method using SUB/MOV operations
27181     and is enabled by default.  In some cases disabling it may improve
27182     performance because of improved scheduling and reduced
27183     dependencies.
27184
27185'-maccumulate-outgoing-args'
27186     If enabled, the maximum amount of space required for outgoing
27187     arguments is computed in the function prologue.  This is faster on
27188     most modern CPUs because of reduced dependencies, improved
27189     scheduling and reduced stack usage when the preferred stack
27190     boundary is not equal to 2.  The drawback is a notable increase in
27191     code size.  This switch implies '-mno-push-args'.
27192
27193'-mthreads'
27194     Support thread-safe exception handling on MinGW. Programs that rely
27195     on thread-safe exception handling must compile and link all code
27196     with the '-mthreads' option.  When compiling, '-mthreads' defines
27197     '-D_MT'; when linking, it links in a special thread helper library
27198     '-lmingwthrd' which cleans up per-thread exception-handling data.
27199
27200'-mms-bitfields'
27201'-mno-ms-bitfields'
27202
27203     Enable/disable bit-field layout compatible with the native
27204     Microsoft Windows compiler.
27205
27206     If 'packed' is used on a structure, or if bit-fields are used, it
27207     may be that the Microsoft ABI lays out the structure differently
27208     than the way GCC normally does.  Particularly when moving packed
27209     data between functions compiled with GCC and the native Microsoft
27210     compiler (either via function call or as data in a file), it may be
27211     necessary to access either format.
27212
27213     This option is enabled by default for Microsoft Windows targets.
27214     This behavior can also be controlled locally by use of variable or
27215     type attributes.  For more information, see *note x86 Variable
27216     Attributes:: and *note x86 Type Attributes::.
27217
27218     The Microsoft structure layout algorithm is fairly simple with the
27219     exception of the bit-field packing.  The padding and alignment of
27220     members of structures and whether a bit-field can straddle a
27221     storage-unit boundary are determine by these rules:
27222
27223       1. Structure members are stored sequentially in the order in
27224          which they are declared: the first member has the lowest
27225          memory address and the last member the highest.
27226
27227       2. Every data object has an alignment requirement.  The alignment
27228          requirement for all data except structures, unions, and arrays
27229          is either the size of the object or the current packing size
27230          (specified with either the 'aligned' attribute or the 'pack'
27231          pragma), whichever is less.  For structures, unions, and
27232          arrays, the alignment requirement is the largest alignment
27233          requirement of its members.  Every object is allocated an
27234          offset so that:
27235
27236               offset % alignment_requirement == 0
27237
27238       3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte
27239          allocation unit if the integral types are the same size and if
27240          the next bit-field fits into the current allocation unit
27241          without crossing the boundary imposed by the common alignment
27242          requirements of the bit-fields.
27243
27244     MSVC interprets zero-length bit-fields in the following ways:
27245
27246       1. If a zero-length bit-field is inserted between two bit-fields
27247          that are normally coalesced, the bit-fields are not coalesced.
27248
27249          For example:
27250
27251               struct
27252                {
27253                  unsigned long bf_1 : 12;
27254                  unsigned long : 0;
27255                  unsigned long bf_2 : 12;
27256                } t1;
27257
27258          The size of 't1' is 8 bytes with the zero-length bit-field.
27259          If the zero-length bit-field were removed, 't1''s size would
27260          be 4 bytes.
27261
27262       2. If a zero-length bit-field is inserted after a bit-field,
27263          'foo', and the alignment of the zero-length bit-field is
27264          greater than the member that follows it, 'bar', 'bar' is
27265          aligned as the type of the zero-length bit-field.
27266
27267          For example:
27268
27269               struct
27270                {
27271                  char foo : 4;
27272                  short : 0;
27273                  char bar;
27274                } t2;
27275
27276               struct
27277                {
27278                  char foo : 4;
27279                  short : 0;
27280                  double bar;
27281                } t3;
27282
27283          For 't2', 'bar' is placed at offset 2, rather than offset 1.
27284          Accordingly, the size of 't2' is 4.  For 't3', the zero-length
27285          bit-field does not affect the alignment of 'bar' or, as a
27286          result, the size of the structure.
27287
27288          Taking this into account, it is important to note the
27289          following:
27290
27291            1. If a zero-length bit-field follows a normal bit-field,
27292               the type of the zero-length bit-field may affect the
27293               alignment of the structure as whole.  For example, 't2'
27294               has a size of 4 bytes, since the zero-length bit-field
27295               follows a normal bit-field, and is of type short.
27296
27297            2. Even if a zero-length bit-field is not followed by a
27298               normal bit-field, it may still affect the alignment of
27299               the structure:
27300
27301                    struct
27302                     {
27303                       char foo : 6;
27304                       long : 0;
27305                     } t4;
27306
27307               Here, 't4' takes up 4 bytes.
27308
27309       3. Zero-length bit-fields following non-bit-field members are
27310          ignored:
27311
27312               struct
27313                {
27314                  char foo;
27315                  long : 0;
27316                  char bar;
27317                } t5;
27318
27319          Here, 't5' takes up 2 bytes.
27320
27321'-mno-align-stringops'
27322     Do not align the destination of inlined string operations.  This
27323     switch reduces code size and improves performance in case the
27324     destination is already aligned, but GCC doesn't know about it.
27325
27326'-minline-all-stringops'
27327     By default GCC inlines string operations only when the destination
27328     is known to be aligned to least a 4-byte boundary.  This enables
27329     more inlining and increases code size, but may improve performance
27330     of code that depends on fast 'memcpy' and 'memset' for short
27331     lengths.  The option enables inline expansion of 'strlen' for all
27332     pointer alignments.
27333
27334'-minline-stringops-dynamically'
27335     For string operations of unknown size, use run-time checks with
27336     inline code for small blocks and a library call for large blocks.
27337
27338'-mstringop-strategy=ALG'
27339     Override the internal decision heuristic for the particular
27340     algorithm to use for inlining string operations.  The allowed
27341     values for ALG are:
27342
27343     'rep_byte'
27344     'rep_4byte'
27345     'rep_8byte'
27346          Expand using i386 'rep' prefix of the specified size.
27347
27348     'byte_loop'
27349     'loop'
27350     'unrolled_loop'
27351          Expand into an inline loop.
27352
27353     'libcall'
27354          Always use a library call.
27355
27356'-mmemcpy-strategy=STRATEGY'
27357     Override the internal decision heuristic to decide if
27358     '__builtin_memcpy' should be inlined and what inline algorithm to
27359     use when the expected size of the copy operation is known.
27360     STRATEGY is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN
27361     triplets.  ALG is specified in '-mstringop-strategy', MAX_SIZE
27362     specifies the max byte size with which inline algorithm ALG is
27363     allowed.  For the last triplet, the MAX_SIZE must be '-1'.  The
27364     MAX_SIZE of the triplets in the list must be specified in
27365     increasing order.  The minimal byte size for ALG is '0' for the
27366     first triplet and 'MAX_SIZE + 1' of the preceding range.
27367
27368'-mmemset-strategy=STRATEGY'
27369     The option is similar to '-mmemcpy-strategy=' except that it is to
27370     control '__builtin_memset' expansion.
27371
27372'-momit-leaf-frame-pointer'
27373     Don't keep the frame pointer in a register for leaf functions.
27374     This avoids the instructions to save, set up, and restore frame
27375     pointers and makes an extra register available in leaf functions.
27376     The option '-fomit-leaf-frame-pointer' removes the frame pointer
27377     for leaf functions, which might make debugging harder.
27378
27379'-mtls-direct-seg-refs'
27380'-mno-tls-direct-seg-refs'
27381     Controls whether TLS variables may be accessed with offsets from
27382     the TLS segment register ('%gs' for 32-bit, '%fs' for 64-bit), or
27383     whether the thread base pointer must be added.  Whether or not this
27384     is valid depends on the operating system, and whether it maps the
27385     segment to cover the entire TLS area.
27386
27387     For systems that use the GNU C Library, the default is on.
27388
27389'-msse2avx'
27390'-mno-sse2avx'
27391     Specify that the assembler should encode SSE instructions with VEX
27392     prefix.  The option '-mavx' turns this on by default.
27393
27394'-mfentry'
27395'-mno-fentry'
27396     If profiling is active ('-pg'), put the profiling counter call
27397     before the prologue.  Note: On x86 architectures the attribute
27398     'ms_hook_prologue' isn't possible at the moment for '-mfentry' and
27399     '-pg'.
27400
27401'-mrecord-mcount'
27402'-mno-record-mcount'
27403     If profiling is active ('-pg'), generate a __mcount_loc section
27404     that contains pointers to each profiling call.  This is useful for
27405     automatically patching and out calls.
27406
27407'-mnop-mcount'
27408'-mno-nop-mcount'
27409     If profiling is active ('-pg'), generate the calls to the profiling
27410     functions as NOPs.  This is useful when they should be patched in
27411     later dynamically.  This is likely only useful together with
27412     '-mrecord-mcount'.
27413
27414'-minstrument-return=TYPE'
27415     Instrument function exit in -pg -mfentry instrumented functions
27416     with call to specified function.  This only instruments true
27417     returns ending with ret, but not sibling calls ending with jump.
27418     Valid types are NONE to not instrument, CALL to generate a call to
27419     __return__, or NOP5 to generate a 5 byte nop.
27420
27421'-mrecord-return'
27422'-mno-record-return'
27423     Generate a __return_loc section pointing to all return
27424     instrumentation code.
27425
27426'-mfentry-name=NAME'
27427     Set name of __fentry__ symbol called at function entry for -pg
27428     -mfentry functions.
27429
27430'-mfentry-section=NAME'
27431     Set name of section to record -mrecord-mcount calls (default
27432     __mcount_loc).
27433
27434'-mskip-rax-setup'
27435'-mno-skip-rax-setup'
27436     When generating code for the x86-64 architecture with SSE
27437     extensions disabled, '-mskip-rax-setup' can be used to skip setting
27438     up RAX register when there are no variable arguments passed in
27439     vector registers.
27440
27441     *Warning:* Since RAX register is used to avoid unnecessarily saving
27442     vector registers on stack when passing variable arguments, the
27443     impacts of this option are callees may waste some stack space,
27444     misbehave or jump to a random location.  GCC 4.4 or newer don't
27445     have those issues, regardless the RAX register value.
27446
27447'-m8bit-idiv'
27448'-mno-8bit-idiv'
27449     On some processors, like Intel Atom, 8-bit unsigned integer divide
27450     is much faster than 32-bit/64-bit integer divide.  This option
27451     generates a run-time check.  If both dividend and divisor are
27452     within range of 0 to 255, 8-bit unsigned integer divide is used
27453     instead of 32-bit/64-bit integer divide.
27454
27455'-mavx256-split-unaligned-load'
27456'-mavx256-split-unaligned-store'
27457     Split 32-byte AVX unaligned load and store.
27458
27459'-mstack-protector-guard=GUARD'
27460'-mstack-protector-guard-reg=REG'
27461'-mstack-protector-guard-offset=OFFSET'
27462     Generate stack protection code using canary at GUARD.  Supported
27463     locations are 'global' for global canary or 'tls' for per-thread
27464     canary in the TLS block (the default).  This option has effect only
27465     when '-fstack-protector' or '-fstack-protector-all' is specified.
27466
27467     With the latter choice the options
27468     '-mstack-protector-guard-reg=REG' and
27469     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
27470     segment register ('%fs' or '%gs') to use as base register for
27471     reading the canary, and from what offset from that base register.
27472     The default for those is as specified in the relevant ABI.
27473
27474'-mgeneral-regs-only'
27475     Generate code that uses only the general-purpose registers.  This
27476     prevents the compiler from using floating-point, vector, mask and
27477     bound registers.
27478
27479'-mindirect-branch=CHOICE'
27480     Convert indirect call and jump with CHOICE.  The default is 'keep',
27481     which keeps indirect call and jump unmodified.  'thunk' converts
27482     indirect call and jump to call and return thunk.  'thunk-inline'
27483     converts indirect call and jump to inlined call and return thunk.
27484     'thunk-extern' converts indirect call and jump to external call and
27485     return thunk provided in a separate object file.  You can control
27486     this behavior for a specific function by using the function
27487     attribute 'indirect_branch'.  *Note Function Attributes::.
27488
27489     Note that '-mcmodel=large' is incompatible with
27490     '-mindirect-branch=thunk' and '-mindirect-branch=thunk-extern'
27491     since the thunk function may not be reachable in the large code
27492     model.
27493
27494     Note that '-mindirect-branch=thunk-extern' is compatible with
27495     '-fcf-protection=branch' since the external thunk can be made to
27496     enable control-flow check.
27497
27498'-mfunction-return=CHOICE'
27499     Convert function return with CHOICE.  The default is 'keep', which
27500     keeps function return unmodified.  'thunk' converts function return
27501     to call and return thunk.  'thunk-inline' converts function return
27502     to inlined call and return thunk.  'thunk-extern' converts function
27503     return to external call and return thunk provided in a separate
27504     object file.  You can control this behavior for a specific function
27505     by using the function attribute 'function_return'.  *Note Function
27506     Attributes::.
27507
27508     Note that '-mindirect-return=thunk-extern' is compatible with
27509     '-fcf-protection=branch' since the external thunk can be made to
27510     enable control-flow check.
27511
27512     Note that '-mcmodel=large' is incompatible with
27513     '-mfunction-return=thunk' and '-mfunction-return=thunk-extern'
27514     since the thunk function may not be reachable in the large code
27515     model.
27516
27517'-mindirect-branch-register'
27518     Force indirect call and jump via register.
27519
27520 These '-m' switches are supported in addition to the above on x86-64
27521processors in 64-bit environments.
27522
27523'-m32'
27524'-m64'
27525'-mx32'
27526'-m16'
27527'-miamcu'
27528     Generate code for a 16-bit, 32-bit or 64-bit environment.  The
27529     '-m32' option sets 'int', 'long', and pointer types to 32 bits, and
27530     generates code that runs in 32-bit mode.
27531
27532     The '-m64' option sets 'int' to 32 bits and 'long' and pointer
27533     types to 64 bits, and generates code for the x86-64 architecture.
27534     For Darwin only the '-m64' option also turns off the '-fno-pic' and
27535     '-mdynamic-no-pic' options.
27536
27537     The '-mx32' option sets 'int', 'long', and pointer types to 32
27538     bits, and generates code for the x86-64 architecture.
27539
27540     The '-m16' option is the same as '-m32', except for that it outputs
27541     the '.code16gcc' assembly directive at the beginning of the
27542     assembly output so that the binary can run in 16-bit mode.
27543
27544     The '-miamcu' option generates code which conforms to Intel MCU
27545     psABI. It requires the '-m32' option to be turned on.
27546
27547'-mno-red-zone'
27548     Do not use a so-called "red zone" for x86-64 code.  The red zone is
27549     mandated by the x86-64 ABI; it is a 128-byte area beyond the
27550     location of the stack pointer that is not modified by signal or
27551     interrupt handlers and therefore can be used for temporary data
27552     without adjusting the stack pointer.  The flag '-mno-red-zone'
27553     disables this red zone.
27554
27555'-mcmodel=small'
27556     Generate code for the small code model: the program and its symbols
27557     must be linked in the lower 2 GB of the address space.  Pointers
27558     are 64 bits.  Programs can be statically or dynamically linked.
27559     This is the default code model.
27560
27561'-mcmodel=kernel'
27562     Generate code for the kernel code model.  The kernel runs in the
27563     negative 2 GB of the address space.  This model has to be used for
27564     Linux kernel code.
27565
27566'-mcmodel=medium'
27567     Generate code for the medium model: the program is linked in the
27568     lower 2 GB of the address space.  Small symbols are also placed
27569     there.  Symbols with sizes larger than '-mlarge-data-threshold' are
27570     put into large data or BSS sections and can be located above 2GB.
27571     Programs can be statically or dynamically linked.
27572
27573'-mcmodel=large'
27574     Generate code for the large model.  This model makes no assumptions
27575     about addresses and sizes of sections.
27576
27577'-maddress-mode=long'
27578     Generate code for long address mode.  This is only supported for
27579     64-bit and x32 environments.  It is the default address mode for
27580     64-bit environments.
27581
27582'-maddress-mode=short'
27583     Generate code for short address mode.  This is only supported for
27584     32-bit and x32 environments.  It is the default address mode for
27585     32-bit and x32 environments.
27586
27587
27588File: gcc.info,  Node: x86 Windows Options,  Next: Xstormy16 Options,  Prev: x86 Options,  Up: Submodel Options
27589
275903.19.60 x86 Windows Options
27591---------------------------
27592
27593These additional options are available for Microsoft Windows targets:
27594
27595'-mconsole'
27596     This option specifies that a console application is to be
27597     generated, by instructing the linker to set the PE header subsystem
27598     type required for console applications.  This option is available
27599     for Cygwin and MinGW targets and is enabled by default on those
27600     targets.
27601
27602'-mdll'
27603     This option is available for Cygwin and MinGW targets.  It
27604     specifies that a DLL--a dynamic link library--is to be generated,
27605     enabling the selection of the required runtime startup object and
27606     entry point.
27607
27608'-mnop-fun-dllimport'
27609     This option is available for Cygwin and MinGW targets.  It
27610     specifies that the 'dllimport' attribute should be ignored.
27611
27612'-mthread'
27613     This option is available for MinGW targets.  It specifies that
27614     MinGW-specific thread support is to be used.
27615
27616'-municode'
27617     This option is available for MinGW-w64 targets.  It causes the
27618     'UNICODE' preprocessor macro to be predefined, and chooses
27619     Unicode-capable runtime startup code.
27620
27621'-mwin32'
27622     This option is available for Cygwin and MinGW targets.  It
27623     specifies that the typical Microsoft Windows predefined macros are
27624     to be set in the pre-processor, but does not influence the choice
27625     of runtime library/startup code.
27626
27627'-mwindows'
27628     This option is available for Cygwin and MinGW targets.  It
27629     specifies that a GUI application is to be generated by instructing
27630     the linker to set the PE header subsystem type appropriately.
27631
27632'-fno-set-stack-executable'
27633     This option is available for MinGW targets.  It specifies that the
27634     executable flag for the stack used by nested functions isn't set.
27635     This is necessary for binaries running in kernel mode of Microsoft
27636     Windows, as there the User32 API, which is used to set executable
27637     privileges, isn't available.
27638
27639'-fwritable-relocated-rdata'
27640     This option is available for MinGW and Cygwin targets.  It
27641     specifies that relocated-data in read-only section is put into the
27642     '.data' section.  This is a necessary for older runtimes not
27643     supporting modification of '.rdata' sections for pseudo-relocation.
27644
27645'-mpe-aligned-commons'
27646     This option is available for Cygwin and MinGW targets.  It
27647     specifies that the GNU extension to the PE file format that permits
27648     the correct alignment of COMMON variables should be used when
27649     generating code.  It is enabled by default if GCC detects that the
27650     target assembler found during configuration supports the feature.
27651
27652 See also under *note x86 Options:: for standard options.
27653
27654
27655File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86 Windows Options,  Up: Submodel Options
27656
276573.19.61 Xstormy16 Options
27658-------------------------
27659
27660These options are defined for Xstormy16:
27661
27662'-msim'
27663     Choose startup files and linker script suitable for the simulator.
27664
27665
27666File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
27667
276683.19.62 Xtensa Options
27669----------------------
27670
27671These options are supported for Xtensa targets:
27672
27673'-mconst16'
27674'-mno-const16'
27675     Enable or disable use of 'CONST16' instructions for loading
27676     constant values.  The 'CONST16' instruction is currently not a
27677     standard option from Tensilica.  When enabled, 'CONST16'
27678     instructions are always used in place of the standard 'L32R'
27679     instructions.  The use of 'CONST16' is enabled by default only if
27680     the 'L32R' instruction is not available.
27681
27682'-mfused-madd'
27683'-mno-fused-madd'
27684     Enable or disable use of fused multiply/add and multiply/subtract
27685     instructions in the floating-point option.  This has no effect if
27686     the floating-point option is not also enabled.  Disabling fused
27687     multiply/add and multiply/subtract instructions forces the compiler
27688     to use separate instructions for the multiply and add/subtract
27689     operations.  This may be desirable in some cases where strict IEEE
27690     754-compliant results are required: the fused multiply add/subtract
27691     instructions do not round the intermediate result, thereby
27692     producing results with _more_ bits of precision than specified by
27693     the IEEE standard.  Disabling fused multiply add/subtract
27694     instructions also ensures that the program output is not sensitive
27695     to the compiler's ability to combine multiply and add/subtract
27696     operations.
27697
27698'-mserialize-volatile'
27699'-mno-serialize-volatile'
27700     When this option is enabled, GCC inserts 'MEMW' instructions before
27701     'volatile' memory references to guarantee sequential consistency.
27702     The default is '-mserialize-volatile'.  Use
27703     '-mno-serialize-volatile' to omit the 'MEMW' instructions.
27704
27705'-mforce-no-pic'
27706     For targets, like GNU/Linux, where all user-mode Xtensa code must
27707     be position-independent code (PIC), this option disables PIC for
27708     compiling kernel code.
27709
27710'-mtext-section-literals'
27711'-mno-text-section-literals'
27712     These options control the treatment of literal pools.  The default
27713     is '-mno-text-section-literals', which places literals in a
27714     separate section in the output file.  This allows the literal pool
27715     to be placed in a data RAM/ROM, and it also allows the linker to
27716     combine literal pools from separate object files to remove
27717     redundant literals and improve code size.  With
27718     '-mtext-section-literals', the literals are interspersed in the
27719     text section in order to keep them as close as possible to their
27720     references.  This may be necessary for large assembly files.
27721     Literals for each function are placed right before that function.
27722
27723'-mauto-litpools'
27724'-mno-auto-litpools'
27725     These options control the treatment of literal pools.  The default
27726     is '-mno-auto-litpools', which places literals in a separate
27727     section in the output file unless '-mtext-section-literals' is
27728     used.  With '-mauto-litpools' the literals are interspersed in the
27729     text section by the assembler.  Compiler does not produce explicit
27730     '.literal' directives and loads literals into registers with 'MOVI'
27731     instructions instead of 'L32R' to let the assembler do relaxation
27732     and place literals as necessary.  This option allows assembler to
27733     create several literal pools per function and assemble very big
27734     functions, which may not be possible with
27735     '-mtext-section-literals'.
27736
27737'-mtarget-align'
27738'-mno-target-align'
27739     When this option is enabled, GCC instructs the assembler to
27740     automatically align instructions to reduce branch penalties at the
27741     expense of some code density.  The assembler attempts to widen
27742     density instructions to align branch targets and the instructions
27743     following call instructions.  If there are not enough preceding
27744     safe density instructions to align a target, no widening is
27745     performed.  The default is '-mtarget-align'.  These options do not
27746     affect the treatment of auto-aligned instructions like 'LOOP',
27747     which the assembler always aligns, either by widening density
27748     instructions or by inserting NOP instructions.
27749
27750'-mlongcalls'
27751'-mno-longcalls'
27752     When this option is enabled, GCC instructs the assembler to
27753     translate direct calls to indirect calls unless it can determine
27754     that the target of a direct call is in the range allowed by the
27755     call instruction.  This translation typically occurs for calls to
27756     functions in other source files.  Specifically, the assembler
27757     translates a direct 'CALL' instruction into an 'L32R' followed by a
27758     'CALLX' instruction.  The default is '-mno-longcalls'.  This option
27759     should be used in programs where the call target can potentially be
27760     out of range.  This option is implemented in the assembler, not the
27761     compiler, so the assembly code generated by GCC still shows direct
27762     call instructions--look at the disassembled object code to see the
27763     actual instructions.  Note that the assembler uses an indirect call
27764     for every cross-file call, not just those that really are out of
27765     range.
27766
27767
27768File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
27769
277703.19.63 zSeries Options
27771-----------------------
27772
27773These are listed under *Note S/390 and zSeries Options::.
27774
27775
27776File: gcc.info,  Node: Spec Files,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
27777
277783.20 Specifying Subprocesses and the Switches to Pass to Them
27779=============================================================
27780
27781'gcc' is a driver program.  It performs its job by invoking a sequence
27782of other programs to do the work of compiling, assembling and linking.
27783GCC interprets its command-line parameters and uses these to deduce
27784which programs it should invoke, and which command-line options it ought
27785to place on their command lines.  This behavior is controlled by "spec
27786strings".  In most cases there is one spec string for each program that
27787GCC can invoke, but a few programs have multiple spec strings to control
27788their behavior.  The spec strings built into GCC can be overridden by
27789using the '-specs=' command-line switch to specify a spec file.
27790
27791 "Spec files" are plain-text files that are used to construct spec
27792strings.  They consist of a sequence of directives separated by blank
27793lines.  The type of directive is determined by the first non-whitespace
27794character on the line, which can be one of the following:
27795
27796'%COMMAND'
27797     Issues a COMMAND to the spec file processor.  The commands that can
27798     appear here are:
27799
27800     '%include <FILE>'
27801          Search for FILE and insert its text at the current point in
27802          the specs file.
27803
27804     '%include_noerr <FILE>'
27805          Just like '%include', but do not generate an error message if
27806          the include file cannot be found.
27807
27808     '%rename OLD_NAME NEW_NAME'
27809          Rename the spec string OLD_NAME to NEW_NAME.
27810
27811'*[SPEC_NAME]:'
27812     This tells the compiler to create, override or delete the named
27813     spec string.  All lines after this directive up to the next
27814     directive or blank line are considered to be the text for the spec
27815     string.  If this results in an empty string then the spec is
27816     deleted.  (Or, if the spec did not exist, then nothing happens.)
27817     Otherwise, if the spec does not currently exist a new spec is
27818     created.  If the spec does exist then its contents are overridden
27819     by the text of this directive, unless the first character of that
27820     text is the '+' character, in which case the text is appended to
27821     the spec.
27822
27823'[SUFFIX]:'
27824     Creates a new '[SUFFIX] spec' pair.  All lines after this directive
27825     and up to the next directive or blank line are considered to make
27826     up the spec string for the indicated suffix.  When the compiler
27827     encounters an input file with the named suffix, it processes the
27828     spec string in order to work out how to compile that file.  For
27829     example:
27830
27831          .ZZ:
27832          z-compile -input %i
27833
27834     This says that any input file whose name ends in '.ZZ' should be
27835     passed to the program 'z-compile', which should be invoked with the
27836     command-line switch '-input' and with the result of performing the
27837     '%i' substitution.  (See below.)
27838
27839     As an alternative to providing a spec string, the text following a
27840     suffix directive can be one of the following:
27841
27842     '@LANGUAGE'
27843          This says that the suffix is an alias for a known LANGUAGE.
27844          This is similar to using the '-x' command-line switch to GCC
27845          to specify a language explicitly.  For example:
27846
27847               .ZZ:
27848               @c++
27849
27850          Says that .ZZ files are, in fact, C++ source files.
27851
27852     '#NAME'
27853          This causes an error messages saying:
27854
27855               NAME compiler not installed on this system.
27856
27857     GCC already has an extensive list of suffixes built into it.  This
27858     directive adds an entry to the end of the list of suffixes, but
27859     since the list is searched from the end backwards, it is
27860     effectively possible to override earlier entries using this
27861     technique.
27862
27863 GCC has the following spec strings built into it.  Spec files can
27864override these strings or create their own.  Note that individual
27865targets can also add their own spec strings to this list.
27866
27867     asm          Options to pass to the assembler
27868     asm_final    Options to pass to the assembler post-processor
27869     cpp          Options to pass to the C preprocessor
27870     cc1          Options to pass to the C compiler
27871     cc1plus      Options to pass to the C++ compiler
27872     endfile      Object files to include at the end of the link
27873     link         Options to pass to the linker
27874     lib          Libraries to include on the command line to the linker
27875     libgcc       Decides which GCC support library to pass to the linker
27876     linker       Sets the name of the linker
27877     predefines   Defines to be passed to the C preprocessor
27878     signed_char  Defines to pass to CPP to say whether char is signed
27879                  by default
27880     startfile    Object files to include at the start of the link
27881
27882 Here is a small example of a spec file:
27883
27884     %rename lib                 old_lib
27885
27886     *lib:
27887     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
27888
27889 This example renames the spec called 'lib' to 'old_lib' and then
27890overrides the previous definition of 'lib' with a new one.  The new
27891definition adds in some extra command-line options before including the
27892text of the old definition.
27893
27894 "Spec strings" are a list of command-line options to be passed to their
27895corresponding program.  In addition, the spec strings can contain
27896'%'-prefixed sequences to substitute variable text or to conditionally
27897insert text into the command line.  Using these constructs it is
27898possible to generate quite complex command lines.
27899
27900 Here is a table of all defined '%'-sequences for spec strings.  Note
27901that spaces are not generated automatically around the results of
27902expanding these sequences.  Therefore you can concatenate them together
27903or combine them with constant text in a single argument.
27904
27905'%%'
27906     Substitute one '%' into the program name or argument.
27907
27908'%i'
27909     Substitute the name of the input file being processed.
27910
27911'%b'
27912     Substitute the basename of the input file being processed.  This is
27913     the substring up to (and not including) the last period and not
27914     including the directory.
27915
27916'%B'
27917     This is the same as '%b', but include the file suffix (text after
27918     the last period).
27919
27920'%d'
27921     Marks the argument containing or following the '%d' as a temporary
27922     file name, so that that file is deleted if GCC exits successfully.
27923     Unlike '%g', this contributes no text to the argument.
27924
27925'%gSUFFIX'
27926     Substitute a file name that has suffix SUFFIX and is chosen once
27927     per compilation, and mark the argument in the same way as '%d'.  To
27928     reduce exposure to denial-of-service attacks, the file name is now
27929     chosen in a way that is hard to predict even when previously chosen
27930     file names are known.  For example, '%g.s ... %g.o ... %g.s' might
27931     turn into 'ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX matches the
27932     regexp '[.A-Za-z]*' or the special string '%O', which is treated
27933     exactly as if '%O' had been preprocessed.  Previously, '%g' was
27934     simply substituted with a file name chosen once per compilation,
27935     without regard to any appended suffix (which was therefore treated
27936     just like ordinary text), making such attacks more likely to
27937     succeed.
27938
27939'%uSUFFIX'
27940     Like '%g', but generates a new temporary file name each time it
27941     appears instead of once per compilation.
27942
27943'%USUFFIX'
27944     Substitutes the last file name generated with '%uSUFFIX',
27945     generating a new one if there is no such last file name.  In the
27946     absence of any '%uSUFFIX', this is just like '%gSUFFIX', except
27947     they don't share the same suffix _space_, so '%g.s ... %U.s ...
27948     %g.s ... %U.s' involves the generation of two distinct file names,
27949     one for each '%g.s' and another for each '%U.s'.  Previously, '%U'
27950     was simply substituted with a file name chosen for the previous
27951     '%u', without regard to any appended suffix.
27952
27953'%jSUFFIX'
27954     Substitutes the name of the 'HOST_BIT_BUCKET', if any, and if it is
27955     writable, and if '-save-temps' is not used; otherwise, substitute
27956     the name of a temporary file, just like '%u'.  This temporary file
27957     is not meant for communication between processes, but rather as a
27958     junk disposal mechanism.
27959
27960'%|SUFFIX'
27961'%mSUFFIX'
27962     Like '%g', except if '-pipe' is in effect.  In that case '%|'
27963     substitutes a single dash and '%m' substitutes nothing at all.
27964     These are the two most common ways to instruct a program that it
27965     should read from standard input or write to standard output.  If
27966     you need something more elaborate you can use an '%{pipe:'X'}'
27967     construct: see for example 'gcc/fortran/lang-specs.h'.
27968
27969'%.SUFFIX'
27970     Substitutes .SUFFIX for the suffixes of a matched switch's args
27971     when it is subsequently output with '%*'.  SUFFIX is terminated by
27972     the next space or %.
27973
27974'%w'
27975     Marks the argument containing or following the '%w' as the
27976     designated output file of this compilation.  This puts the argument
27977     into the sequence of arguments that '%o' substitutes.
27978
27979'%o'
27980     Substitutes the names of all the output files, with spaces
27981     automatically placed around them.  You should write spaces around
27982     the '%o' as well or the results are undefined.  '%o' is for use in
27983     the specs for running the linker.  Input files whose names have no
27984     recognized suffix are not compiled at all, but they are included
27985     among the output files, so they are linked.
27986
27987'%O'
27988     Substitutes the suffix for object files.  Note that this is handled
27989     specially when it immediately follows '%g, %u, or %U', because of
27990     the need for those to form complete file names.  The handling is
27991     such that '%O' is treated exactly as if it had already been
27992     substituted, except that '%g, %u, and %U' do not currently support
27993     additional SUFFIX characters following '%O' as they do following,
27994     for example, '.o'.
27995
27996'%p'
27997     Substitutes the standard macro predefinitions for the current
27998     target machine.  Use this when running 'cpp'.
27999
28000'%P'
28001     Like '%p', but puts '__' before and after the name of each
28002     predefined macro, except for macros that start with '__' or with
28003     '_L', where L is an uppercase letter.  This is for ISO C.
28004
28005'%I'
28006     Substitute any of '-iprefix' (made from 'GCC_EXEC_PREFIX'),
28007     '-isysroot' (made from 'TARGET_SYSTEM_ROOT'), '-isystem' (made from
28008     'COMPILER_PATH' and '-B' options) and '-imultilib' as necessary.
28009
28010'%s'
28011     Current argument is the name of a library or startup file of some
28012     sort.  Search for that file in a standard list of directories and
28013     substitute the full name found.  The current working directory is
28014     included in the list of directories scanned.
28015
28016'%T'
28017     Current argument is the name of a linker script.  Search for that
28018     file in the current list of directories to scan for libraries.  If
28019     the file is located insert a '--script' option into the command
28020     line followed by the full path name found.  If the file is not
28021     found then generate an error message.  Note: the current working
28022     directory is not searched.
28023
28024'%eSTR'
28025     Print STR as an error message.  STR is terminated by a newline.
28026     Use this when inconsistent options are detected.
28027
28028'%(NAME)'
28029     Substitute the contents of spec string NAME at this point.
28030
28031'%x{OPTION}'
28032     Accumulate an option for '%X'.
28033
28034'%X'
28035     Output the accumulated linker options specified by a '%x' spec
28036     string.
28037
28038'%Y'
28039     Output the accumulated assembler options specified by '-Wa'.
28040
28041'%Z'
28042     Output the accumulated preprocessor options specified by '-Wp'.
28043
28044'%a'
28045     Process the 'asm' spec.  This is used to compute the switches to be
28046     passed to the assembler.
28047
28048'%A'
28049     Process the 'asm_final' spec.  This is a spec string for passing
28050     switches to an assembler post-processor, if such a program is
28051     needed.
28052
28053'%l'
28054     Process the 'link' spec.  This is the spec for computing the
28055     command line passed to the linker.  Typically it makes use of the
28056     '%L %G %S %D and %E' sequences.
28057
28058'%D'
28059     Dump out a '-L' option for each directory that GCC believes might
28060     contain startup files.  If the target supports multilibs then the
28061     current multilib directory is prepended to each of these paths.
28062
28063'%L'
28064     Process the 'lib' spec.  This is a spec string for deciding which
28065     libraries are included on the command line to the linker.
28066
28067'%G'
28068     Process the 'libgcc' spec.  This is a spec string for deciding
28069     which GCC support library is included on the command line to the
28070     linker.
28071
28072'%S'
28073     Process the 'startfile' spec.  This is a spec for deciding which
28074     object files are the first ones passed to the linker.  Typically
28075     this might be a file named 'crt0.o'.
28076
28077'%E'
28078     Process the 'endfile' spec.  This is a spec string that specifies
28079     the last object files that are passed to the linker.
28080
28081'%C'
28082     Process the 'cpp' spec.  This is used to construct the arguments to
28083     be passed to the C preprocessor.
28084
28085'%1'
28086     Process the 'cc1' spec.  This is used to construct the options to
28087     be passed to the actual C compiler ('cc1').
28088
28089'%2'
28090     Process the 'cc1plus' spec.  This is used to construct the options
28091     to be passed to the actual C++ compiler ('cc1plus').
28092
28093'%*'
28094     Substitute the variable part of a matched option.  See below.  Note
28095     that each comma in the substituted string is replaced by a single
28096     space.
28097
28098'%<S'
28099     Remove all occurrences of '-S' from the command line.  Note--this
28100     command is position dependent.  '%' commands in the spec string
28101     before this one see '-S', '%' commands in the spec string after
28102     this one do not.
28103
28104'%:FUNCTION(ARGS)'
28105     Call the named function FUNCTION, passing it ARGS.  ARGS is first
28106     processed as a nested spec string, then split into an argument
28107     vector in the usual fashion.  The function returns a string which
28108     is processed as if it had appeared literally as part of the current
28109     spec.
28110
28111     The following built-in spec functions are provided:
28112
28113     'getenv'
28114          The 'getenv' spec function takes two arguments: an environment
28115          variable name and a string.  If the environment variable is
28116          not defined, a fatal error is issued.  Otherwise, the return
28117          value is the value of the environment variable concatenated
28118          with the string.  For example, if 'TOPDIR' is defined as
28119          '/path/to/top', then:
28120
28121               %:getenv(TOPDIR /include)
28122
28123          expands to '/path/to/top/include'.
28124
28125     'if-exists'
28126          The 'if-exists' spec function takes one argument, an absolute
28127          pathname to a file.  If the file exists, 'if-exists' returns
28128          the pathname.  Here is a small example of its usage:
28129
28130               *startfile:
28131               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
28132
28133     'if-exists-else'
28134          The 'if-exists-else' spec function is similar to the
28135          'if-exists' spec function, except that it takes two arguments.
28136          The first argument is an absolute pathname to a file.  If the
28137          file exists, 'if-exists-else' returns the pathname.  If it
28138          does not exist, it returns the second argument.  This way,
28139          'if-exists-else' can be used to select one file or another,
28140          based on the existence of the first.  Here is a small example
28141          of its usage:
28142
28143               *startfile:
28144               crt0%O%s %:if-exists(crti%O%s) \
28145               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
28146
28147     'replace-outfile'
28148          The 'replace-outfile' spec function takes two arguments.  It
28149          looks for the first argument in the outfiles array and
28150          replaces it with the second argument.  Here is a small example
28151          of its usage:
28152
28153               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
28154
28155     'remove-outfile'
28156          The 'remove-outfile' spec function takes one argument.  It
28157          looks for the first argument in the outfiles array and removes
28158          it.  Here is a small example its usage:
28159
28160               %:remove-outfile(-lm)
28161
28162     'pass-through-libs'
28163          The 'pass-through-libs' spec function takes any number of
28164          arguments.  It finds any '-l' options and any non-options
28165          ending in '.a' (which it assumes are the names of linker input
28166          library archive files) and returns a result containing all the
28167          found arguments each prepended by '-plugin-opt=-pass-through='
28168          and joined by spaces.  This list is intended to be passed to
28169          the LTO linker plugin.
28170
28171               %:pass-through-libs(%G %L %G)
28172
28173     'print-asm-header'
28174          The 'print-asm-header' function takes no arguments and simply
28175          prints a banner like:
28176
28177               Assembler options
28178               =================
28179
28180               Use "-Wa,OPTION" to pass "OPTION" to the assembler.
28181
28182          It is used to separate compiler options from assembler options
28183          in the '--target-help' output.
28184
28185'%{S}'
28186     Substitutes the '-S' switch, if that switch is given to GCC.  If
28187     that switch is not specified, this substitutes nothing.  Note that
28188     the leading dash is omitted when specifying this option, and it is
28189     automatically inserted if the substitution is performed.  Thus the
28190     spec string '%{foo}' matches the command-line option '-foo' and
28191     outputs the command-line option '-foo'.
28192
28193'%W{S}'
28194     Like %{'S'} but mark last argument supplied within as a file to be
28195     deleted on failure.
28196
28197'%{S*}'
28198     Substitutes all the switches specified to GCC whose names start
28199     with '-S', but which also take an argument.  This is used for
28200     switches like '-o', '-D', '-I', etc.  GCC considers '-o foo' as
28201     being one switch whose name starts with 'o'.  %{o*} substitutes
28202     this text, including the space.  Thus two arguments are generated.
28203
28204'%{S*&T*}'
28205     Like %{'S'*}, but preserve order of 'S' and 'T' options (the order
28206     of 'S' and 'T' in the spec is not significant).  There can be any
28207     number of ampersand-separated variables; for each the wild card is
28208     optional.  Useful for CPP as '%{D*&U*&A*}'.
28209
28210'%{S:X}'
28211     Substitutes 'X', if the '-S' switch is given to GCC.
28212
28213'%{!S:X}'
28214     Substitutes 'X', if the '-S' switch is _not_ given to GCC.
28215
28216'%{S*:X}'
28217     Substitutes 'X' if one or more switches whose names start with '-S'
28218     are specified to GCC.  Normally 'X' is substituted only once, no
28219     matter how many such switches appeared.  However, if '%*' appears
28220     somewhere in 'X', then 'X' is substituted once for each matching
28221     switch, with the '%*' replaced by the part of that switch matching
28222     the '*'.
28223
28224     If '%*' appears as the last part of a spec sequence then a space is
28225     added after the end of the last substitution.  If there is more
28226     text in the sequence, however, then a space is not generated.  This
28227     allows the '%*' substitution to be used as part of a larger string.
28228     For example, a spec string like this:
28229
28230          %{mcu=*:--script=%*/memory.ld}
28231
28232     when matching an option like '-mcu=newchip' produces:
28233
28234          --script=newchip/memory.ld
28235
28236'%{.S:X}'
28237     Substitutes 'X', if processing a file with suffix 'S'.
28238
28239'%{!.S:X}'
28240     Substitutes 'X', if _not_ processing a file with suffix 'S'.
28241
28242'%{,S:X}'
28243     Substitutes 'X', if processing a file for language 'S'.
28244
28245'%{!,S:X}'
28246     Substitutes 'X', if not processing a file for language 'S'.
28247
28248'%{S|P:X}'
28249     Substitutes 'X' if either '-S' or '-P' is given to GCC.  This may
28250     be combined with '!', '.', ',', and '*' sequences as well, although
28251     they have a stronger binding than the '|'.  If '%*' appears in 'X',
28252     all of the alternatives must be starred, and only the first
28253     matching alternative is substituted.
28254
28255     For example, a spec string like this:
28256
28257          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
28258
28259     outputs the following command-line options from the following input
28260     command-line options:
28261
28262          fred.c        -foo -baz
28263          jim.d         -bar -boggle
28264          -d fred.c     -foo -baz -boggle
28265          -d jim.d      -bar -baz -boggle
28266
28267'%{S:X; T:Y; :D}'
28268
28269     If 'S' is given to GCC, substitutes 'X'; else if 'T' is given to
28270     GCC, substitutes 'Y'; else substitutes 'D'.  There can be as many
28271     clauses as you need.  This may be combined with '.', ',', '!', '|',
28272     and '*' as needed.
28273
28274 The switch matching text 'S' in a '%{S}', '%{S:X}' or similar construct
28275can use a backslash to ignore the special meaning of the character
28276following it, thus allowing literal matching of a character that is
28277otherwise specially treated.  For example, '%{std=iso9899\:1999:X}'
28278substitutes 'X' if the '-std=iso9899:1999' option is given.
28279
28280 The conditional text 'X' in a '%{S:X}' or similar construct may contain
28281other nested '%' constructs or spaces, or even newlines.  They are
28282processed as usual, as described above.  Trailing white space in 'X' is
28283ignored.  White space may also appear anywhere on the left side of the
28284colon in these constructs, except between '.' or '*' and the
28285corresponding word.
28286
28287 The '-O', '-f', '-m', and '-W' switches are handled specifically in
28288these constructs.  If another value of '-O' or the negated form of a
28289'-f', '-m', or '-W' switch is found later in the command line, the
28290earlier switch value is ignored, except with {'S'*} where 'S' is just
28291one letter, which passes all matching options.
28292
28293 The character '|' at the beginning of the predicate text is used to
28294indicate that a command should be piped to the following command, but
28295only if '-pipe' is specified.
28296
28297 It is built into GCC which switches take arguments and which do not.
28298(You might think it would be useful to generalize this to allow each
28299compiler's spec to say which switches take arguments.  But this cannot
28300be done in a consistent fashion.  GCC cannot even decide which input
28301files have been specified without knowing which switches take arguments,
28302and it must know which input files to compile in order to tell which
28303compilers to run).
28304
28305 GCC also knows implicitly that arguments starting in '-l' are to be
28306treated as compiler output files, and passed to the linker in their
28307proper position among the other output files.
28308
28309
28310File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Spec Files,  Up: Invoking GCC
28311
283123.21 Environment Variables Affecting GCC
28313========================================
28314
28315This section describes several environment variables that affect how GCC
28316operates.  Some of them work by specifying directories or prefixes to
28317use when searching for various kinds of files.  Some are used to specify
28318other aspects of the compilation environment.
28319
28320 Note that you can also specify places to search using options such as
28321'-B', '-I' and '-L' (*note Directory Options::).  These take precedence
28322over places specified using environment variables, which in turn take
28323precedence over those specified by the configuration of GCC.  *Note
28324Controlling the Compilation Driver 'gcc': (gccint)Driver.
28325
28326'LANG'
28327'LC_CTYPE'
28328'LC_MESSAGES'
28329'LC_ALL'
28330     These environment variables control the way that GCC uses
28331     localization information which allows GCC to work with different
28332     national conventions.  GCC inspects the locale categories
28333     'LC_CTYPE' and 'LC_MESSAGES' if it has been configured to do so.
28334     These locale categories can be set to any value supported by your
28335     installation.  A typical value is 'en_GB.UTF-8' for English in the
28336     United Kingdom encoded in UTF-8.
28337
28338     The 'LC_CTYPE' environment variable specifies character
28339     classification.  GCC uses it to determine the character boundaries
28340     in a string; this is needed for some multibyte encodings that
28341     contain quote and escape characters that are otherwise interpreted
28342     as a string end or escape.
28343
28344     The 'LC_MESSAGES' environment variable specifies the language to
28345     use in diagnostic messages.
28346
28347     If the 'LC_ALL' environment variable is set, it overrides the value
28348     of 'LC_CTYPE' and 'LC_MESSAGES'; otherwise, 'LC_CTYPE' and
28349     'LC_MESSAGES' default to the value of the 'LANG' environment
28350     variable.  If none of these variables are set, GCC defaults to
28351     traditional C English behavior.
28352
28353'TMPDIR'
28354     If 'TMPDIR' is set, it specifies the directory to use for temporary
28355     files.  GCC uses temporary files to hold the output of one stage of
28356     compilation which is to be used as input to the next stage: for
28357     example, the output of the preprocessor, which is the input to the
28358     compiler proper.
28359
28360'GCC_COMPARE_DEBUG'
28361     Setting 'GCC_COMPARE_DEBUG' is nearly equivalent to passing
28362     '-fcompare-debug' to the compiler driver.  See the documentation of
28363     this option for more details.
28364
28365'GCC_EXEC_PREFIX'
28366     If 'GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
28367     names of the subprograms executed by the compiler.  No slash is
28368     added when this prefix is combined with the name of a subprogram,
28369     but you can specify a prefix that ends with a slash if you wish.
28370
28371     If 'GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
28372     appropriate prefix to use based on the pathname it is invoked with.
28373
28374     If GCC cannot find the subprogram using the specified prefix, it
28375     tries looking in the usual places for the subprogram.
28376
28377     The default value of 'GCC_EXEC_PREFIX' is 'PREFIX/lib/gcc/' where
28378     PREFIX is the prefix to the installed compiler.  In many cases
28379     PREFIX is the value of 'prefix' when you ran the 'configure'
28380     script.
28381
28382     Other prefixes specified with '-B' take precedence over this
28383     prefix.
28384
28385     This prefix is also used for finding files such as 'crt0.o' that
28386     are used for linking.
28387
28388     In addition, the prefix is used in an unusual way in finding the
28389     directories to search for header files.  For each of the standard
28390     directories whose name normally begins with '/usr/local/lib/gcc'
28391     (more precisely, with the value of 'GCC_INCLUDE_DIR'), GCC tries
28392     replacing that beginning with the specified prefix to produce an
28393     alternate directory name.  Thus, with '-Bfoo/', GCC searches
28394     'foo/bar' just before it searches the standard directory
28395     '/usr/local/lib/bar'.  If a standard directory begins with the
28396     configured PREFIX then the value of PREFIX is replaced by
28397     'GCC_EXEC_PREFIX' when looking for header files.
28398
28399'COMPILER_PATH'
28400     The value of 'COMPILER_PATH' is a colon-separated list of
28401     directories, much like 'PATH'.  GCC tries the directories thus
28402     specified when searching for subprograms, if it cannot find the
28403     subprograms using 'GCC_EXEC_PREFIX'.
28404
28405'LIBRARY_PATH'
28406     The value of 'LIBRARY_PATH' is a colon-separated list of
28407     directories, much like 'PATH'.  When configured as a native
28408     compiler, GCC tries the directories thus specified when searching
28409     for special linker files, if it cannot find them using
28410     'GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
28411     when searching for ordinary libraries for the '-l' option (but
28412     directories specified with '-L' come first).
28413
28414'LANG'
28415     This variable is used to pass locale information to the compiler.
28416     One way in which this information is used is to determine the
28417     character set to be used when character literals, string literals
28418     and comments are parsed in C and C++.  When the compiler is
28419     configured to allow multibyte characters, the following values for
28420     'LANG' are recognized:
28421
28422     'C-JIS'
28423          Recognize JIS characters.
28424     'C-SJIS'
28425          Recognize SJIS characters.
28426     'C-EUCJP'
28427          Recognize EUCJP characters.
28428
28429     If 'LANG' is not defined, or if it has some other value, then the
28430     compiler uses 'mblen' and 'mbtowc' as defined by the default locale
28431     to recognize and translate multibyte characters.
28432
28433Some additional environment variables affect the behavior of the
28434preprocessor.
28435
28436'CPATH'
28437'C_INCLUDE_PATH'
28438'CPLUS_INCLUDE_PATH'
28439'OBJC_INCLUDE_PATH'
28440     Each variable's value is a list of directories separated by a
28441     special character, much like 'PATH', in which to look for header
28442     files.  The special character, 'PATH_SEPARATOR', is
28443     target-dependent and determined at GCC build time.  For Microsoft
28444     Windows-based targets it is a semicolon, and for almost all other
28445     targets it is a colon.
28446
28447     'CPATH' specifies a list of directories to be searched as if
28448     specified with '-I', but after any paths given with '-I' options on
28449     the command line.  This environment variable is used regardless of
28450     which language is being preprocessed.
28451
28452     The remaining environment variables apply only when preprocessing
28453     the particular language indicated.  Each specifies a list of
28454     directories to be searched as if specified with '-isystem', but
28455     after any paths given with '-isystem' options on the command line.
28456
28457     In all these variables, an empty element instructs the compiler to
28458     search its current working directory.  Empty elements can appear at
28459     the beginning or end of a path.  For instance, if the value of
28460     'CPATH' is ':/special/include', that has the same effect as
28461     '-I. -I/special/include'.
28462
28463'DEPENDENCIES_OUTPUT'
28464     If this variable is set, its value specifies how to output
28465     dependencies for Make based on the non-system header files
28466     processed by the compiler.  System header files are ignored in the
28467     dependency output.
28468
28469     The value of 'DEPENDENCIES_OUTPUT' can be just a file name, in
28470     which case the Make rules are written to that file, guessing the
28471     target name from the source file name.  Or the value can have the
28472     form 'FILE TARGET', in which case the rules are written to file
28473     FILE using TARGET as the target name.
28474
28475     In other words, this environment variable is equivalent to
28476     combining the options '-MM' and '-MF' (*note Preprocessor
28477     Options::), with an optional '-MT' switch too.
28478
28479'SUNPRO_DEPENDENCIES'
28480     This variable is the same as 'DEPENDENCIES_OUTPUT' (see above),
28481     except that system header files are not ignored, so it implies '-M'
28482     rather than '-MM'.  However, the dependence on the main input file
28483     is omitted.  *Note Preprocessor Options::.
28484
28485'SOURCE_DATE_EPOCH'
28486     If this variable is set, its value specifies a UNIX timestamp to be
28487     used in replacement of the current date and time in the '__DATE__'
28488     and '__TIME__' macros, so that the embedded timestamps become
28489     reproducible.
28490
28491     The value of 'SOURCE_DATE_EPOCH' must be a UNIX timestamp, defined
28492     as the number of seconds (excluding leap seconds) since 01 Jan 1970
28493     00:00:00 represented in ASCII; identical to the output of ''date
28494     +%s'' on GNU/Linux and other systems that support the '%s'
28495     extension in the 'date' command.
28496
28497     The value should be a known timestamp such as the last modification
28498     time of the source or package and it should be set by the build
28499     process.
28500
28501
28502File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
28503
285043.22 Using Precompiled Headers
28505==============================
28506
28507Often large projects have many header files that are included in every
28508source file.  The time the compiler takes to process these header files
28509over and over again can account for nearly all of the time required to
28510build the project.  To make builds faster, GCC allows you to
28511"precompile" a header file.
28512
28513 To create a precompiled header file, simply compile it as you would any
28514other file, if necessary using the '-x' option to make the driver treat
28515it as a C or C++ header file.  You may want to use a tool like 'make' to
28516keep the precompiled header up-to-date when the headers it contains
28517change.
28518
28519 A precompiled header file is searched for when '#include' is seen in
28520the compilation.  As it searches for the included file (*note Search
28521Path: (cpp)Search Path.) the compiler looks for a precompiled header in
28522each directory just before it looks for the include file in that
28523directory.  The name searched for is the name specified in the
28524'#include' with '.gch' appended.  If the precompiled header file cannot
28525be used, it is ignored.
28526
28527 For instance, if you have '#include "all.h"', and you have 'all.h.gch'
28528in the same directory as 'all.h', then the precompiled header file is
28529used if possible, and the original header is used otherwise.
28530
28531 Alternatively, you might decide to put the precompiled header file in a
28532directory and use '-I' to ensure that directory is searched before (or
28533instead of) the directory containing the original header.  Then, if you
28534want to check that the precompiled header file is always used, you can
28535put a file of the same name as the original header in this directory
28536containing an '#error' command.
28537
28538 This also works with '-include'.  So yet another way to use precompiled
28539headers, good for projects not designed with precompiled header files in
28540mind, is to simply take most of the header files used by a project,
28541include them from another header file, precompile that header file, and
28542'-include' the precompiled header.  If the header files have guards
28543against multiple inclusion, they are skipped because they've already
28544been included (in the precompiled header).
28545
28546 If you need to precompile the same header file for different languages,
28547targets, or compiler options, you can instead make a _directory_ named
28548like 'all.h.gch', and put each precompiled header in the directory,
28549perhaps using '-o'.  It doesn't matter what you call the files in the
28550directory; every precompiled header in the directory is considered.  The
28551first precompiled header encountered in the directory that is valid for
28552this compilation is used; they're searched in no particular order.
28553
28554 There are many other possibilities, limited only by your imagination,
28555good sense, and the constraints of your build system.
28556
28557 A precompiled header file can be used only when these conditions apply:
28558
28559   * Only one precompiled header can be used in a particular
28560     compilation.
28561
28562   * A precompiled header cannot be used once the first C token is seen.
28563     You can have preprocessor directives before a precompiled header;
28564     you cannot include a precompiled header from inside another header.
28565
28566   * The precompiled header file must be produced for the same language
28567     as the current compilation.  You cannot use a C precompiled header
28568     for a C++ compilation.
28569
28570   * The precompiled header file must have been produced by the same
28571     compiler binary as the current compilation is using.
28572
28573   * Any macros defined before the precompiled header is included must
28574     either be defined in the same way as when the precompiled header
28575     was generated, or must not affect the precompiled header, which
28576     usually means that they don't appear in the precompiled header at
28577     all.
28578
28579     The '-D' option is one way to define a macro before a precompiled
28580     header is included; using a '#define' can also do it.  There are
28581     also some options that define macros implicitly, like '-O' and
28582     '-Wdeprecated'; the same rule applies to macros defined this way.
28583
28584   * If debugging information is output when using the precompiled
28585     header, using '-g' or similar, the same kind of debugging
28586     information must have been output when building the precompiled
28587     header.  However, a precompiled header built using '-g' can be used
28588     in a compilation when no debugging information is being output.
28589
28590   * The same '-m' options must generally be used when building and
28591     using the precompiled header.  *Note Submodel Options::, for any
28592     cases where this rule is relaxed.
28593
28594   * Each of the following options must be the same when building and
28595     using the precompiled header:
28596
28597          -fexceptions
28598
28599   * Some other command-line options starting with '-f', '-p', or '-O'
28600     must be defined in the same way as when the precompiled header was
28601     generated.  At present, it's not clear which options are safe to
28602     change and which are not; the safest choice is to use exactly the
28603     same options when generating and using the precompiled header.  The
28604     following are known to be safe:
28605
28606          -fmessage-length=  -fpreprocessed  -fsched-interblock
28607          -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
28608          -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
28609          -pedantic-errors
28610
28611   * Address space layout randomization (ASLR) can lead to not binary
28612     identical PCH files.  If you rely on stable PCH file contents
28613     disable ASLR when generating PCH files.
28614
28615 For all of these except the last, the compiler automatically ignores
28616the precompiled header if the conditions aren't met.  If you find an
28617option combination that doesn't work and doesn't cause the precompiled
28618header to be ignored, please consider filing a bug report, see *note
28619Bugs::.
28620
28621 If you do use differing options when generating and using the
28622precompiled header, the actual behavior is a mixture of the behavior for
28623the options.  For instance, if you use '-g' to generate the precompiled
28624header but not when using it, you may or may not get debugging
28625information for routines in the precompiled header.
28626
28627
28628File: gcc.info,  Node: C Implementation,  Next: C++ Implementation,  Prev: Invoking GCC,  Up: Top
28629
286304 C Implementation-Defined Behavior
28631***********************************
28632
28633A conforming implementation of ISO C is required to document its choice
28634of behavior in each of the areas that are designated "implementation
28635defined".  The following lists all such areas, along with the section
28636numbers from the ISO/IEC 9899:1990, ISO/IEC 9899:1999 and ISO/IEC
286379899:2011 standards.  Some areas are only implementation-defined in one
28638version of the standard.
28639
28640 Some choices depend on the externally determined ABI for the platform
28641(including standard character encodings) which GCC follows; these are
28642listed as "determined by ABI" below.  *Note Binary Compatibility:
28643Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
28644documented in the preprocessor manual.  *Note Implementation-defined
28645behavior: (cpp)Implementation-defined behavior.  Some choices are made
28646by the library and operating system (or other environment when compiling
28647for a freestanding environment); refer to their documentation for
28648details.
28649
28650* Menu:
28651
28652* Translation implementation::
28653* Environment implementation::
28654* Identifiers implementation::
28655* Characters implementation::
28656* Integers implementation::
28657* Floating point implementation::
28658* Arrays and pointers implementation::
28659* Hints implementation::
28660* Structures unions enumerations and bit-fields implementation::
28661* Qualifiers implementation::
28662* Declarators implementation::
28663* Statements implementation::
28664* Preprocessing directives implementation::
28665* Library functions implementation::
28666* Architecture implementation::
28667* Locale-specific behavior implementation::
28668
28669
28670File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
28671
286724.1 Translation
28673===============
28674
28675   * 'How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90,
28676     C99 and C11 5.1.1.3).'
28677
28678     Diagnostics consist of all the output sent to stderr by GCC.
28679
28680   * 'Whether each nonempty sequence of white-space characters other
28681     than new-line is retained or replaced by one space character in
28682     translation phase 3 (C90, C99 and C11 5.1.1.2).'
28683
28684     *Note Implementation-defined behavior: (cpp)Implementation-defined
28685     behavior.
28686
28687
28688File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
28689
286904.2 Environment
28691===============
28692
28693The behavior of most of these points are dependent on the implementation
28694of the C library, and are not defined by GCC itself.
28695
28696   * 'The mapping between physical source file multibyte characters and
28697     the source character set in translation phase 1 (C90, C99 and C11
28698     5.1.1.2).'
28699
28700     *Note Implementation-defined behavior: (cpp)Implementation-defined
28701     behavior.
28702
28703
28704File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
28705
287064.3 Identifiers
28707===============
28708
28709   * 'Which additional multibyte characters may appear in identifiers
28710     and their correspondence to universal character names (C99 and C11
28711     6.4.2).'
28712
28713     *Note Implementation-defined behavior: (cpp)Implementation-defined
28714     behavior.
28715
28716   * 'The number of significant initial characters in an identifier (C90
28717     6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).'
28718
28719     For internal names, all characters are significant.  For external
28720     names, the number of significant characters are defined by the
28721     linker; for almost all targets, all characters are significant.
28722
28723   * 'Whether case distinctions are significant in an identifier with
28724     external linkage (C90 6.1.2).'
28725
28726     This is a property of the linker.  C99 and C11 require that case
28727     distinctions are always significant in identifiers with external
28728     linkage and systems without this property are not supported by GCC.
28729
28730
28731File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
28732
287334.4 Characters
28734==============
28735
28736   * 'The number of bits in a byte (C90 3.4, C99 and C11 3.6).'
28737
28738     Determined by ABI.
28739
28740   * 'The values of the members of the execution character set (C90, C99
28741     and C11 5.2.1).'
28742
28743     Determined by ABI.
28744
28745   * 'The unique value of the member of the execution character set
28746     produced for each of the standard alphabetic escape sequences (C90,
28747     C99 and C11 5.2.2).'
28748
28749     Determined by ABI.
28750
28751   * 'The value of a 'char' object into which has been stored any
28752     character other than a member of the basic execution character set
28753     (C90 6.1.2.5, C99 and C11 6.2.5).'
28754
28755     Determined by ABI.
28756
28757   * 'Which of 'signed char' or 'unsigned char' has the same range,
28758     representation, and behavior as "plain" 'char' (C90 6.1.2.5, C90
28759     6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).'
28760
28761     Determined by ABI.  The options '-funsigned-char' and
28762     '-fsigned-char' change the default.  *Note Options Controlling C
28763     Dialect: C Dialect Options.
28764
28765   * 'The mapping of members of the source character set (in character
28766     constants and string literals) to members of the execution
28767     character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11
28768     5.1.1.2).'
28769
28770     Determined by ABI.
28771
28772   * 'The value of an integer character constant containing more than
28773     one character or containing a character or escape sequence that
28774     does not map to a single-byte execution character (C90 6.1.3.4, C99
28775     and C11 6.4.4.4).'
28776
28777     *Note Implementation-defined behavior: (cpp)Implementation-defined
28778     behavior.
28779
28780   * 'The value of a wide character constant containing more than one
28781     multibyte character or a single multibyte character that maps to
28782     multiple members of the extended execution character set, or
28783     containing a multibyte character or escape sequence not represented
28784     in the extended execution character set (C90 6.1.3.4, C99 and C11
28785     6.4.4.4).'
28786
28787     *Note Implementation-defined behavior: (cpp)Implementation-defined
28788     behavior.
28789
28790   * 'The current locale used to convert a wide character constant
28791     consisting of a single multibyte character that maps to a member of
28792     the extended execution character set into a corresponding wide
28793     character code (C90 6.1.3.4, C99 and C11 6.4.4.4).'
28794
28795     *Note Implementation-defined behavior: (cpp)Implementation-defined
28796     behavior.
28797
28798   * 'Whether differently-prefixed wide string literal tokens can be
28799     concatenated and, if so, the treatment of the resulting multibyte
28800     character sequence (C11 6.4.5).'
28801
28802     Such tokens may not be concatenated.
28803
28804   * 'The current locale used to convert a wide string literal into
28805     corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).'
28806
28807     *Note Implementation-defined behavior: (cpp)Implementation-defined
28808     behavior.
28809
28810   * 'The value of a string literal containing a multibyte character or
28811     escape sequence not represented in the execution character set (C90
28812     6.1.4, C99 and C11 6.4.5).'
28813
28814     *Note Implementation-defined behavior: (cpp)Implementation-defined
28815     behavior.
28816
28817   * 'The encoding of any of 'wchar_t', 'char16_t', and 'char32_t' where
28818     the corresponding standard encoding macro ('__STDC_ISO_10646__',
28819     '__STDC_UTF_16__', or '__STDC_UTF_32__') is not defined (C11
28820     6.10.8.2).'
28821
28822     *Note Implementation-defined behavior: (cpp)Implementation-defined
28823     behavior.  'char16_t' and 'char32_t' literals are always encoded in
28824     UTF-16 and UTF-32 respectively.
28825
28826
28827File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
28828
288294.5 Integers
28830============
28831
28832   * 'Any extended integer types that exist in the implementation (C99
28833     and C11 6.2.5).'
28834
28835     GCC does not support any extended integer types.
28836
28837   * 'Whether signed integer types are represented using sign and
28838     magnitude, two's complement, or one's complement, and whether the
28839     extraordinary value is a trap representation or an ordinary value
28840     (C99 and C11 6.2.6.2).'
28841
28842     GCC supports only two's complement integer types, and all bit
28843     patterns are ordinary values.
28844
28845   * 'The rank of any extended integer type relative to another extended
28846     integer type with the same precision (C99 and C11 6.3.1.1).'
28847
28848     GCC does not support any extended integer types.
28849
28850   * 'The result of, or the signal raised by, converting an integer to a
28851     signed integer type when the value cannot be represented in an
28852     object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).'
28853
28854     For conversion to a type of width N, the value is reduced modulo
28855     2^N to be within range of the type; no signal is raised.
28856
28857   * 'The results of some bitwise operations on signed integers (C90
28858     6.3, C99 and C11 6.5).'
28859
28860     Bitwise operators act on the representation of the value including
28861     both the sign and value bits, where the sign bit is considered
28862     immediately above the highest-value value bit.  Signed '>>' acts on
28863     negative numbers by sign extension.
28864
28865     As an extension to the C language, GCC does not use the latitude
28866     given in C99 and C11 only to treat certain aspects of signed '<<'
28867     as undefined.  However, '-fsanitize=shift' (and
28868     '-fsanitize=undefined') will diagnose such cases.  They are also
28869     diagnosed where constant expressions are required.
28870
28871   * 'The sign of the remainder on integer division (C90 6.3.5).'
28872
28873     GCC always follows the C99 and C11 requirement that the result of
28874     division is truncated towards zero.
28875
28876
28877File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
28878
288794.6 Floating Point
28880==================
28881
28882   * 'The accuracy of the floating-point operations and of the library
28883     functions in '<math.h>' and '<complex.h>' that return
28884     floating-point results (C90, C99 and C11 5.2.4.2.2).'
28885
28886     The accuracy is unknown.
28887
28888   * 'The rounding behaviors characterized by non-standard values of
28889     'FLT_ROUNDS' (C90, C99 and C11 5.2.4.2.2).'
28890
28891     GCC does not use such values.
28892
28893   * 'The evaluation methods characterized by non-standard negative
28894     values of 'FLT_EVAL_METHOD' (C99 and C11 5.2.4.2.2).'
28895
28896     GCC does not use such values.
28897
28898   * 'The direction of rounding when an integer is converted to a
28899     floating-point number that cannot exactly represent the original
28900     value (C90 6.2.1.3, C99 and C11 6.3.1.4).'
28901
28902     C99 Annex F is followed.
28903
28904   * 'The direction of rounding when a floating-point number is
28905     converted to a narrower floating-point number (C90 6.2.1.4, C99 and
28906     C11 6.3.1.5).'
28907
28908     C99 Annex F is followed.
28909
28910   * 'How the nearest representable value or the larger or smaller
28911     representable value immediately adjacent to the nearest
28912     representable value is chosen for certain floating constants (C90
28913     6.1.3.1, C99 and C11 6.4.4.2).'
28914
28915     C99 Annex F is followed.
28916
28917   * 'Whether and how floating expressions are contracted when not
28918     disallowed by the 'FP_CONTRACT' pragma (C99 and C11 6.5).'
28919
28920     Expressions are currently only contracted if '-ffp-contract=fast',
28921     '-funsafe-math-optimizations' or '-ffast-math' are used.  This is
28922     subject to change.
28923
28924   * 'The default state for the 'FENV_ACCESS' pragma (C99 and C11
28925     7.6.1).'
28926
28927     This pragma is not implemented, but the default is to "off" unless
28928     '-frounding-math' is used in which case it is "on".
28929
28930   * 'Additional floating-point exceptions, rounding modes,
28931     environments, and classifications, and their macro names (C99 and
28932     C11 7.6, C99 and C11 7.12).'
28933
28934     This is dependent on the implementation of the C library, and is
28935     not defined by GCC itself.
28936
28937   * 'The default state for the 'FP_CONTRACT' pragma (C99 and C11
28938     7.12.2).'
28939
28940     This pragma is not implemented.  Expressions are currently only
28941     contracted if '-ffp-contract=fast', '-funsafe-math-optimizations'
28942     or '-ffast-math' are used.  This is subject to change.
28943
28944   * 'Whether the "inexact" floating-point exception can be raised when
28945     the rounded result actually does equal the mathematical result in
28946     an IEC 60559 conformant implementation (C99 F.9).'
28947
28948     This is dependent on the implementation of the C library, and is
28949     not defined by GCC itself.
28950
28951   * 'Whether the "underflow" (and "inexact") floating-point exception
28952     can be raised when a result is tiny but not inexact in an IEC 60559
28953     conformant implementation (C99 F.9).'
28954
28955     This is dependent on the implementation of the C library, and is
28956     not defined by GCC itself.
28957
28958
28959File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
28960
289614.7 Arrays and Pointers
28962=======================
28963
28964   * 'The result of converting a pointer to an integer or vice versa
28965     (C90 6.3.4, C99 and C11 6.3.2.3).'
28966
28967     A cast from pointer to integer discards most-significant bits if
28968     the pointer representation is larger than the integer type,
28969     sign-extends(1) if the pointer representation is smaller than the
28970     integer type, otherwise the bits are unchanged.
28971
28972     A cast from integer to pointer discards most-significant bits if
28973     the pointer representation is smaller than the integer type,
28974     extends according to the signedness of the integer type if the
28975     pointer representation is larger than the integer type, otherwise
28976     the bits are unchanged.
28977
28978     When casting from pointer to integer and back again, the resulting
28979     pointer must reference the same object as the original pointer,
28980     otherwise the behavior is undefined.  That is, one may not use
28981     integer arithmetic to avoid the undefined behavior of pointer
28982     arithmetic as proscribed in C99 and C11 6.5.6/8.
28983
28984   * 'The size of the result of subtracting two pointers to elements of
28985     the same array (C90 6.3.6, C99 and C11 6.5.6).'
28986
28987     The value is as specified in the standard and the type is
28988     determined by the ABI.
28989
28990   ---------- Footnotes ----------
28991
28992   (1) Future versions of GCC may zero-extend, or use a target-defined
28993'ptr_extend' pattern.  Do not rely on sign extension.
28994
28995
28996File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
28997
289984.8 Hints
28999=========
29000
29001   * 'The extent to which suggestions made by using the 'register'
29002     storage-class specifier are effective (C90 6.5.1, C99 and C11
29003     6.7.1).'
29004
29005     The 'register' specifier affects code generation only in these
29006     ways:
29007
29008        * When used as part of the register variable extension, see
29009          *note Explicit Register Variables::.
29010
29011        * When '-O0' is in use, the compiler allocates distinct stack
29012          memory for all variables that do not have the 'register'
29013          storage-class specifier; if 'register' is specified, the
29014          variable may have a shorter lifespan than the code would
29015          indicate and may never be placed in memory.
29016
29017        * On some rare x86 targets, 'setjmp' doesn't save the registers
29018          in all circumstances.  In those cases, GCC doesn't allocate
29019          any variables in registers unless they are marked 'register'.
29020
29021   * 'The extent to which suggestions made by using the inline function
29022     specifier are effective (C99 and C11 6.7.4).'
29023
29024     GCC will not inline any functions if the '-fno-inline' option is
29025     used or if '-O0' is used.  Otherwise, GCC may still be unable to
29026     inline a function for many reasons; the '-Winline' option may be
29027     used to determine if a function has not been inlined and why not.
29028
29029
29030File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
29031
290324.9 Structures, Unions, Enumerations, and Bit-Fields
29033====================================================
29034
29035   * 'A member of a union object is accessed using a member of a
29036     different type (C90 6.3.2.3).'
29037
29038     The relevant bytes of the representation of the object are treated
29039     as an object of the type used for the access.  *Note
29040     Type-punning::.  This may be a trap representation.
29041
29042   * 'Whether a "plain" 'int' bit-field is treated as a 'signed int'
29043     bit-field or as an 'unsigned int' bit-field (C90 6.5.2, C90
29044     6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).'
29045
29046     By default it is treated as 'signed int' but this may be changed by
29047     the '-funsigned-bitfields' option.
29048
29049   * 'Allowable bit-field types other than '_Bool', 'signed int', and
29050     'unsigned int' (C99 and C11 6.7.2.1).'
29051
29052     Other integer types, such as 'long int', and enumerated types are
29053     permitted even in strictly conforming mode.
29054
29055   * 'Whether atomic types are permitted for bit-fields (C11 6.7.2.1).'
29056
29057     Atomic types are not permitted for bit-fields.
29058
29059   * 'Whether a bit-field can straddle a storage-unit boundary (C90
29060     6.5.2.1, C99 and C11 6.7.2.1).'
29061
29062     Determined by ABI.
29063
29064   * 'The order of allocation of bit-fields within a unit (C90 6.5.2.1,
29065     C99 and C11 6.7.2.1).'
29066
29067     Determined by ABI.
29068
29069   * 'The alignment of non-bit-field members of structures (C90 6.5.2.1,
29070     C99 and C11 6.7.2.1).'
29071
29072     Determined by ABI.
29073
29074   * 'The integer type compatible with each enumerated type (C90
29075     6.5.2.2, C99 and C11 6.7.2.2).'
29076
29077     Normally, the type is 'unsigned int' if there are no negative
29078     values in the enumeration, otherwise 'int'.  If '-fshort-enums' is
29079     specified, then if there are negative values it is the first of
29080     'signed char', 'short' and 'int' that can represent all the values,
29081     otherwise it is the first of 'unsigned char', 'unsigned short' and
29082     'unsigned int' that can represent all the values.
29083
29084     On some targets, '-fshort-enums' is the default; this is determined
29085     by the ABI.
29086
29087
29088File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
29089
290904.10 Qualifiers
29091===============
29092
29093   * 'What constitutes an access to an object that has
29094     volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).'
29095
29096     Such an object is normally accessed by pointers and used for
29097     accessing hardware.  In most expressions, it is intuitively obvious
29098     what is a read and what is a write.  For example
29099
29100          volatile int *dst = SOMEVALUE;
29101          volatile int *src = SOMEOTHERVALUE;
29102          *dst = *src;
29103
29104     will cause a read of the volatile object pointed to by SRC and
29105     store the value into the volatile object pointed to by DST.  There
29106     is no guarantee that these reads and writes are atomic, especially
29107     for objects larger than 'int'.
29108
29109     However, if the volatile storage is not being modified, and the
29110     value of the volatile storage is not used, then the situation is
29111     less obvious.  For example
29112
29113          volatile int *src = SOMEVALUE;
29114          *src;
29115
29116     According to the C standard, such an expression is an rvalue whose
29117     type is the unqualified version of its original type, i.e. 'int'.
29118     Whether GCC interprets this as a read of the volatile object being
29119     pointed to or only as a request to evaluate the expression for its
29120     side effects depends on this type.
29121
29122     If it is a scalar type, or on most targets an aggregate type whose
29123     only member object is of a scalar type, or a union type whose
29124     member objects are of scalar types, the expression is interpreted
29125     by GCC as a read of the volatile object; in the other cases, the
29126     expression is only evaluated for its side effects.
29127
29128     When an object of an aggregate type, with the same size and
29129     alignment as a scalar type 'S', is the subject of a volatile access
29130     by an assignment expression or an atomic function, the access to it
29131     is performed as if the object's declared type were 'volatile S'.
29132
29133
29134File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
29135
291364.11 Declarators
29137================
29138
29139   * 'The maximum number of declarators that may modify an arithmetic,
29140     structure or union type (C90 6.5.4).'
29141
29142     GCC is only limited by available memory.
29143
29144
29145File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
29146
291474.12 Statements
29148===============
29149
29150   * 'The maximum number of 'case' values in a 'switch' statement (C90
29151     6.6.4.2).'
29152
29153     GCC is only limited by available memory.
29154
29155
29156File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
29157
291584.13 Preprocessing Directives
29159=============================
29160
29161*Note Implementation-defined behavior: (cpp)Implementation-defined
29162behavior, for details of these aspects of implementation-defined
29163behavior.
29164
29165   * 'The locations within '#pragma' directives where header name
29166     preprocessing tokens are recognized (C11 6.4, C11 6.4.7).'
29167
29168   * 'How sequences in both forms of header names are mapped to headers
29169     or external source file names (C90 6.1.7, C99 and C11 6.4.7).'
29170
29171   * 'Whether the value of a character constant in a constant expression
29172     that controls conditional inclusion matches the value of the same
29173     character constant in the execution character set (C90 6.8.1, C99
29174     and C11 6.10.1).'
29175
29176   * 'Whether the value of a single-character character constant in a
29177     constant expression that controls conditional inclusion may have a
29178     negative value (C90 6.8.1, C99 and C11 6.10.1).'
29179
29180   * 'The places that are searched for an included '<>' delimited
29181     header, and how the places are specified or the header is
29182     identified (C90 6.8.2, C99 and C11 6.10.2).'
29183
29184   * 'How the named source file is searched for in an included '""'
29185     delimited header (C90 6.8.2, C99 and C11 6.10.2).'
29186
29187   * 'The method by which preprocessing tokens (possibly resulting from
29188     macro expansion) in a '#include' directive are combined into a
29189     header name (C90 6.8.2, C99 and C11 6.10.2).'
29190
29191   * 'The nesting limit for '#include' processing (C90 6.8.2, C99 and
29192     C11 6.10.2).'
29193
29194   * 'Whether the '#' operator inserts a '\' character before the '\'
29195     character that begins a universal character name in a character
29196     constant or string literal (C99 and C11 6.10.3.2).'
29197
29198   * 'The behavior on each recognized non-'STDC #pragma' directive (C90
29199     6.8.6, C99 and C11 6.10.6).'
29200
29201     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by GCC
29202     on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
29203     details of target-specific pragmas.
29204
29205   * 'The definitions for '__DATE__' and '__TIME__' when respectively,
29206     the date and time of translation are not available (C90 6.8.8, C99
29207     6.10.8, C11 6.10.8.1).'
29208
29209
29210File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
29211
292124.14 Library Functions
29213======================
29214
29215The behavior of most of these points are dependent on the implementation
29216of the C library, and are not defined by GCC itself.
29217
29218   * 'The null pointer constant to which the macro 'NULL' expands (C90
29219     7.1.6, C99 7.17, C11 7.19).'
29220
29221     In '<stddef.h>', 'NULL' expands to '((void *)0)'.  GCC does not
29222     provide the other headers which define 'NULL' and some library
29223     implementations may use other definitions in those headers.
29224
29225
29226File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
29227
292284.15 Architecture
29229=================
29230
29231   * 'The values or expressions assigned to the macros specified in the
29232     headers '<float.h>', '<limits.h>', and '<stdint.h>' (C90, C99 and
29233     C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).'
29234
29235     Determined by ABI.
29236
29237   * 'The result of attempting to indirectly access an object with
29238     automatic or thread storage duration from a thread other than the
29239     one with which it is associated (C11 6.2.4).'
29240
29241     Such accesses are supported, subject to the same requirements for
29242     synchronization for concurrent accesses as for concurrent accesses
29243     to any object.
29244
29245   * 'The number, order, and encoding of bytes in any object (when not
29246     explicitly specified in this International Standard) (C99 and C11
29247     6.2.6.1).'
29248
29249     Determined by ABI.
29250
29251   * 'Whether any extended alignments are supported and the contexts in
29252     which they are supported (C11 6.2.8).'
29253
29254     Extended alignments up to 2^{28} (bytes) are supported for objects
29255     of automatic storage duration.  Alignments supported for objects of
29256     static and thread storage duration are determined by the ABI.
29257
29258   * 'Valid alignment values other than those returned by an _Alignof
29259     expression for fundamental types, if any (C11 6.2.8).'
29260
29261     Valid alignments are powers of 2 up to and including 2^{28}.
29262
29263   * 'The value of the result of the 'sizeof' and '_Alignof' operators
29264     (C90 6.3.3.4, C99 and C11 6.5.3.4).'
29265
29266     Determined by ABI.
29267
29268
29269File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
29270
292714.16 Locale-Specific Behavior
29272=============================
29273
29274The behavior of these points are dependent on the implementation of the
29275C library, and are not defined by GCC itself.
29276
29277
29278File: gcc.info,  Node: C++ Implementation,  Next: C Extensions,  Prev: C Implementation,  Up: Top
29279
292805 C++ Implementation-Defined Behavior
29281*************************************
29282
29283A conforming implementation of ISO C++ is required to document its
29284choice of behavior in each of the areas that are designated
29285"implementation defined".  The following lists all such areas, along
29286with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
2928714882:2003 standards.  Some areas are only implementation-defined in one
29288version of the standard.
29289
29290 Some choices depend on the externally determined ABI for the platform
29291(including standard character encodings) which GCC follows; these are
29292listed as "determined by ABI" below.  *Note Binary Compatibility:
29293Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
29294documented in the preprocessor manual.  *Note Implementation-defined
29295behavior: (cpp)Implementation-defined behavior.  Some choices are
29296documented in the corresponding document for the C language.  *Note C
29297Implementation::.  Some choices are made by the library and operating
29298system (or other environment when compiling for a freestanding
29299environment); refer to their documentation for details.
29300
29301* Menu:
29302
29303* Conditionally-supported behavior::
29304* Exception handling::
29305
29306
29307File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
29308
293095.1 Conditionally-Supported Behavior
29310====================================
29311
29312'Each implementation shall include documentation that identifies all
29313conditionally-supported constructs that it does not support (C++0x
293141.4).'
29315
29316   * 'Whether an argument of class type with a non-trivial copy
29317     constructor or destructor can be passed to ... (C++0x 5.2.2).'
29318
29319     Such argument passing is supported, using the same
29320     pass-by-invisible-reference approach used for normal function
29321     arguments of such types.
29322
29323
29324File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
29325
293265.2 Exception Handling
29327======================
29328
29329   * 'In the situation where no matching handler is found, it is
29330     implementation-defined whether or not the stack is unwound before
29331     std::terminate() is called (C++98 15.5.1).'
29332
29333     The stack is not unwound before std::terminate is called.
29334
29335 c Copyright (C) 1988-2020 Free Software Foundation, Inc.
29336
29337
29338File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C++ Implementation,  Up: Top
29339
293406 Extensions to the C Language Family
29341*************************************
29342
29343GNU C provides several language features not found in ISO standard C.
29344(The '-pedantic' option directs GCC to print a warning message if any of
29345these features is used.)  To test for the availability of these features
29346in conditional compilation, check for a predefined macro '__GNUC__',
29347which is always defined under GCC.
29348
29349 These extensions are available in C and Objective-C.  Most of them are
29350also available in C++.  *Note Extensions to the C++ Language: C++
29351Extensions, for extensions that apply _only_ to C++.
29352
29353 Some features that are in ISO C99 but not C90 or C++ are also, as
29354extensions, accepted by GCC in C90 mode and in C++.
29355
29356* Menu:
29357
29358* Statement Exprs::     Putting statements and declarations inside expressions.
29359* Local Labels::        Labels local to a block.
29360* Labels as Values::    Getting pointers to labels, and computed gotos.
29361* Nested Functions::    Nested function in GNU C.
29362* Nonlocal Gotos::      Nonlocal gotos.
29363* Constructing Calls::  Dispatching a call to another function.
29364* Typeof::              'typeof': referring to the type of an expression.
29365* Conditionals::        Omitting the middle operand of a '?:' expression.
29366* __int128::		128-bit integers--'__int128'.
29367* Long Long::           Double-word integers--'long long int'.
29368* Complex::             Data types for complex numbers.
29369* Floating Types::      Additional Floating Types.
29370* Half-Precision::      Half-Precision Floating Point.
29371* Decimal Float::       Decimal Floating Types.
29372* Hex Floats::          Hexadecimal floating-point constants.
29373* Fixed-Point::         Fixed-Point Types.
29374* Named Address Spaces::Named address spaces.
29375* Zero Length::         Zero-length arrays.
29376* Empty Structures::    Structures with no members.
29377* Variable Length::     Arrays whose length is computed at run time.
29378* Variadic Macros::     Macros with a variable number of arguments.
29379* Escaped Newlines::    Slightly looser rules for escaped newlines.
29380* Subscripting::        Any array can be subscripted, even if not an lvalue.
29381* Pointer Arith::       Arithmetic on 'void'-pointers and function pointers.
29382* Variadic Pointer Args::  Pointer arguments to variadic functions.
29383* Pointers to Arrays::  Pointers to arrays with qualifiers work as expected.
29384* Initializers::        Non-constant initializers.
29385* Compound Literals::   Compound literals give structures, unions
29386                        or arrays as values.
29387* Designated Inits::    Labeling elements of initializers.
29388* Case Ranges::         'case 1 ... 9' and such.
29389* Cast to Union::       Casting to union type from any member of the union.
29390* Mixed Declarations::  Mixing declarations and code.
29391* Function Attributes:: Declaring that functions have no side effects,
29392                        or that they can never return.
29393* Variable Attributes:: Specifying attributes of variables.
29394* Type Attributes::     Specifying attributes of types.
29395* Label Attributes::    Specifying attributes on labels.
29396* Enumerator Attributes:: Specifying attributes on enumerators.
29397* Statement Attributes:: Specifying attributes on statements.
29398* Attribute Syntax::    Formal syntax for attributes.
29399* Function Prototypes:: Prototype declarations and old-style definitions.
29400* C++ Comments::        C++ comments are recognized.
29401* Dollar Signs::        Dollar sign is allowed in identifiers.
29402* Character Escapes::   '\e' stands for the character <ESC>.
29403* Alignment::           Determining the alignment of a function, type or variable.
29404* Inline::              Defining inline functions (as fast as macros).
29405* Volatiles::           What constitutes an access to a volatile object.
29406* Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler.
29407* Alternate Keywords::  '__const__', '__asm__', etc., for header files.
29408* Incomplete Enums::    'enum foo;', with details to follow.
29409* Function Names::      Printable strings which are the name of the current
29410                        function.
29411* Return Address::      Getting the return or frame address of a function.
29412* Vector Extensions::   Using vector instructions through built-in functions.
29413* Offsetof::            Special syntax for implementing 'offsetof'.
29414* __sync Builtins::     Legacy built-in functions for atomic memory access.
29415* __atomic Builtins::   Atomic built-in functions with memory model.
29416* Integer Overflow Builtins:: Built-in functions to perform arithmetics and
29417                        arithmetic overflow checking.
29418* x86 specific memory model extensions for transactional memory:: x86 memory models.
29419* Object Size Checking:: Built-in functions for limited buffer overflow
29420                        checking.
29421* Other Builtins::      Other built-in functions.
29422* Target Builtins::     Built-in functions specific to particular targets.
29423* Target Format Checks:: Format checks specific to particular targets.
29424* Pragmas::             Pragmas accepted by GCC.
29425* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
29426* Thread-Local::        Per-thread variables.
29427* Binary constants::    Binary constants using the '0b' prefix.
29428
29429
29430File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
29431
294326.1 Statements and Declarations in Expressions
29433==============================================
29434
29435A compound statement enclosed in parentheses may appear as an expression
29436in GNU C.  This allows you to use loops, switches, and local variables
29437within an expression.
29438
29439 Recall that a compound statement is a sequence of statements surrounded
29440by braces; in this construct, parentheses go around the braces.  For
29441example:
29442
29443     ({ int y = foo (); int z;
29444        if (y > 0) z = y;
29445        else z = - y;
29446        z; })
29447
29448is a valid (though slightly more complex than necessary) expression for
29449the absolute value of 'foo ()'.
29450
29451 The last thing in the compound statement should be an expression
29452followed by a semicolon; the value of this subexpression serves as the
29453value of the entire construct.  (If you use some other kind of statement
29454last within the braces, the construct has type 'void', and thus
29455effectively no value.)
29456
29457 This feature is especially useful in making macro definitions "safe"
29458(so that they evaluate each operand exactly once).  For example, the
29459"maximum" function is commonly defined as a macro in standard C as
29460follows:
29461
29462     #define max(a,b) ((a) > (b) ? (a) : (b))
29463
29464But this definition computes either A or B twice, with bad results if
29465the operand has side effects.  In GNU C, if you know the type of the
29466operands (here taken as 'int'), you can avoid this problem by defining
29467the macro as follows:
29468
29469     #define maxint(a,b) \
29470       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
29471
29472 Note that introducing variable declarations (as we do in 'maxint') can
29473cause variable shadowing, so while this example using the 'max' macro
29474produces correct results:
29475     int _a = 1, _b = 2, c;
29476     c = max (_a, _b);
29477this example using maxint will not:
29478     int _a = 1, _b = 2, c;
29479     c = maxint (_a, _b);
29480
29481 This problem may for instance occur when we use this pattern
29482recursively, like so:
29483
29484     #define maxint3(a, b, c) \
29485       ({int _a = (a), _b = (b), _c = (c); maxint (maxint (_a, _b), _c); })
29486
29487 Embedded statements are not allowed in constant expressions, such as
29488the value of an enumeration constant, the width of a bit-field, or the
29489initial value of a static variable.
29490
29491 If you don't know the type of the operand, you can still do this, but
29492you must use 'typeof' or '__auto_type' (*note Typeof::).
29493
29494 In G++, the result value of a statement expression undergoes array and
29495function pointer decay, and is returned by value to the enclosing
29496expression.  For instance, if 'A' is a class, then
29497
29498             A a;
29499
29500             ({a;}).Foo ()
29501
29502constructs a temporary 'A' object to hold the result of the statement
29503expression, and that is used to invoke 'Foo'.  Therefore the 'this'
29504pointer observed by 'Foo' is not the address of 'a'.
29505
29506 In a statement expression, any temporaries created within a statement
29507are destroyed at that statement's end.  This makes statement expressions
29508inside macros slightly different from function calls.  In the latter
29509case temporaries introduced during argument evaluation are destroyed at
29510the end of the statement that includes the function call.  In the
29511statement expression case they are destroyed during the statement
29512expression.  For instance,
29513
29514     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
29515     template<typename T> T function(T a) { T b = a; return b + 3; }
29516
29517     void foo ()
29518     {
29519       macro (X ());
29520       function (X ());
29521     }
29522
29523has different places where temporaries are destroyed.  For the 'macro'
29524case, the temporary 'X' is destroyed just after the initialization of
29525'b'.  In the 'function' case that temporary is destroyed when the
29526function returns.
29527
29528 These considerations mean that it is probably a bad idea to use
29529statement expressions of this form in header files that are designed to
29530work with C++.  (Note that some versions of the GNU C Library contained
29531header files using statement expressions that lead to precisely this
29532bug.)
29533
29534 Jumping into a statement expression with 'goto' or using a 'switch'
29535statement outside the statement expression with a 'case' or 'default'
29536label inside the statement expression is not permitted.  Jumping into a
29537statement expression with a computed 'goto' (*note Labels as Values::)
29538has undefined behavior.  Jumping out of a statement expression is
29539permitted, but if the statement expression is part of a larger
29540expression then it is unspecified which other subexpressions of that
29541expression have been evaluated except where the language definition
29542requires certain subexpressions to be evaluated before or after the
29543statement expression.  A 'break' or 'continue' statement inside of a
29544statement expression used in 'while', 'do' or 'for' loop or 'switch'
29545statement condition or 'for' statement init or increment expressions
29546jumps to an outer loop or 'switch' statement if any (otherwise it is an
29547error), rather than to the loop or 'switch' statement in whose condition
29548or init or increment expression it appears.  In any case, as with a
29549function call, the evaluation of a statement expression is not
29550interleaved with the evaluation of other parts of the containing
29551expression.  For example,
29552
29553       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
29554
29555calls 'foo' and 'bar1' and does not call 'baz' but may or may not call
29556'bar2'.  If 'bar2' is called, it is called after 'foo' and before
29557'bar1'.
29558
29559
29560File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
29561
295626.2 Locally Declared Labels
29563===========================
29564
29565GCC allows you to declare "local labels" in any nested block scope.  A
29566local label is just like an ordinary label, but you can only reference
29567it (with a 'goto' statement, or by taking its address) within the block
29568in which it is declared.
29569
29570 A local label declaration looks like this:
29571
29572     __label__ LABEL;
29573
29574or
29575
29576     __label__ LABEL1, LABEL2, /* ... */;
29577
29578 Local label declarations must come at the beginning of the block,
29579before any ordinary declarations or statements.
29580
29581 The label declaration defines the label _name_, but does not define the
29582label itself.  You must do this in the usual way, with 'LABEL:', within
29583the statements of the statement expression.
29584
29585 The local label feature is useful for complex macros.  If a macro
29586contains nested loops, a 'goto' can be useful for breaking out of them.
29587However, an ordinary label whose scope is the whole function cannot be
29588used: if the macro can be expanded several times in one function, the
29589label is multiply defined in that function.  A local label avoids this
29590problem.  For example:
29591
29592     #define SEARCH(value, array, target)              \
29593     do {                                              \
29594       __label__ found;                                \
29595       typeof (target) _SEARCH_target = (target);      \
29596       typeof (*(array)) *_SEARCH_array = (array);     \
29597       int i, j;                                       \
29598       int value;                                      \
29599       for (i = 0; i < max; i++)                       \
29600         for (j = 0; j < max; j++)                     \
29601           if (_SEARCH_array[i][j] == _SEARCH_target)  \
29602             { (value) = i; goto found; }              \
29603       (value) = -1;                                   \
29604      found:;                                          \
29605     } while (0)
29606
29607 This could also be written using a statement expression:
29608
29609     #define SEARCH(array, target)                     \
29610     ({                                                \
29611       __label__ found;                                \
29612       typeof (target) _SEARCH_target = (target);      \
29613       typeof (*(array)) *_SEARCH_array = (array);     \
29614       int i, j;                                       \
29615       int value;                                      \
29616       for (i = 0; i < max; i++)                       \
29617         for (j = 0; j < max; j++)                     \
29618           if (_SEARCH_array[i][j] == _SEARCH_target)  \
29619             { value = i; goto found; }                \
29620       value = -1;                                     \
29621      found:                                           \
29622       value;                                          \
29623     })
29624
29625 Local label declarations also make the labels they declare visible to
29626nested functions, if there are any.  *Note Nested Functions::, for
29627details.
29628
29629
29630File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
29631
296326.3 Labels as Values
29633====================
29634
29635You can get the address of a label defined in the current function (or a
29636containing function) with the unary operator '&&'.  The value has type
29637'void *'.  This value is a constant and can be used wherever a constant
29638of that type is valid.  For example:
29639
29640     void *ptr;
29641     /* ... */
29642     ptr = &&foo;
29643
29644 To use these values, you need to be able to jump to one.  This is done
29645with the computed goto statement(1), 'goto *EXP;'.  For example,
29646
29647     goto *ptr;
29648
29649Any expression of type 'void *' is allowed.
29650
29651 One way of using these constants is in initializing a static array that
29652serves as a jump table:
29653
29654     static void *array[] = { &&foo, &&bar, &&hack };
29655
29656Then you can select a label with indexing, like this:
29657
29658     goto *array[i];
29659
29660Note that this does not check whether the subscript is in bounds--array
29661indexing in C never does that.
29662
29663 Such an array of label values serves a purpose much like that of the
29664'switch' statement.  The 'switch' statement is cleaner, so use that
29665rather than an array unless the problem does not fit a 'switch'
29666statement very well.
29667
29668 Another use of label values is in an interpreter for threaded code.
29669The labels within the interpreter function can be stored in the threaded
29670code for super-fast dispatching.
29671
29672 You may not use this mechanism to jump to code in a different function.
29673If you do that, totally unpredictable things happen.  The best way to
29674avoid this is to store the label address only in automatic variables and
29675never pass it as an argument.
29676
29677 An alternate way to write the above example is
29678
29679     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
29680                                  &&hack - &&foo };
29681     goto *(&&foo + array[i]);
29682
29683This is more friendly to code living in shared libraries, as it reduces
29684the number of dynamic relocations that are needed, and by consequence,
29685allows the data to be read-only.  This alternative with label
29686differences is not supported for the AVR target, please use the first
29687approach for AVR programs.
29688
29689 The '&&foo' expressions for the same label might have different values
29690if the containing function is inlined or cloned.  If a program relies on
29691them being always the same, '__attribute__((__noinline__,__noclone__))'
29692should be used to prevent inlining and cloning.  If '&&foo' is used in a
29693static variable initializer, inlining and cloning is forbidden.
29694
29695   ---------- Footnotes ----------
29696
29697   (1) The analogous feature in Fortran is called an assigned goto, but
29698that name seems inappropriate in C, where one can do more than simply
29699store label addresses in label variables.
29700
29701
29702File: gcc.info,  Node: Nested Functions,  Next: Nonlocal Gotos,  Prev: Labels as Values,  Up: C Extensions
29703
297046.4 Nested Functions
29705====================
29706
29707A "nested function" is a function defined inside another function.
29708Nested functions are supported as an extension in GNU C, but are not
29709supported by GNU C++.
29710
29711 The nested function's name is local to the block where it is defined.
29712For example, here we define a nested function named 'square', and call
29713it twice:
29714
29715     foo (double a, double b)
29716     {
29717       double square (double z) { return z * z; }
29718
29719       return square (a) + square (b);
29720     }
29721
29722 The nested function can access all the variables of the containing
29723function that are visible at the point of its definition.  This is
29724called "lexical scoping".  For example, here we show a nested function
29725which uses an inherited variable named 'offset':
29726
29727     bar (int *array, int offset, int size)
29728     {
29729       int access (int *array, int index)
29730         { return array[index + offset]; }
29731       int i;
29732       /* ... */
29733       for (i = 0; i < size; i++)
29734         /* ... */ access (array, i) /* ... */
29735     }
29736
29737 Nested function definitions are permitted within functions in the
29738places where variable definitions are allowed; that is, in any block,
29739mixed with the other declarations and statements in the block.
29740
29741 It is possible to call the nested function from outside the scope of
29742its name by storing its address or passing the address to another
29743function:
29744
29745     hack (int *array, int size)
29746     {
29747       void store (int index, int value)
29748         { array[index] = value; }
29749
29750       intermediate (store, size);
29751     }
29752
29753 Here, the function 'intermediate' receives the address of 'store' as an
29754argument.  If 'intermediate' calls 'store', the arguments given to
29755'store' are used to store into 'array'.  But this technique works only
29756so long as the containing function ('hack', in this example) does not
29757exit.
29758
29759 If you try to call the nested function through its address after the
29760containing function exits, all hell breaks loose.  If you try to call it
29761after a containing scope level exits, and if it refers to some of the
29762variables that are no longer in scope, you may be lucky, but it's not
29763wise to take the risk.  If, however, the nested function does not refer
29764to anything that has gone out of scope, you should be safe.
29765
29766 GCC implements taking the address of a nested function using a
29767technique called "trampolines".  This technique was described in
29768'Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
29769Proceedings, October 17-21, 1988).
29770
29771 A nested function can jump to a label inherited from a containing
29772function, provided the label is explicitly declared in the containing
29773function (*note Local Labels::).  Such a jump returns instantly to the
29774containing function, exiting the nested function that did the 'goto' and
29775any intermediate functions as well.  Here is an example:
29776
29777     bar (int *array, int offset, int size)
29778     {
29779       __label__ failure;
29780       int access (int *array, int index)
29781         {
29782           if (index > size)
29783             goto failure;
29784           return array[index + offset];
29785         }
29786       int i;
29787       /* ... */
29788       for (i = 0; i < size; i++)
29789         /* ... */ access (array, i) /* ... */
29790       /* ... */
29791       return 0;
29792
29793      /* Control comes here from 'access'
29794         if it detects an error.  */
29795      failure:
29796       return -1;
29797     }
29798
29799 A nested function always has no linkage.  Declaring one with 'extern'
29800or 'static' is erroneous.  If you need to declare the nested function
29801before its definition, use 'auto' (which is otherwise meaningless for
29802function declarations).
29803
29804     bar (int *array, int offset, int size)
29805     {
29806       __label__ failure;
29807       auto int access (int *, int);
29808       /* ... */
29809       int access (int *array, int index)
29810         {
29811           if (index > size)
29812             goto failure;
29813           return array[index + offset];
29814         }
29815       /* ... */
29816     }
29817
29818
29819File: gcc.info,  Node: Nonlocal Gotos,  Next: Constructing Calls,  Prev: Nested Functions,  Up: C Extensions
29820
298216.5 Nonlocal Gotos
29822==================
29823
29824GCC provides the built-in functions '__builtin_setjmp' and
29825'__builtin_longjmp' which are similar to, but not interchangeable with,
29826the C library functions 'setjmp' and 'longjmp'.  The built-in versions
29827are used internally by GCC's libraries to implement exception handling
29828on some targets.  You should use the standard C library functions
29829declared in '<setjmp.h>' in user code instead of the builtins.
29830
29831 The built-in versions of these functions use GCC's normal mechanisms to
29832save and restore registers using the stack on function entry and exit.
29833The jump buffer argument BUF holds only the information needed to
29834restore the stack frame, rather than the entire set of saved register
29835values.
29836
29837 An important caveat is that GCC arranges to save and restore only those
29838registers known to the specific architecture variant being compiled for.
29839This can make '__builtin_setjmp' and '__builtin_longjmp' more efficient
29840than their library counterparts in some cases, but it can also cause
29841incorrect and mysterious behavior when mixing with code that uses the
29842full register set.
29843
29844 You should declare the jump buffer argument BUF to the built-in
29845functions as:
29846
29847     #include <stdint.h>
29848     intptr_t BUF[5];
29849
29850 -- Built-in Function: int __builtin_setjmp (intptr_t *BUF)
29851     This function saves the current stack context in BUF.
29852     '__builtin_setjmp' returns 0 when returning directly, and 1 when
29853     returning from '__builtin_longjmp' using the same BUF.
29854
29855 -- Built-in Function: void __builtin_longjmp (intptr_t *BUF, int VAL)
29856     This function restores the stack context in BUF, saved by a
29857     previous call to '__builtin_setjmp'.  After '__builtin_longjmp' is
29858     finished, the program resumes execution as if the matching
29859     '__builtin_setjmp' returns the value VAL, which must be 1.
29860
29861     Because '__builtin_longjmp' depends on the function return
29862     mechanism to restore the stack context, it cannot be called from
29863     the same function calling '__builtin_setjmp' to initialize BUF.  It
29864     can only be called from a function called (directly or indirectly)
29865     from the function calling '__builtin_setjmp'.
29866
29867
29868File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nonlocal Gotos,  Up: C Extensions
29869
298706.6 Constructing Function Calls
29871===============================
29872
29873Using the built-in functions described below, you can record the
29874arguments a function received, and call another function with the same
29875arguments, without knowing the number or types of the arguments.
29876
29877 You can also record the return value of that function call, and later
29878return that value, without knowing what data type the function tried to
29879return (as long as your caller expects that data type).
29880
29881 However, these built-in functions may interact badly with some
29882sophisticated features or other extensions of the language.  It is,
29883therefore, not recommended to use them outside very simple functions
29884acting as mere forwarders for their arguments.
29885
29886 -- Built-in Function: void * __builtin_apply_args ()
29887     This built-in function returns a pointer to data describing how to
29888     perform a call with the same arguments as are passed to the current
29889     function.
29890
29891     The function saves the arg pointer register, structure value
29892     address, and all registers that might be used to pass arguments to
29893     a function into a block of memory allocated on the stack.  Then it
29894     returns the address of that block.
29895
29896 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
29897          *ARGUMENTS, size_t SIZE)
29898     This built-in function invokes FUNCTION with a copy of the
29899     parameters described by ARGUMENTS and SIZE.
29900
29901     The value of ARGUMENTS should be the value returned by
29902     '__builtin_apply_args'.  The argument SIZE specifies the size of
29903     the stack argument data, in bytes.
29904
29905     This function returns a pointer to data describing how to return
29906     whatever value is returned by FUNCTION.  The data is saved in a
29907     block of memory allocated on the stack.
29908
29909     It is not always simple to compute the proper value for SIZE.  The
29910     value is used by '__builtin_apply' to compute the amount of data
29911     that should be pushed on the stack and copied from the incoming
29912     argument area.
29913
29914 -- Built-in Function: void __builtin_return (void *RESULT)
29915     This built-in function returns the value described by RESULT from
29916     the containing function.  You should specify, for RESULT, a value
29917     returned by '__builtin_apply'.
29918
29919 -- Built-in Function: __builtin_va_arg_pack ()
29920     This built-in function represents all anonymous arguments of an
29921     inline function.  It can be used only in inline functions that are
29922     always inlined, never compiled as a separate function, such as
29923     those using '__attribute__ ((__always_inline__))' or '__attribute__
29924     ((__gnu_inline__))' extern inline functions.  It must be only
29925     passed as last argument to some other function with variable
29926     arguments.  This is useful for writing small wrapper inlines for
29927     variable argument functions, when using preprocessor macros is
29928     undesirable.  For example:
29929          extern int myprintf (FILE *f, const char *format, ...);
29930          extern inline __attribute__ ((__gnu_inline__)) int
29931          myprintf (FILE *f, const char *format, ...)
29932          {
29933            int r = fprintf (f, "myprintf: ");
29934            if (r < 0)
29935              return r;
29936            int s = fprintf (f, format, __builtin_va_arg_pack ());
29937            if (s < 0)
29938              return s;
29939            return r + s;
29940          }
29941
29942 -- Built-in Function: int __builtin_va_arg_pack_len ()
29943     This built-in function returns the number of anonymous arguments of
29944     an inline function.  It can be used only in inline functions that
29945     are always inlined, never compiled as a separate function, such as
29946     those using '__attribute__ ((__always_inline__))' or '__attribute__
29947     ((__gnu_inline__))' extern inline functions.  For example following
29948     does link- or run-time checking of open arguments for optimized
29949     code:
29950          #ifdef __OPTIMIZE__
29951          extern inline __attribute__((__gnu_inline__)) int
29952          myopen (const char *path, int oflag, ...)
29953          {
29954            if (__builtin_va_arg_pack_len () > 1)
29955              warn_open_too_many_arguments ();
29956
29957            if (__builtin_constant_p (oflag))
29958              {
29959                if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
29960                  {
29961                    warn_open_missing_mode ();
29962                    return __open_2 (path, oflag);
29963                  }
29964                return open (path, oflag, __builtin_va_arg_pack ());
29965              }
29966
29967            if (__builtin_va_arg_pack_len () < 1)
29968              return __open_2 (path, oflag);
29969
29970            return open (path, oflag, __builtin_va_arg_pack ());
29971          }
29972          #endif
29973
29974
29975File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
29976
299776.7 Referring to a Type with 'typeof'
29978=====================================
29979
29980Another way to refer to the type of an expression is with 'typeof'.  The
29981syntax of using of this keyword looks like 'sizeof', but the construct
29982acts semantically like a type name defined with 'typedef'.
29983
29984 There are two ways of writing the argument to 'typeof': with an
29985expression or with a type.  Here is an example with an expression:
29986
29987     typeof (x[0](1))
29988
29989This assumes that 'x' is an array of pointers to functions; the type
29990described is that of the values of the functions.
29991
29992 Here is an example with a typename as the argument:
29993
29994     typeof (int *)
29995
29996Here the type described is that of pointers to 'int'.
29997
29998 If you are writing a header file that must work when included in ISO C
29999programs, write '__typeof__' instead of 'typeof'.  *Note Alternate
30000Keywords::.
30001
30002 A 'typeof' construct can be used anywhere a typedef name can be used.
30003For example, you can use it in a declaration, in a cast, or inside of
30004'sizeof' or 'typeof'.
30005
30006 The operand of 'typeof' is evaluated for its side effects if and only
30007if it is an expression of variably modified type or the name of such a
30008type.
30009
30010 'typeof' is often useful in conjunction with statement expressions
30011(*note Statement Exprs::).  Here is how the two together can be used to
30012define a safe "maximum" macro which operates on any arithmetic type and
30013evaluates each of its arguments exactly once:
30014
30015     #define max(a,b) \
30016       ({ typeof (a) _a = (a); \
30017           typeof (b) _b = (b); \
30018         _a > _b ? _a : _b; })
30019
30020 The reason for using names that start with underscores for the local
30021variables is to avoid conflicts with variable names that occur within
30022the expressions that are substituted for 'a' and 'b'.  Eventually we
30023hope to design a new form of declaration syntax that allows you to
30024declare variables whose scopes start only after their initializers; this
30025will be a more reliable way to prevent such conflicts.
30026
30027Some more examples of the use of 'typeof':
30028
30029   * This declares 'y' with the type of what 'x' points to.
30030
30031          typeof (*x) y;
30032
30033   * This declares 'y' as an array of such values.
30034
30035          typeof (*x) y[4];
30036
30037   * This declares 'y' as an array of pointers to characters:
30038
30039          typeof (typeof (char *)[4]) y;
30040
30041     It is equivalent to the following traditional C declaration:
30042
30043          char *y[4];
30044
30045     To see the meaning of the declaration using 'typeof', and why it
30046     might be a useful way to write, rewrite it with these macros:
30047
30048          #define pointer(T)  typeof(T *)
30049          #define array(T, N) typeof(T [N])
30050
30051     Now the declaration can be rewritten this way:
30052
30053          array (pointer (char), 4) y;
30054
30055     Thus, 'array (pointer (char), 4)' is the type of arrays of 4
30056     pointers to 'char'.
30057
30058 In GNU C, but not GNU C++, you may also declare the type of a variable
30059as '__auto_type'.  In that case, the declaration must declare only one
30060variable, whose declarator must just be an identifier, the declaration
30061must be initialized, and the type of the variable is determined by the
30062initializer; the name of the variable is not in scope until after the
30063initializer.  (In C++, you should use C++11 'auto' for this purpose.)
30064Using '__auto_type', the "maximum" macro above could be written as:
30065
30066     #define max(a,b) \
30067       ({ __auto_type _a = (a); \
30068           __auto_type _b = (b); \
30069         _a > _b ? _a : _b; })
30070
30071 Using '__auto_type' instead of 'typeof' has two advantages:
30072
30073   * Each argument to the macro appears only once in the expansion of
30074     the macro.  This prevents the size of the macro expansion growing
30075     exponentially when calls to such macros are nested inside arguments
30076     of such macros.
30077
30078   * If the argument to the macro has variably modified type, it is
30079     evaluated only once when using '__auto_type', but twice if 'typeof'
30080     is used.
30081
30082
30083File: gcc.info,  Node: Conditionals,  Next: __int128,  Prev: Typeof,  Up: C Extensions
30084
300856.8 Conditionals with Omitted Operands
30086======================================
30087
30088The middle operand in a conditional expression may be omitted.  Then if
30089the first operand is nonzero, its value is the value of the conditional
30090expression.
30091
30092 Therefore, the expression
30093
30094     x ? : y
30095
30096has the value of 'x' if that is nonzero; otherwise, the value of 'y'.
30097
30098 This example is perfectly equivalent to
30099
30100     x ? x : y
30101
30102In this simple case, the ability to omit the middle operand is not
30103especially useful.  When it becomes useful is when the first operand
30104does, or may (if it is a macro argument), contain a side effect.  Then
30105repeating the operand in the middle would perform the side effect twice.
30106Omitting the middle operand uses the value already computed without the
30107undesirable effects of recomputing it.
30108
30109
30110File: gcc.info,  Node: __int128,  Next: Long Long,  Prev: Conditionals,  Up: C Extensions
30111
301126.9 128-bit Integers
30113====================
30114
30115As an extension the integer scalar type '__int128' is supported for
30116targets which have an integer mode wide enough to hold 128 bits.  Simply
30117write '__int128' for a signed 128-bit integer, or 'unsigned __int128'
30118for an unsigned 128-bit integer.  There is no support in GCC for
30119expressing an integer constant of type '__int128' for targets with 'long
30120long' integer less than 128 bits wide.
30121
30122
30123File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
30124
301256.10 Double-Word Integers
30126=========================
30127
30128ISO C99 and ISO C++11 support data types for integers that are at least
3012964 bits wide, and as an extension GCC supports them in C90 and C++98
30130modes.  Simply write 'long long int' for a signed integer, or 'unsigned
30131long long int' for an unsigned integer.  To make an integer constant of
30132type 'long long int', add the suffix 'LL' to the integer.  To make an
30133integer constant of type 'unsigned long long int', add the suffix 'ULL'
30134to the integer.
30135
30136 You can use these types in arithmetic like any other integer types.
30137Addition, subtraction, and bitwise boolean operations on these types are
30138open-coded on all types of machines.  Multiplication is open-coded if
30139the machine supports a fullword-to-doubleword widening multiply
30140instruction.  Division and shifts are open-coded only on machines that
30141provide special support.  The operations that are not open-coded use
30142special library routines that come with GCC.
30143
30144 There may be pitfalls when you use 'long long' types for function
30145arguments without function prototypes.  If a function expects type 'int'
30146for its argument, and you pass a value of type 'long long int',
30147confusion results because the caller and the subroutine disagree about
30148the number of bytes for the argument.  Likewise, if the function expects
30149'long long int' and you pass 'int'.  The best way to avoid such problems
30150is to use prototypes.
30151
30152
30153File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
30154
301556.11 Complex Numbers
30156====================
30157
30158ISO C99 supports complex floating data types, and as an extension GCC
30159supports them in C90 mode and in C++.  GCC also supports complex integer
30160data types which are not part of ISO C99.  You can declare complex types
30161using the keyword '_Complex'.  As an extension, the older GNU keyword
30162'__complex__' is also supported.
30163
30164 For example, '_Complex double x;' declares 'x' as a variable whose real
30165part and imaginary part are both of type 'double'.  '_Complex short int
30166y;' declares 'y' to have real and imaginary parts of type 'short int';
30167this is not likely to be useful, but it shows that the set of complex
30168types is complete.
30169
30170 To write a constant with a complex data type, use the suffix 'i' or 'j'
30171(either one; they are equivalent).  For example, '2.5fi' has type
30172'_Complex float' and '3i' has type '_Complex int'.  Such a constant
30173always has a pure imaginary value, but you can form any complex value
30174you like by adding one to a real constant.  This is a GNU extension; if
30175you have an ISO C99 conforming C library (such as the GNU C Library),
30176and want to construct complex constants of floating type, you should
30177include '<complex.h>' and use the macros 'I' or '_Complex_I' instead.
30178
30179 The ISO C++14 library also defines the 'i' suffix, so C++14 code that
30180includes the '<complex>' header cannot use 'i' for the GNU extension.
30181The 'j' suffix still has the GNU meaning.
30182
30183 To extract the real part of a complex-valued expression EXP, write
30184'__real__ EXP'.  Likewise, use '__imag__' to extract the imaginary part.
30185This is a GNU extension; for values of floating type, you should use the
30186ISO C99 functions 'crealf', 'creal', 'creall', 'cimagf', 'cimag' and
30187'cimagl', declared in '<complex.h>' and also provided as built-in
30188functions by GCC.
30189
30190 The operator '~' performs complex conjugation when used on a value with
30191a complex type.  This is a GNU extension; for values of floating type,
30192you should use the ISO C99 functions 'conjf', 'conj' and 'conjl',
30193declared in '<complex.h>' and also provided as built-in functions by
30194GCC.
30195
30196 GCC can allocate complex automatic variables in a noncontiguous
30197fashion; it's even possible for the real part to be in a register while
30198the imaginary part is on the stack (or vice versa).  Only the DWARF
30199debug info format can represent this, so use of DWARF is recommended.
30200If you are using the stabs debug info format, GCC describes a
30201noncontiguous complex variable as if it were two separate variables of
30202noncomplex type.  If the variable's actual name is 'foo', the two
30203fictitious variables are named 'foo$real' and 'foo$imag'.  You can
30204examine and set these two fictitious variables with your debugger.
30205
30206
30207File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
30208
302096.12 Additional Floating Types
30210==============================
30211
30212ISO/IEC TS 18661-3:2015 defines C support for additional floating types
30213'_FloatN' and '_FloatNx', and GCC supports these type names; the set of
30214types supported depends on the target architecture.  These types are not
30215supported when compiling C++.  Constants with these types use suffixes
30216'fN' or 'FN' and 'fNx' or 'FNx'.  These type names can be used together
30217with '_Complex' to declare complex types.
30218
30219 As an extension, GNU C and GNU C++ support additional floating types,
30220which are not supported by all targets.
30221   * '__float128' is available on i386, x86_64, IA-64, and hppa HP-UX,
30222     as well as on PowerPC GNU/Linux targets that enable the vector
30223     scalar (VSX) instruction set.  '__float128' supports the 128-bit
30224     floating type.  On i386, x86_64, PowerPC, and IA-64 other than
30225     HP-UX, '__float128' is an alias for '_Float128'.  On hppa and IA-64
30226     HP-UX, '__float128' is an alias for 'long double'.
30227
30228   * '__float80' is available on the i386, x86_64, and IA-64 targets,
30229     and supports the 80-bit ('XFmode') floating type.  It is an alias
30230     for the type name '_Float64x' on these targets.
30231
30232   * '__ibm128' is available on PowerPC targets, and provides access to
30233     the IBM extended double format which is the current format used for
30234     'long double'.  When 'long double' transitions to '__float128' on
30235     PowerPC in the future, '__ibm128' will remain for use in
30236     conversions between the two types.
30237
30238 Support for these additional types includes the arithmetic operators:
30239add, subtract, multiply, divide; unary arithmetic operators; relational
30240operators; equality operators; and conversions to and from integer and
30241other floating types.  Use a suffix 'w' or 'W' in a literal constant of
30242type '__float80' or type '__ibm128'.  Use a suffix 'q' or 'Q' for
30243'_float128'.
30244
30245 In order to use '_Float128', '__float128', and '__ibm128' on PowerPC
30246Linux systems, you must use the '-mfloat128' option.  It is expected in
30247future versions of GCC that '_Float128' and '__float128' will be enabled
30248automatically.
30249
30250 The '_Float128' type is supported on all systems where '__float128' is
30251supported or where 'long double' has the IEEE binary128 format.  The
30252'_Float64x' type is supported on all systems where '__float128' is
30253supported.  The '_Float32' type is supported on all systems supporting
30254IEEE binary32; the '_Float64' and '_Float32x' types are supported on all
30255systems supporting IEEE binary64.  The '_Float16' type is supported on
30256AArch64 systems by default, and on ARM systems when the IEEE format for
3025716-bit floating-point types is selected with '-mfp16-format=ieee'.  GCC
30258does not currently support '_Float128x' on any systems.
30259
30260 On the i386, x86_64, IA-64, and HP-UX targets, you can declare complex
30261types using the corresponding internal complex type, 'XCmode' for
30262'__float80' type and 'TCmode' for '__float128' type:
30263
30264     typedef _Complex float __attribute__((mode(TC))) _Complex128;
30265     typedef _Complex float __attribute__((mode(XC))) _Complex80;
30266
30267 On the PowerPC Linux VSX targets, you can declare complex types using
30268the corresponding internal complex type, 'KCmode' for '__float128' type
30269and 'ICmode' for '__ibm128' type:
30270
30271     typedef _Complex float __attribute__((mode(KC))) _Complex_float128;
30272     typedef _Complex float __attribute__((mode(IC))) _Complex_ibm128;
30273
30274
30275File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
30276
302776.13 Half-Precision Floating Point
30278==================================
30279
30280On ARM and AArch64 targets, GCC supports half-precision (16-bit)
30281floating point via the '__fp16' type defined in the ARM C Language
30282Extensions.  On ARM systems, you must enable this type explicitly with
30283the '-mfp16-format' command-line option in order to use it.
30284
30285 ARM targets support two incompatible representations for half-precision
30286floating-point values.  You must choose one of the representations and
30287use it consistently in your program.
30288
30289 Specifying '-mfp16-format=ieee' selects the IEEE 754-2008 format.  This
30290format can represent normalized values in the range of 2^{-14} to 65504.
30291There are 11 bits of significand precision, approximately 3 decimal
30292digits.
30293
30294 Specifying '-mfp16-format=alternative' selects the ARM alternative
30295format.  This representation is similar to the IEEE format, but does not
30296support infinities or NaNs.  Instead, the range of exponents is
30297extended, so that this format can represent normalized values in the
30298range of 2^{-14} to 131008.
30299
30300 The GCC port for AArch64 only supports the IEEE 754-2008 format, and
30301does not require use of the '-mfp16-format' command-line option.
30302
30303 The '__fp16' type may only be used as an argument to intrinsics defined
30304in '<arm_fp16.h>', or as a storage format.  For purposes of arithmetic
30305and other operations, '__fp16' values in C or C++ expressions are
30306automatically promoted to 'float'.
30307
30308 The ARM target provides hardware support for conversions between
30309'__fp16' and 'float' values as an extension to VFP and NEON (Advanced
30310SIMD), and from ARMv8-A provides hardware support for conversions
30311between '__fp16' and 'double' values.  GCC generates code using these
30312hardware instructions if you compile with options to select an FPU that
30313provides them; for example, '-mfpu=neon-fp16 -mfloat-abi=softfp', in
30314addition to the '-mfp16-format' option to select a half-precision
30315format.
30316
30317 Language-level support for the '__fp16' data type is independent of
30318whether GCC generates code using hardware floating-point instructions.
30319In cases where hardware support is not specified, GCC implements
30320conversions between '__fp16' and other types as library calls.
30321
30322 It is recommended that portable code use the '_Float16' type defined by
30323ISO/IEC TS 18661-3:2015.  *Note Floating Types::.
30324
30325
30326File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
30327
303286.14 Decimal Floating Types
30329===========================
30330
30331As an extension, GNU C supports decimal floating types as defined in the
30332N1312 draft of ISO/IEC WDTR24732.  Support for decimal floating types in
30333GCC will evolve as the draft technical report changes.  Calling
30334conventions for any target might also change.  Not all targets support
30335decimal floating types.
30336
30337 The decimal floating types are '_Decimal32', '_Decimal64', and
30338'_Decimal128'.  They use a radix of ten, unlike the floating types
30339'float', 'double', and 'long double' whose radix is not specified by the
30340C standard but is usually two.
30341
30342 Support for decimal floating types includes the arithmetic operators
30343add, subtract, multiply, divide; unary arithmetic operators; relational
30344operators; equality operators; and conversions to and from integer and
30345other floating types.  Use a suffix 'df' or 'DF' in a literal constant
30346of type '_Decimal32', 'dd' or 'DD' for '_Decimal64', and 'dl' or 'DL'
30347for '_Decimal128'.
30348
30349 GCC support of decimal float as specified by the draft technical report
30350is incomplete:
30351
30352   * When the value of a decimal floating type cannot be represented in
30353     the integer type to which it is being converted, the result is
30354     undefined rather than the result value specified by the draft
30355     technical report.
30356
30357   * GCC does not provide the C library functionality associated with
30358     'math.h', 'fenv.h', 'stdio.h', 'stdlib.h', and 'wchar.h', which
30359     must come from a separate C library implementation.  Because of
30360     this the GNU C compiler does not define macro '__STDC_DEC_FP__' to
30361     indicate that the implementation conforms to the technical report.
30362
30363 Types '_Decimal32', '_Decimal64', and '_Decimal128' are supported by
30364the DWARF debug information format.
30365
30366
30367File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
30368
303696.15 Hex Floats
30370===============
30371
30372ISO C99 and ISO C++17 support floating-point numbers written not only in
30373the usual decimal notation, such as '1.55e1', but also numbers such as
30374'0x1.fp3' written in hexadecimal format.  As a GNU extension, GCC
30375supports this in C90 mode (except in some cases when strictly
30376conforming) and in C++98, C++11 and C++14 modes.  In that format the
30377'0x' hex introducer and the 'p' or 'P' exponent field are mandatory.
30378The exponent is a decimal number that indicates the power of 2 by which
30379the significant part is multiplied.  Thus '0x1.f' is 1 15/16, 'p3'
30380multiplies it by 8, and the value of '0x1.fp3' is the same as '1.55e1'.
30381
30382 Unlike for floating-point numbers in the decimal notation the exponent
30383is always required in the hexadecimal notation.  Otherwise the compiler
30384would not be able to resolve the ambiguity of, e.g., '0x1.f'.  This
30385could mean '1.0f' or '1.9375' since 'f' is also the extension for
30386floating-point constants of type 'float'.
30387
30388
30389File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
30390
303916.16 Fixed-Point Types
30392======================
30393
30394As an extension, GNU C supports fixed-point types as defined in the
30395N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point types in GCC
30396will evolve as the draft technical report changes.  Calling conventions
30397for any target might also change.  Not all targets support fixed-point
30398types.
30399
30400 The fixed-point types are 'short _Fract', '_Fract', 'long _Fract',
30401'long long _Fract', 'unsigned short _Fract', 'unsigned _Fract',
30402'unsigned long _Fract', 'unsigned long long _Fract', '_Sat short
30403_Fract', '_Sat _Fract', '_Sat long _Fract', '_Sat long long _Fract',
30404'_Sat unsigned short _Fract', '_Sat unsigned _Fract', '_Sat unsigned
30405long _Fract', '_Sat unsigned long long _Fract', 'short _Accum',
30406'_Accum', 'long _Accum', 'long long _Accum', 'unsigned short _Accum',
30407'unsigned _Accum', 'unsigned long _Accum', 'unsigned long long _Accum',
30408'_Sat short _Accum', '_Sat _Accum', '_Sat long _Accum', '_Sat long long
30409_Accum', '_Sat unsigned short _Accum', '_Sat unsigned _Accum', '_Sat
30410unsigned long _Accum', '_Sat unsigned long long _Accum'.
30411
30412 Fixed-point data values contain fractional and optional integral parts.
30413The format of fixed-point data varies and depends on the target machine.
30414
30415 Support for fixed-point types includes:
30416   * prefix and postfix increment and decrement operators ('++', '--')
30417   * unary arithmetic operators ('+', '-', '!')
30418   * binary arithmetic operators ('+', '-', '*', '/')
30419   * binary shift operators ('<<', '>>')
30420   * relational operators ('<', '<=', '>=', '>')
30421   * equality operators ('==', '!=')
30422   * assignment operators ('+=', '-=', '*=', '/=', '<<=', '>>=')
30423   * conversions to and from integer, floating-point, or fixed-point
30424     types
30425
30426 Use a suffix in a fixed-point literal constant:
30427   * 'hr' or 'HR' for 'short _Fract' and '_Sat short _Fract'
30428   * 'r' or 'R' for '_Fract' and '_Sat _Fract'
30429   * 'lr' or 'LR' for 'long _Fract' and '_Sat long _Fract'
30430   * 'llr' or 'LLR' for 'long long _Fract' and '_Sat long long _Fract'
30431   * 'uhr' or 'UHR' for 'unsigned short _Fract' and '_Sat unsigned short
30432     _Fract'
30433   * 'ur' or 'UR' for 'unsigned _Fract' and '_Sat unsigned _Fract'
30434   * 'ulr' or 'ULR' for 'unsigned long _Fract' and '_Sat unsigned long
30435     _Fract'
30436   * 'ullr' or 'ULLR' for 'unsigned long long _Fract' and '_Sat unsigned
30437     long long _Fract'
30438   * 'hk' or 'HK' for 'short _Accum' and '_Sat short _Accum'
30439   * 'k' or 'K' for '_Accum' and '_Sat _Accum'
30440   * 'lk' or 'LK' for 'long _Accum' and '_Sat long _Accum'
30441   * 'llk' or 'LLK' for 'long long _Accum' and '_Sat long long _Accum'
30442   * 'uhk' or 'UHK' for 'unsigned short _Accum' and '_Sat unsigned short
30443     _Accum'
30444   * 'uk' or 'UK' for 'unsigned _Accum' and '_Sat unsigned _Accum'
30445   * 'ulk' or 'ULK' for 'unsigned long _Accum' and '_Sat unsigned long
30446     _Accum'
30447   * 'ullk' or 'ULLK' for 'unsigned long long _Accum' and '_Sat unsigned
30448     long long _Accum'
30449
30450 GCC support of fixed-point types as specified by the draft technical
30451report is incomplete:
30452
30453   * Pragmas to control overflow and rounding behaviors are not
30454     implemented.
30455
30456 Fixed-point types are supported by the DWARF debug information format.
30457
30458
30459File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
30460
304616.17 Named Address Spaces
30462=========================
30463
30464As an extension, GNU C supports named address spaces as defined in the
30465N1275 draft of ISO/IEC DTR 18037.  Support for named address spaces in
30466GCC will evolve as the draft technical report changes.  Calling
30467conventions for any target might also change.  At present, only the AVR,
30468M32C, RL78, and x86 targets support address spaces other than the
30469generic address space.
30470
30471 Address space identifiers may be used exactly like any other C type
30472qualifier (e.g., 'const' or 'volatile').  See the N1275 document for
30473more details.
30474
304756.17.1 AVR Named Address Spaces
30476-------------------------------
30477
30478On the AVR target, there are several address spaces that can be used in
30479order to put read-only data into the flash memory and access that data
30480by means of the special instructions 'LPM' or 'ELPM' needed to read from
30481flash.
30482
30483 Devices belonging to 'avrtiny' and 'avrxmega3' can access flash memory
30484by means of 'LD*' instructions because the flash memory is mapped into
30485the RAM address space.  There is _no need_ for language extensions like
30486'__flash' or attribute *note 'progmem': AVR Variable Attributes.  The
30487default linker description files for these devices cater for that
30488feature and '.rodata' stays in flash: The compiler just generates 'LD*'
30489instructions, and the linker script adds core specific offsets to all
30490'.rodata' symbols: '0x4000' in the case of 'avrtiny' and '0x8000' in the
30491case of 'avrxmega3'.  See *note AVR Options:: for a list of respective
30492devices.
30493
30494 For devices not in 'avrtiny' or 'avrxmega3', any data including
30495read-only data is located in RAM (the generic address space) because
30496flash memory is not visible in the RAM address space.  In order to
30497locate read-only data in flash memory _and_ to generate the right
30498instructions to access this data without using (inline) assembler code,
30499special address spaces are needed.
30500
30501'__flash'
30502     The '__flash' qualifier locates data in the '.progmem.data'
30503     section.  Data is read using the 'LPM' instruction.  Pointers to
30504     this address space are 16 bits wide.
30505
30506'__flash1'
30507'__flash2'
30508'__flash3'
30509'__flash4'
30510'__flash5'
30511     These are 16-bit address spaces locating data in section
30512     '.progmemN.data' where N refers to address space '__flashN'.  The
30513     compiler sets the 'RAMPZ' segment register appropriately before
30514     reading data by means of the 'ELPM' instruction.
30515
30516'__memx'
30517     This is a 24-bit address space that linearizes flash and RAM: If
30518     the high bit of the address is set, data is read from RAM using the
30519     lower two bytes as RAM address.  If the high bit of the address is
30520     clear, data is read from flash with 'RAMPZ' set according to the
30521     high byte of the address.  *Note '__builtin_avr_flash_segment': AVR
30522     Built-in Functions.
30523
30524     Objects in this address space are located in '.progmemx.data'.
30525
30526 Example
30527
30528     char my_read (const __flash char ** p)
30529     {
30530         /* p is a pointer to RAM that points to a pointer to flash.
30531            The first indirection of p reads that flash pointer
30532            from RAM and the second indirection reads a char from this
30533            flash address.  */
30534
30535         return **p;
30536     }
30537
30538     /* Locate array[] in flash memory */
30539     const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };
30540
30541     int i = 1;
30542
30543     int main (void)
30544     {
30545        /* Return 17 by reading from flash memory */
30546        return array[array[i]];
30547     }
30548
30549For each named address space supported by avr-gcc there is an equally
30550named but uppercase built-in macro defined.  The purpose is to
30551facilitate testing if respective address space support is available or
30552not:
30553
30554     #ifdef __FLASH
30555     const __flash int var = 1;
30556
30557     int read_var (void)
30558     {
30559         return var;
30560     }
30561     #else
30562     #include <avr/pgmspace.h> /* From AVR-LibC */
30563
30564     const int var PROGMEM = 1;
30565
30566     int read_var (void)
30567     {
30568         return (int) pgm_read_word (&var);
30569     }
30570     #endif /* __FLASH */
30571
30572Notice that attribute *note 'progmem': AVR Variable Attributes. locates
30573data in flash but accesses to these data read from generic address
30574space, i.e. from RAM, so that you need special accessors like
30575'pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/)
30576together with attribute 'progmem'.
30577
30578Limitations and caveats
30579
30580   * Reading across the 64 KiB section boundary of the '__flash' or
30581     '__flashN' address spaces shows undefined behavior.  The only
30582     address space that supports reading across the 64 KiB flash segment
30583     boundaries is '__memx'.
30584
30585   * If you use one of the '__flashN' address spaces you must arrange
30586     your linker script to locate the '.progmemN.data' sections
30587     according to your needs.
30588
30589   * Any data or pointers to the non-generic address spaces must be
30590     qualified as 'const', i.e. as read-only data.  This still applies
30591     if the data in one of these address spaces like software version
30592     number or calibration lookup table are intended to be changed after
30593     load time by, say, a boot loader.  In this case the right
30594     qualification is 'const' 'volatile' so that the compiler must not
30595     optimize away known values or insert them as immediates into
30596     operands of instructions.
30597
30598   * The following code initializes a variable 'pfoo' located in static
30599     storage with a 24-bit address:
30600          extern const __memx char foo;
30601          const __memx void *pfoo = &foo;
30602
30603   * On the reduced Tiny devices like ATtiny40, no address spaces are
30604     supported.  Just use vanilla C / C++ code without overhead as
30605     outlined above.  Attribute 'progmem' is supported but works
30606     differently, see *note AVR Variable Attributes::.
30607
306086.17.2 M32C Named Address Spaces
30609--------------------------------
30610
30611On the M32C target, with the R8C and M16C CPU variants, variables
30612qualified with '__far' are accessed using 32-bit addresses in order to
30613access memory beyond the first 64 Ki bytes.  If '__far' is used with the
30614M32CM or M32C CPU variants, it has no effect.
30615
306166.17.3 RL78 Named Address Spaces
30617--------------------------------
30618
30619On the RL78 target, variables qualified with '__far' are accessed with
3062032-bit pointers (20-bit addresses) rather than the default 16-bit
30621addresses.  Non-far variables are assumed to appear in the topmost
3062264 KiB of the address space.
30623
306246.17.4 x86 Named Address Spaces
30625-------------------------------
30626
30627On the x86 target, variables may be declared as being relative to the
30628'%fs' or '%gs' segments.
30629
30630'__seg_fs'
30631'__seg_gs'
30632     The object is accessed with the respective segment override prefix.
30633
30634     The respective segment base must be set via some method specific to
30635     the operating system.  Rather than require an expensive system call
30636     to retrieve the segment base, these address spaces are not
30637     considered to be subspaces of the generic (flat) address space.
30638     This means that explicit casts are required to convert pointers
30639     between these address spaces and the generic address space.  In
30640     practice the application should cast to 'uintptr_t' and apply the
30641     segment base offset that it installed previously.
30642
30643     The preprocessor symbols '__SEG_FS' and '__SEG_GS' are defined when
30644     these address spaces are supported.
30645
30646
30647File: gcc.info,  Node: Zero Length,  Next: Empty Structures,  Prev: Named Address Spaces,  Up: C Extensions
30648
306496.18 Arrays of Length Zero
30650==========================
30651
30652Declaring zero-length arrays is allowed in GNU C as an extension.  A
30653zero-length array can be useful as the last element of a structure that
30654is really a header for a variable-length object:
30655
30656     struct line {
30657       int length;
30658       char contents[0];
30659     };
30660
30661     struct line *thisline = (struct line *)
30662       malloc (sizeof (struct line) + this_length);
30663     thisline->length = this_length;
30664
30665 Although the size of a zero-length array is zero, an array member of
30666this kind may increase the size of the enclosing type as a result of
30667tail padding.  The offset of a zero-length array member from the
30668beginning of the enclosing structure is the same as the offset of an
30669array with one or more elements of the same type.  The alignment of a
30670zero-length array is the same as the alignment of its elements.
30671
30672 Declaring zero-length arrays in other contexts, including as interior
30673members of structure objects or as non-member objects, is discouraged.
30674Accessing elements of zero-length arrays declared in such contexts is
30675undefined and may be diagnosed.
30676
30677 In the absence of the zero-length array extension, in ISO C90 the
30678'contents' array in the example above would typically be declared to
30679have a single element.  Unlike a zero-length array which only
30680contributes to the size of the enclosing structure for the purposes of
30681alignment, a one-element array always occupies at least as much space as
30682a single object of the type.  Although using one-element arrays this way
30683is discouraged, GCC handles accesses to trailing one-element array
30684members analogously to zero-length arrays.
30685
30686 The preferred mechanism to declare variable-length types like 'struct
30687line' above is the ISO C99 "flexible array member", with slightly
30688different syntax and semantics:
30689
30690   * Flexible array members are written as 'contents[]' without the '0'.
30691
30692   * Flexible array members have incomplete type, and so the 'sizeof'
30693     operator may not be applied.  As a quirk of the original
30694     implementation of zero-length arrays, 'sizeof' evaluates to zero.
30695
30696   * Flexible array members may only appear as the last member of a
30697     'struct' that is otherwise non-empty.
30698
30699   * A structure containing a flexible array member, or a union
30700     containing such a structure (possibly recursively), may not be a
30701     member of a structure or an element of an array.  (However, these
30702     uses are permitted by GCC as extensions.)
30703
30704 Non-empty initialization of zero-length arrays is treated like any case
30705where there are more initializer elements than the array holds, in that
30706a suitable warning about "excess elements in array" is given, and the
30707excess elements (all of them, in this case) are ignored.
30708
30709 GCC allows static initialization of flexible array members.  This is
30710equivalent to defining a new structure containing the original structure
30711followed by an array of sufficient size to contain the data.  E.g. in
30712the following, 'f1' is constructed as if it were declared like 'f2'.
30713
30714     struct f1 {
30715       int x; int y[];
30716     } f1 = { 1, { 2, 3, 4 } };
30717
30718     struct f2 {
30719       struct f1 f1; int data[3];
30720     } f2 = { { 1 }, { 2, 3, 4 } };
30721
30722The convenience of this extension is that 'f1' has the desired type,
30723eliminating the need to consistently refer to 'f2.f1'.
30724
30725 This has symmetry with normal static arrays, in that an array of
30726unknown size is also written with '[]'.
30727
30728 Of course, this extension only makes sense if the extra data comes at
30729the end of a top-level object, as otherwise we would be overwriting data
30730at subsequent offsets.  To avoid undue complication and confusion with
30731initialization of deeply nested arrays, we simply disallow any non-empty
30732initialization except when the structure is the top-level object.  For
30733example:
30734
30735     struct foo { int x; int y[]; };
30736     struct bar { struct foo z; };
30737
30738     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
30739     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
30740     struct bar c = { { 1, { } } };            // Valid.
30741     struct foo d[1] = { { 1, { 2, 3, 4 } } };  // Invalid.
30742
30743
30744File: gcc.info,  Node: Empty Structures,  Next: Variable Length,  Prev: Zero Length,  Up: C Extensions
30745
307466.19 Structures with No Members
30747===============================
30748
30749GCC permits a C structure to have no members:
30750
30751     struct empty {
30752     };
30753
30754 The structure has size zero.  In C++, empty structures are part of the
30755language.  G++ treats empty structures as if they had a single member of
30756type 'char'.
30757
30758
30759File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
30760
307616.20 Arrays of Variable Length
30762==============================
30763
30764Variable-length automatic arrays are allowed in ISO C99, and as an
30765extension GCC accepts them in C90 mode and in C++.  These arrays are
30766declared like any other automatic arrays, but with a length that is not
30767a constant expression.  The storage is allocated at the point of
30768declaration and deallocated when the block scope containing the
30769declaration exits.  For example:
30770
30771     FILE *
30772     concat_fopen (char *s1, char *s2, char *mode)
30773     {
30774       char str[strlen (s1) + strlen (s2) + 1];
30775       strcpy (str, s1);
30776       strcat (str, s2);
30777       return fopen (str, mode);
30778     }
30779
30780 Jumping or breaking out of the scope of the array name deallocates the
30781storage.  Jumping into the scope is not allowed; you get an error
30782message for it.
30783
30784 As an extension, GCC accepts variable-length arrays as a member of a
30785structure or a union.  For example:
30786
30787     void
30788     foo (int n)
30789     {
30790       struct S { int x[n]; };
30791     }
30792
30793 You can use the function 'alloca' to get an effect much like
30794variable-length arrays.  The function 'alloca' is available in many
30795other C implementations (but not in all).  On the other hand,
30796variable-length arrays are more elegant.
30797
30798 There are other differences between these two methods.  Space allocated
30799with 'alloca' exists until the containing _function_ returns.  The space
30800for a variable-length array is deallocated as soon as the array name's
30801scope ends, unless you also use 'alloca' in this scope.
30802
30803 You can also use variable-length arrays as arguments to functions:
30804
30805     struct entry
30806     tester (int len, char data[len][len])
30807     {
30808       /* ... */
30809     }
30810
30811 The length of an array is computed once when the storage is allocated
30812and is remembered for the scope of the array in case you access it with
30813'sizeof'.
30814
30815 If you want to pass the array first and the length afterward, you can
30816use a forward declaration in the parameter list--another GNU extension.
30817
30818     struct entry
30819     tester (int len; char data[len][len], int len)
30820     {
30821       /* ... */
30822     }
30823
30824 The 'int len' before the semicolon is a "parameter forward
30825declaration", and it serves the purpose of making the name 'len' known
30826when the declaration of 'data' is parsed.
30827
30828 You can write any number of such parameter forward declarations in the
30829parameter list.  They can be separated by commas or semicolons, but the
30830last one must end with a semicolon, which is followed by the "real"
30831parameter declarations.  Each forward declaration must match a "real"
30832declaration in parameter name and data type.  ISO C99 does not support
30833parameter forward declarations.
30834
30835
30836File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Variable Length,  Up: C Extensions
30837
308386.21 Macros with a Variable Number of Arguments.
30839================================================
30840
30841In the ISO C standard of 1999, a macro can be declared to accept a
30842variable number of arguments much as a function can.  The syntax for
30843defining the macro is similar to that of a function.  Here is an
30844example:
30845
30846     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
30847
30848Here '...' is a "variable argument".  In the invocation of such a macro,
30849it represents the zero or more tokens until the closing parenthesis that
30850ends the invocation, including any commas.  This set of tokens replaces
30851the identifier '__VA_ARGS__' in the macro body wherever it appears.  See
30852the CPP manual for more information.
30853
30854 GCC has long supported variadic macros, and used a different syntax
30855that allowed you to give a name to the variable arguments just like any
30856other argument.  Here is an example:
30857
30858     #define debug(format, args...) fprintf (stderr, format, args)
30859
30860This is in all ways equivalent to the ISO C example above, but arguably
30861more readable and descriptive.
30862
30863 GNU CPP has two further variadic macro extensions, and permits them to
30864be used with either of the above forms of macro definition.
30865
30866 In standard C, you are not allowed to leave the variable argument out
30867entirely; but you are allowed to pass an empty argument.  For example,
30868this invocation is invalid in ISO C, because there is no comma after the
30869string:
30870
30871     debug ("A message")
30872
30873 GNU CPP permits you to completely omit the variable arguments in this
30874way.  In the above examples, the compiler would complain, though since
30875the expansion of the macro still has the extra comma after the format
30876string.
30877
30878 To help solve this problem, CPP behaves specially for variable
30879arguments used with the token paste operator, '##'.  If instead you
30880write
30881
30882     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
30883
30884and if the variable arguments are omitted or empty, the '##' operator
30885causes the preprocessor to remove the comma before it.  If you do
30886provide some variable arguments in your macro invocation, GNU CPP does
30887not complain about the paste operation and instead places the variable
30888arguments after the comma.  Just like any other pasted macro argument,
30889these arguments are not macro expanded.
30890
30891
30892File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
30893
308946.22 Slightly Looser Rules for Escaped Newlines
30895===============================================
30896
30897The preprocessor treatment of escaped newlines is more relaxed than that
30898specified by the C90 standard, which requires the newline to immediately
30899follow a backslash.  GCC's implementation allows whitespace in the form
30900of spaces, horizontal and vertical tabs, and form feeds between the
30901backslash and the subsequent newline.  The preprocessor issues a
30902warning, but treats it as a valid escaped newline and combines the two
30903lines to form a single logical line.  This works within comments and
30904tokens, as well as between tokens.  Comments are _not_ treated as
30905whitespace for the purposes of this relaxation, since they have not yet
30906been replaced with spaces.
30907
30908
30909File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
30910
309116.23 Non-Lvalue Arrays May Have Subscripts
30912==========================================
30913
30914In ISO C99, arrays that are not lvalues still decay to pointers, and may
30915be subscripted, although they may not be modified or used after the next
30916sequence point and the unary '&' operator may not be applied to them.
30917As an extension, GNU C allows such arrays to be subscripted in C90 mode,
30918though otherwise they do not decay to pointers outside C99 mode.  For
30919example, this is valid in GNU C though not valid in C90:
30920
30921     struct foo {int a[4];};
30922
30923     struct foo f();
30924
30925     bar (int index)
30926     {
30927       return f().a[index];
30928     }
30929
30930
30931File: gcc.info,  Node: Pointer Arith,  Next: Variadic Pointer Args,  Prev: Subscripting,  Up: C Extensions
30932
309336.24 Arithmetic on 'void'- and Function-Pointers
30934================================================
30935
30936In GNU C, addition and subtraction operations are supported on pointers
30937to 'void' and on pointers to functions.  This is done by treating the
30938size of a 'void' or of a function as 1.
30939
30940 A consequence of this is that 'sizeof' is also allowed on 'void' and on
30941function types, and returns 1.
30942
30943 The option '-Wpointer-arith' requests a warning if these extensions are
30944used.
30945
30946
30947File: gcc.info,  Node: Variadic Pointer Args,  Next: Pointers to Arrays,  Prev: Pointer Arith,  Up: C Extensions
30948
309496.25 Pointer Arguments in Variadic Functions
30950============================================
30951
30952Standard C requires that pointer types used with 'va_arg' in functions
30953with variable argument lists either must be compatible with that of the
30954actual argument, or that one type must be a pointer to 'void' and the
30955other a pointer to a character type.  GNU C implements the POSIX XSI
30956extension that additionally permits the use of 'va_arg' with a pointer
30957type to receive arguments of any other pointer type.
30958
30959 In particular, in GNU C 'va_arg (ap, void *)' can safely be used to
30960consume an argument of any pointer type.
30961
30962
30963File: gcc.info,  Node: Pointers to Arrays,  Next: Initializers,  Prev: Variadic Pointer Args,  Up: C Extensions
30964
309656.26 Pointers to Arrays with Qualifiers Work as Expected
30966========================================================
30967
30968In GNU C, pointers to arrays with qualifiers work similar to pointers to
30969other qualified types.  For example, a value of type 'int (*)[5]' can be
30970used to initialize a variable of type 'const int (*)[5]'.  These types
30971are incompatible in ISO C because the 'const' qualifier is formally
30972attached to the element type of the array and not the array itself.
30973
30974     extern void
30975     transpose (int N, int M, double out[M][N], const double in[N][M]);
30976     double x[3][2];
30977     double y[2][3];
30978     ...
30979     transpose(3, 2, y, x);
30980
30981
30982File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointers to Arrays,  Up: C Extensions
30983
309846.27 Non-Constant Initializers
30985==============================
30986
30987As in standard C++ and ISO C99, the elements of an aggregate initializer
30988for an automatic variable are not required to be constant expressions in
30989GNU C.  Here is an example of an initializer with run-time varying
30990elements:
30991
30992     foo (float f, float g)
30993     {
30994       float beat_freqs[2] = { f-g, f+g };
30995       /* ... */
30996     }
30997
30998
30999File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
31000
310016.28 Compound Literals
31002======================
31003
31004A compound literal looks like a cast of a brace-enclosed aggregate
31005initializer list.  Its value is an object of the type specified in the
31006cast, containing the elements specified in the initializer.  Unlike the
31007result of a cast, a compound literal is an lvalue.  ISO C99 and later
31008support compound literals.  As an extension, GCC supports compound
31009literals also in C90 mode and in C++, although as explained below, the
31010C++ semantics are somewhat different.
31011
31012 Usually, the specified type of a compound literal is a structure.
31013Assume that 'struct foo' and 'structure' are declared as shown:
31014
31015     struct foo {int a; char b[2];} structure;
31016
31017Here is an example of constructing a 'struct foo' with a compound
31018literal:
31019
31020     structure = ((struct foo) {x + y, 'a', 0});
31021
31022This is equivalent to writing the following:
31023
31024     {
31025       struct foo temp = {x + y, 'a', 0};
31026       structure = temp;
31027     }
31028
31029 You can also construct an array, though this is dangerous in C++, as
31030explained below.  If all the elements of the compound literal are (made
31031up of) simple constant expressions suitable for use in initializers of
31032objects of static storage duration, then the compound literal can be
31033coerced to a pointer to its first element and used in such an
31034initializer, as shown here:
31035
31036     char **foo = (char *[]) { "x", "y", "z" };
31037
31038 Compound literals for scalar types and union types are also allowed.
31039In the following example the variable 'i' is initialized to the value
31040'2', the result of incrementing the unnamed object created by the
31041compound literal.
31042
31043     int i = ++(int) { 1 };
31044
31045 As a GNU extension, GCC allows initialization of objects with static
31046storage duration by compound literals (which is not possible in ISO C99
31047because the initializer is not a constant).  It is handled as if the
31048object were initialized only with the brace-enclosed list if the types
31049of the compound literal and the object match.  The elements of the
31050compound literal must be constant.  If the object being initialized has
31051array type of unknown size, the size is determined by the size of the
31052compound literal.
31053
31054     static struct foo x = (struct foo) {1, 'a', 'b'};
31055     static int y[] = (int []) {1, 2, 3};
31056     static int z[] = (int [3]) {1};
31057
31058The above lines are equivalent to the following:
31059     static struct foo x = {1, 'a', 'b'};
31060     static int y[] = {1, 2, 3};
31061     static int z[] = {1, 0, 0};
31062
31063 In C, a compound literal designates an unnamed object with static or
31064automatic storage duration.  In C++, a compound literal designates a
31065temporary object that only lives until the end of its full-expression.
31066As a result, well-defined C code that takes the address of a subobject
31067of a compound literal can be undefined in C++, so G++ rejects the
31068conversion of a temporary array to a pointer.  For instance, if the
31069array compound literal example above appeared inside a function, any
31070subsequent use of 'foo' in C++ would have undefined behavior because the
31071lifetime of the array ends after the declaration of 'foo'.
31072
31073 As an optimization, G++ sometimes gives array compound literals longer
31074lifetimes: when the array either appears outside a function or has a
31075'const'-qualified type.  If 'foo' and its initializer had elements of
31076type 'char *const' rather than 'char *', or if 'foo' were a global
31077variable, the array would have static storage duration.  But it is
31078probably safest just to avoid the use of array compound literals in C++
31079code.
31080
31081
31082File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions
31083
310846.29 Designated Initializers
31085============================
31086
31087Standard C90 requires the elements of an initializer to appear in a
31088fixed order, the same as the order of the elements in the array or
31089structure being initialized.
31090
31091 In ISO C99 you can give the elements in any order, specifying the array
31092indices or structure field names they apply to, and GNU C allows this as
31093an extension in C90 mode as well.  This extension is not implemented in
31094GNU C++.
31095
31096 To specify an array index, write '[INDEX] =' before the element value.
31097For example,
31098
31099     int a[6] = { [4] = 29, [2] = 15 };
31100
31101is equivalent to
31102
31103     int a[6] = { 0, 0, 15, 0, 29, 0 };
31104
31105The index values must be constant expressions, even if the array being
31106initialized is automatic.
31107
31108 An alternative syntax for this that has been obsolete since GCC 2.5 but
31109GCC still accepts is to write '[INDEX]' before the element value, with
31110no '='.
31111
31112 To initialize a range of elements to the same value, write '[FIRST ...
31113LAST] = VALUE'.  This is a GNU extension.  For example,
31114
31115     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
31116
31117If the value in it has side effects, the side effects happen only once,
31118not for each initialized field by the range initializer.
31119
31120Note that the length of the array is the highest value specified plus
31121one.
31122
31123 In a structure initializer, specify the name of a field to initialize
31124with '.FIELDNAME =' before the element value.  For example, given the
31125following structure,
31126
31127     struct point { int x, y; };
31128
31129the following initialization
31130
31131     struct point p = { .y = yvalue, .x = xvalue };
31132
31133is equivalent to
31134
31135     struct point p = { xvalue, yvalue };
31136
31137 Another syntax that has the same meaning, obsolete since GCC 2.5, is
31138'FIELDNAME:', as shown here:
31139
31140     struct point p = { y: yvalue, x: xvalue };
31141
31142 Omitted fields are implicitly initialized the same as for objects that
31143have static storage duration.
31144
31145 The '[INDEX]' or '.FIELDNAME' is known as a "designator".  You can also
31146use a designator (or the obsolete colon syntax) when initializing a
31147union, to specify which element of the union should be used.  For
31148example,
31149
31150     union foo { int i; double d; };
31151
31152     union foo f = { .d = 4 };
31153
31154converts 4 to a 'double' to store it in the union using the second
31155element.  By contrast, casting 4 to type 'union foo' stores it into the
31156union as the integer 'i', since it is an integer.  *Note Cast to
31157Union::.
31158
31159 You can combine this technique of naming elements with ordinary C
31160initialization of successive elements.  Each initializer element that
31161does not have a designator applies to the next consecutive element of
31162the array or structure.  For example,
31163
31164     int a[6] = { [1] = v1, v2, [4] = v4 };
31165
31166is equivalent to
31167
31168     int a[6] = { 0, v1, v2, 0, v4, 0 };
31169
31170 Labeling the elements of an array initializer is especially useful when
31171the indices are characters or belong to an 'enum' type.  For example:
31172
31173     int whitespace[256]
31174       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
31175           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
31176
31177 You can also write a series of '.FIELDNAME' and '[INDEX]' designators
31178before an '=' to specify a nested subobject to initialize; the list is
31179taken relative to the subobject corresponding to the closest surrounding
31180brace pair.  For example, with the 'struct point' declaration above:
31181
31182     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
31183
31184 If the same field is initialized multiple times, or overlapping fields
31185of a union are initialized, the value from the last initialization is
31186used.  When a field of a union is itself a structure, the entire
31187structure from the last field initialized is used.  If any previous
31188initializer has side effect, it is unspecified whether the side effect
31189happens or not.  Currently, GCC discards the side-effecting initializer
31190expressions and issues a warning.
31191
31192
31193File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions
31194
311956.30 Case Ranges
31196================
31197
31198You can specify a range of consecutive values in a single 'case' label,
31199like this:
31200
31201     case LOW ... HIGH:
31202
31203This has the same effect as the proper number of individual 'case'
31204labels, one for each integer value from LOW to HIGH, inclusive.
31205
31206 This feature is especially useful for ranges of ASCII character codes:
31207
31208     case 'A' ... 'Z':
31209
31210 *Be careful:* Write spaces around the '...', for otherwise it may be
31211parsed wrong when you use it with integer values.  For example, write
31212this:
31213
31214     case 1 ... 5:
31215
31216rather than this:
31217
31218     case 1...5:
31219
31220
31221File: gcc.info,  Node: Cast to Union,  Next: Mixed Declarations,  Prev: Case Ranges,  Up: C Extensions
31222
312236.31 Cast to a Union Type
31224=========================
31225
31226A cast to a union type is a C extension not available in C++.  It looks
31227just like ordinary casts with the constraint that the type specified is
31228a union type.  You can specify the type either with the 'union' keyword
31229or with a 'typedef' name that refers to a union.  The result of a cast
31230to a union is a temporary rvalue of the union type with a member whose
31231type matches that of the operand initialized to the value of the
31232operand.  The effect of a cast to a union is similar to a compound
31233literal except that it yields an rvalue like standard casts do.  *Note
31234Compound Literals::.
31235
31236 Expressions that may be cast to the union type are those whose type
31237matches at least one of the members of the union.  Thus, given the
31238following union and variables:
31239
31240     union foo { int i; double d; };
31241     int x;
31242     double y;
31243     union foo z;
31244
31245both 'x' and 'y' can be cast to type 'union foo' and the following
31246assignments
31247       z = (union foo) x;
31248       z = (union foo) y;
31249 are shorthand equivalents of these
31250       z = (union foo) { .i = x };
31251       z = (union foo) { .d = y };
31252
31253 However, '(union foo) FLT_MAX;' is not a valid cast because the union
31254has no member of type 'float'.
31255
31256 Using the cast as the right-hand side of an assignment to a variable of
31257union type is equivalent to storing in a member of the union with the
31258same type
31259
31260     union foo u;
31261     /* ... */
31262     u = (union foo) x  ==  u.i = x
31263     u = (union foo) y  ==  u.d = y
31264
31265 You can also use the union cast as a function argument:
31266
31267     void hack (union foo);
31268     /* ... */
31269     hack ((union foo) x);
31270
31271
31272File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
31273
312746.32 Mixed Declarations and Code
31275================================
31276
31277ISO C99 and ISO C++ allow declarations and code to be freely mixed
31278within compound statements.  As an extension, GNU C also allows this in
31279C90 mode.  For example, you could do:
31280
31281     int i;
31282     /* ... */
31283     i++;
31284     int j = i + 2;
31285
31286 Each identifier is visible from where it is declared until the end of
31287the enclosing block.
31288
31289
31290File: gcc.info,  Node: Function Attributes,  Next: Variable Attributes,  Prev: Mixed Declarations,  Up: C Extensions
31291
312926.33 Declaring Attributes of Functions
31293======================================
31294
31295In GNU C and C++, you can use function attributes to specify certain
31296function properties that may help the compiler optimize calls or check
31297code more carefully for correctness.  For example, you can use
31298attributes to specify that a function never returns ('noreturn'),
31299returns a value depending only on the values of its arguments ('const'),
31300or has 'printf'-style arguments ('format').
31301
31302 You can also use attributes to control memory placement, code
31303generation options or call/return conventions within the function being
31304annotated.  Many of these attributes are target-specific.  For example,
31305many targets support attributes for defining interrupt handler
31306functions, which typically must follow special register usage and return
31307conventions.  Such attributes are described in the subsection for each
31308target.  However, a considerable number of attributes are supported by
31309most, if not all targets.  Those are described in the *note Common
31310Function Attributes:: section.
31311
31312 Function attributes are introduced by the '__attribute__' keyword in
31313the declaration of a function, followed by an attribute specification
31314enclosed in double parentheses.  You can specify multiple attributes in
31315a declaration by separating them by commas within the double parentheses
31316or by immediately following one attribute specification with another.
31317*Note Attribute Syntax::, for the exact rules on attribute syntax and
31318placement.  Compatible attribute specifications on distinct declarations
31319of the same function are merged.  An attribute specification that is not
31320compatible with attributes already applied to a declaration of the same
31321function is ignored with a warning.
31322
31323 Some function attributes take one or more arguments that refer to the
31324function's parameters by their positions within the function parameter
31325list.  Such attribute arguments are referred to as "positional
31326arguments".  Unless specified otherwise, positional arguments that
31327specify properties of parameters with pointer types can also specify the
31328same properties of the implicit C++ 'this' argument in non-static member
31329functions, and of parameters of reference to a pointer type.  For
31330ordinary functions, position one refers to the first parameter on the
31331list.  In C++ non-static member functions, position one refers to the
31332implicit 'this' pointer.  The same restrictions and effects apply to
31333function attributes used with ordinary functions or C++ member
31334functions.
31335
31336 GCC also supports attributes on variable declarations (*note Variable
31337Attributes::), labels (*note Label Attributes::), enumerators (*note
31338Enumerator Attributes::), statements (*note Statement Attributes::), and
31339types (*note Type Attributes::).
31340
31341 There is some overlap between the purposes of attributes and pragmas
31342(*note Pragmas Accepted by GCC: Pragmas.).  It has been found convenient
31343to use '__attribute__' to achieve a natural attachment of attributes to
31344their corresponding declarations, whereas '#pragma' is of use for
31345compatibility with other compilers or constructs that do not naturally
31346form part of the grammar.
31347
31348 In addition to the attributes documented here, GCC plugins may provide
31349their own attributes.
31350
31351* Menu:
31352
31353* Common Function Attributes::
31354* AArch64 Function Attributes::
31355* AMD GCN Function Attributes::
31356* ARC Function Attributes::
31357* ARM Function Attributes::
31358* AVR Function Attributes::
31359* Blackfin Function Attributes::
31360* BPF Function Attributes::
31361* CR16 Function Attributes::
31362* C-SKY Function Attributes::
31363* Epiphany Function Attributes::
31364* H8/300 Function Attributes::
31365* IA-64 Function Attributes::
31366* M32C Function Attributes::
31367* M32R/D Function Attributes::
31368* m68k Function Attributes::
31369* MCORE Function Attributes::
31370* MeP Function Attributes::
31371* MicroBlaze Function Attributes::
31372* Microsoft Windows Function Attributes::
31373* MIPS Function Attributes::
31374* MSP430 Function Attributes::
31375* NDS32 Function Attributes::
31376* Nios II Function Attributes::
31377* Nvidia PTX Function Attributes::
31378* PowerPC Function Attributes::
31379* RISC-V Function Attributes::
31380* RL78 Function Attributes::
31381* RX Function Attributes::
31382* S/390 Function Attributes::
31383* SH Function Attributes::
31384* Symbian OS Function Attributes::
31385* V850 Function Attributes::
31386* Visium Function Attributes::
31387* x86 Function Attributes::
31388* Xstormy16 Function Attributes::
31389
31390
31391File: gcc.info,  Node: Common Function Attributes,  Next: AArch64 Function Attributes,  Up: Function Attributes
31392
313936.33.1 Common Function Attributes
31394---------------------------------
31395
31396The following attributes are supported on most targets.
31397
31398'access'
31399'access (ACCESS-MODE, REF-INDEX)'
31400'access (ACCESS-MODE, REF-INDEX, SIZE-INDEX)'
31401
31402     The 'access' attribute enables the detection of invalid or unsafe
31403     accesses by functions to which they apply or their callers, as well
31404     as write-only accesses to objects that are never read from.  Such
31405     accesses may be diagnosed by warnings such as
31406     '-Wstringop-overflow', '-Wuninitialized', '-Wunused', and others.
31407
31408     The 'access' attribute specifies that a function to whose
31409     by-reference arguments the attribute applies accesses the
31410     referenced object according to ACCESS-MODE.  The ACCESS-MODE
31411     argument is required and must be one of three names: 'read_only',
31412     'read_write', or 'write_only'.  The remaining two are positional
31413     arguments.
31414
31415     The required REF-INDEX positional argument denotes a function
31416     argument of pointer (or in C++, reference) type that is subject to
31417     the access.  The same pointer argument can be referenced by at most
31418     one distinct 'access' attribute.
31419
31420     The optional SIZE-INDEX positional argument denotes a function
31421     argument of integer type that specifies the maximum size of the
31422     access.  The size is the number of elements of the type referenced
31423     by REF-INDEX, or the number of bytes when the pointer type is
31424     'void*'.  When no SIZE-INDEX argument is specified, the pointer
31425     argument must be either null or point to a space that is suitably
31426     aligned and large for at least one object of the referenced type
31427     (this implies that a past-the-end pointer is not a valid argument).
31428     The actual size of the access may be less but it must not be more.
31429
31430     The 'read_only' access mode specifies that the pointer to which it
31431     applies is used to read the referenced object but not write to it.
31432     Unless the argument specifying the size of the access denoted by
31433     SIZE-INDEX is zero, the referenced object must be initialized.  The
31434     mode implies a stronger guarantee than the 'const' qualifier which,
31435     when cast away from a pointer, does not prevent the pointed-to
31436     object from being modified.  Examples of the use of the 'read_only'
31437     access mode is the argument to the 'puts' function, or the second
31438     and third arguments to the 'memcpy' function.
31439
31440          __attribute__ ((access (read_only, 1))) int puts (const char*);
31441          __attribute__ ((access (read_only, 1, 2))) void* memcpy (void*, const void*, size_t);
31442
31443     The 'read_write' access mode applies to arguments of pointer types
31444     without the 'const' qualifier.  It specifies that the pointer to
31445     which it applies is used to both read and write the referenced
31446     object.  Unless the argument specifying the size of the access
31447     denoted by SIZE-INDEX is zero, the object referenced by the pointer
31448     must be initialized.  An example of the use of the 'read_write'
31449     access mode is the first argument to the 'strcat' function.
31450
31451          __attribute__ ((access (read_write, 1), access (read_only, 2))) char* strcat (char*, const char*);
31452
31453     The 'write_only' access mode applies to arguments of pointer types
31454     without the 'const' qualifier.  It specifies that the pointer to
31455     which it applies is used to write to the referenced object but not
31456     read from it.  The object referenced by the pointer need not be
31457     initialized.  An example of the use of the 'write_only' access mode
31458     is the first argument to the 'strcpy' function, or the first two
31459     arguments to the 'fgets' function.
31460
31461          __attribute__ ((access (write_only, 1), access (read_only, 2))) char* strcpy (char*, const char*);
31462          __attribute__ ((access (write_only, 1, 2), access (read_write, 3))) int fgets (char*, int, FILE*);
31463
31464'alias ("TARGET")'
31465     The 'alias' attribute causes the declaration to be emitted as an
31466     alias for another symbol, which must have been previously declared
31467     with the same type, and for variables, also the same size and
31468     alignment.  Declaring an alias with a different type than the
31469     target is undefined and may be diagnosed.  As an example, the
31470     following declarations:
31471
31472          void __f () { /* Do something. */; }
31473          void f () __attribute__ ((weak, alias ("__f")));
31474
31475     define 'f' to be a weak alias for '__f'.  In C++, the mangled name
31476     for the target must be used.  It is an error if '__f' is not
31477     defined in the same translation unit.
31478
31479     This attribute requires assembler and object file support, and may
31480     not be available on all targets.
31481
31482'aligned'
31483'aligned (ALIGNMENT)'
31484     The 'aligned' attribute specifies a minimum alignment for the first
31485     instruction of the function, measured in bytes.  When specified,
31486     ALIGNMENT must be an integer constant power of 2.  Specifying no
31487     ALIGNMENT argument implies the ideal alignment for the target.  The
31488     '__alignof__' operator can be used to determine what that is (*note
31489     Alignment::).  The attribute has no effect when a definition for
31490     the function is not provided in the same translation unit.
31491
31492     The attribute cannot be used to decrease the alignment of a
31493     function previously declared with a more restrictive alignment;
31494     only to increase it.  Attempts to do otherwise are diagnosed.  Some
31495     targets specify a minimum default alignment for functions that is
31496     greater than 1.  On such targets, specifying a less restrictive
31497     alignment is silently ignored.  Using the attribute overrides the
31498     effect of the '-falign-functions' (*note Optimize Options::) option
31499     for this function.
31500
31501     Note that the effectiveness of 'aligned' attributes may be limited
31502     by inherent limitations in the system linker and/or object file
31503     format.  On some systems, the linker is only able to arrange for
31504     functions to be aligned up to a certain maximum alignment.  (For
31505     some linkers, the maximum supported alignment may be very very
31506     small.)  See your linker documentation for further information.
31507
31508     The 'aligned' attribute can also be used for variables and fields
31509     (*note Variable Attributes::.)
31510
31511'alloc_align (POSITION)'
31512     The 'alloc_align' attribute may be applied to a function that
31513     returns a pointer and takes at least one argument of an integer or
31514     enumerated type.  It indicates that the returned pointer is aligned
31515     on a boundary given by the function argument at POSITION.
31516     Meaningful alignments are powers of 2 greater than one.  GCC uses
31517     this information to improve pointer alignment analysis.
31518
31519     The function parameter denoting the allocated alignment is
31520     specified by one constant integer argument whose number is the
31521     argument of the attribute.  Argument numbering starts at one.
31522
31523     For instance,
31524
31525          void* my_memalign (size_t, size_t) __attribute__ ((alloc_align (1)));
31526
31527     declares that 'my_memalign' returns memory with minimum alignment
31528     given by parameter 1.
31529
31530'alloc_size (POSITION)'
31531'alloc_size (POSITION-1, POSITION-2)'
31532     The 'alloc_size' attribute may be applied to a function that
31533     returns a pointer and takes at least one argument of an integer or
31534     enumerated type.  It indicates that the returned pointer points to
31535     memory whose size is given by the function argument at POSITION-1,
31536     or by the product of the arguments at POSITION-1 and POSITION-2.
31537     Meaningful sizes are positive values less than 'PTRDIFF_MAX'.  GCC
31538     uses this information to improve the results of
31539     '__builtin_object_size'.
31540
31541     The function parameter(s) denoting the allocated size are specified
31542     by one or two integer arguments supplied to the attribute.  The
31543     allocated size is either the value of the single function argument
31544     specified or the product of the two function arguments specified.
31545     Argument numbering starts at one for ordinary functions, and at two
31546     for C++ non-static member functions.
31547
31548     For instance,
31549
31550          void* my_calloc (size_t, size_t) __attribute__ ((alloc_size (1, 2)));
31551          void* my_realloc (void*, size_t) __attribute__ ((alloc_size (2)));
31552
31553     declares that 'my_calloc' returns memory of the size given by the
31554     product of parameter 1 and 2 and that 'my_realloc' returns memory
31555     of the size given by parameter 2.
31556
31557'always_inline'
31558     Generally, functions are not inlined unless optimization is
31559     specified.  For functions declared inline, this attribute inlines
31560     the function independent of any restrictions that otherwise apply
31561     to inlining.  Failure to inline such a function is diagnosed as an
31562     error.  Note that if such a function is called indirectly the
31563     compiler may or may not inline it depending on optimization level
31564     and a failure to inline an indirect call may or may not be
31565     diagnosed.
31566
31567'artificial'
31568     This attribute is useful for small inline wrappers that if possible
31569     should appear during debugging as a unit.  Depending on the debug
31570     info format it either means marking the function as artificial or
31571     using the caller location for all instructions within the inlined
31572     body.
31573
31574'assume_aligned (ALIGNMENT)'
31575'assume_aligned (ALIGNMENT, OFFSET)'
31576     The 'assume_aligned' attribute may be applied to a function that
31577     returns a pointer.  It indicates that the returned pointer is
31578     aligned on a boundary given by ALIGNMENT.  If the attribute has two
31579     arguments, the second argument is misalignment OFFSET.  Meaningful
31580     values of ALIGNMENT are powers of 2 greater than one.  Meaningful
31581     values of OFFSET are greater than zero and less than ALIGNMENT.
31582
31583     For instance
31584
31585          void* my_alloc1 (size_t) __attribute__((assume_aligned (16)));
31586          void* my_alloc2 (size_t) __attribute__((assume_aligned (32, 8)));
31587
31588     declares that 'my_alloc1' returns 16-byte aligned pointers and that
31589     'my_alloc2' returns a pointer whose value modulo 32 is equal to 8.
31590
31591'cold'
31592     The 'cold' attribute on functions is used to inform the compiler
31593     that the function is unlikely to be executed.  The function is
31594     optimized for size rather than speed and on many targets it is
31595     placed into a special subsection of the text section so all cold
31596     functions appear close together, improving code locality of
31597     non-cold parts of program.  The paths leading to calls of cold
31598     functions within code are marked as unlikely by the branch
31599     prediction mechanism.  It is thus useful to mark functions used to
31600     handle unlikely conditions, such as 'perror', as cold to improve
31601     optimization of hot functions that do call marked functions in rare
31602     occasions.
31603
31604     When profile feedback is available, via '-fprofile-use', cold
31605     functions are automatically detected and this attribute is ignored.
31606
31607'const'
31608     Calls to functions whose return value is not affected by changes to
31609     the observable state of the program and that have no observable
31610     effects on such state other than to return a value may lend
31611     themselves to optimizations such as common subexpression
31612     elimination.  Declaring such functions with the 'const' attribute
31613     allows GCC to avoid emitting some calls in repeated invocations of
31614     the function with the same argument values.
31615
31616     For example,
31617
31618          int square (int) __attribute__ ((const));
31619
31620     tells GCC that subsequent calls to function 'square' with the same
31621     argument value can be replaced by the result of the first call
31622     regardless of the statements in between.
31623
31624     The 'const' attribute prohibits a function from reading objects
31625     that affect its return value between successive invocations.
31626     However, functions declared with the attribute can safely read
31627     objects that do not change their return value, such as non-volatile
31628     constants.
31629
31630     The 'const' attribute imposes greater restrictions on a function's
31631     definition than the similar 'pure' attribute.  Declaring the same
31632     function with both the 'const' and the 'pure' attribute is
31633     diagnosed.  Because a const function cannot have any observable
31634     side effects it does not make sense for it to return 'void'.
31635     Declaring such a function is diagnosed.
31636
31637     Note that a function that has pointer arguments and examines the
31638     data pointed to must _not_ be declared 'const' if the pointed-to
31639     data might change between successive invocations of the function.
31640     In general, since a function cannot distinguish data that might
31641     change from data that cannot, const functions should never take
31642     pointer or, in C++, reference arguments.  Likewise, a function that
31643     calls a non-const function usually must not be const itself.
31644
31645'constructor'
31646'destructor'
31647'constructor (PRIORITY)'
31648'destructor (PRIORITY)'
31649     The 'constructor' attribute causes the function to be called
31650     automatically before execution enters 'main ()'.  Similarly, the
31651     'destructor' attribute causes the function to be called
31652     automatically after 'main ()' completes or 'exit ()' is called.
31653     Functions with these attributes are useful for initializing data
31654     that is used implicitly during the execution of the program.
31655
31656     On some targets the attributes also accept an integer argument to
31657     specify a priority to control the order in which constructor and
31658     destructor functions are run.  A constructor with a smaller
31659     priority number runs before a constructor with a larger priority
31660     number; the opposite relationship holds for destructors.  So, if
31661     you have a constructor that allocates a resource and a destructor
31662     that deallocates the same resource, both functions typically have
31663     the same priority.  The priorities for constructor and destructor
31664     functions are the same as those specified for namespace-scope C++
31665     objects (*note C++ Attributes::).  However, at present, the order
31666     in which constructors for C++ objects with static storage duration
31667     and functions decorated with attribute 'constructor' are invoked is
31668     unspecified.  In mixed declarations, attribute 'init_priority' can
31669     be used to impose a specific ordering.
31670
31671     Using the argument forms of the 'constructor' and 'destructor'
31672     attributes on targets where the feature is not supported is
31673     rejected with an error.
31674
31675'copy'
31676'copy (FUNCTION)'
31677     The 'copy' attribute applies the set of attributes with which
31678     FUNCTION has been declared to the declaration of the function to
31679     which the attribute is applied.  The attribute is designed for
31680     libraries that define aliases or function resolvers that are
31681     expected to specify the same set of attributes as their targets.
31682     The 'copy' attribute can be used with functions, variables, or
31683     types.  However, the kind of symbol to which the attribute is
31684     applied (either function or variable) must match the kind of symbol
31685     to which the argument refers.  The 'copy' attribute copies only
31686     syntactic and semantic attributes but not attributes that affect a
31687     symbol's linkage or visibility such as 'alias', 'visibility', or
31688     'weak'.  The 'deprecated' and 'target_clones' attribute are also
31689     not copied.  *Note Common Type Attributes::.  *Note Common Variable
31690     Attributes::.
31691
31692     For example, the STRONGALIAS macro below makes use of the 'alias'
31693     and 'copy' attributes to define an alias named ALLOC for function
31694     ALLOCATE declared with attributes ALLOC_SIZE, MALLOC, and NOTHROW.
31695     Thanks to the '__typeof__' operator the alias has the same type as
31696     the target function.  As a result of the 'copy' attribute the alias
31697     also shares the same attributes as the target.
31698
31699          #define StrongAlias(TargetFunc, AliasDecl)  \
31700            extern __typeof__ (TargetFunc) AliasDecl  \
31701              __attribute__ ((alias (#TargetFunc), copy (TargetFunc)));
31702
31703          extern __attribute__ ((alloc_size (1), malloc, nothrow))
31704            void* allocate (size_t);
31705          StrongAlias (allocate, alloc);
31706
31707'deprecated'
31708'deprecated (MSG)'
31709     The 'deprecated' attribute results in a warning if the function is
31710     used anywhere in the source file.  This is useful when identifying
31711     functions that are expected to be removed in a future version of a
31712     program.  The warning also includes the location of the declaration
31713     of the deprecated function, to enable users to easily find further
31714     information about why the function is deprecated, or what they
31715     should do instead.  Note that the warnings only occurs for uses:
31716
31717          int old_fn () __attribute__ ((deprecated));
31718          int old_fn ();
31719          int (*fn_ptr)() = old_fn;
31720
31721     results in a warning on line 3 but not line 2.  The optional MSG
31722     argument, which must be a string, is printed in the warning if
31723     present.
31724
31725     The 'deprecated' attribute can also be used for variables and types
31726     (*note Variable Attributes::, *note Type Attributes::.)
31727
31728     The message attached to the attribute is affected by the setting of
31729     the '-fmessage-length' option.
31730
31731'error ("MESSAGE")'
31732'warning ("MESSAGE")'
31733     If the 'error' or 'warning' attribute is used on a function
31734     declaration and a call to such a function is not eliminated through
31735     dead code elimination or other optimizations, an error or warning
31736     (respectively) that includes MESSAGE is diagnosed.  This is useful
31737     for compile-time checking, especially together with
31738     '__builtin_constant_p' and inline functions where checking the
31739     inline function arguments is not possible through 'extern char
31740     [(condition) ? 1 : -1];' tricks.
31741
31742     While it is possible to leave the function undefined and thus
31743     invoke a link failure (to define the function with a message in
31744     '.gnu.warning*' section), when using these attributes the problem
31745     is diagnosed earlier and with exact location of the call even in
31746     presence of inline functions or when not emitting debugging
31747     information.
31748
31749'externally_visible'
31750     This attribute, attached to a global variable or function,
31751     nullifies the effect of the '-fwhole-program' command-line option,
31752     so the object remains visible outside the current compilation unit.
31753
31754     If '-fwhole-program' is used together with '-flto' and 'gold' is
31755     used as the linker plugin, 'externally_visible' attributes are
31756     automatically added to functions (not variable yet due to a current
31757     'gold' issue) that are accessed outside of LTO objects according to
31758     resolution file produced by 'gold'.  For other linkers that cannot
31759     generate resolution file, explicit 'externally_visible' attributes
31760     are still necessary.
31761
31762'flatten'
31763     Generally, inlining into a function is limited.  For a function
31764     marked with this attribute, every call inside this function is
31765     inlined, if possible.  Functions declared with attribute 'noinline'
31766     and similar are not inlined.  Whether the function itself is
31767     considered for inlining depends on its size and the current
31768     inlining parameters.
31769
31770'format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
31771     The 'format' attribute specifies that a function takes 'printf',
31772     'scanf', 'strftime' or 'strfmon' style arguments that should be
31773     type-checked against a format string.  For example, the
31774     declaration:
31775
31776          extern int
31777          my_printf (void *my_object, const char *my_format, ...)
31778                __attribute__ ((format (printf, 2, 3)));
31779
31780     causes the compiler to check the arguments in calls to 'my_printf'
31781     for consistency with the 'printf' style format string argument
31782     'my_format'.
31783
31784     The parameter ARCHETYPE determines how the format string is
31785     interpreted, and should be 'printf', 'scanf', 'strftime',
31786     'gnu_printf', 'gnu_scanf', 'gnu_strftime' or 'strfmon'.  (You can
31787     also use '__printf__', '__scanf__', '__strftime__' or
31788     '__strfmon__'.)  On MinGW targets, 'ms_printf', 'ms_scanf', and
31789     'ms_strftime' are also present.  ARCHETYPE values such as 'printf'
31790     refer to the formats accepted by the system's C runtime library,
31791     while values prefixed with 'gnu_' always refer to the formats
31792     accepted by the GNU C Library.  On Microsoft Windows targets,
31793     values prefixed with 'ms_' refer to the formats accepted by the
31794     'msvcrt.dll' library.  The parameter STRING-INDEX specifies which
31795     argument is the format string argument (starting from 1), while
31796     FIRST-TO-CHECK is the number of the first argument to check against
31797     the format string.  For functions where the arguments are not
31798     available to be checked (such as 'vprintf'), specify the third
31799     parameter as zero.  In this case the compiler only checks the
31800     format string for consistency.  For 'strftime' formats, the third
31801     parameter is required to be zero.  Since non-static C++ methods
31802     have an implicit 'this' argument, the arguments of such methods
31803     should be counted from two, not one, when giving values for
31804     STRING-INDEX and FIRST-TO-CHECK.
31805
31806     In the example above, the format string ('my_format') is the second
31807     argument of the function 'my_print', and the arguments to check
31808     start with the third argument, so the correct parameters for the
31809     format attribute are 2 and 3.
31810
31811     The 'format' attribute allows you to identify your own functions
31812     that take format strings as arguments, so that GCC can check the
31813     calls to these functions for errors.  The compiler always (unless
31814     '-ffreestanding' or '-fno-builtin' is used) checks formats for the
31815     standard library functions 'printf', 'fprintf', 'sprintf', 'scanf',
31816     'fscanf', 'sscanf', 'strftime', 'vprintf', 'vfprintf' and
31817     'vsprintf' whenever such warnings are requested (using '-Wformat'),
31818     so there is no need to modify the header file 'stdio.h'.  In C99
31819     mode, the functions 'snprintf', 'vsnprintf', 'vscanf', 'vfscanf'
31820     and 'vsscanf' are also checked.  Except in strictly conforming C
31821     standard modes, the X/Open function 'strfmon' is also checked as
31822     are 'printf_unlocked' and 'fprintf_unlocked'.  *Note Options
31823     Controlling C Dialect: C Dialect Options.
31824
31825     For Objective-C dialects, 'NSString' (or '__NSString__') is
31826     recognized in the same context.  Declarations including these
31827     format attributes are parsed for correct syntax, however the result
31828     of checking of such format strings is not yet defined, and is not
31829     carried out by this version of the compiler.
31830
31831     The target may also provide additional types of format checks.
31832     *Note Format Checks Specific to Particular Target Machines: Target
31833     Format Checks.
31834
31835'format_arg (STRING-INDEX)'
31836     The 'format_arg' attribute specifies that a function takes one or
31837     more format strings for a 'printf', 'scanf', 'strftime' or
31838     'strfmon' style function and modifies it (for example, to translate
31839     it into another language), so the result can be passed to a
31840     'printf', 'scanf', 'strftime' or 'strfmon' style function (with the
31841     remaining arguments to the format function the same as they would
31842     have been for the unmodified string).  Multiple 'format_arg'
31843     attributes may be applied to the same function, each designating a
31844     distinct parameter as a format string.  For example, the
31845     declaration:
31846
31847          extern char *
31848          my_dgettext (char *my_domain, const char *my_format)
31849                __attribute__ ((format_arg (2)));
31850
31851     causes the compiler to check the arguments in calls to a 'printf',
31852     'scanf', 'strftime' or 'strfmon' type function, whose format string
31853     argument is a call to the 'my_dgettext' function, for consistency
31854     with the format string argument 'my_format'.  If the 'format_arg'
31855     attribute had not been specified, all the compiler could tell in
31856     such calls to format functions would be that the format string
31857     argument is not constant; this would generate a warning when
31858     '-Wformat-nonliteral' is used, but the calls could not be checked
31859     without the attribute.
31860
31861     In calls to a function declared with more than one 'format_arg'
31862     attribute, each with a distinct argument value, the corresponding
31863     actual function arguments are checked against all format strings
31864     designated by the attributes.  This capability is designed to
31865     support the GNU 'ngettext' family of functions.
31866
31867     The parameter STRING-INDEX specifies which argument is the format
31868     string argument (starting from one).  Since non-static C++ methods
31869     have an implicit 'this' argument, the arguments of such methods
31870     should be counted from two.
31871
31872     The 'format_arg' attribute allows you to identify your own
31873     functions that modify format strings, so that GCC can check the
31874     calls to 'printf', 'scanf', 'strftime' or 'strfmon' type function
31875     whose operands are a call to one of your own function.  The
31876     compiler always treats 'gettext', 'dgettext', and 'dcgettext' in
31877     this manner except when strict ISO C support is requested by
31878     '-ansi' or an appropriate '-std' option, or '-ffreestanding' or
31879     '-fno-builtin' is used.  *Note Options Controlling C Dialect: C
31880     Dialect Options.
31881
31882     For Objective-C dialects, the 'format-arg' attribute may refer to
31883     an 'NSString' reference for compatibility with the 'format'
31884     attribute above.
31885
31886     The target may also allow additional types in 'format-arg'
31887     attributes.  *Note Format Checks Specific to Particular Target
31888     Machines: Target Format Checks.
31889
31890'gnu_inline'
31891     This attribute should be used with a function that is also declared
31892     with the 'inline' keyword.  It directs GCC to treat the function as
31893     if it were defined in gnu90 mode even when compiling in C99 or
31894     gnu99 mode.
31895
31896     If the function is declared 'extern', then this definition of the
31897     function is used only for inlining.  In no case is the function
31898     compiled as a standalone function, not even if you take its address
31899     explicitly.  Such an address becomes an external reference, as if
31900     you had only declared the function, and had not defined it.  This
31901     has almost the effect of a macro.  The way to use this is to put a
31902     function definition in a header file with this attribute, and put
31903     another copy of the function, without 'extern', in a library file.
31904     The definition in the header file causes most calls to the function
31905     to be inlined.  If any uses of the function remain, they refer to
31906     the single copy in the library.  Note that the two definitions of
31907     the functions need not be precisely the same, although if they do
31908     not have the same effect your program may behave oddly.
31909
31910     In C, if the function is neither 'extern' nor 'static', then the
31911     function is compiled as a standalone function, as well as being
31912     inlined where possible.
31913
31914     This is how GCC traditionally handled functions declared 'inline'.
31915     Since ISO C99 specifies a different semantics for 'inline', this
31916     function attribute is provided as a transition measure and as a
31917     useful feature in its own right.  This attribute is available in
31918     GCC 4.1.3 and later.  It is available if either of the preprocessor
31919     macros '__GNUC_GNU_INLINE__' or '__GNUC_STDC_INLINE__' are defined.
31920     *Note An Inline Function is As Fast As a Macro: Inline.
31921
31922     In C++, this attribute does not depend on 'extern' in any way, but
31923     it still requires the 'inline' keyword to enable its special
31924     behavior.
31925
31926'hot'
31927     The 'hot' attribute on a function is used to inform the compiler
31928     that the function is a hot spot of the compiled program.  The
31929     function is optimized more aggressively and on many targets it is
31930     placed into a special subsection of the text section so all hot
31931     functions appear close together, improving locality.
31932
31933     When profile feedback is available, via '-fprofile-use', hot
31934     functions are automatically detected and this attribute is ignored.
31935
31936'ifunc ("RESOLVER")'
31937     The 'ifunc' attribute is used to mark a function as an indirect
31938     function using the STT_GNU_IFUNC symbol type extension to the ELF
31939     standard.  This allows the resolution of the symbol value to be
31940     determined dynamically at load time, and an optimized version of
31941     the routine to be selected for the particular processor or other
31942     system characteristics determined then.  To use this attribute,
31943     first define the implementation functions available, and a resolver
31944     function that returns a pointer to the selected implementation
31945     function.  The implementation functions' declarations must match
31946     the API of the function being implemented.  The resolver should be
31947     declared to be a function taking no arguments and returning a
31948     pointer to a function of the same type as the implementation.  For
31949     example:
31950
31951          void *my_memcpy (void *dst, const void *src, size_t len)
31952          {
31953            ...
31954            return dst;
31955          }
31956
31957          static void * (*resolve_memcpy (void))(void *, const void *, size_t)
31958          {
31959            return my_memcpy; // we will just always select this routine
31960          }
31961
31962     The exported header file declaring the function the user calls
31963     would contain:
31964
31965          extern void *memcpy (void *, const void *, size_t);
31966
31967     allowing the user to call 'memcpy' as a regular function, unaware
31968     of the actual implementation.  Finally, the indirect function needs
31969     to be defined in the same translation unit as the resolver
31970     function:
31971
31972          void *memcpy (void *, const void *, size_t)
31973               __attribute__ ((ifunc ("resolve_memcpy")));
31974
31975     In C++, the 'ifunc' attribute takes a string that is the mangled
31976     name of the resolver function.  A C++ resolver for a non-static
31977     member function of class 'C' should be declared to return a pointer
31978     to a non-member function taking pointer to 'C' as the first
31979     argument, followed by the same arguments as of the implementation
31980     function.  G++ checks the signatures of the two functions and
31981     issues a '-Wattribute-alias' warning for mismatches.  To suppress a
31982     warning for the necessary cast from a pointer to the implementation
31983     member function to the type of the corresponding non-member
31984     function use the '-Wno-pmf-conversions' option.  For example:
31985
31986          class S
31987          {
31988          private:
31989            int debug_impl (int);
31990            int optimized_impl (int);
31991
31992            typedef int Func (S*, int);
31993
31994            static Func* resolver ();
31995          public:
31996
31997            int interface (int);
31998          };
31999
32000          int S::debug_impl (int) { /* ... */ }
32001          int S::optimized_impl (int) { /* ... */ }
32002
32003          S::Func* S::resolver ()
32004          {
32005            int (S::*pimpl) (int)
32006              = getenv ("DEBUG") ? &S::debug_impl : &S::optimized_impl;
32007
32008            // Cast triggers -Wno-pmf-conversions.
32009            return reinterpret_cast<Func*>(pimpl);
32010          }
32011
32012          int S::interface (int) __attribute__ ((ifunc ("_ZN1S8resolverEv")));
32013
32014     Indirect functions cannot be weak.  Binutils version 2.20.1 or
32015     higher and GNU C Library version 2.11.1 are required to use this
32016     feature.
32017
32018'interrupt'
32019'interrupt_handler'
32020     Many GCC back ends support attributes to indicate that a function
32021     is an interrupt handler, which tells the compiler to generate
32022     function entry and exit sequences that differ from those from
32023     regular functions.  The exact syntax and behavior are
32024     target-specific; refer to the following subsections for details.
32025
32026'leaf'
32027     Calls to external functions with this attribute must return to the
32028     current compilation unit only by return or by exception handling.
32029     In particular, a leaf function is not allowed to invoke callback
32030     functions passed to it from the current compilation unit, directly
32031     call functions exported by the unit, or 'longjmp' into the unit.
32032     Leaf functions might still call functions from other compilation
32033     units and thus they are not necessarily leaf in the sense that they
32034     contain no function calls at all.
32035
32036     The attribute is intended for library functions to improve dataflow
32037     analysis.  The compiler takes the hint that any data not escaping
32038     the current compilation unit cannot be used or modified by the leaf
32039     function.  For example, the 'sin' function is a leaf function, but
32040     'qsort' is not.
32041
32042     Note that leaf functions might indirectly run a signal handler
32043     defined in the current compilation unit that uses static variables.
32044     Similarly, when lazy symbol resolution is in effect, leaf functions
32045     might invoke indirect functions whose resolver function or
32046     implementation function is defined in the current compilation unit
32047     and uses static variables.  There is no standard-compliant way to
32048     write such a signal handler, resolver function, or implementation
32049     function, and the best that you can do is to remove the 'leaf'
32050     attribute or mark all such static variables 'volatile'.  Lastly,
32051     for ELF-based systems that support symbol interposition, care
32052     should be taken that functions defined in the current compilation
32053     unit do not unexpectedly interpose other symbols based on the
32054     defined standards mode and defined feature test macros; otherwise
32055     an inadvertent callback would be added.
32056
32057     The attribute has no effect on functions defined within the current
32058     compilation unit.  This is to allow easy merging of multiple
32059     compilation units into one, for example, by using the link-time
32060     optimization.  For this reason the attribute is not allowed on
32061     types to annotate indirect calls.
32062
32063'malloc'
32064     This tells the compiler that a function is 'malloc'-like, i.e.,
32065     that the pointer P returned by the function cannot alias any other
32066     pointer valid when the function returns, and moreover no pointers
32067     to valid objects occur in any storage addressed by P.  In addition,
32068     GCC predicts that a function with the attribute returns non-null in
32069     most cases.
32070
32071     Using the attribute is designed to improve optimization by relying
32072     on the aliasing property it implies.  Functions like 'malloc' and
32073     'calloc' have this property because they return a pointer to
32074     uninitialized or zeroed-out, newly obtained storage.  However,
32075     functions like 'realloc' do not have this property, as they may
32076     return pointers to storage containing pointers to existing objects.
32077     Additionally, since all such functions are assumed to return null
32078     only infrequently, callers can be optimized based on that
32079     assumption.
32080
32081'no_icf'
32082     This function attribute prevents a functions from being merged with
32083     another semantically equivalent function.
32084
32085'no_instrument_function'
32086     If any of '-finstrument-functions', '-p', or '-pg' are given,
32087     profiling function calls are generated at entry and exit of most
32088     user-compiled functions.  Functions with this attribute are not so
32089     instrumented.
32090
32091'no_profile_instrument_function'
32092     The 'no_profile_instrument_function' attribute on functions is used
32093     to inform the compiler that it should not process any profile
32094     feedback based optimization code instrumentation.
32095
32096'no_reorder'
32097     Do not reorder functions or variables marked 'no_reorder' against
32098     each other or top level assembler statements the executable.  The
32099     actual order in the program will depend on the linker command line.
32100     Static variables marked like this are also not removed.  This has a
32101     similar effect as the '-fno-toplevel-reorder' option, but only
32102     applies to the marked symbols.
32103
32104'no_sanitize ("SANITIZE_OPTION")'
32105     The 'no_sanitize' attribute on functions is used to inform the
32106     compiler that it should not do sanitization of any option mentioned
32107     in SANITIZE_OPTION.  A list of values acceptable by the
32108     '-fsanitize' option can be provided.
32109
32110          void __attribute__ ((no_sanitize ("alignment", "object-size")))
32111          f () { /* Do something. */; }
32112          void __attribute__ ((no_sanitize ("alignment,object-size")))
32113          g () { /* Do something. */; }
32114
32115'no_sanitize_address'
32116'no_address_safety_analysis'
32117     The 'no_sanitize_address' attribute on functions is used to inform
32118     the compiler that it should not instrument memory accesses in the
32119     function when compiling with the '-fsanitize=address' option.  The
32120     'no_address_safety_analysis' is a deprecated alias of the
32121     'no_sanitize_address' attribute, new code should use
32122     'no_sanitize_address'.
32123
32124'no_sanitize_thread'
32125     The 'no_sanitize_thread' attribute on functions is used to inform
32126     the compiler that it should not instrument memory accesses in the
32127     function when compiling with the '-fsanitize=thread' option.
32128
32129'no_sanitize_undefined'
32130     The 'no_sanitize_undefined' attribute on functions is used to
32131     inform the compiler that it should not check for undefined behavior
32132     in the function when compiling with the '-fsanitize=undefined'
32133     option.
32134
32135'no_split_stack'
32136     If '-fsplit-stack' is given, functions have a small prologue which
32137     decides whether to split the stack.  Functions with the
32138     'no_split_stack' attribute do not have that prologue, and thus may
32139     run with only a small amount of stack space available.
32140
32141'no_stack_limit'
32142     This attribute locally overrides the '-fstack-limit-register' and
32143     '-fstack-limit-symbol' command-line options; it has the effect of
32144     disabling stack limit checking in the function it applies to.
32145
32146'noclone'
32147     This function attribute prevents a function from being considered
32148     for cloning--a mechanism that produces specialized copies of
32149     functions and which is (currently) performed by interprocedural
32150     constant propagation.
32151
32152'noinline'
32153     This function attribute prevents a function from being considered
32154     for inlining.  If the function does not have side effects, there
32155     are optimizations other than inlining that cause function calls to
32156     be optimized away, although the function call is live.  To keep
32157     such calls from being optimized away, put
32158          asm ("");
32159
32160     (*note Extended Asm::) in the called function, to serve as a
32161     special side effect.
32162
32163'noipa'
32164     Disable interprocedural optimizations between the function with
32165     this attribute and its callers, as if the body of the function is
32166     not available when optimizing callers and the callers are
32167     unavailable when optimizing the body.  This attribute implies
32168     'noinline', 'noclone' and 'no_icf' attributes.  However, this
32169     attribute is not equivalent to a combination of other attributes,
32170     because its purpose is to suppress existing and future
32171     optimizations employing interprocedural analysis, including those
32172     that do not have an attribute suitable for disabling them
32173     individually.  This attribute is supported mainly for the purpose
32174     of testing the compiler.
32175
32176'nonnull'
32177'nonnull (ARG-INDEX, ...)'
32178     The 'nonnull' attribute may be applied to a function that takes at
32179     least one argument of a pointer type.  It indicates that the
32180     referenced arguments must be non-null pointers.  For instance, the
32181     declaration:
32182
32183          extern void *
32184          my_memcpy (void *dest, const void *src, size_t len)
32185                  __attribute__((nonnull (1, 2)));
32186
32187     causes the compiler to check that, in calls to 'my_memcpy',
32188     arguments DEST and SRC are non-null.  If the compiler determines
32189     that a null pointer is passed in an argument slot marked as
32190     non-null, and the '-Wnonnull' option is enabled, a warning is
32191     issued.  *Note Warning Options::.  Unless disabled by the
32192     '-fno-delete-null-pointer-checks' option the compiler may also
32193     perform optimizations based on the knowledge that certain function
32194     arguments cannot be null.  In addition, the
32195     '-fisolate-erroneous-paths-attribute' option can be specified to
32196     have GCC transform calls with null arguments to non-null functions
32197     into traps.  *Note Optimize Options::.
32198
32199     If no ARG-INDEX is given to the 'nonnull' attribute, all pointer
32200     arguments are marked as non-null.  To illustrate, the following
32201     declaration is equivalent to the previous example:
32202
32203          extern void *
32204          my_memcpy (void *dest, const void *src, size_t len)
32205                  __attribute__((nonnull));
32206
32207'noplt'
32208     The 'noplt' attribute is the counterpart to option '-fno-plt'.
32209     Calls to functions marked with this attribute in
32210     position-independent code do not use the PLT.
32211
32212          /* Externally defined function foo.  */
32213          int foo () __attribute__ ((noplt));
32214
32215          int
32216          main (/* ... */)
32217          {
32218            /* ... */
32219            foo ();
32220            /* ... */
32221          }
32222
32223     The 'noplt' attribute on function 'foo' tells the compiler to
32224     assume that the function 'foo' is externally defined and that the
32225     call to 'foo' must avoid the PLT in position-independent code.
32226
32227     In position-dependent code, a few targets also convert calls to
32228     functions that are marked to not use the PLT to use the GOT
32229     instead.
32230
32231'noreturn'
32232     A few standard library functions, such as 'abort' and 'exit',
32233     cannot return.  GCC knows this automatically.  Some programs define
32234     their own functions that never return.  You can declare them
32235     'noreturn' to tell the compiler this fact.  For example,
32236
32237          void fatal () __attribute__ ((noreturn));
32238
32239          void
32240          fatal (/* ... */)
32241          {
32242            /* ... */ /* Print error message. */ /* ... */
32243            exit (1);
32244          }
32245
32246     The 'noreturn' keyword tells the compiler to assume that 'fatal'
32247     cannot return.  It can then optimize without regard to what would
32248     happen if 'fatal' ever did return.  This makes slightly better
32249     code.  More importantly, it helps avoid spurious warnings of
32250     uninitialized variables.
32251
32252     The 'noreturn' keyword does not affect the exceptional path when
32253     that applies: a 'noreturn'-marked function may still return to the
32254     caller by throwing an exception or calling 'longjmp'.
32255
32256     In order to preserve backtraces, GCC will never turn calls to
32257     'noreturn' functions into tail calls.
32258
32259     Do not assume that registers saved by the calling function are
32260     restored before calling the 'noreturn' function.
32261
32262     It does not make sense for a 'noreturn' function to have a return
32263     type other than 'void'.
32264
32265'nothrow'
32266     The 'nothrow' attribute is used to inform the compiler that a
32267     function cannot throw an exception.  For example, most functions in
32268     the standard C library can be guaranteed not to throw an exception
32269     with the notable exceptions of 'qsort' and 'bsearch' that take
32270     function pointer arguments.
32271
32272'optimize (LEVEL, ...)'
32273'optimize (STRING, ...)'
32274     The 'optimize' attribute is used to specify that a function is to
32275     be compiled with different optimization options than specified on
32276     the command line.  Valid arguments are constant non-negative
32277     integers and strings.  Each numeric argument specifies an
32278     optimization LEVEL.  Each STRING argument consists of one or more
32279     comma-separated substrings.  Each substring that begins with the
32280     letter 'O' refers to an optimization option such as '-O0' or '-Os'.
32281     Other substrings are taken as suffixes to the '-f' prefix jointly
32282     forming the name of an optimization option.  *Note Optimize
32283     Options::.
32284
32285     '#pragma GCC optimize' can be used to set optimization options for
32286     more than one function.  *Note Function Specific Option Pragmas::,
32287     for details about the pragma.
32288
32289     Providing multiple strings as arguments separated by commas to
32290     specify multiple options is equivalent to separating the option
32291     suffixes with a comma (',') within a single string.  Spaces are not
32292     permitted within the strings.
32293
32294     Not every optimization option that starts with the -F prefix
32295     specified by the attribute necessarily has an effect on the
32296     function.  The 'optimize' attribute should be used for debugging
32297     purposes only.  It is not suitable in production code.
32298
32299'patchable_function_entry'
32300     In case the target's text segment can be made writable at run time
32301     by any means, padding the function entry with a number of NOPs can
32302     be used to provide a universal tool for instrumentation.
32303
32304     The 'patchable_function_entry' function attribute can be used to
32305     change the number of NOPs to any desired value.  The two-value
32306     syntax is the same as for the command-line switch
32307     '-fpatchable-function-entry=N,M', generating N NOPs, with the
32308     function entry point before the Mth NOP instruction.  M defaults to
32309     0 if omitted e.g. function entry point is before the first NOP.
32310
32311     If patchable function entries are enabled globally using the
32312     command-line option '-fpatchable-function-entry=N,M', then you must
32313     disable instrumentation on all functions that are part of the
32314     instrumentation framework with the attribute
32315     'patchable_function_entry (0)' to prevent recursion.
32316
32317'pure'
32318
32319     Calls to functions that have no observable effects on the state of
32320     the program other than to return a value may lend themselves to
32321     optimizations such as common subexpression elimination.  Declaring
32322     such functions with the 'pure' attribute allows GCC to avoid
32323     emitting some calls in repeated invocations of the function with
32324     the same argument values.
32325
32326     The 'pure' attribute prohibits a function from modifying the state
32327     of the program that is observable by means other than inspecting
32328     the function's return value.  However, functions declared with the
32329     'pure' attribute can safely read any non-volatile objects, and
32330     modify the value of objects in a way that does not affect their
32331     return value or the observable state of the program.
32332
32333     For example,
32334
32335          int hash (char *) __attribute__ ((pure));
32336
32337     tells GCC that subsequent calls to the function 'hash' with the
32338     same string can be replaced by the result of the first call
32339     provided the state of the program observable by 'hash', including
32340     the contents of the array itself, does not change in between.  Even
32341     though 'hash' takes a non-const pointer argument it must not modify
32342     the array it points to, or any other object whose value the rest of
32343     the program may depend on.  However, the caller may safely change
32344     the contents of the array between successive calls to the function
32345     (doing so disables the optimization).  The restriction also applies
32346     to member objects referenced by the 'this' pointer in C++
32347     non-static member functions.
32348
32349     Some common examples of pure functions are 'strlen' or 'memcmp'.
32350     Interesting non-pure functions are functions with infinite loops or
32351     those depending on volatile memory or other system resource, that
32352     may change between consecutive calls (such as the standard C 'feof'
32353     function in a multithreading environment).
32354
32355     The 'pure' attribute imposes similar but looser restrictions on a
32356     function's definition than the 'const' attribute: 'pure' allows the
32357     function to read any non-volatile memory, even if it changes in
32358     between successive invocations of the function.  Declaring the same
32359     function with both the 'pure' and the 'const' attribute is
32360     diagnosed.  Because a pure function cannot have any observable side
32361     effects it does not make sense for such a function to return
32362     'void'.  Declaring such a function is diagnosed.
32363
32364'returns_nonnull'
32365     The 'returns_nonnull' attribute specifies that the function return
32366     value should be a non-null pointer.  For instance, the declaration:
32367
32368          extern void *
32369          mymalloc (size_t len) __attribute__((returns_nonnull));
32370
32371     lets the compiler optimize callers based on the knowledge that the
32372     return value will never be null.
32373
32374'returns_twice'
32375     The 'returns_twice' attribute tells the compiler that a function
32376     may return more than one time.  The compiler ensures that all
32377     registers are dead before calling such a function and emits a
32378     warning about the variables that may be clobbered after the second
32379     return from the function.  Examples of such functions are 'setjmp'
32380     and 'vfork'.  The 'longjmp'-like counterpart of such function, if
32381     any, might need to be marked with the 'noreturn' attribute.
32382
32383'section ("SECTION-NAME")'
32384     Normally, the compiler places the code it generates in the 'text'
32385     section.  Sometimes, however, you need additional sections, or you
32386     need certain particular functions to appear in special sections.
32387     The 'section' attribute specifies that a function lives in a
32388     particular section.  For example, the declaration:
32389
32390          extern void foobar (void) __attribute__ ((section ("bar")));
32391
32392     puts the function 'foobar' in the 'bar' section.
32393
32394     Some file formats do not support arbitrary sections so the
32395     'section' attribute is not available on all platforms.  If you need
32396     to map the entire contents of a module to a particular section,
32397     consider using the facilities of the linker instead.
32398
32399'sentinel'
32400'sentinel (POSITION)'
32401     This function attribute indicates that an argument in a call to the
32402     function is expected to be an explicit 'NULL'.  The attribute is
32403     only valid on variadic functions.  By default, the sentinel is
32404     expected to be the last argument of the function call.  If the
32405     optional POSITION argument is specified to the attribute, the
32406     sentinel must be located at POSITION counting backwards from the
32407     end of the argument list.
32408
32409          __attribute__ ((sentinel))
32410          is equivalent to
32411          __attribute__ ((sentinel(0)))
32412
32413     The attribute is automatically set with a position of 0 for the
32414     built-in functions 'execl' and 'execlp'.  The built-in function
32415     'execle' has the attribute set with a position of 1.
32416
32417     A valid 'NULL' in this context is defined as zero with any object
32418     pointer type.  If your system defines the 'NULL' macro with an
32419     integer type then you need to add an explicit cast.  During
32420     installation GCC replaces the system '<stddef.h>' header with a
32421     copy that redefines NULL appropriately.
32422
32423     The warnings for missing or incorrect sentinels are enabled with
32424     '-Wformat'.
32425
32426'simd'
32427'simd("MASK")'
32428     This attribute enables creation of one or more function versions
32429     that can process multiple arguments using SIMD instructions from a
32430     single invocation.  Specifying this attribute allows compiler to
32431     assume that such versions are available at link time (provided in
32432     the same or another translation unit).  Generated versions are
32433     target-dependent and described in the corresponding Vector ABI
32434     document.  For x86_64 target this document can be found
32435     here (https://sourceware.org/glibc/wiki/libmvec?action=AttachFile&do=view&target=VectorABI.txt).
32436
32437     The optional argument MASK may have the value 'notinbranch' or
32438     'inbranch', and instructs the compiler to generate non-masked or
32439     masked clones correspondingly.  By default, all clones are
32440     generated.
32441
32442     If the attribute is specified and '#pragma omp declare simd' is
32443     present on a declaration and the '-fopenmp' or '-fopenmp-simd'
32444     switch is specified, then the attribute is ignored.
32445
32446'stack_protect'
32447     This attribute adds stack protection code to the function if flags
32448     '-fstack-protector', '-fstack-protector-strong' or
32449     '-fstack-protector-explicit' are set.
32450
32451'target (STRING, ...)'
32452     Multiple target back ends implement the 'target' attribute to
32453     specify that a function is to be compiled with different target
32454     options than specified on the command line.  One or more strings
32455     can be provided as arguments.  Each string consists of one or more
32456     comma-separated suffixes to the '-m' prefix jointly forming the
32457     name of a machine-dependent option.  *Note Machine-Dependent
32458     Options: Submodel Options.
32459
32460     The 'target' attribute can be used for instance to have a function
32461     compiled with a different ISA (instruction set architecture) than
32462     the default.  '#pragma GCC target' can be used to specify
32463     target-specific options for more than one function.  *Note Function
32464     Specific Option Pragmas::, for details about the pragma.
32465
32466     For instance, on an x86, you could declare one function with the
32467     'target("sse4.1,arch=core2")' attribute and another with
32468     'target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
32469     the first function with '-msse4.1' and '-march=core2' options, and
32470     the second function with '-msse4a' and '-march=amdfam10' options.
32471     It is up to you to make sure that a function is only invoked on a
32472     machine that supports the particular ISA it is compiled for (for
32473     example by using 'cpuid' on x86 to determine what feature bits and
32474     architecture family are used).
32475
32476          int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
32477          int sse3_func (void) __attribute__ ((__target__ ("sse3")));
32478
32479     Providing multiple strings as arguments separated by commas to
32480     specify multiple options is equivalent to separating the option
32481     suffixes with a comma (',') within a single string.  Spaces are not
32482     permitted within the strings.
32483
32484     The options supported are specific to each target; refer to *note
32485     x86 Function Attributes::, *note PowerPC Function Attributes::,
32486     *note ARM Function Attributes::, *note AArch64 Function
32487     Attributes::, *note Nios II Function Attributes::, and *note S/390
32488     Function Attributes:: for details.
32489
32490'symver ("NAME2@NODENAME")'
32491     On ELF targets this attribute creates a symbol version.  The NAME2
32492     part of the parameter is the actual name of the symbol by which it
32493     will be externally referenced.  The 'nodename' portion should be
32494     the name of a node specified in the version script supplied to the
32495     linker when building a shared library.  Versioned symbol must be
32496     defined and must be exported with default visibility.
32497
32498          __attribute__ ((__symver__ ("foo@VERS_1"))) int
32499          foo_v1 (void)
32500          {
32501          }
32502
32503     Will produce a '.symver foo_v1, foo@VERS_1' directive in the
32504     assembler output.
32505
32506     It's an error to define multiple version of a given symbol.  In
32507     such case an alias can be used.
32508
32509          __attribute__ ((__symver__ ("foo@VERS_2")))
32510          __attribute__ ((alias ("foo_v1")))
32511          int symver_foo_v1 (void);
32512
32513     This example creates an alias of 'foo_v1' with symbol name
32514     'symver_foo_v1' which will be version 'VERS_2' of 'foo'.
32515
32516     Finally if the parameter is '"NAME2@@NODENAME"' then in addition to
32517     creating a symbol version (as if '"NAME2@NODENAME"' was used) the
32518     version will be also used to resolve NAME2 by the linker.
32519
32520'target_clones (OPTIONS)'
32521     The 'target_clones' attribute is used to specify that a function be
32522     cloned into multiple versions compiled with different target
32523     options than specified on the command line.  The supported options
32524     and restrictions are the same as for 'target' attribute.
32525
32526     For instance, on an x86, you could compile a function with
32527     'target_clones("sse4.1,avx")'.  GCC creates two function clones,
32528     one compiled with '-msse4.1' and another with '-mavx'.
32529
32530     On a PowerPC, you can compile a function with
32531     'target_clones("cpu=power9,default")'.  GCC will create two
32532     function clones, one compiled with '-mcpu=power9' and another with
32533     the default options.  GCC must be configured to use GLIBC 2.23 or
32534     newer in order to use the 'target_clones' attribute.
32535
32536     It also creates a resolver function (see the 'ifunc' attribute
32537     above) that dynamically selects a clone suitable for current
32538     architecture.  The resolver is created only if there is a usage of
32539     a function with 'target_clones' attribute.
32540
32541     Note that any subsequent call of a function without 'target_clone'
32542     from a 'target_clone' caller will not lead to copying (target
32543     clone) of the called function.  If you want to enforce such
32544     behaviour, we recommend declaring the calling function with the
32545     'flatten' attribute?
32546
32547'unused'
32548     This attribute, attached to a function, means that the function is
32549     meant to be possibly unused.  GCC does not produce a warning for
32550     this function.
32551
32552'used'
32553     This attribute, attached to a function, means that code must be
32554     emitted for the function even if it appears that the function is
32555     not referenced.  This is useful, for example, when the function is
32556     referenced only in inline assembly.
32557
32558     When applied to a member function of a C++ class template, the
32559     attribute also means that the function is instantiated if the class
32560     itself is instantiated.
32561
32562'visibility ("VISIBILITY_TYPE")'
32563     This attribute affects the linkage of the declaration to which it
32564     is attached.  It can be applied to variables (*note Common Variable
32565     Attributes::) and types (*note Common Type Attributes::) as well as
32566     functions.
32567
32568     There are four supported VISIBILITY_TYPE values: default, hidden,
32569     protected or internal visibility.
32570
32571          void __attribute__ ((visibility ("protected")))
32572          f () { /* Do something. */; }
32573          int i __attribute__ ((visibility ("hidden")));
32574
32575     The possible values of VISIBILITY_TYPE correspond to the visibility
32576     settings in the ELF gABI.
32577
32578     'default'
32579          Default visibility is the normal case for the object file
32580          format.  This value is available for the visibility attribute
32581          to override other options that may change the assumed
32582          visibility of entities.
32583
32584          On ELF, default visibility means that the declaration is
32585          visible to other modules and, in shared libraries, means that
32586          the declared entity may be overridden.
32587
32588          On Darwin, default visibility means that the declaration is
32589          visible to other modules.
32590
32591          Default visibility corresponds to "external linkage" in the
32592          language.
32593
32594     'hidden'
32595          Hidden visibility indicates that the entity declared has a new
32596          form of linkage, which we call "hidden linkage".  Two
32597          declarations of an object with hidden linkage refer to the
32598          same object if they are in the same shared object.
32599
32600     'internal'
32601          Internal visibility is like hidden visibility, but with
32602          additional processor specific semantics.  Unless otherwise
32603          specified by the psABI, GCC defines internal visibility to
32604          mean that a function is _never_ called from another module.
32605          Compare this with hidden functions which, while they cannot be
32606          referenced directly by other modules, can be referenced
32607          indirectly via function pointers.  By indicating that a
32608          function cannot be called from outside the module, GCC may for
32609          instance omit the load of a PIC register since it is known
32610          that the calling function loaded the correct value.
32611
32612     'protected'
32613          Protected visibility is like default visibility except that it
32614          indicates that references within the defining module bind to
32615          the definition in that module.  That is, the declared entity
32616          cannot be overridden by another module.
32617
32618     All visibilities are supported on many, but not all, ELF targets
32619     (supported when the assembler supports the '.visibility'
32620     pseudo-op).  Default visibility is supported everywhere.  Hidden
32621     visibility is supported on Darwin targets.
32622
32623     The visibility attribute should be applied only to declarations
32624     that would otherwise have external linkage.  The attribute should
32625     be applied consistently, so that the same entity should not be
32626     declared with different settings of the attribute.
32627
32628     In C++, the visibility attribute applies to types as well as
32629     functions and objects, because in C++ types have linkage.  A class
32630     must not have greater visibility than its non-static data member
32631     types and bases, and class members default to the visibility of
32632     their class.  Also, a declaration without explicit visibility is
32633     limited to the visibility of its type.
32634
32635     In C++, you can mark member functions and static member variables
32636     of a class with the visibility attribute.  This is useful if you
32637     know a particular method or static member variable should only be
32638     used from one shared object; then you can mark it hidden while the
32639     rest of the class has default visibility.  Care must be taken to
32640     avoid breaking the One Definition Rule; for example, it is usually
32641     not useful to mark an inline method as hidden without marking the
32642     whole class as hidden.
32643
32644     A C++ namespace declaration can also have the visibility attribute.
32645
32646          namespace nspace1 __attribute__ ((visibility ("protected")))
32647          { /* Do something. */; }
32648
32649     This attribute applies only to the particular namespace body, not
32650     to other definitions of the same namespace; it is equivalent to
32651     using '#pragma GCC visibility' before and after the namespace
32652     definition (*note Visibility Pragmas::).
32653
32654     In C++, if a template argument has limited visibility, this
32655     restriction is implicitly propagated to the template instantiation.
32656     Otherwise, template instantiations and specializations default to
32657     the visibility of their template.
32658
32659     If both the template and enclosing class have explicit visibility,
32660     the visibility from the template is used.
32661
32662'warn_unused_result'
32663     The 'warn_unused_result' attribute causes a warning to be emitted
32664     if a caller of the function with this attribute does not use its
32665     return value.  This is useful for functions where not checking the
32666     result is either a security problem or always a bug, such as
32667     'realloc'.
32668
32669          int fn () __attribute__ ((warn_unused_result));
32670          int foo ()
32671          {
32672            if (fn () < 0) return -1;
32673            fn ();
32674            return 0;
32675          }
32676
32677     results in warning on line 5.
32678
32679'weak'
32680     The 'weak' attribute causes a declaration of an external symbol to
32681     be emitted as a weak symbol rather than a global.  This is
32682     primarily useful in defining library functions that can be
32683     overridden in user code, though it can also be used with
32684     non-function declarations.  The overriding symbol must have the
32685     same type as the weak symbol.  In addition, if it designates a
32686     variable it must also have the same size and alignment as the weak
32687     symbol.  Weak symbols are supported for ELF targets, and also for
32688     a.out targets when using the GNU assembler and linker.
32689
32690'weakref'
32691'weakref ("TARGET")'
32692     The 'weakref' attribute marks a declaration as a weak reference.
32693     Without arguments, it should be accompanied by an 'alias' attribute
32694     naming the target symbol.  Alternatively, TARGET may be given as an
32695     argument to 'weakref' itself, naming the target definition of the
32696     alias.  The TARGET must have the same type as the declaration.  In
32697     addition, if it designates a variable it must also have the same
32698     size and alignment as the declaration.  In either form of the
32699     declaration 'weakref' implicitly marks the declared symbol as
32700     'weak'.  Without a TARGET given as an argument to 'weakref' or to
32701     'alias', 'weakref' is equivalent to 'weak' (in that case the
32702     declaration may be 'extern').
32703
32704          /* Given the declaration: */
32705          extern int y (void);
32706
32707          /* the following... */
32708          static int x (void) __attribute__ ((weakref ("y")));
32709
32710          /* is equivalent to... */
32711          static int x (void) __attribute__ ((weakref, alias ("y")));
32712
32713          /* or, alternatively, to... */
32714          static int x (void) __attribute__ ((weakref));
32715          static int x (void) __attribute__ ((alias ("y")));
32716
32717     A weak reference is an alias that does not by itself require a
32718     definition to be given for the target symbol.  If the target symbol
32719     is only referenced through weak references, then it becomes a
32720     'weak' undefined symbol.  If it is directly referenced, however,
32721     then such strong references prevail, and a definition is required
32722     for the symbol, not necessarily in the same translation unit.
32723
32724     The effect is equivalent to moving all references to the alias to a
32725     separate translation unit, renaming the alias to the aliased
32726     symbol, declaring it as weak, compiling the two separate
32727     translation units and performing a link with relocatable output
32728     (i.e. 'ld -r') on them.
32729
32730     A declaration to which 'weakref' is attached and that is associated
32731     with a named 'target' must be 'static'.
32732
32733
32734File: gcc.info,  Node: AArch64 Function Attributes,  Next: AMD GCN Function Attributes,  Prev: Common Function Attributes,  Up: Function Attributes
32735
327366.33.2 AArch64 Function Attributes
32737----------------------------------
32738
32739The following target-specific function attributes are available for the
32740AArch64 target.  For the most part, these options mirror the behavior of
32741similar command-line options (*note AArch64 Options::), but on a
32742per-function basis.
32743
32744'general-regs-only'
32745     Indicates that no floating-point or Advanced SIMD registers should
32746     be used when generating code for this function.  If the function
32747     explicitly uses floating-point code, then the compiler gives an
32748     error.  This is the same behavior as that of the command-line
32749     option '-mgeneral-regs-only'.
32750
32751'fix-cortex-a53-835769'
32752     Indicates that the workaround for the Cortex-A53 erratum 835769
32753     should be applied to this function.  To explicitly disable the
32754     workaround for this function specify the negated form:
32755     'no-fix-cortex-a53-835769'.  This corresponds to the behavior of
32756     the command line options '-mfix-cortex-a53-835769' and
32757     '-mno-fix-cortex-a53-835769'.
32758
32759'cmodel='
32760     Indicates that code should be generated for a particular code model
32761     for this function.  The behavior and permissible arguments are the
32762     same as for the command line option '-mcmodel='.
32763
32764'strict-align'
32765'no-strict-align'
32766     'strict-align' indicates that the compiler should not assume that
32767     unaligned memory references are handled by the system.  To allow
32768     the compiler to assume that aligned memory references are handled
32769     by the system, the inverse attribute 'no-strict-align' can be
32770     specified.  The behavior is same as for the command-line option
32771     '-mstrict-align' and '-mno-strict-align'.
32772
32773'omit-leaf-frame-pointer'
32774     Indicates that the frame pointer should be omitted for a leaf
32775     function call.  To keep the frame pointer, the inverse attribute
32776     'no-omit-leaf-frame-pointer' can be specified.  These attributes
32777     have the same behavior as the command-line options
32778     '-momit-leaf-frame-pointer' and '-mno-omit-leaf-frame-pointer'.
32779
32780'tls-dialect='
32781     Specifies the TLS dialect to use for this function.  The behavior
32782     and permissible arguments are the same as for the command-line
32783     option '-mtls-dialect='.
32784
32785'arch='
32786     Specifies the architecture version and architectural extensions to
32787     use for this function.  The behavior and permissible arguments are
32788     the same as for the '-march=' command-line option.
32789
32790'tune='
32791     Specifies the core for which to tune the performance of this
32792     function.  The behavior and permissible arguments are the same as
32793     for the '-mtune=' command-line option.
32794
32795'cpu='
32796     Specifies the core for which to tune the performance of this
32797     function and also whose architectural features to use.  The
32798     behavior and valid arguments are the same as for the '-mcpu='
32799     command-line option.
32800
32801'sign-return-address'
32802     Select the function scope on which return address signing will be
32803     applied.  The behavior and permissible arguments are the same as
32804     for the command-line option '-msign-return-address='.  The default
32805     value is 'none'.  This attribute is deprecated.  The
32806     'branch-protection' attribute should be used instead.
32807
32808'branch-protection'
32809     Select the function scope on which branch protection will be
32810     applied.  The behavior and permissible arguments are the same as
32811     for the command-line option '-mbranch-protection='.  The default
32812     value is 'none'.
32813
32814'outline-atomics'
32815     Enable or disable calls to out-of-line helpers to implement atomic
32816     operations.  This corresponds to the behavior of the command line
32817     options '-moutline-atomics' and '-mno-outline-atomics'.
32818
32819 The above target attributes can be specified as follows:
32820
32821     __attribute__((target("ATTR-STRING")))
32822     int
32823     f (int a)
32824     {
32825       return a + 5;
32826     }
32827
32828 where 'ATTR-STRING' is one of the attribute strings specified above.
32829
32830 Additionally, the architectural extension string may be specified on
32831its own.  This can be used to turn on and off particular architectural
32832extensions without having to specify a particular architecture version
32833or core.  Example:
32834
32835     __attribute__((target("+crc+nocrypto")))
32836     int
32837     foo (int a)
32838     {
32839       return a + 5;
32840     }
32841
32842 In this example 'target("+crc+nocrypto")' enables the 'crc' extension
32843and disables the 'crypto' extension for the function 'foo' without
32844modifying an existing '-march=' or '-mcpu' option.
32845
32846 Multiple target function attributes can be specified by separating them
32847with a comma.  For example:
32848     __attribute__((target("arch=armv8-a+crc+crypto,tune=cortex-a53")))
32849     int
32850     foo (int a)
32851     {
32852       return a + 5;
32853     }
32854
32855 is valid and compiles function 'foo' for ARMv8-A with 'crc' and
32856'crypto' extensions and tunes it for 'cortex-a53'.
32857
328586.33.2.1 Inlining rules
32859.......................
32860
32861Specifying target attributes on individual functions or performing
32862link-time optimization across translation units compiled with different
32863target options can affect function inlining rules:
32864
32865 In particular, a caller function can inline a callee function only if
32866the architectural features available to the callee are a subset of the
32867features available to the caller.  For example: A function 'foo'
32868compiled with '-march=armv8-a+crc', or tagged with the equivalent
32869'arch=armv8-a+crc' attribute, can inline a function 'bar' compiled with
32870'-march=armv8-a+nocrc' because the all the architectural features that
32871function 'bar' requires are available to function 'foo'.  Conversely,
32872function 'bar' cannot inline function 'foo'.
32873
32874 Additionally inlining a function compiled with '-mstrict-align' into a
32875function compiled without '-mstrict-align' is not allowed.  However,
32876inlining a function compiled without '-mstrict-align' into a function
32877compiled with '-mstrict-align' is allowed.
32878
32879 Note that CPU tuning options and attributes such as the '-mcpu=',
32880'-mtune=' do not inhibit inlining unless the CPU specified by the
32881'-mcpu=' option or the 'cpu=' attribute conflicts with the architectural
32882feature rules specified above.
32883
32884
32885File: gcc.info,  Node: AMD GCN Function Attributes,  Next: ARC Function Attributes,  Prev: AArch64 Function Attributes,  Up: Function Attributes
32886
328876.33.3 AMD GCN Function Attributes
32888----------------------------------
32889
32890These function attributes are supported by the AMD GCN back end:
32891
32892'amdgpu_hsa_kernel'
32893     This attribute indicates that the corresponding function should be
32894     compiled as a kernel function, that is an entry point that can be
32895     invoked from the host via the HSA runtime library.  By default
32896     functions are only callable only from other GCN functions.
32897
32898     This attribute is implicitly applied to any function named 'main',
32899     using default parameters.
32900
32901     Kernel functions may return an integer value, which will be written
32902     to a conventional place within the HSA "kernargs" region.
32903
32904     The attribute parameters configure what values are passed into the
32905     kernel function by the GPU drivers, via the initial register state.
32906     Some values are used by the compiler, and therefore forced on.
32907     Enabling other options may break assumptions in the compiler and/or
32908     run-time libraries.
32909
32910     'private_segment_buffer'
32911          Set 'enable_sgpr_private_segment_buffer' flag.  Always on
32912          (required to locate the stack).
32913
32914     'dispatch_ptr'
32915          Set 'enable_sgpr_dispatch_ptr' flag.  Always on (required to
32916          locate the launch dimensions).
32917
32918     'queue_ptr'
32919          Set 'enable_sgpr_queue_ptr' flag.  Always on (required to
32920          convert address spaces).
32921
32922     'kernarg_segment_ptr'
32923          Set 'enable_sgpr_kernarg_segment_ptr' flag.  Always on
32924          (required to locate the kernel arguments, "kernargs").
32925
32926     'dispatch_id'
32927          Set 'enable_sgpr_dispatch_id' flag.
32928
32929     'flat_scratch_init'
32930          Set 'enable_sgpr_flat_scratch_init' flag.
32931
32932     'private_segment_size'
32933          Set 'enable_sgpr_private_segment_size' flag.
32934
32935     'grid_workgroup_count_X'
32936          Set 'enable_sgpr_grid_workgroup_count_x' flag.  Always on
32937          (required to use OpenACC/OpenMP).
32938
32939     'grid_workgroup_count_Y'
32940          Set 'enable_sgpr_grid_workgroup_count_y' flag.
32941
32942     'grid_workgroup_count_Z'
32943          Set 'enable_sgpr_grid_workgroup_count_z' flag.
32944
32945     'workgroup_id_X'
32946          Set 'enable_sgpr_workgroup_id_x' flag.
32947
32948     'workgroup_id_Y'
32949          Set 'enable_sgpr_workgroup_id_y' flag.
32950
32951     'workgroup_id_Z'
32952          Set 'enable_sgpr_workgroup_id_z' flag.
32953
32954     'workgroup_info'
32955          Set 'enable_sgpr_workgroup_info' flag.
32956
32957     'private_segment_wave_offset'
32958          Set 'enable_sgpr_private_segment_wave_byte_offset' flag.
32959          Always on (required to locate the stack).
32960
32961     'work_item_id_X'
32962          Set 'enable_vgpr_workitem_id' parameter.  Always on (can't be
32963          disabled).
32964
32965     'work_item_id_Y'
32966          Set 'enable_vgpr_workitem_id' parameter.  Always on (required
32967          to enable vectorization.)
32968
32969     'work_item_id_Z'
32970          Set 'enable_vgpr_workitem_id' parameter.  Always on (required
32971          to use OpenACC/OpenMP).
32972
32973
32974File: gcc.info,  Node: ARC Function Attributes,  Next: ARM Function Attributes,  Prev: AMD GCN Function Attributes,  Up: Function Attributes
32975
329766.33.4 ARC Function Attributes
32977------------------------------
32978
32979These function attributes are supported by the ARC back end:
32980
32981'interrupt'
32982     Use this attribute to indicate that the specified function is an
32983     interrupt handler.  The compiler generates function entry and exit
32984     sequences suitable for use in an interrupt handler when this
32985     attribute is present.
32986
32987     On the ARC, you must specify the kind of interrupt to be handled in
32988     a parameter to the interrupt attribute like this:
32989
32990          void f () __attribute__ ((interrupt ("ilink1")));
32991
32992     Permissible values for this parameter are: 'ilink1' and 'ilink2'
32993     for ARCv1 architecture, and 'ilink' and 'firq' for ARCv2
32994     architecture.
32995
32996'long_call'
32997'medium_call'
32998'short_call'
32999     These attributes specify how a particular function is called.
33000     These attributes override the '-mlong-calls' and '-mmedium-calls'
33001     (*note ARC Options::) command-line switches and '#pragma
33002     long_calls' settings.
33003
33004     For ARC, a function marked with the 'long_call' attribute is always
33005     called using register-indirect jump-and-link instructions, thereby
33006     enabling the called function to be placed anywhere within the
33007     32-bit address space.  A function marked with the 'medium_call'
33008     attribute will always be close enough to be called with an
33009     unconditional branch-and-link instruction, which has a 25-bit
33010     offset from the call site.  A function marked with the 'short_call'
33011     attribute will always be close enough to be called with a
33012     conditional branch-and-link instruction, which has a 21-bit offset
33013     from the call site.
33014
33015'jli_always'
33016     Forces a particular function to be called using 'jli' instruction.
33017     The 'jli' instruction makes use of a table stored into '.jlitab'
33018     section, which holds the location of the functions which are
33019     addressed using this instruction.
33020
33021'jli_fixed'
33022     Identical like the above one, but the location of the function in
33023     the 'jli' table is known and given as an attribute parameter.
33024
33025'secure_call'
33026     This attribute allows one to mark secure-code functions that are
33027     callable from normal mode.  The location of the secure call
33028     function into the 'sjli' table needs to be passed as argument.
33029
33030'naked'
33031     This attribute allows the compiler to construct the requisite
33032     function declaration, while allowing the body of the function to be
33033     assembly code.  The specified function will not have
33034     prologue/epilogue sequences generated by the compiler.  Only basic
33035     'asm' statements can safely be included in naked functions (*note
33036     Basic Asm::).  While using extended 'asm' or a mixture of basic
33037     'asm' and C code may appear to work, they cannot be depended upon
33038     to work reliably and are not supported.
33039
33040
33041File: gcc.info,  Node: ARM Function Attributes,  Next: AVR Function Attributes,  Prev: ARC Function Attributes,  Up: Function Attributes
33042
330436.33.5 ARM Function Attributes
33044------------------------------
33045
33046These function attributes are supported for ARM targets:
33047
33048'general-regs-only'
33049     Indicates that no floating-point or Advanced SIMD registers should
33050     be used when generating code for this function.  If the function
33051     explicitly uses floating-point code, then the compiler gives an
33052     error.  This is the same behavior as that of the command-line
33053     option '-mgeneral-regs-only'.
33054
33055'interrupt'
33056     Use this attribute to indicate that the specified function is an
33057     interrupt handler.  The compiler generates function entry and exit
33058     sequences suitable for use in an interrupt handler when this
33059     attribute is present.
33060
33061     You can specify the kind of interrupt to be handled by adding an
33062     optional parameter to the interrupt attribute like this:
33063
33064          void f () __attribute__ ((interrupt ("IRQ")));
33065
33066     Permissible values for this parameter are: 'IRQ', 'FIQ', 'SWI',
33067     'ABORT' and 'UNDEF'.
33068
33069     On ARMv7-M the interrupt type is ignored, and the attribute means
33070     the function may be called with a word-aligned stack pointer.
33071
33072'isr'
33073     Use this attribute on ARM to write Interrupt Service Routines.
33074     This is an alias to the 'interrupt' attribute above.
33075
33076'long_call'
33077'short_call'
33078     These attributes specify how a particular function is called.
33079     These attributes override the '-mlong-calls' (*note ARM Options::)
33080     command-line switch and '#pragma long_calls' settings.  For ARM,
33081     the 'long_call' attribute indicates that the function might be far
33082     away from the call site and require a different (more expensive)
33083     calling sequence.  The 'short_call' attribute always places the
33084     offset to the function from the call site into the 'BL' instruction
33085     directly.
33086
33087'naked'
33088     This attribute allows the compiler to construct the requisite
33089     function declaration, while allowing the body of the function to be
33090     assembly code.  The specified function will not have
33091     prologue/epilogue sequences generated by the compiler.  Only basic
33092     'asm' statements can safely be included in naked functions (*note
33093     Basic Asm::).  While using extended 'asm' or a mixture of basic
33094     'asm' and C code may appear to work, they cannot be depended upon
33095     to work reliably and are not supported.
33096
33097'pcs'
33098
33099     The 'pcs' attribute can be used to control the calling convention
33100     used for a function on ARM. The attribute takes an argument that
33101     specifies the calling convention to use.
33102
33103     When compiling using the AAPCS ABI (or a variant of it) then valid
33104     values for the argument are '"aapcs"' and '"aapcs-vfp"'.  In order
33105     to use a variant other than '"aapcs"' then the compiler must be
33106     permitted to use the appropriate co-processor registers (i.e., the
33107     VFP registers must be available in order to use '"aapcs-vfp"').
33108     For example,
33109
33110          /* Argument passed in r0, and result returned in r0+r1.  */
33111          double f2d (float) __attribute__((pcs("aapcs")));
33112
33113     Variadic functions always use the '"aapcs"' calling convention and
33114     the compiler rejects attempts to specify an alternative.
33115
33116'target (OPTIONS)'
33117     As discussed in *note Common Function Attributes::, this attribute
33118     allows specification of target-specific compilation options.
33119
33120     On ARM, the following options are allowed:
33121
33122     'thumb'
33123          Force code generation in the Thumb (T16/T32) ISA, depending on
33124          the architecture level.
33125
33126     'arm'
33127          Force code generation in the ARM (A32) ISA.
33128
33129          Functions from different modes can be inlined in the caller's
33130          mode.
33131
33132     'fpu='
33133          Specifies the fpu for which to tune the performance of this
33134          function.  The behavior and permissible arguments are the same
33135          as for the '-mfpu=' command-line option.
33136
33137     'arch='
33138          Specifies the architecture version and architectural
33139          extensions to use for this function.  The behavior and
33140          permissible arguments are the same as for the '-march='
33141          command-line option.
33142
33143          The above target attributes can be specified as follows:
33144
33145               __attribute__((target("arch=armv8-a+crc")))
33146               int
33147               f (int a)
33148               {
33149                 return a + 5;
33150               }
33151
33152          Additionally, the architectural extension string may be
33153          specified on its own.  This can be used to turn on and off
33154          particular architectural extensions without having to specify
33155          a particular architecture version or core.  Example:
33156
33157               __attribute__((target("+crc+nocrypto")))
33158               int
33159               foo (int a)
33160               {
33161                 return a + 5;
33162               }
33163
33164          In this example 'target("+crc+nocrypto")' enables the 'crc'
33165          extension and disables the 'crypto' extension for the function
33166          'foo' without modifying an existing '-march=' or '-mcpu'
33167          option.
33168
33169
33170File: gcc.info,  Node: AVR Function Attributes,  Next: Blackfin Function Attributes,  Prev: ARM Function Attributes,  Up: Function Attributes
33171
331726.33.6 AVR Function Attributes
33173------------------------------
33174
33175These function attributes are supported by the AVR back end:
33176
33177'interrupt'
33178     Use this attribute to indicate that the specified function is an
33179     interrupt handler.  The compiler generates function entry and exit
33180     sequences suitable for use in an interrupt handler when this
33181     attribute is present.
33182
33183     On the AVR, the hardware globally disables interrupts when an
33184     interrupt is executed.  The first instruction of an interrupt
33185     handler declared with this attribute is a 'SEI' instruction to
33186     re-enable interrupts.  See also the 'signal' function attribute
33187     that does not insert a 'SEI' instruction.  If both 'signal' and
33188     'interrupt' are specified for the same function, 'signal' is
33189     silently ignored.
33190
33191'naked'
33192     This attribute allows the compiler to construct the requisite
33193     function declaration, while allowing the body of the function to be
33194     assembly code.  The specified function will not have
33195     prologue/epilogue sequences generated by the compiler.  Only basic
33196     'asm' statements can safely be included in naked functions (*note
33197     Basic Asm::).  While using extended 'asm' or a mixture of basic
33198     'asm' and C code may appear to work, they cannot be depended upon
33199     to work reliably and are not supported.
33200
33201'no_gccisr'
33202     Do not use '__gcc_isr' pseudo instructions in a function with the
33203     'interrupt' or 'signal' attribute aka.  interrupt service routine
33204     (ISR). Use this attribute if the preamble of the ISR prologue
33205     should always read
33206          push  __zero_reg__
33207          push  __tmp_reg__
33208          in    __tmp_reg__, __SREG__
33209          push  __tmp_reg__
33210          clr   __zero_reg__
33211     and accordingly for the postamble of the epilogue -- no matter
33212     whether the mentioned registers are actually used in the ISR or
33213     not.  Situations where you might want to use this attribute
33214     include:
33215        * Code that (effectively) clobbers bits of 'SREG' other than the
33216          'I'-flag by writing to the memory location of 'SREG'.
33217        * Code that uses inline assembler to jump to a different
33218          function which expects (parts of) the prologue code as
33219          outlined above to be present.
33220     To disable '__gcc_isr' generation for the whole compilation unit,
33221     there is option '-mno-gas-isr-prologues', *note AVR Options::.
33222
33223'OS_main'
33224'OS_task'
33225     On AVR, functions with the 'OS_main' or 'OS_task' attribute do not
33226     save/restore any call-saved register in their prologue/epilogue.
33227
33228     The 'OS_main' attribute can be used when there _is guarantee_ that
33229     interrupts are disabled at the time when the function is entered.
33230     This saves resources when the stack pointer has to be changed to
33231     set up a frame for local variables.
33232
33233     The 'OS_task' attribute can be used when there is _no guarantee_
33234     that interrupts are disabled at that time when the function is
33235     entered like for, e.g.  task functions in a multi-threading
33236     operating system.  In that case, changing the stack pointer
33237     register is guarded by save/clear/restore of the global interrupt
33238     enable flag.
33239
33240     The differences to the 'naked' function attribute are:
33241        * 'naked' functions do not have a return instruction whereas
33242          'OS_main' and 'OS_task' functions have a 'RET' or 'RETI'
33243          return instruction.
33244        * 'naked' functions do not set up a frame for local variables or
33245          a frame pointer whereas 'OS_main' and 'OS_task' do this as
33246          needed.
33247
33248'signal'
33249     Use this attribute on the AVR to indicate that the specified
33250     function is an interrupt handler.  The compiler generates function
33251     entry and exit sequences suitable for use in an interrupt handler
33252     when this attribute is present.
33253
33254     See also the 'interrupt' function attribute.
33255
33256     The AVR hardware globally disables interrupts when an interrupt is
33257     executed.  Interrupt handler functions defined with the 'signal'
33258     attribute do not re-enable interrupts.  It is save to enable
33259     interrupts in a 'signal' handler.  This "save" only applies to the
33260     code generated by the compiler and not to the IRQ layout of the
33261     application which is responsibility of the application.
33262
33263     If both 'signal' and 'interrupt' are specified for the same
33264     function, 'signal' is silently ignored.
33265
33266
33267File: gcc.info,  Node: Blackfin Function Attributes,  Next: BPF Function Attributes,  Prev: AVR Function Attributes,  Up: Function Attributes
33268
332696.33.7 Blackfin Function Attributes
33270-----------------------------------
33271
33272These function attributes are supported by the Blackfin back end:
33273
33274'exception_handler'
33275     Use this attribute on the Blackfin to indicate that the specified
33276     function is an exception handler.  The compiler generates function
33277     entry and exit sequences suitable for use in an exception handler
33278     when this attribute is present.
33279
33280'interrupt_handler'
33281     Use this attribute to indicate that the specified function is an
33282     interrupt handler.  The compiler generates function entry and exit
33283     sequences suitable for use in an interrupt handler when this
33284     attribute is present.
33285
33286'kspisusp'
33287     When used together with 'interrupt_handler', 'exception_handler' or
33288     'nmi_handler', code is generated to load the stack pointer from the
33289     USP register in the function prologue.
33290
33291'l1_text'
33292     This attribute specifies a function to be placed into L1
33293     Instruction SRAM.  The function is put into a specific section
33294     named '.l1.text'.  With '-mfdpic', function calls with a such
33295     function as the callee or caller uses inlined PLT.
33296
33297'l2'
33298     This attribute specifies a function to be placed into L2 SRAM. The
33299     function is put into a specific section named '.l2.text'.  With
33300     '-mfdpic', callers of such functions use an inlined PLT.
33301
33302'longcall'
33303'shortcall'
33304     The 'longcall' attribute indicates that the function might be far
33305     away from the call site and require a different (more expensive)
33306     calling sequence.  The 'shortcall' attribute indicates that the
33307     function is always close enough for the shorter calling sequence to
33308     be used.  These attributes override the '-mlongcall' switch.
33309
33310'nesting'
33311     Use this attribute together with 'interrupt_handler',
33312     'exception_handler' or 'nmi_handler' to indicate that the function
33313     entry code should enable nested interrupts or exceptions.
33314
33315'nmi_handler'
33316     Use this attribute on the Blackfin to indicate that the specified
33317     function is an NMI handler.  The compiler generates function entry
33318     and exit sequences suitable for use in an NMI handler when this
33319     attribute is present.
33320
33321'saveall'
33322     Use this attribute to indicate that all registers except the stack
33323     pointer should be saved in the prologue regardless of whether they
33324     are used or not.
33325
33326
33327File: gcc.info,  Node: BPF Function Attributes,  Next: CR16 Function Attributes,  Prev: Blackfin Function Attributes,  Up: Function Attributes
33328
333296.33.8 BPF Function Attributes
33330------------------------------
33331
33332These function attributes are supported by the BPF back end:
33333
33334'kernel_helper'
33335     use this attribute to indicate the specified function declaration
33336     is a kernel helper.  The helper function is passed as an argument
33337     to the attribute.  Example:
33338
33339          int bpf_probe_read (void *dst, int size, const void *unsafe_ptr)
33340            __attribute__ ((kernel_helper (4)));
33341
33342
33343File: gcc.info,  Node: CR16 Function Attributes,  Next: C-SKY Function Attributes,  Prev: BPF Function Attributes,  Up: Function Attributes
33344
333456.33.9 CR16 Function Attributes
33346-------------------------------
33347
33348These function attributes are supported by the CR16 back end:
33349
33350'interrupt'
33351     Use this attribute to indicate that the specified function is an
33352     interrupt handler.  The compiler generates function entry and exit
33353     sequences suitable for use in an interrupt handler when this
33354     attribute is present.
33355
33356
33357File: gcc.info,  Node: C-SKY Function Attributes,  Next: Epiphany Function Attributes,  Prev: CR16 Function Attributes,  Up: Function Attributes
33358
333596.33.10 C-SKY Function Attributes
33360---------------------------------
33361
33362These function attributes are supported by the C-SKY back end:
33363
33364'interrupt'
33365'isr'
33366     Use these attributes to indicate that the specified function is an
33367     interrupt handler.  The compiler generates function entry and exit
33368     sequences suitable for use in an interrupt handler when either of
33369     these attributes are present.
33370
33371     Use of these options requires the '-mistack' command-line option to
33372     enable support for the necessary interrupt stack instructions.
33373     They are ignored with a warning otherwise.  *Note C-SKY Options::.
33374
33375'naked'
33376     This attribute allows the compiler to construct the requisite
33377     function declaration, while allowing the body of the function to be
33378     assembly code.  The specified function will not have
33379     prologue/epilogue sequences generated by the compiler.  Only basic
33380     'asm' statements can safely be included in naked functions (*note
33381     Basic Asm::).  While using extended 'asm' or a mixture of basic
33382     'asm' and C code may appear to work, they cannot be depended upon
33383     to work reliably and are not supported.
33384
33385
33386File: gcc.info,  Node: Epiphany Function Attributes,  Next: H8/300 Function Attributes,  Prev: C-SKY Function Attributes,  Up: Function Attributes
33387
333886.33.11 Epiphany Function Attributes
33389------------------------------------
33390
33391These function attributes are supported by the Epiphany back end:
33392
33393'disinterrupt'
33394     This attribute causes the compiler to emit instructions to disable
33395     interrupts for the duration of the given function.
33396
33397'forwarder_section'
33398     This attribute modifies the behavior of an interrupt handler.  The
33399     interrupt handler may be in external memory which cannot be reached
33400     by a branch instruction, so generate a local memory trampoline to
33401     transfer control.  The single parameter identifies the section
33402     where the trampoline is placed.
33403
33404'interrupt'
33405     Use this attribute to indicate that the specified function is an
33406     interrupt handler.  The compiler generates function entry and exit
33407     sequences suitable for use in an interrupt handler when this
33408     attribute is present.  It may also generate a special section with
33409     code to initialize the interrupt vector table.
33410
33411     On Epiphany targets one or more optional parameters can be added
33412     like this:
33413
33414          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
33415
33416     Permissible values for these parameters are: 'reset',
33417     'software_exception', 'page_miss', 'timer0', 'timer1', 'message',
33418     'dma0', 'dma1', 'wand' and 'swi'.  Multiple parameters indicate
33419     that multiple entries in the interrupt vector table should be
33420     initialized for this function, i.e. for each parameter NAME, a jump
33421     to the function is emitted in the section ivt_entry_NAME.  The
33422     parameter(s) may be omitted entirely, in which case no interrupt
33423     vector table entry is provided.
33424
33425     Note that interrupts are enabled inside the function unless the
33426     'disinterrupt' attribute is also specified.
33427
33428     The following examples are all valid uses of these attributes on
33429     Epiphany targets:
33430          void __attribute__ ((interrupt)) universal_handler ();
33431          void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
33432          void __attribute__ ((interrupt ("dma0, dma1")))
33433            universal_dma_handler ();
33434          void __attribute__ ((interrupt ("timer0"), disinterrupt))
33435            fast_timer_handler ();
33436          void __attribute__ ((interrupt ("dma0, dma1"),
33437                               forwarder_section ("tramp")))
33438            external_dma_handler ();
33439
33440'long_call'
33441'short_call'
33442     These attributes specify how a particular function is called.
33443     These attributes override the '-mlong-calls' (*note Adapteva
33444     Epiphany Options::) command-line switch and '#pragma long_calls'
33445     settings.
33446
33447
33448File: gcc.info,  Node: H8/300 Function Attributes,  Next: IA-64 Function Attributes,  Prev: Epiphany Function Attributes,  Up: Function Attributes
33449
334506.33.12 H8/300 Function Attributes
33451----------------------------------
33452
33453These function attributes are available for H8/300 targets:
33454
33455'function_vector'
33456     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
33457     the specified function should be called through the function
33458     vector.  Calling a function through the function vector reduces
33459     code size; however, the function vector has a limited size (maximum
33460     128 entries on the H8/300 and 64 entries on the H8/300H and H8S)
33461     and shares space with the interrupt vector.
33462
33463'interrupt_handler'
33464     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
33465     the specified function is an interrupt handler.  The compiler
33466     generates function entry and exit sequences suitable for use in an
33467     interrupt handler when this attribute is present.
33468
33469'saveall'
33470     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
33471     all registers except the stack pointer should be saved in the
33472     prologue regardless of whether they are used or not.
33473
33474
33475File: gcc.info,  Node: IA-64 Function Attributes,  Next: M32C Function Attributes,  Prev: H8/300 Function Attributes,  Up: Function Attributes
33476
334776.33.13 IA-64 Function Attributes
33478---------------------------------
33479
33480These function attributes are supported on IA-64 targets:
33481
33482'syscall_linkage'
33483     This attribute is used to modify the IA-64 calling convention by
33484     marking all input registers as live at all function exits.  This
33485     makes it possible to restart a system call after an interrupt
33486     without having to save/restore the input registers.  This also
33487     prevents kernel data from leaking into application code.
33488
33489'version_id'
33490     This IA-64 HP-UX attribute, attached to a global variable or
33491     function, renames a symbol to contain a version string, thus
33492     allowing for function level versioning.  HP-UX system header files
33493     may use function level versioning for some system calls.
33494
33495          extern int foo () __attribute__((version_id ("20040821")));
33496
33497     Calls to 'foo' are mapped to calls to 'foo{20040821}'.
33498
33499
33500File: gcc.info,  Node: M32C Function Attributes,  Next: M32R/D Function Attributes,  Prev: IA-64 Function Attributes,  Up: Function Attributes
33501
335026.33.14 M32C Function Attributes
33503--------------------------------
33504
33505These function attributes are supported by the M32C back end:
33506
33507'bank_switch'
33508     When added to an interrupt handler with the M32C port, causes the
33509     prologue and epilogue to use bank switching to preserve the
33510     registers rather than saving them on the stack.
33511
33512'fast_interrupt'
33513     Use this attribute on the M32C port to indicate that the specified
33514     function is a fast interrupt handler.  This is just like the
33515     'interrupt' attribute, except that 'freit' is used to return
33516     instead of 'reit'.
33517
33518'function_vector'
33519     On M16C/M32C targets, the 'function_vector' attribute declares a
33520     special page subroutine call function.  Use of this attribute
33521     reduces the code size by 2 bytes for each call generated to the
33522     subroutine.  The argument to the attribute is the vector number
33523     entry from the special page vector table which contains the 16
33524     low-order bits of the subroutine's entry address.  Each vector
33525     table has special page number (18 to 255) that is used in 'jsrs'
33526     instructions.  Jump addresses of the routines are generated by
33527     adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
33528     M32C targets), to the 2-byte addresses set in the vector table.
33529     Therefore you need to ensure that all the special page vector
33530     routines should get mapped within the address range 0x0F0000 to
33531     0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
33532
33533     In the following example 2 bytes are saved for each call to
33534     function 'foo'.
33535
33536          void foo (void) __attribute__((function_vector(0x18)));
33537          void foo (void)
33538          {
33539          }
33540
33541          void bar (void)
33542          {
33543              foo();
33544          }
33545
33546     If functions are defined in one file and are called in another
33547     file, then be sure to write this declaration in both files.
33548
33549     This attribute is ignored for R8C target.
33550
33551'interrupt'
33552     Use this attribute to indicate that the specified function is an
33553     interrupt handler.  The compiler generates function entry and exit
33554     sequences suitable for use in an interrupt handler when this
33555     attribute is present.
33556
33557
33558File: gcc.info,  Node: M32R/D Function Attributes,  Next: m68k Function Attributes,  Prev: M32C Function Attributes,  Up: Function Attributes
33559
335606.33.15 M32R/D Function Attributes
33561----------------------------------
33562
33563These function attributes are supported by the M32R/D back end:
33564
33565'interrupt'
33566     Use this attribute to indicate that the specified function is an
33567     interrupt handler.  The compiler generates function entry and exit
33568     sequences suitable for use in an interrupt handler when this
33569     attribute is present.
33570
33571'model (MODEL-NAME)'
33572
33573     On the M32R/D, use this attribute to set the addressability of an
33574     object, and of the code generated for a function.  The identifier
33575     MODEL-NAME is one of 'small', 'medium', or 'large', representing
33576     each of the code models.
33577
33578     Small model objects live in the lower 16MB of memory (so that their
33579     addresses can be loaded with the 'ld24' instruction), and are
33580     callable with the 'bl' instruction.
33581
33582     Medium model objects may live anywhere in the 32-bit address space
33583     (the compiler generates 'seth/add3' instructions to load their
33584     addresses), and are callable with the 'bl' instruction.
33585
33586     Large model objects may live anywhere in the 32-bit address space
33587     (the compiler generates 'seth/add3' instructions to load their
33588     addresses), and may not be reachable with the 'bl' instruction (the
33589     compiler generates the much slower 'seth/add3/jl' instruction
33590     sequence).
33591
33592
33593File: gcc.info,  Node: m68k Function Attributes,  Next: MCORE Function Attributes,  Prev: M32R/D Function Attributes,  Up: Function Attributes
33594
335956.33.16 m68k Function Attributes
33596--------------------------------
33597
33598These function attributes are supported by the m68k back end:
33599
33600'interrupt'
33601'interrupt_handler'
33602     Use this attribute to indicate that the specified function is an
33603     interrupt handler.  The compiler generates function entry and exit
33604     sequences suitable for use in an interrupt handler when this
33605     attribute is present.  Either name may be used.
33606
33607'interrupt_thread'
33608     Use this attribute on fido, a subarchitecture of the m68k, to
33609     indicate that the specified function is an interrupt handler that
33610     is designed to run as a thread.  The compiler omits generate
33611     prologue/epilogue sequences and replaces the return instruction
33612     with a 'sleep' instruction.  This attribute is available only on
33613     fido.
33614
33615
33616File: gcc.info,  Node: MCORE Function Attributes,  Next: MeP Function Attributes,  Prev: m68k Function Attributes,  Up: Function Attributes
33617
336186.33.17 MCORE Function Attributes
33619---------------------------------
33620
33621These function attributes are supported by the MCORE back end:
33622
33623'naked'
33624     This attribute allows the compiler to construct the requisite
33625     function declaration, while allowing the body of the function to be
33626     assembly code.  The specified function will not have
33627     prologue/epilogue sequences generated by the compiler.  Only basic
33628     'asm' statements can safely be included in naked functions (*note
33629     Basic Asm::).  While using extended 'asm' or a mixture of basic
33630     'asm' and C code may appear to work, they cannot be depended upon
33631     to work reliably and are not supported.
33632
33633
33634File: gcc.info,  Node: MeP Function Attributes,  Next: MicroBlaze Function Attributes,  Prev: MCORE Function Attributes,  Up: Function Attributes
33635
336366.33.18 MeP Function Attributes
33637-------------------------------
33638
33639These function attributes are supported by the MeP back end:
33640
33641'disinterrupt'
33642     On MeP targets, this attribute causes the compiler to emit
33643     instructions to disable interrupts for the duration of the given
33644     function.
33645
33646'interrupt'
33647     Use this attribute to indicate that the specified function is an
33648     interrupt handler.  The compiler generates function entry and exit
33649     sequences suitable for use in an interrupt handler when this
33650     attribute is present.
33651
33652'near'
33653     This attribute causes the compiler to assume the called function is
33654     close enough to use the normal calling convention, overriding the
33655     '-mtf' command-line option.
33656
33657'far'
33658     On MeP targets this causes the compiler to use a calling convention
33659     that assumes the called function is too far away for the built-in
33660     addressing modes.
33661
33662'vliw'
33663     The 'vliw' attribute tells the compiler to emit instructions in
33664     VLIW mode instead of core mode.  Note that this attribute is not
33665     allowed unless a VLIW coprocessor has been configured and enabled
33666     through command-line options.
33667
33668
33669File: gcc.info,  Node: MicroBlaze Function Attributes,  Next: Microsoft Windows Function Attributes,  Prev: MeP Function Attributes,  Up: Function Attributes
33670
336716.33.19 MicroBlaze Function Attributes
33672--------------------------------------
33673
33674These function attributes are supported on MicroBlaze targets:
33675
33676'save_volatiles'
33677     Use this attribute to indicate that the function is an interrupt
33678     handler.  All volatile registers (in addition to non-volatile
33679     registers) are saved in the function prologue.  If the function is
33680     a leaf function, only volatiles used by the function are saved.  A
33681     normal function return is generated instead of a return from
33682     interrupt.
33683
33684'break_handler'
33685     Use this attribute to indicate that the specified function is a
33686     break handler.  The compiler generates function entry and exit
33687     sequences suitable for use in an break handler when this attribute
33688     is present.  The return from 'break_handler' is done through the
33689     'rtbd' instead of 'rtsd'.
33690
33691          void f () __attribute__ ((break_handler));
33692
33693'interrupt_handler'
33694'fast_interrupt'
33695     These attributes indicate that the specified function is an
33696     interrupt handler.  Use the 'fast_interrupt' attribute to indicate
33697     handlers used in low-latency interrupt mode, and
33698     'interrupt_handler' for interrupts that do not use low-latency
33699     handlers.  In both cases, GCC emits appropriate prologue code and
33700     generates a return from the handler using 'rtid' instead of 'rtsd'.
33701
33702
33703File: gcc.info,  Node: Microsoft Windows Function Attributes,  Next: MIPS Function Attributes,  Prev: MicroBlaze Function Attributes,  Up: Function Attributes
33704
337056.33.20 Microsoft Windows Function Attributes
33706---------------------------------------------
33707
33708The following attributes are available on Microsoft Windows and Symbian
33709OS targets.
33710
33711'dllexport'
33712     On Microsoft Windows targets and Symbian OS targets the 'dllexport'
33713     attribute causes the compiler to provide a global pointer to a
33714     pointer in a DLL, so that it can be referenced with the 'dllimport'
33715     attribute.  On Microsoft Windows targets, the pointer name is
33716     formed by combining '_imp__' and the function or variable name.
33717
33718     You can use '__declspec(dllexport)' as a synonym for '__attribute__
33719     ((dllexport))' for compatibility with other compilers.
33720
33721     On systems that support the 'visibility' attribute, this attribute
33722     also implies "default" visibility.  It is an error to explicitly
33723     specify any other visibility.
33724
33725     GCC's default behavior is to emit all inline functions with the
33726     'dllexport' attribute.  Since this can cause object file-size
33727     bloat, you can use '-fno-keep-inline-dllexport', which tells GCC to
33728     ignore the attribute for inlined functions unless the
33729     '-fkeep-inline-functions' flag is used instead.
33730
33731     The attribute is ignored for undefined symbols.
33732
33733     When applied to C++ classes, the attribute marks defined
33734     non-inlined member functions and static data members as exports.
33735     Static consts initialized in-class are not marked unless they are
33736     also defined out-of-class.
33737
33738     For Microsoft Windows targets there are alternative methods for
33739     including the symbol in the DLL's export table such as using a
33740     '.def' file with an 'EXPORTS' section or, with GNU ld, using the
33741     '--export-all' linker flag.
33742
33743'dllimport'
33744     On Microsoft Windows and Symbian OS targets, the 'dllimport'
33745     attribute causes the compiler to reference a function or variable
33746     via a global pointer to a pointer that is set up by the DLL
33747     exporting the symbol.  The attribute implies 'extern'.  On
33748     Microsoft Windows targets, the pointer name is formed by combining
33749     '_imp__' and the function or variable name.
33750
33751     You can use '__declspec(dllimport)' as a synonym for '__attribute__
33752     ((dllimport))' for compatibility with other compilers.
33753
33754     On systems that support the 'visibility' attribute, this attribute
33755     also implies "default" visibility.  It is an error to explicitly
33756     specify any other visibility.
33757
33758     Currently, the attribute is ignored for inlined functions.  If the
33759     attribute is applied to a symbol _definition_, an error is
33760     reported.  If a symbol previously declared 'dllimport' is later
33761     defined, the attribute is ignored in subsequent references, and a
33762     warning is emitted.  The attribute is also overridden by a
33763     subsequent declaration as 'dllexport'.
33764
33765     When applied to C++ classes, the attribute marks non-inlined member
33766     functions and static data members as imports.  However, the
33767     attribute is ignored for virtual methods to allow creation of
33768     vtables using thunks.
33769
33770     On the SH Symbian OS target the 'dllimport' attribute also has
33771     another affect--it can cause the vtable and run-time type
33772     information for a class to be exported.  This happens when the
33773     class has a dllimported constructor or a non-inline, non-pure
33774     virtual function and, for either of those two conditions, the class
33775     also has an inline constructor or destructor and has a key function
33776     that is defined in the current translation unit.
33777
33778     For Microsoft Windows targets the use of the 'dllimport' attribute
33779     on functions is not necessary, but provides a small performance
33780     benefit by eliminating a thunk in the DLL.  The use of the
33781     'dllimport' attribute on imported variables can be avoided by
33782     passing the '--enable-auto-import' switch to the GNU linker.  As
33783     with functions, using the attribute for a variable eliminates a
33784     thunk in the DLL.
33785
33786     One drawback to using this attribute is that a pointer to a
33787     _variable_ marked as 'dllimport' cannot be used as a constant
33788     address.  However, a pointer to a _function_ with the 'dllimport'
33789     attribute can be used as a constant initializer; in this case, the
33790     address of a stub function in the import lib is referenced.  On
33791     Microsoft Windows targets, the attribute can be disabled for
33792     functions by setting the '-mnop-fun-dllimport' flag.
33793
33794
33795File: gcc.info,  Node: MIPS Function Attributes,  Next: MSP430 Function Attributes,  Prev: Microsoft Windows Function Attributes,  Up: Function Attributes
33796
337976.33.21 MIPS Function Attributes
33798--------------------------------
33799
33800These function attributes are supported by the MIPS back end:
33801
33802'interrupt'
33803     Use this attribute to indicate that the specified function is an
33804     interrupt handler.  The compiler generates function entry and exit
33805     sequences suitable for use in an interrupt handler when this
33806     attribute is present.  An optional argument is supported for the
33807     interrupt attribute which allows the interrupt mode to be
33808     described.  By default GCC assumes the external interrupt
33809     controller (EIC) mode is in use, this can be explicitly set using
33810     'eic'.  When interrupts are non-masked then the requested Interrupt
33811     Priority Level (IPL) is copied to the current IPL which has the
33812     effect of only enabling higher priority interrupts.  To use
33813     vectored interrupt mode use the argument
33814     'vector=[sw0|sw1|hw0|hw1|hw2|hw3|hw4|hw5]', this will change the
33815     behavior of the non-masked interrupt support and GCC will arrange
33816     to mask all interrupts from sw0 up to and including the specified
33817     interrupt vector.
33818
33819     You can use the following attributes to modify the behavior of an
33820     interrupt handler:
33821     'use_shadow_register_set'
33822          Assume that the handler uses a shadow register set, instead of
33823          the main general-purpose registers.  An optional argument
33824          'intstack' is supported to indicate that the shadow register
33825          set contains a valid stack pointer.
33826
33827     'keep_interrupts_masked'
33828          Keep interrupts masked for the whole function.  Without this
33829          attribute, GCC tries to reenable interrupts for as much of the
33830          function as it can.
33831
33832     'use_debug_exception_return'
33833          Return using the 'deret' instruction.  Interrupt handlers that
33834          don't have this attribute return using 'eret' instead.
33835
33836     You can use any combination of these attributes, as shown below:
33837          void __attribute__ ((interrupt)) v0 ();
33838          void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
33839          void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
33840          void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
33841          void __attribute__ ((interrupt, use_shadow_register_set,
33842                               keep_interrupts_masked)) v4 ();
33843          void __attribute__ ((interrupt, use_shadow_register_set,
33844                               use_debug_exception_return)) v5 ();
33845          void __attribute__ ((interrupt, keep_interrupts_masked,
33846                               use_debug_exception_return)) v6 ();
33847          void __attribute__ ((interrupt, use_shadow_register_set,
33848                               keep_interrupts_masked,
33849                               use_debug_exception_return)) v7 ();
33850          void __attribute__ ((interrupt("eic"))) v8 ();
33851          void __attribute__ ((interrupt("vector=hw3"))) v9 ();
33852
33853'long_call'
33854'short_call'
33855'near'
33856'far'
33857     These attributes specify how a particular function is called on
33858     MIPS.  The attributes override the '-mlong-calls' (*note MIPS
33859     Options::) command-line switch.  The 'long_call' and 'far'
33860     attributes are synonyms, and cause the compiler to always call the
33861     function by first loading its address into a register, and then
33862     using the contents of that register.  The 'short_call' and 'near'
33863     attributes are synonyms, and have the opposite effect; they specify
33864     that non-PIC calls should be made using the more efficient 'jal'
33865     instruction.
33866
33867'mips16'
33868'nomips16'
33869
33870     On MIPS targets, you can use the 'mips16' and 'nomips16' function
33871     attributes to locally select or turn off MIPS16 code generation.  A
33872     function with the 'mips16' attribute is emitted as MIPS16 code,
33873     while MIPS16 code generation is disabled for functions with the
33874     'nomips16' attribute.  These attributes override the '-mips16' and
33875     '-mno-mips16' options on the command line (*note MIPS Options::).
33876
33877     When compiling files containing mixed MIPS16 and non-MIPS16 code,
33878     the preprocessor symbol '__mips16' reflects the setting on the
33879     command line, not that within individual functions.  Mixed MIPS16
33880     and non-MIPS16 code may interact badly with some GCC extensions
33881     such as '__builtin_apply' (*note Constructing Calls::).
33882
33883'micromips, MIPS'
33884'nomicromips, MIPS'
33885
33886     On MIPS targets, you can use the 'micromips' and 'nomicromips'
33887     function attributes to locally select or turn off microMIPS code
33888     generation.  A function with the 'micromips' attribute is emitted
33889     as microMIPS code, while microMIPS code generation is disabled for
33890     functions with the 'nomicromips' attribute.  These attributes
33891     override the '-mmicromips' and '-mno-micromips' options on the
33892     command line (*note MIPS Options::).
33893
33894     When compiling files containing mixed microMIPS and non-microMIPS
33895     code, the preprocessor symbol '__mips_micromips' reflects the
33896     setting on the command line, not that within individual functions.
33897     Mixed microMIPS and non-microMIPS code may interact badly with some
33898     GCC extensions such as '__builtin_apply' (*note Constructing
33899     Calls::).
33900
33901'nocompression'
33902     On MIPS targets, you can use the 'nocompression' function attribute
33903     to locally turn off MIPS16 and microMIPS code generation.  This
33904     attribute overrides the '-mips16' and '-mmicromips' options on the
33905     command line (*note MIPS Options::).
33906
33907
33908File: gcc.info,  Node: MSP430 Function Attributes,  Next: NDS32 Function Attributes,  Prev: MIPS Function Attributes,  Up: Function Attributes
33909
339106.33.22 MSP430 Function Attributes
33911----------------------------------
33912
33913These function attributes are supported by the MSP430 back end:
33914
33915'critical'
33916     Critical functions disable interrupts upon entry and restore the
33917     previous interrupt state upon exit.  Critical functions cannot also
33918     have the 'naked', 'reentrant' or 'interrupt' attributes.
33919
33920     The MSP430 hardware ensures that interrupts are disabled on entry
33921     to 'interrupt' functions, and restores the previous interrupt state
33922     on exit.  The 'critical' attribute is therefore redundant on
33923     'interrupt' functions.
33924
33925'interrupt'
33926     Use this attribute to indicate that the specified function is an
33927     interrupt handler.  The compiler generates function entry and exit
33928     sequences suitable for use in an interrupt handler when this
33929     attribute is present.
33930
33931     You can provide an argument to the interrupt attribute which
33932     specifies a name or number.  If the argument is a number it
33933     indicates the slot in the interrupt vector table (0 - 31) to which
33934     this handler should be assigned.  If the argument is a name it is
33935     treated as a symbolic name for the vector slot.  These names should
33936     match up with appropriate entries in the linker script.  By default
33937     the names 'watchdog' for vector 26, 'nmi' for vector 30 and 'reset'
33938     for vector 31 are recognized.
33939
33940'naked'
33941     This attribute allows the compiler to construct the requisite
33942     function declaration, while allowing the body of the function to be
33943     assembly code.  The specified function will not have
33944     prologue/epilogue sequences generated by the compiler.  Only basic
33945     'asm' statements can safely be included in naked functions (*note
33946     Basic Asm::).  While using extended 'asm' or a mixture of basic
33947     'asm' and C code may appear to work, they cannot be depended upon
33948     to work reliably and are not supported.
33949
33950'reentrant'
33951     Reentrant functions disable interrupts upon entry and enable them
33952     upon exit.  Reentrant functions cannot also have the 'naked' or
33953     'critical' attributes.  They can have the 'interrupt' attribute.
33954
33955'wakeup'
33956     This attribute only applies to interrupt functions.  It is silently
33957     ignored if applied to a non-interrupt function.  A wakeup interrupt
33958     function will rouse the processor from any low-power state that it
33959     might be in when the function exits.
33960
33961'lower'
33962'upper'
33963'either'
33964     On the MSP430 target these attributes can be used to specify
33965     whether the function or variable should be placed into low memory,
33966     high memory, or the placement should be left to the linker to
33967     decide.  The attributes are only significant if compiling for the
33968     MSP430X architecture in the large memory model.
33969
33970     The attributes work in conjunction with a linker script that has
33971     been augmented to specify where to place sections with a '.lower'
33972     and a '.upper' prefix.  So, for example, as well as placing the
33973     '.data' section, the script also specifies the placement of a
33974     '.lower.data' and a '.upper.data' section.  The intention is that
33975     'lower' sections are placed into a small but easier to access
33976     memory region and the upper sections are placed into a larger, but
33977     slower to access, region.
33978
33979     The 'either' attribute is special.  It tells the linker to place
33980     the object into the corresponding 'lower' section if there is room
33981     for it.  If there is insufficient room then the object is placed
33982     into the corresponding 'upper' section instead.  Note that the
33983     placement algorithm is not very sophisticated.  It does not attempt
33984     to find an optimal packing of the 'lower' sections.  It just makes
33985     one pass over the objects and does the best that it can.  Using the
33986     '-ffunction-sections' and '-fdata-sections' command-line options
33987     can help the packing, however, since they produce smaller, easier
33988     to pack regions.
33989
33990
33991File: gcc.info,  Node: NDS32 Function Attributes,  Next: Nios II Function Attributes,  Prev: MSP430 Function Attributes,  Up: Function Attributes
33992
339936.33.23 NDS32 Function Attributes
33994---------------------------------
33995
33996These function attributes are supported by the NDS32 back end:
33997
33998'exception'
33999     Use this attribute on the NDS32 target to indicate that the
34000     specified function is an exception handler.  The compiler will
34001     generate corresponding sections for use in an exception handler.
34002
34003'interrupt'
34004     On NDS32 target, this attribute indicates that the specified
34005     function is an interrupt handler.  The compiler generates
34006     corresponding sections for use in an interrupt handler.  You can
34007     use the following attributes to modify the behavior:
34008     'nested'
34009          This interrupt service routine is interruptible.
34010     'not_nested'
34011          This interrupt service routine is not interruptible.
34012     'nested_ready'
34013          This interrupt service routine is interruptible after
34014          'PSW.GIE' (global interrupt enable) is set.  This allows
34015          interrupt service routine to finish some short critical code
34016          before enabling interrupts.
34017     'save_all'
34018          The system will help save all registers into stack before
34019          entering interrupt handler.
34020     'partial_save'
34021          The system will help save caller registers into stack before
34022          entering interrupt handler.
34023
34024'naked'
34025     This attribute allows the compiler to construct the requisite
34026     function declaration, while allowing the body of the function to be
34027     assembly code.  The specified function will not have
34028     prologue/epilogue sequences generated by the compiler.  Only basic
34029     'asm' statements can safely be included in naked functions (*note
34030     Basic Asm::).  While using extended 'asm' or a mixture of basic
34031     'asm' and C code may appear to work, they cannot be depended upon
34032     to work reliably and are not supported.
34033
34034'reset'
34035     Use this attribute on the NDS32 target to indicate that the
34036     specified function is a reset handler.  The compiler will generate
34037     corresponding sections for use in a reset handler.  You can use the
34038     following attributes to provide extra exception handling:
34039     'nmi'
34040          Provide a user-defined function to handle NMI exception.
34041     'warm'
34042          Provide a user-defined function to handle warm reset
34043          exception.
34044
34045
34046File: gcc.info,  Node: Nios II Function Attributes,  Next: Nvidia PTX Function Attributes,  Prev: NDS32 Function Attributes,  Up: Function Attributes
34047
340486.33.24 Nios II Function Attributes
34049-----------------------------------
34050
34051These function attributes are supported by the Nios II back end:
34052
34053'target (OPTIONS)'
34054     As discussed in *note Common Function Attributes::, this attribute
34055     allows specification of target-specific compilation options.
34056
34057     When compiling for Nios II, the following options are allowed:
34058
34059     'custom-INSN=N'
34060     'no-custom-INSN'
34061          Each 'custom-INSN=N' attribute locally enables use of a custom
34062          instruction with encoding N when generating code that uses
34063          INSN.  Similarly, 'no-custom-INSN' locally inhibits use of the
34064          custom instruction INSN.  These target attributes correspond
34065          to the '-mcustom-INSN=N' and '-mno-custom-INSN' command-line
34066          options, and support the same set of INSN keywords.  *Note
34067          Nios II Options::, for more information.
34068
34069     'custom-fpu-cfg=NAME'
34070          This attribute corresponds to the '-mcustom-fpu-cfg=NAME'
34071          command-line option, to select a predefined set of custom
34072          instructions named NAME.  *Note Nios II Options::, for more
34073          information.
34074
34075
34076File: gcc.info,  Node: Nvidia PTX Function Attributes,  Next: PowerPC Function Attributes,  Prev: Nios II Function Attributes,  Up: Function Attributes
34077
340786.33.25 Nvidia PTX Function Attributes
34079--------------------------------------
34080
34081These function attributes are supported by the Nvidia PTX back end:
34082
34083'kernel'
34084     This attribute indicates that the corresponding function should be
34085     compiled as a kernel function, which can be invoked from the host
34086     via the CUDA RT library.  By default functions are only callable
34087     only from other PTX functions.
34088
34089     Kernel functions must have 'void' return type.
34090
34091
34092File: gcc.info,  Node: PowerPC Function Attributes,  Next: RISC-V Function Attributes,  Prev: Nvidia PTX Function Attributes,  Up: Function Attributes
34093
340946.33.26 PowerPC Function Attributes
34095-----------------------------------
34096
34097These function attributes are supported by the PowerPC back end:
34098
34099'longcall'
34100'shortcall'
34101     The 'longcall' attribute indicates that the function might be far
34102     away from the call site and require a different (more expensive)
34103     calling sequence.  The 'shortcall' attribute indicates that the
34104     function is always close enough for the shorter calling sequence to
34105     be used.  These attributes override both the '-mlongcall' switch
34106     and the '#pragma longcall' setting.
34107
34108     *Note RS/6000 and PowerPC Options::, for more information on
34109     whether long calls are necessary.
34110
34111'target (OPTIONS)'
34112     As discussed in *note Common Function Attributes::, this attribute
34113     allows specification of target-specific compilation options.
34114
34115     On the PowerPC, the following options are allowed:
34116
34117     'altivec'
34118     'no-altivec'
34119          Generate code that uses (does not use) AltiVec instructions.
34120          In 32-bit code, you cannot enable AltiVec instructions unless
34121          '-mabi=altivec' is used on the command line.
34122
34123     'cmpb'
34124     'no-cmpb'
34125          Generate code that uses (does not use) the compare bytes
34126          instruction implemented on the POWER6 processor and other
34127          processors that support the PowerPC V2.05 architecture.
34128
34129     'dlmzb'
34130     'no-dlmzb'
34131          Generate code that uses (does not use) the string-search
34132          'dlmzb' instruction on the IBM 405, 440, 464 and 476
34133          processors.  This instruction is generated by default when
34134          targeting those processors.
34135
34136     'fprnd'
34137     'no-fprnd'
34138          Generate code that uses (does not use) the FP round to integer
34139          instructions implemented on the POWER5+ processor and other
34140          processors that support the PowerPC V2.03 architecture.
34141
34142     'hard-dfp'
34143     'no-hard-dfp'
34144          Generate code that uses (does not use) the decimal
34145          floating-point instructions implemented on some POWER
34146          processors.
34147
34148     'isel'
34149     'no-isel'
34150          Generate code that uses (does not use) ISEL instruction.
34151
34152     'mfcrf'
34153     'no-mfcrf'
34154          Generate code that uses (does not use) the move from condition
34155          register field instruction implemented on the POWER4 processor
34156          and other processors that support the PowerPC V2.01
34157          architecture.
34158
34159     'mulhw'
34160     'no-mulhw'
34161          Generate code that uses (does not use) the half-word multiply
34162          and multiply-accumulate instructions on the IBM 405, 440, 464
34163          and 476 processors.  These instructions are generated by
34164          default when targeting those processors.
34165
34166     'multiple'
34167     'no-multiple'
34168          Generate code that uses (does not use) the load multiple word
34169          instructions and the store multiple word instructions.
34170
34171     'update'
34172     'no-update'
34173          Generate code that uses (does not use) the load or store
34174          instructions that update the base register to the address of
34175          the calculated memory location.
34176
34177     'popcntb'
34178     'no-popcntb'
34179          Generate code that uses (does not use) the popcount and
34180          double-precision FP reciprocal estimate instruction
34181          implemented on the POWER5 processor and other processors that
34182          support the PowerPC V2.02 architecture.
34183
34184     'popcntd'
34185     'no-popcntd'
34186          Generate code that uses (does not use) the popcount
34187          instruction implemented on the POWER7 processor and other
34188          processors that support the PowerPC V2.06 architecture.
34189
34190     'powerpc-gfxopt'
34191     'no-powerpc-gfxopt'
34192          Generate code that uses (does not use) the optional PowerPC
34193          architecture instructions in the Graphics group, including
34194          floating-point select.
34195
34196     'powerpc-gpopt'
34197     'no-powerpc-gpopt'
34198          Generate code that uses (does not use) the optional PowerPC
34199          architecture instructions in the General Purpose group,
34200          including floating-point square root.
34201
34202     'recip-precision'
34203     'no-recip-precision'
34204          Assume (do not assume) that the reciprocal estimate
34205          instructions provide higher-precision estimates than is
34206          mandated by the PowerPC ABI.
34207
34208     'string'
34209     'no-string'
34210          Generate code that uses (does not use) the load string
34211          instructions and the store string word instructions to save
34212          multiple registers and do small block moves.
34213
34214     'vsx'
34215     'no-vsx'
34216          Generate code that uses (does not use) vector/scalar (VSX)
34217          instructions, and also enable the use of built-in functions
34218          that allow more direct access to the VSX instruction set.  In
34219          32-bit code, you cannot enable VSX or AltiVec instructions
34220          unless '-mabi=altivec' is used on the command line.
34221
34222     'friz'
34223     'no-friz'
34224          Generate (do not generate) the 'friz' instruction when the
34225          '-funsafe-math-optimizations' option is used to optimize
34226          rounding a floating-point value to 64-bit integer and back to
34227          floating point.  The 'friz' instruction does not return the
34228          same value if the floating-point number is too large to fit in
34229          an integer.
34230
34231     'avoid-indexed-addresses'
34232     'no-avoid-indexed-addresses'
34233          Generate code that tries to avoid (not avoid) the use of
34234          indexed load or store instructions.
34235
34236     'paired'
34237     'no-paired'
34238          Generate code that uses (does not use) the generation of
34239          PAIRED simd instructions.
34240
34241     'longcall'
34242     'no-longcall'
34243          Generate code that assumes (does not assume) that all calls
34244          are far away so that a longer more expensive calling sequence
34245          is required.
34246
34247     'cpu=CPU'
34248          Specify the architecture to generate code for when compiling
34249          the function.  If you select the 'target("cpu=power7")'
34250          attribute when generating 32-bit code, VSX and AltiVec
34251          instructions are not generated unless you use the
34252          '-mabi=altivec' option on the command line.
34253
34254     'tune=TUNE'
34255          Specify the architecture to tune for when compiling the
34256          function.  If you do not specify the 'target("tune=TUNE")'
34257          attribute and you do specify the 'target("cpu=CPU")'
34258          attribute, compilation tunes for the CPU architecture, and not
34259          the default tuning specified on the command line.
34260
34261     On the PowerPC, the inliner does not inline a function that has
34262     different target options than the caller, unless the callee has a
34263     subset of the target options of the caller.
34264
34265
34266File: gcc.info,  Node: RISC-V Function Attributes,  Next: RL78 Function Attributes,  Prev: PowerPC Function Attributes,  Up: Function Attributes
34267
342686.33.27 RISC-V Function Attributes
34269----------------------------------
34270
34271These function attributes are supported by the RISC-V back end:
34272
34273'naked'
34274     This attribute allows the compiler to construct the requisite
34275     function declaration, while allowing the body of the function to be
34276     assembly code.  The specified function will not have
34277     prologue/epilogue sequences generated by the compiler.  Only basic
34278     'asm' statements can safely be included in naked functions (*note
34279     Basic Asm::).  While using extended 'asm' or a mixture of basic
34280     'asm' and C code may appear to work, they cannot be depended upon
34281     to work reliably and are not supported.
34282
34283'interrupt'
34284     Use this attribute to indicate that the specified function is an
34285     interrupt handler.  The compiler generates function entry and exit
34286     sequences suitable for use in an interrupt handler when this
34287     attribute is present.
34288
34289     You can specify the kind of interrupt to be handled by adding an
34290     optional parameter to the interrupt attribute like this:
34291
34292          void f (void) __attribute__ ((interrupt ("user")));
34293
34294     Permissible values for this parameter are 'user', 'supervisor', and
34295     'machine'.  If there is no parameter, then it defaults to
34296     'machine'.
34297
34298
34299File: gcc.info,  Node: RL78 Function Attributes,  Next: RX Function Attributes,  Prev: RISC-V Function Attributes,  Up: Function Attributes
34300
343016.33.28 RL78 Function Attributes
34302--------------------------------
34303
34304These function attributes are supported by the RL78 back end:
34305
34306'interrupt'
34307'brk_interrupt'
34308     These attributes indicate that the specified function is an
34309     interrupt handler.  The compiler generates function entry and exit
34310     sequences suitable for use in an interrupt handler when this
34311     attribute is present.
34312
34313     Use 'brk_interrupt' instead of 'interrupt' for handlers intended to
34314     be used with the 'BRK' opcode (i.e. those that must end with 'RETB'
34315     instead of 'RETI').
34316
34317'naked'
34318     This attribute allows the compiler to construct the requisite
34319     function declaration, while allowing the body of the function to be
34320     assembly code.  The specified function will not have
34321     prologue/epilogue sequences generated by the compiler.  Only basic
34322     'asm' statements can safely be included in naked functions (*note
34323     Basic Asm::).  While using extended 'asm' or a mixture of basic
34324     'asm' and C code may appear to work, they cannot be depended upon
34325     to work reliably and are not supported.
34326
34327
34328File: gcc.info,  Node: RX Function Attributes,  Next: S/390 Function Attributes,  Prev: RL78 Function Attributes,  Up: Function Attributes
34329
343306.33.29 RX Function Attributes
34331------------------------------
34332
34333These function attributes are supported by the RX back end:
34334
34335'fast_interrupt'
34336     Use this attribute on the RX port to indicate that the specified
34337     function is a fast interrupt handler.  This is just like the
34338     'interrupt' attribute, except that 'freit' is used to return
34339     instead of 'reit'.
34340
34341'interrupt'
34342     Use this attribute to indicate that the specified function is an
34343     interrupt handler.  The compiler generates function entry and exit
34344     sequences suitable for use in an interrupt handler when this
34345     attribute is present.
34346
34347     On RX and RL78 targets, you may specify one or more vector numbers
34348     as arguments to the attribute, as well as naming an alternate table
34349     name.  Parameters are handled sequentially, so one handler can be
34350     assigned to multiple entries in multiple tables.  One may also pass
34351     the magic string '"$default"' which causes the function to be used
34352     for any unfilled slots in the current table.
34353
34354     This example shows a simple assignment of a function to one vector
34355     in the default table (note that preprocessor macros may be used for
34356     chip-specific symbolic vector names):
34357          void __attribute__ ((interrupt (5))) txd1_handler ();
34358
34359     This example assigns a function to two slots in the default table
34360     (using preprocessor macros defined elsewhere) and makes it the
34361     default for the 'dct' table:
34362          void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default")))
34363          	txd1_handler ();
34364
34365'naked'
34366     This attribute allows the compiler to construct the requisite
34367     function declaration, while allowing the body of the function to be
34368     assembly code.  The specified function will not have
34369     prologue/epilogue sequences generated by the compiler.  Only basic
34370     'asm' statements can safely be included in naked functions (*note
34371     Basic Asm::).  While using extended 'asm' or a mixture of basic
34372     'asm' and C code may appear to work, they cannot be depended upon
34373     to work reliably and are not supported.
34374
34375'vector'
34376     This RX attribute is similar to the 'interrupt' attribute,
34377     including its parameters, but does not make the function an
34378     interrupt-handler type function (i.e. it retains the normal C
34379     function calling ABI). See the 'interrupt' attribute for a
34380     description of its arguments.
34381
34382
34383File: gcc.info,  Node: S/390 Function Attributes,  Next: SH Function Attributes,  Prev: RX Function Attributes,  Up: Function Attributes
34384
343856.33.30 S/390 Function Attributes
34386---------------------------------
34387
34388These function attributes are supported on the S/390:
34389
34390'hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)'
34391
34392     On S/390 System z targets, you can use this function attribute to
34393     make GCC generate a "hot-patching" function prologue.  If the
34394     '-mhotpatch=' command-line option is used at the same time, the
34395     'hotpatch' attribute takes precedence.  The first of the two
34396     arguments specifies the number of halfwords to be added before the
34397     function label.  A second argument can be used to specify the
34398     number of halfwords to be added after the function label.  For both
34399     arguments the maximum allowed value is 1000000.
34400
34401     If both arguments are zero, hotpatching is disabled.
34402
34403'target (OPTIONS)'
34404     As discussed in *note Common Function Attributes::, this attribute
34405     allows specification of target-specific compilation options.
34406
34407     On S/390, the following options are supported:
34408
34409     'arch='
34410     'tune='
34411     'stack-guard='
34412     'stack-size='
34413     'branch-cost='
34414     'warn-framesize='
34415     'backchain'
34416     'no-backchain'
34417     'hard-dfp'
34418     'no-hard-dfp'
34419     'hard-float'
34420     'soft-float'
34421     'htm'
34422     'no-htm'
34423     'vx'
34424     'no-vx'
34425     'packed-stack'
34426     'no-packed-stack'
34427     'small-exec'
34428     'no-small-exec'
34429     'mvcle'
34430     'no-mvcle'
34431     'warn-dynamicstack'
34432     'no-warn-dynamicstack'
34433
34434     The options work exactly like the S/390 specific command line
34435     options (without the prefix '-m') except that they do not change
34436     any feature macros.  For example,
34437
34438          target("no-vx")
34439
34440     does not undefine the '__VEC__' macro.
34441
34442
34443File: gcc.info,  Node: SH Function Attributes,  Next: Symbian OS Function Attributes,  Prev: S/390 Function Attributes,  Up: Function Attributes
34444
344456.33.31 SH Function Attributes
34446------------------------------
34447
34448These function attributes are supported on the SH family of processors:
34449
34450'function_vector'
34451     On SH2A targets, this attribute declares a function to be called
34452     using the TBR relative addressing mode.  The argument to this
34453     attribute is the entry number of the same function in a vector
34454     table containing all the TBR relative addressable functions.  For
34455     correct operation the TBR must be setup accordingly to point to the
34456     start of the vector table before any functions with this attribute
34457     are invoked.  Usually a good place to do the initialization is the
34458     startup routine.  The TBR relative vector table can have at max 256
34459     function entries.  The jumps to these functions are generated using
34460     a SH2A specific, non delayed branch instruction JSR/N @(disp8,TBR).
34461     You must use GAS and GLD from GNU binutils version 2.7 or later for
34462     this attribute to work correctly.
34463
34464     In an application, for a function being called once, this attribute
34465     saves at least 8 bytes of code; and if other successive calls are
34466     being made to the same function, it saves 2 bytes of code per each
34467     of these calls.
34468
34469'interrupt_handler'
34470     Use this attribute to indicate that the specified function is an
34471     interrupt handler.  The compiler generates function entry and exit
34472     sequences suitable for use in an interrupt handler when this
34473     attribute is present.
34474
34475'nosave_low_regs'
34476     Use this attribute on SH targets to indicate that an
34477     'interrupt_handler' function should not save and restore registers
34478     R0..R7.  This can be used on SH3* and SH4* targets that have a
34479     second R0..R7 register bank for non-reentrant interrupt handlers.
34480
34481'renesas'
34482     On SH targets this attribute specifies that the function or struct
34483     follows the Renesas ABI.
34484
34485'resbank'
34486     On the SH2A target, this attribute enables the high-speed register
34487     saving and restoration using a register bank for
34488     'interrupt_handler' routines.  Saving to the bank is performed
34489     automatically after the CPU accepts an interrupt that uses a
34490     register bank.
34491
34492     The nineteen 32-bit registers comprising general register R0 to
34493     R14, control register GBR, and system registers MACH, MACL, and PR
34494     and the vector table address offset are saved into a register bank.
34495     Register banks are stacked in first-in last-out (FILO) sequence.
34496     Restoration from the bank is executed by issuing a RESBANK
34497     instruction.
34498
34499'sp_switch'
34500     Use this attribute on the SH to indicate an 'interrupt_handler'
34501     function should switch to an alternate stack.  It expects a string
34502     argument that names a global variable holding the address of the
34503     alternate stack.
34504
34505          void *alt_stack;
34506          void f () __attribute__ ((interrupt_handler,
34507                                    sp_switch ("alt_stack")));
34508
34509'trap_exit'
34510     Use this attribute on the SH for an 'interrupt_handler' to return
34511     using 'trapa' instead of 'rte'.  This attribute expects an integer
34512     argument specifying the trap number to be used.
34513
34514'trapa_handler'
34515     On SH targets this function attribute is similar to
34516     'interrupt_handler' but it does not save and restore all registers.
34517
34518
34519File: gcc.info,  Node: Symbian OS Function Attributes,  Next: V850 Function Attributes,  Prev: SH Function Attributes,  Up: Function Attributes
34520
345216.33.32 Symbian OS Function Attributes
34522--------------------------------------
34523
34524*Note Microsoft Windows Function Attributes::, for discussion of the
34525'dllexport' and 'dllimport' attributes.
34526
34527
34528File: gcc.info,  Node: V850 Function Attributes,  Next: Visium Function Attributes,  Prev: Symbian OS Function Attributes,  Up: Function Attributes
34529
345306.33.33 V850 Function Attributes
34531--------------------------------
34532
34533The V850 back end supports these function attributes:
34534
34535'interrupt'
34536'interrupt_handler'
34537     Use these attributes to indicate that the specified function is an
34538     interrupt handler.  The compiler generates function entry and exit
34539     sequences suitable for use in an interrupt handler when either
34540     attribute is present.
34541
34542
34543File: gcc.info,  Node: Visium Function Attributes,  Next: x86 Function Attributes,  Prev: V850 Function Attributes,  Up: Function Attributes
34544
345456.33.34 Visium Function Attributes
34546----------------------------------
34547
34548These function attributes are supported by the Visium back end:
34549
34550'interrupt'
34551     Use this attribute to indicate that the specified function is an
34552     interrupt handler.  The compiler generates function entry and exit
34553     sequences suitable for use in an interrupt handler when this
34554     attribute is present.
34555
34556
34557File: gcc.info,  Node: x86 Function Attributes,  Next: Xstormy16 Function Attributes,  Prev: Visium Function Attributes,  Up: Function Attributes
34558
345596.33.35 x86 Function Attributes
34560-------------------------------
34561
34562These function attributes are supported by the x86 back end:
34563
34564'cdecl'
34565     On the x86-32 targets, the 'cdecl' attribute causes the compiler to
34566     assume that the calling function pops off the stack space used to
34567     pass arguments.  This is useful to override the effects of the
34568     '-mrtd' switch.
34569
34570'fastcall'
34571     On x86-32 targets, the 'fastcall' attribute causes the compiler to
34572     pass the first argument (if of integral type) in the register ECX
34573     and the second argument (if of integral type) in the register EDX.
34574     Subsequent and other typed arguments are passed on the stack.  The
34575     called function pops the arguments off the stack.  If the number of
34576     arguments is variable all arguments are pushed on the stack.
34577
34578'thiscall'
34579     On x86-32 targets, the 'thiscall' attribute causes the compiler to
34580     pass the first argument (if of integral type) in the register ECX.
34581     Subsequent and other typed arguments are passed on the stack.  The
34582     called function pops the arguments off the stack.  If the number of
34583     arguments is variable all arguments are pushed on the stack.  The
34584     'thiscall' attribute is intended for C++ non-static member
34585     functions.  As a GCC extension, this calling convention can be used
34586     for C functions and for static member methods.
34587
34588'ms_abi'
34589'sysv_abi'
34590
34591     On 32-bit and 64-bit x86 targets, you can use an ABI attribute to
34592     indicate which calling convention should be used for a function.
34593     The 'ms_abi' attribute tells the compiler to use the Microsoft ABI,
34594     while the 'sysv_abi' attribute tells the compiler to use the ABI
34595     used on GNU/Linux and other systems.  The default is to use the
34596     Microsoft ABI when targeting Windows.  On all other systems, the
34597     default is the x86/AMD ABI.
34598
34599     Note, the 'ms_abi' attribute for Microsoft Windows 64-bit targets
34600     currently requires the '-maccumulate-outgoing-args' option.
34601
34602'callee_pop_aggregate_return (NUMBER)'
34603
34604     On x86-32 targets, you can use this attribute to control how
34605     aggregates are returned in memory.  If the caller is responsible
34606     for popping the hidden pointer together with the rest of the
34607     arguments, specify NUMBER equal to zero.  If callee is responsible
34608     for popping the hidden pointer, specify NUMBER equal to one.
34609
34610     The default x86-32 ABI assumes that the callee pops the stack for
34611     hidden pointer.  However, on x86-32 Microsoft Windows targets, the
34612     compiler assumes that the caller pops the stack for hidden pointer.
34613
34614'ms_hook_prologue'
34615
34616     On 32-bit and 64-bit x86 targets, you can use this function
34617     attribute to make GCC generate the "hot-patching" function prologue
34618     used in Win32 API functions in Microsoft Windows XP Service Pack 2
34619     and newer.
34620
34621'naked'
34622     This attribute allows the compiler to construct the requisite
34623     function declaration, while allowing the body of the function to be
34624     assembly code.  The specified function will not have
34625     prologue/epilogue sequences generated by the compiler.  Only basic
34626     'asm' statements can safely be included in naked functions (*note
34627     Basic Asm::).  While using extended 'asm' or a mixture of basic
34628     'asm' and C code may appear to work, they cannot be depended upon
34629     to work reliably and are not supported.
34630
34631'regparm (NUMBER)'
34632     On x86-32 targets, the 'regparm' attribute causes the compiler to
34633     pass arguments number one to NUMBER if they are of integral type in
34634     registers EAX, EDX, and ECX instead of on the stack.  Functions
34635     that take a variable number of arguments continue to be passed all
34636     of their arguments on the stack.
34637
34638     Beware that on some ELF systems this attribute is unsuitable for
34639     global functions in shared libraries with lazy binding (which is
34640     the default).  Lazy binding sends the first call via resolving code
34641     in the loader, which might assume EAX, EDX and ECX can be
34642     clobbered, as per the standard calling conventions.  Solaris 8 is
34643     affected by this.  Systems with the GNU C Library version 2.1 or
34644     higher and FreeBSD are believed to be safe since the loaders there
34645     save EAX, EDX and ECX. (Lazy binding can be disabled with the
34646     linker or the loader if desired, to avoid the problem.)
34647
34648'sseregparm'
34649     On x86-32 targets with SSE support, the 'sseregparm' attribute
34650     causes the compiler to pass up to 3 floating-point arguments in SSE
34651     registers instead of on the stack.  Functions that take a variable
34652     number of arguments continue to pass all of their floating-point
34653     arguments on the stack.
34654
34655'force_align_arg_pointer'
34656     On x86 targets, the 'force_align_arg_pointer' attribute may be
34657     applied to individual function definitions, generating an alternate
34658     prologue and epilogue that realigns the run-time stack if
34659     necessary.  This supports mixing legacy codes that run with a
34660     4-byte aligned stack with modern codes that keep a 16-byte stack
34661     for SSE compatibility.
34662
34663'stdcall'
34664     On x86-32 targets, the 'stdcall' attribute causes the compiler to
34665     assume that the called function pops off the stack space used to
34666     pass arguments, unless it takes a variable number of arguments.
34667
34668'no_caller_saved_registers'
34669     Use this attribute to indicate that the specified function has no
34670     caller-saved registers.  That is, all registers are callee-saved.
34671     For example, this attribute can be used for a function called from
34672     an interrupt handler.  The compiler generates proper function entry
34673     and exit sequences to save and restore any modified registers,
34674     except for the EFLAGS register.  Since GCC doesn't preserve SSE,
34675     MMX nor x87 states, the GCC option '-mgeneral-regs-only' should be
34676     used to compile functions with 'no_caller_saved_registers'
34677     attribute.
34678
34679'interrupt'
34680     Use this attribute to indicate that the specified function is an
34681     interrupt handler or an exception handler (depending on parameters
34682     passed to the function, explained further).  The compiler generates
34683     function entry and exit sequences suitable for use in an interrupt
34684     handler when this attribute is present.  The 'IRET' instruction,
34685     instead of the 'RET' instruction, is used to return from interrupt
34686     handlers.  All registers, except for the EFLAGS register which is
34687     restored by the 'IRET' instruction, are preserved by the compiler.
34688     Since GCC doesn't preserve SSE, MMX nor x87 states, the GCC option
34689     '-mgeneral-regs-only' should be used to compile interrupt and
34690     exception handlers.
34691
34692     Any interruptible-without-stack-switch code must be compiled with
34693     '-mno-red-zone' since interrupt handlers can and will, because of
34694     the hardware design, touch the red zone.
34695
34696     An interrupt handler must be declared with a mandatory pointer
34697     argument:
34698
34699          struct interrupt_frame;
34700
34701          __attribute__ ((interrupt))
34702          void
34703          f (struct interrupt_frame *frame)
34704          {
34705          }
34706
34707     and you must define 'struct interrupt_frame' as described in the
34708     processor's manual.
34709
34710     Exception handlers differ from interrupt handlers because the
34711     system pushes an error code on the stack.  An exception handler
34712     declaration is similar to that for an interrupt handler, but with a
34713     different mandatory function signature.  The compiler arranges to
34714     pop the error code off the stack before the 'IRET' instruction.
34715
34716          #ifdef __x86_64__
34717          typedef unsigned long long int uword_t;
34718          #else
34719          typedef unsigned int uword_t;
34720          #endif
34721
34722          struct interrupt_frame;
34723
34724          __attribute__ ((interrupt))
34725          void
34726          f (struct interrupt_frame *frame, uword_t error_code)
34727          {
34728            ...
34729          }
34730
34731     Exception handlers should only be used for exceptions that push an
34732     error code; you should use an interrupt handler in other cases.
34733     The system will crash if the wrong kind of handler is used.
34734
34735'target (OPTIONS)'
34736     As discussed in *note Common Function Attributes::, this attribute
34737     allows specification of target-specific compilation options.
34738
34739     On the x86, the following options are allowed:
34740     '3dnow'
34741     'no-3dnow'
34742          Enable/disable the generation of the 3DNow! instructions.
34743
34744     '3dnowa'
34745     'no-3dnowa'
34746          Enable/disable the generation of the enhanced 3DNow!
34747          instructions.
34748
34749     'abm'
34750     'no-abm'
34751          Enable/disable the generation of the advanced bit
34752          instructions.
34753
34754     'adx'
34755     'no-adx'
34756          Enable/disable the generation of the ADX instructions.
34757
34758     'aes'
34759     'no-aes'
34760          Enable/disable the generation of the AES instructions.
34761
34762     'avx'
34763     'no-avx'
34764          Enable/disable the generation of the AVX instructions.
34765
34766     'avx2'
34767     'no-avx2'
34768          Enable/disable the generation of the AVX2 instructions.
34769
34770     'avx5124fmaps'
34771     'no-avx5124fmaps'
34772          Enable/disable the generation of the AVX5124FMAPS
34773          instructions.
34774
34775     'avx5124vnniw'
34776     'no-avx5124vnniw'
34777          Enable/disable the generation of the AVX5124VNNIW
34778          instructions.
34779
34780     'avx512bitalg'
34781     'no-avx512bitalg'
34782          Enable/disable the generation of the AVX512BITALG
34783          instructions.
34784
34785     'avx512bw'
34786     'no-avx512bw'
34787          Enable/disable the generation of the AVX512BW instructions.
34788
34789     'avx512cd'
34790     'no-avx512cd'
34791          Enable/disable the generation of the AVX512CD instructions.
34792
34793     'avx512dq'
34794     'no-avx512dq'
34795          Enable/disable the generation of the AVX512DQ instructions.
34796
34797     'avx512er'
34798     'no-avx512er'
34799          Enable/disable the generation of the AVX512ER instructions.
34800
34801     'avx512f'
34802     'no-avx512f'
34803          Enable/disable the generation of the AVX512F instructions.
34804
34805     'avx512ifma'
34806     'no-avx512ifma'
34807          Enable/disable the generation of the AVX512IFMA instructions.
34808
34809     'avx512pf'
34810     'no-avx512pf'
34811          Enable/disable the generation of the AVX512PF instructions.
34812
34813     'avx512vbmi'
34814     'no-avx512vbmi'
34815          Enable/disable the generation of the AVX512VBMI instructions.
34816
34817     'avx512vbmi2'
34818     'no-avx512vbmi2'
34819          Enable/disable the generation of the AVX512VBMI2 instructions.
34820
34821     'avx512vl'
34822     'no-avx512vl'
34823          Enable/disable the generation of the AVX512VL instructions.
34824
34825     'avx512vnni'
34826     'no-avx512vnni'
34827          Enable/disable the generation of the AVX512VNNI instructions.
34828
34829     'avx512vpopcntdq'
34830     'no-avx512vpopcntdq'
34831          Enable/disable the generation of the AVX512VPOPCNTDQ
34832          instructions.
34833
34834     'bmi'
34835     'no-bmi'
34836          Enable/disable the generation of the BMI instructions.
34837
34838     'bmi2'
34839     'no-bmi2'
34840          Enable/disable the generation of the BMI2 instructions.
34841
34842     'cldemote'
34843     'no-cldemote'
34844          Enable/disable the generation of the CLDEMOTE instructions.
34845
34846     'clflushopt'
34847     'no-clflushopt'
34848          Enable/disable the generation of the CLFLUSHOPT instructions.
34849
34850     'clwb'
34851     'no-clwb'
34852          Enable/disable the generation of the CLWB instructions.
34853
34854     'clzero'
34855     'no-clzero'
34856          Enable/disable the generation of the CLZERO instructions.
34857
34858     'crc32'
34859     'no-crc32'
34860          Enable/disable the generation of the CRC32 instructions.
34861
34862     'cx16'
34863     'no-cx16'
34864          Enable/disable the generation of the CMPXCHG16B instructions.
34865
34866     'default'
34867          *Note Function Multiversioning::, where it is used to specify
34868          the default function version.
34869
34870     'f16c'
34871     'no-f16c'
34872          Enable/disable the generation of the F16C instructions.
34873
34874     'fma'
34875     'no-fma'
34876          Enable/disable the generation of the FMA instructions.
34877
34878     'fma4'
34879     'no-fma4'
34880          Enable/disable the generation of the FMA4 instructions.
34881
34882     'fsgsbase'
34883     'no-fsgsbase'
34884          Enable/disable the generation of the FSGSBASE instructions.
34885
34886     'fxsr'
34887     'no-fxsr'
34888          Enable/disable the generation of the FXSR instructions.
34889
34890     'gfni'
34891     'no-gfni'
34892          Enable/disable the generation of the GFNI instructions.
34893
34894     'hle'
34895     'no-hle'
34896          Enable/disable the generation of the HLE instruction prefixes.
34897
34898     'lwp'
34899     'no-lwp'
34900          Enable/disable the generation of the LWP instructions.
34901
34902     'lzcnt'
34903     'no-lzcnt'
34904          Enable/disable the generation of the LZCNT instructions.
34905
34906     'mmx'
34907     'no-mmx'
34908          Enable/disable the generation of the MMX instructions.
34909
34910     'movbe'
34911     'no-movbe'
34912          Enable/disable the generation of the MOVBE instructions.
34913
34914     'movdir64b'
34915     'no-movdir64b'
34916          Enable/disable the generation of the MOVDIR64B instructions.
34917
34918     'movdiri'
34919     'no-movdiri'
34920          Enable/disable the generation of the MOVDIRI instructions.
34921
34922     'mwaitx'
34923     'no-mwaitx'
34924          Enable/disable the generation of the MWAITX instructions.
34925
34926     'pclmul'
34927     'no-pclmul'
34928          Enable/disable the generation of the PCLMUL instructions.
34929
34930     'pconfig'
34931     'no-pconfig'
34932          Enable/disable the generation of the PCONFIG instructions.
34933
34934     'pku'
34935     'no-pku'
34936          Enable/disable the generation of the PKU instructions.
34937
34938     'popcnt'
34939     'no-popcnt'
34940          Enable/disable the generation of the POPCNT instruction.
34941
34942     'prefetchwt1'
34943     'no-prefetchwt1'
34944          Enable/disable the generation of the PREFETCHWT1 instructions.
34945
34946     'prfchw'
34947     'no-prfchw'
34948          Enable/disable the generation of the PREFETCHW instruction.
34949
34950     'ptwrite'
34951     'no-ptwrite'
34952          Enable/disable the generation of the PTWRITE instructions.
34953
34954     'rdpid'
34955     'no-rdpid'
34956          Enable/disable the generation of the RDPID instructions.
34957
34958     'rdrnd'
34959     'no-rdrnd'
34960          Enable/disable the generation of the RDRND instructions.
34961
34962     'rdseed'
34963     'no-rdseed'
34964          Enable/disable the generation of the RDSEED instructions.
34965
34966     'rtm'
34967     'no-rtm'
34968          Enable/disable the generation of the RTM instructions.
34969
34970     'sahf'
34971     'no-sahf'
34972          Enable/disable the generation of the SAHF instructions.
34973
34974     'sgx'
34975     'no-sgx'
34976          Enable/disable the generation of the SGX instructions.
34977
34978     'sha'
34979     'no-sha'
34980          Enable/disable the generation of the SHA instructions.
34981
34982     'shstk'
34983     'no-shstk'
34984          Enable/disable the shadow stack built-in functions from CET.
34985
34986     'sse'
34987     'no-sse'
34988          Enable/disable the generation of the SSE instructions.
34989
34990     'sse2'
34991     'no-sse2'
34992          Enable/disable the generation of the SSE2 instructions.
34993
34994     'sse3'
34995     'no-sse3'
34996          Enable/disable the generation of the SSE3 instructions.
34997
34998     'sse4'
34999     'no-sse4'
35000          Enable/disable the generation of the SSE4 instructions (both
35001          SSE4.1 and SSE4.2).
35002
35003     'sse4.1'
35004     'no-sse4.1'
35005          Enable/disable the generation of the sse4.1 instructions.
35006
35007     'sse4.2'
35008     'no-sse4.2'
35009          Enable/disable the generation of the sse4.2 instructions.
35010
35011     'sse4a'
35012     'no-sse4a'
35013          Enable/disable the generation of the SSE4A instructions.
35014
35015     'ssse3'
35016     'no-ssse3'
35017          Enable/disable the generation of the SSSE3 instructions.
35018
35019     'tbm'
35020     'no-tbm'
35021          Enable/disable the generation of the TBM instructions.
35022
35023     'vaes'
35024     'no-vaes'
35025          Enable/disable the generation of the VAES instructions.
35026
35027     'vpclmulqdq'
35028     'no-vpclmulqdq'
35029          Enable/disable the generation of the VPCLMULQDQ instructions.
35030
35031     'waitpkg'
35032     'no-waitpkg'
35033          Enable/disable the generation of the WAITPKG instructions.
35034
35035     'wbnoinvd'
35036     'no-wbnoinvd'
35037          Enable/disable the generation of the WBNOINVD instructions.
35038
35039     'xop'
35040     'no-xop'
35041          Enable/disable the generation of the XOP instructions.
35042
35043     'xsave'
35044     'no-xsave'
35045          Enable/disable the generation of the XSAVE instructions.
35046
35047     'xsavec'
35048     'no-xsavec'
35049          Enable/disable the generation of the XSAVEC instructions.
35050
35051     'xsaveopt'
35052     'no-xsaveopt'
35053          Enable/disable the generation of the XSAVEOPT instructions.
35054
35055     'xsaves'
35056     'no-xsaves'
35057          Enable/disable the generation of the XSAVES instructions.
35058
35059     'cld'
35060     'no-cld'
35061          Enable/disable the generation of the CLD before string moves.
35062
35063     'fancy-math-387'
35064     'no-fancy-math-387'
35065          Enable/disable the generation of the 'sin', 'cos', and 'sqrt'
35066          instructions on the 387 floating-point unit.
35067
35068     'ieee-fp'
35069     'no-ieee-fp'
35070          Enable/disable the generation of floating point that depends
35071          on IEEE arithmetic.
35072
35073     'inline-all-stringops'
35074     'no-inline-all-stringops'
35075          Enable/disable inlining of string operations.
35076
35077     'inline-stringops-dynamically'
35078     'no-inline-stringops-dynamically'
35079          Enable/disable the generation of the inline code to do small
35080          string operations and calling the library routines for large
35081          operations.
35082
35083     'align-stringops'
35084     'no-align-stringops'
35085          Do/do not align destination of inlined string operations.
35086
35087     'recip'
35088     'no-recip'
35089          Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
35090          RSQRTPS instructions followed an additional Newton-Raphson
35091          step instead of doing a floating-point division.
35092
35093     'arch=ARCH'
35094          Specify the architecture to generate code for in compiling the
35095          function.
35096
35097     'tune=TUNE'
35098          Specify the architecture to tune for in compiling the
35099          function.
35100
35101     'fpmath=FPMATH'
35102          Specify which floating-point unit to use.  You must specify
35103          the 'target("fpmath=sse,387")' option as
35104          'target("fpmath=sse+387")' because the comma would separate
35105          different options.
35106
35107     'indirect_branch("CHOICE")'
35108          On x86 targets, the 'indirect_branch' attribute causes the
35109          compiler to convert indirect call and jump with CHOICE.
35110          'keep' keeps indirect call and jump unmodified.  'thunk'
35111          converts indirect call and jump to call and return thunk.
35112          'thunk-inline' converts indirect call and jump to inlined call
35113          and return thunk.  'thunk-extern' converts indirect call and
35114          jump to external call and return thunk provided in a separate
35115          object file.
35116
35117     'function_return("CHOICE")'
35118          On x86 targets, the 'function_return' attribute causes the
35119          compiler to convert function return with CHOICE.  'keep' keeps
35120          function return unmodified.  'thunk' converts function return
35121          to call and return thunk.  'thunk-inline' converts function
35122          return to inlined call and return thunk.  'thunk-extern'
35123          converts function return to external call and return thunk
35124          provided in a separate object file.
35125
35126     'nocf_check'
35127          The 'nocf_check' attribute on a function is used to inform the
35128          compiler that the function's prologue should not be
35129          instrumented when compiled with the '-fcf-protection=branch'
35130          option.  The compiler assumes that the function's address is a
35131          valid target for a control-flow transfer.
35132
35133          The 'nocf_check' attribute on a type of pointer to function is
35134          used to inform the compiler that a call through the pointer
35135          should not be instrumented when compiled with the
35136          '-fcf-protection=branch' option.  The compiler assumes that
35137          the function's address from the pointer is a valid target for
35138          a control-flow transfer.  A direct function call through a
35139          function name is assumed to be a safe call thus direct calls
35140          are not instrumented by the compiler.
35141
35142          The 'nocf_check' attribute is applied to an object's type.  In
35143          case of assignment of a function address or a function pointer
35144          to another pointer, the attribute is not carried over from the
35145          right-hand object's type; the type of left-hand object stays
35146          unchanged.  The compiler checks for 'nocf_check' attribute
35147          mismatch and reports a warning in case of mismatch.
35148
35149               {
35150               int foo (void) __attribute__(nocf_check);
35151               void (*foo1)(void) __attribute__(nocf_check);
35152               void (*foo2)(void);
35153
35154               /* foo's address is assumed to be valid.  */
35155               int
35156               foo (void)
35157
35158                 /* This call site is not checked for control-flow
35159                    validity.  */
35160                 (*foo1)();
35161
35162                 /* A warning is issued about attribute mismatch.  */
35163                 foo1 = foo2;
35164
35165                 /* This call site is still not checked.  */
35166                 (*foo1)();
35167
35168                 /* This call site is checked.  */
35169                 (*foo2)();
35170
35171                 /* A warning is issued about attribute mismatch.  */
35172                 foo2 = foo1;
35173
35174                 /* This call site is still checked.  */
35175                 (*foo2)();
35176
35177                 return 0;
35178               }
35179
35180     'cf_check'
35181
35182          The 'cf_check' attribute on a function is used to inform the
35183          compiler that ENDBR instruction should be placed at the
35184          function entry when '-fcf-protection=branch' is enabled.
35185
35186     'indirect_return'
35187
35188          The 'indirect_return' attribute can be applied to a function,
35189          as well as variable or type of function pointer to inform the
35190          compiler that the function may return via indirect branch.
35191
35192     'fentry_name("NAME")'
35193          On x86 targets, the 'fentry_name' attribute sets the function
35194          to call on function entry when function instrumentation is
35195          enabled with '-pg -mfentry'.  When NAME is nop then a 5 byte
35196          nop sequence is generated.
35197
35198     'fentry_section("NAME")'
35199          On x86 targets, the 'fentry_section' attribute sets the name
35200          of the section to record function entry instrumentation calls
35201          in when enabled with '-pg -mrecord-mcount'
35202
35203     On the x86, the inliner does not inline a function that has
35204     different target options than the caller, unless the callee has a
35205     subset of the target options of the caller.  For example a function
35206     declared with 'target("sse3")' can inline a function with
35207     'target("sse2")', since '-msse3' implies '-msse2'.
35208
35209
35210File: gcc.info,  Node: Xstormy16 Function Attributes,  Prev: x86 Function Attributes,  Up: Function Attributes
35211
352126.33.36 Xstormy16 Function Attributes
35213-------------------------------------
35214
35215These function attributes are supported by the Xstormy16 back end:
35216
35217'interrupt'
35218     Use this attribute to indicate that the specified function is an
35219     interrupt handler.  The compiler generates function entry and exit
35220     sequences suitable for use in an interrupt handler when this
35221     attribute is present.
35222
35223
35224File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Function Attributes,  Up: C Extensions
35225
352266.34 Specifying Attributes of Variables
35227=======================================
35228
35229The keyword '__attribute__' allows you to specify special properties of
35230variables, function parameters, or structure, union, and, in C++, class
35231members.  This '__attribute__' keyword is followed by an attribute
35232specification enclosed in double parentheses.  Some attributes are
35233currently defined generically for variables.  Other attributes are
35234defined for variables on particular target systems.  Other attributes
35235are available for functions (*note Function Attributes::), labels (*note
35236Label Attributes::), enumerators (*note Enumerator Attributes::),
35237statements (*note Statement Attributes::), and for types (*note Type
35238Attributes::).  Other front ends might define more attributes (*note
35239Extensions to the C++ Language: C++ Extensions.).
35240
35241 *Note Attribute Syntax::, for details of the exact syntax for using
35242attributes.
35243
35244* Menu:
35245
35246* Common Variable Attributes::
35247* ARC Variable Attributes::
35248* AVR Variable Attributes::
35249* Blackfin Variable Attributes::
35250* H8/300 Variable Attributes::
35251* IA-64 Variable Attributes::
35252* M32R/D Variable Attributes::
35253* MeP Variable Attributes::
35254* Microsoft Windows Variable Attributes::
35255* MSP430 Variable Attributes::
35256* Nvidia PTX Variable Attributes::
35257* PowerPC Variable Attributes::
35258* RL78 Variable Attributes::
35259* V850 Variable Attributes::
35260* x86 Variable Attributes::
35261* Xstormy16 Variable Attributes::
35262
35263
35264File: gcc.info,  Node: Common Variable Attributes,  Next: ARC Variable Attributes,  Up: Variable Attributes
35265
352666.34.1 Common Variable Attributes
35267---------------------------------
35268
35269The following attributes are supported on most targets.
35270
35271'alias ("TARGET")'
35272     The 'alias' variable attribute causes the declaration to be emitted
35273     as an alias for another symbol known as an "alias target".  Except
35274     for top-level qualifiers the alias target must have the same type
35275     as the alias.  For instance, the following
35276
35277          int var_target;
35278          extern int __attribute__ ((alias ("var_target"))) var_alias;
35279
35280     defines 'var_alias' to be an alias for the 'var_target' variable.
35281
35282     It is an error if the alias target is not defined in the same
35283     translation unit as the alias.
35284
35285     Note that in the absence of the attribute GCC assumes that distinct
35286     declarations with external linkage denote distinct objects.  Using
35287     both the alias and the alias target to access the same object is
35288     undefined in a translation unit without a declaration of the alias
35289     with the attribute.
35290
35291     This attribute requires assembler and object file support, and may
35292     not be available on all targets.
35293
35294'aligned'
35295'aligned (ALIGNMENT)'
35296     The 'aligned' attribute specifies a minimum alignment for the
35297     variable or structure field, measured in bytes.  When specified,
35298     ALIGNMENT must be an integer constant power of 2.  Specifying no
35299     ALIGNMENT argument implies the maximum alignment for the target,
35300     which is often, but by no means always, 8 or 16 bytes.
35301
35302     For example, the declaration:
35303
35304          int x __attribute__ ((aligned (16))) = 0;
35305
35306     causes the compiler to allocate the global variable 'x' on a
35307     16-byte boundary.  On a 68040, this could be used in conjunction
35308     with an 'asm' expression to access the 'move16' instruction which
35309     requires 16-byte aligned operands.
35310
35311     You can also specify the alignment of structure fields.  For
35312     example, to create a double-word aligned 'int' pair, you could
35313     write:
35314
35315          struct foo { int x[2] __attribute__ ((aligned (8))); };
35316
35317     This is an alternative to creating a union with a 'double' member,
35318     which forces the union to be double-word aligned.
35319
35320     As in the preceding examples, you can explicitly specify the
35321     alignment (in bytes) that you wish the compiler to use for a given
35322     variable or structure field.  Alternatively, you can leave out the
35323     alignment factor and just ask the compiler to align a variable or
35324     field to the default alignment for the target architecture you are
35325     compiling for.  The default alignment is sufficient for all scalar
35326     types, but may not be enough for all vector types on a target that
35327     supports vector operations.  The default alignment is fixed for a
35328     particular target ABI.
35329
35330     GCC also provides a target specific macro '__BIGGEST_ALIGNMENT__',
35331     which is the largest alignment ever used for any data type on the
35332     target machine you are compiling for.  For example, you could
35333     write:
35334
35335          short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
35336
35337     The compiler automatically sets the alignment for the declared
35338     variable or field to '__BIGGEST_ALIGNMENT__'.  Doing this can often
35339     make copy operations more efficient, because the compiler can use
35340     whatever instructions copy the biggest chunks of memory when
35341     performing copies to or from the variables or fields that you have
35342     aligned this way.  Note that the value of '__BIGGEST_ALIGNMENT__'
35343     may change depending on command-line options.
35344
35345     When used on a struct, or struct member, the 'aligned' attribute
35346     can only increase the alignment; in order to decrease it, the
35347     'packed' attribute must be specified as well.  When used as part of
35348     a typedef, the 'aligned' attribute can both increase and decrease
35349     alignment, and specifying the 'packed' attribute generates a
35350     warning.
35351
35352     Note that the effectiveness of 'aligned' attributes for static
35353     variables may be limited by inherent limitations in the system
35354     linker and/or object file format.  On some systems, the linker is
35355     only able to arrange for variables to be aligned up to a certain
35356     maximum alignment.  (For some linkers, the maximum supported
35357     alignment may be very very small.)  If your linker is only able to
35358     align variables up to a maximum of 8-byte alignment, then
35359     specifying 'aligned(16)' in an '__attribute__' still only provides
35360     you with 8-byte alignment.  See your linker documentation for
35361     further information.
35362
35363     Stack variables are not affected by linker restrictions; GCC can
35364     properly align them on any target.
35365
35366     The 'aligned' attribute can also be used for functions (*note
35367     Common Function Attributes::.)
35368
35369'warn_if_not_aligned (ALIGNMENT)'
35370     This attribute specifies a threshold for the structure field,
35371     measured in bytes.  If the structure field is aligned below the
35372     threshold, a warning will be issued.  For example, the declaration:
35373
35374          struct foo
35375          {
35376            int i1;
35377            int i2;
35378            unsigned long long x __attribute__ ((warn_if_not_aligned (16)));
35379          };
35380
35381     causes the compiler to issue an warning on 'struct foo', like
35382     'warning: alignment 8 of 'struct foo' is less than 16'.  The
35383     compiler also issues a warning, like 'warning: 'x' offset 8 in
35384     'struct foo' isn't aligned to 16', when the structure field has the
35385     misaligned offset:
35386
35387          struct __attribute__ ((aligned (16))) foo
35388          {
35389            int i1;
35390            int i2;
35391            unsigned long long x __attribute__ ((warn_if_not_aligned (16)));
35392          };
35393
35394     This warning can be disabled by '-Wno-if-not-aligned'.  The
35395     'warn_if_not_aligned' attribute can also be used for types (*note
35396     Common Type Attributes::.)
35397
35398'alloc_size (POSITION)'
35399'alloc_size (POSITION-1, POSITION-2)'
35400     The 'alloc_size' variable attribute may be applied to the
35401     declaration of a pointer to a function that returns a pointer and
35402     takes at least one argument of an integer type.  It indicates that
35403     the returned pointer points to an object whose size is given by the
35404     function argument at POSITION-1, or by the product of the arguments
35405     at POSITION-1 and POSITION-2.  Meaningful sizes are positive values
35406     less than 'PTRDIFF_MAX'.  Other sizes are disagnosed when detected.
35407     GCC uses this information to improve the results of
35408     '__builtin_object_size'.
35409
35410     For instance, the following declarations
35411
35412          typedef __attribute__ ((alloc_size (1, 2))) void*
35413            (*calloc_ptr) (size_t, size_t);
35414          typedef __attribute__ ((alloc_size (1))) void*
35415            (*malloc_ptr) (size_t);
35416
35417     specify that 'calloc_ptr' is a pointer of a function that, like the
35418     standard C function 'calloc', returns an object whose size is given
35419     by the product of arguments 1 and 2, and similarly, that
35420     'malloc_ptr', like the standard C function 'malloc', returns an
35421     object whose size is given by argument 1 to the function.
35422
35423'cleanup (CLEANUP_FUNCTION)'
35424     The 'cleanup' attribute runs a function when the variable goes out
35425     of scope.  This attribute can only be applied to auto function
35426     scope variables; it may not be applied to parameters or variables
35427     with static storage duration.  The function must take one
35428     parameter, a pointer to a type compatible with the variable.  The
35429     return value of the function (if any) is ignored.
35430
35431     If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
35432     the stack unwinding that happens during the processing of the
35433     exception.  Note that the 'cleanup' attribute does not allow the
35434     exception to be caught, only to perform an action.  It is undefined
35435     what happens if CLEANUP_FUNCTION does not return normally.
35436
35437'common'
35438'nocommon'
35439     The 'common' attribute requests GCC to place a variable in "common"
35440     storage.  The 'nocommon' attribute requests the opposite--to
35441     allocate space for it directly.
35442
35443     These attributes override the default chosen by the '-fno-common'
35444     and '-fcommon' flags respectively.
35445
35446'copy'
35447'copy (VARIABLE)'
35448     The 'copy' attribute applies the set of attributes with which
35449     VARIABLE has been declared to the declaration of the variable to
35450     which the attribute is applied.  The attribute is designed for
35451     libraries that define aliases that are expected to specify the same
35452     set of attributes as the aliased symbols.  The 'copy' attribute can
35453     be used with variables, functions or types.  However, the kind of
35454     symbol to which the attribute is applied (either varible or
35455     function) must match the kind of symbol to which the argument
35456     refers.  The 'copy' attribute copies only syntactic and semantic
35457     attributes but not attributes that affect a symbol's linkage or
35458     visibility such as 'alias', 'visibility', or 'weak'.  The
35459     'deprecated' attribute is also not copied.  *Note Common Function
35460     Attributes::.  *Note Common Type Attributes::.
35461
35462'deprecated'
35463'deprecated (MSG)'
35464     The 'deprecated' attribute results in a warning if the variable is
35465     used anywhere in the source file.  This is useful when identifying
35466     variables that are expected to be removed in a future version of a
35467     program.  The warning also includes the location of the declaration
35468     of the deprecated variable, to enable users to easily find further
35469     information about why the variable is deprecated, or what they
35470     should do instead.  Note that the warning only occurs for uses:
35471
35472          extern int old_var __attribute__ ((deprecated));
35473          extern int old_var;
35474          int new_fn () { return old_var; }
35475
35476     results in a warning on line 3 but not line 2.  The optional MSG
35477     argument, which must be a string, is printed in the warning if
35478     present.
35479
35480     The 'deprecated' attribute can also be used for functions and types
35481     (*note Common Function Attributes::, *note Common Type
35482     Attributes::).
35483
35484     The message attached to the attribute is affected by the setting of
35485     the '-fmessage-length' option.
35486
35487'mode (MODE)'
35488     This attribute specifies the data type for the
35489     declaration--whichever type corresponds to the mode MODE.  This in
35490     effect lets you request an integer or floating-point type according
35491     to its width.
35492
35493     *Note (gccint)Machine Modes::, for a list of the possible keywords
35494     for MODE.  You may also specify a mode of 'byte' or '__byte__' to
35495     indicate the mode corresponding to a one-byte integer, 'word' or
35496     '__word__' for the mode of a one-word integer, and 'pointer' or
35497     '__pointer__' for the mode used to represent pointers.
35498
35499'nonstring'
35500     The 'nonstring' variable attribute specifies that an object or
35501     member declaration with type array of 'char', 'signed char', or
35502     'unsigned char', or pointer to such a type is intended to store
35503     character arrays that do not necessarily contain a terminating
35504     'NUL'.  This is useful in detecting uses of such arrays or pointers
35505     with functions that expect 'NUL'-terminated strings, and to avoid
35506     warnings when such an array or pointer is used as an argument to a
35507     bounded string manipulation function such as 'strncpy'.  For
35508     example, without the attribute, GCC will issue a warning for the
35509     'strncpy' call below because it may truncate the copy without
35510     appending the terminating 'NUL' character.  Using the attribute
35511     makes it possible to suppress the warning.  However, when the array
35512     is declared with the attribute the call to 'strlen' is diagnosed
35513     because when the array doesn't contain a 'NUL'-terminated string
35514     the call is undefined.  To copy, compare, of search non-string
35515     character arrays use the 'memcpy', 'memcmp', 'memchr', and other
35516     functions that operate on arrays of bytes.  In addition, calling
35517     'strnlen' and 'strndup' with such arrays is safe provided a
35518     suitable bound is specified, and not diagnosed.
35519
35520          struct Data
35521          {
35522            char name [32] __attribute__ ((nonstring));
35523          };
35524
35525          int f (struct Data *pd, const char *s)
35526          {
35527            strncpy (pd->name, s, sizeof pd->name);
35528            ...
35529            return strlen (pd->name);   // unsafe, gets a warning
35530          }
35531
35532'packed'
35533     The 'packed' attribute specifies that a structure member should
35534     have the smallest possible alignment--one bit for a bit-field and
35535     one byte otherwise, unless a larger value is specified with the
35536     'aligned' attribute.  The attribute does not apply to non-member
35537     objects.
35538
35539     For example in the structure below, the member array 'x' is packed
35540     so that it immediately follows 'a' with no intervening padding:
35541
35542          struct foo
35543          {
35544            char a;
35545            int x[2] __attribute__ ((packed));
35546          };
35547
35548     _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed'
35549     attribute on bit-fields of type 'char'.  This has been fixed in GCC
35550     4.4 but the change can lead to differences in the structure layout.
35551     See the documentation of '-Wpacked-bitfield-compat' for more
35552     information.
35553
35554'section ("SECTION-NAME")'
35555     Normally, the compiler places the objects it generates in sections
35556     like 'data' and 'bss'.  Sometimes, however, you need additional
35557     sections, or you need certain particular variables to appear in
35558     special sections, for example to map to special hardware.  The
35559     'section' attribute specifies that a variable (or function) lives
35560     in a particular section.  For example, this small program uses
35561     several specific section names:
35562
35563          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
35564          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
35565          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
35566          int init_data __attribute__ ((section ("INITDATA")));
35567
35568          main()
35569          {
35570            /* Initialize stack pointer */
35571            init_sp (stack + sizeof (stack));
35572
35573            /* Initialize initialized data */
35574            memcpy (&init_data, &data, &edata - &data);
35575
35576            /* Turn on the serial ports */
35577            init_duart (&a);
35578            init_duart (&b);
35579          }
35580
35581     Use the 'section' attribute with _global_ variables and not _local_
35582     variables, as shown in the example.
35583
35584     You may use the 'section' attribute with initialized or
35585     uninitialized global variables but the linker requires each object
35586     be defined once, with the exception that uninitialized variables
35587     tentatively go in the 'common' (or 'bss') section and can be
35588     multiply "defined".  Using the 'section' attribute changes what
35589     section the variable goes into and may cause the linker to issue an
35590     error if an uninitialized variable has multiple definitions.  You
35591     can force a variable to be initialized with the '-fno-common' flag
35592     or the 'nocommon' attribute.
35593
35594     Some file formats do not support arbitrary sections so the
35595     'section' attribute is not available on all platforms.  If you need
35596     to map the entire contents of a module to a particular section,
35597     consider using the facilities of the linker instead.
35598
35599'tls_model ("TLS_MODEL")'
35600     The 'tls_model' attribute sets thread-local storage model (*note
35601     Thread-Local::) of a particular '__thread' variable, overriding
35602     '-ftls-model=' command-line switch on a per-variable basis.  The
35603     TLS_MODEL argument should be one of 'global-dynamic',
35604     'local-dynamic', 'initial-exec' or 'local-exec'.
35605
35606     Not all targets support this attribute.
35607
35608'unused'
35609     This attribute, attached to a variable, means that the variable is
35610     meant to be possibly unused.  GCC does not produce a warning for
35611     this variable.
35612
35613'used'
35614     This attribute, attached to a variable with static storage, means
35615     that the variable must be emitted even if it appears that the
35616     variable is not referenced.
35617
35618     When applied to a static data member of a C++ class template, the
35619     attribute also means that the member is instantiated if the class
35620     itself is instantiated.
35621
35622'vector_size (BYTES)'
35623     This attribute specifies the vector size for the type of the
35624     declared variable, measured in bytes.  The type to which it applies
35625     is known as the "base type".  The BYTES argument must be a positive
35626     power-of-two multiple of the base type size.  For example, the
35627     declaration:
35628
35629          int foo __attribute__ ((vector_size (16)));
35630
35631     causes the compiler to set the mode for 'foo', to be 16 bytes,
35632     divided into 'int' sized units.  Assuming a 32-bit 'int', 'foo''s
35633     type is a vector of four units of four bytes each, and the
35634     corresponding mode of 'foo' is 'V4SI'.  *Note Vector Extensions::,
35635     for details of manipulating vector variables.
35636
35637     This attribute is only applicable to integral and floating scalars,
35638     although arrays, pointers, and function return values are allowed
35639     in conjunction with this construct.
35640
35641     Aggregates with this attribute are invalid, even if they are of the
35642     same size as a corresponding scalar.  For example, the declaration:
35643
35644          struct S { int a; };
35645          struct S  __attribute__ ((vector_size (16))) foo;
35646
35647     is invalid even if the size of the structure is the same as the
35648     size of the 'int'.
35649
35650'visibility ("VISIBILITY_TYPE")'
35651     This attribute affects the linkage of the declaration to which it
35652     is attached.  The 'visibility' attribute is described in *note
35653     Common Function Attributes::.
35654
35655'weak'
35656     The 'weak' attribute is described in *note Common Function
35657     Attributes::.
35658
35659'noinit'
35660     Any data with the 'noinit' attribute will not be initialized by the
35661     C runtime startup code, or the program loader.  Not initializing
35662     data in this way can reduce program startup times.  This attribute
35663     is specific to ELF targets and relies on the linker to place such
35664     data in the right location
35665
35666
35667File: gcc.info,  Node: ARC Variable Attributes,  Next: AVR Variable Attributes,  Prev: Common Variable Attributes,  Up: Variable Attributes
35668
356696.34.2 ARC Variable Attributes
35670------------------------------
35671
35672'aux'
35673     The 'aux' attribute is used to directly access the ARC's auxiliary
35674     register space from C. The auxilirary register number is given via
35675     attribute argument.
35676
35677
35678File: gcc.info,  Node: AVR Variable Attributes,  Next: Blackfin Variable Attributes,  Prev: ARC Variable Attributes,  Up: Variable Attributes
35679
356806.34.3 AVR Variable Attributes
35681------------------------------
35682
35683'progmem'
35684     The 'progmem' attribute is used on the AVR to place read-only data
35685     in the non-volatile program memory (flash).  The 'progmem'
35686     attribute accomplishes this by putting respective variables into a
35687     section whose name starts with '.progmem'.
35688
35689     This attribute works similar to the 'section' attribute but adds
35690     additional checking.
35691
35692     *  Ordinary AVR cores with 32 general purpose registers:
35693          'progmem' affects the location of the data but not how this
35694          data is accessed.  In order to read data located with the
35695          'progmem' attribute (inline) assembler must be used.
35696               /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */
35697               #include <avr/pgmspace.h>
35698
35699               /* Locate var in flash memory */
35700               const int var[2] PROGMEM = { 1, 2 };
35701
35702               int read_var (int i)
35703               {
35704                   /* Access var[] by accessor macro from avr/pgmspace.h */
35705                   return (int) pgm_read_word (& var[i]);
35706               }
35707
35708          AVR is a Harvard architecture processor and data and read-only
35709          data normally resides in the data memory (RAM).
35710
35711          See also the *note AVR Named Address Spaces:: section for an
35712          alternate way to locate and access data in flash memory.
35713
35714     *  AVR cores with flash memory visible in the RAM address range:
35715          On such devices, there is no need for attribute 'progmem' or
35716          *note '__flash': AVR Named Address Spaces. qualifier at all.
35717          Just use standard C / C++.  The compiler will generate 'LD*'
35718          instructions.  As flash memory is visible in the RAM address
35719          range, and the default linker script does _not_ locate
35720          '.rodata' in RAM, no special features are needed in order not
35721          to waste RAM for read-only data or to read from flash.  You
35722          might even get slightly better performance by avoiding
35723          'progmem' and '__flash'.  This applies to devices from
35724          families 'avrtiny' and 'avrxmega3', see *note AVR Options::
35725          for an overview.
35726
35727     * Reduced AVR Tiny cores like ATtiny40:
35728          The compiler adds '0x4000' to the addresses of objects and
35729          declarations in 'progmem' and locates the objects in flash
35730          memory, namely in section '.progmem.data'.  The offset is
35731          needed because the flash memory is visible in the RAM address
35732          space starting at address '0x4000'.
35733
35734          Data in 'progmem' can be accessed by means of ordinary C code,
35735          no special functions or macros are needed.
35736
35737               /* var is located in flash memory */
35738               extern const int var[2] __attribute__((progmem));
35739
35740               int read_var (int i)
35741               {
35742                   return var[i];
35743               }
35744
35745          Please notice that on these devices, there is no need for
35746          'progmem' at all.
35747
35748'io'
35749'io (ADDR)'
35750     Variables with the 'io' attribute are used to address memory-mapped
35751     peripherals in the io address range.  If an address is specified,
35752     the variable is assigned that address, and the value is interpreted
35753     as an address in the data address space.  Example:
35754
35755          volatile int porta __attribute__((io (0x22)));
35756
35757     The address specified in the address in the data address range.
35758
35759     Otherwise, the variable it is not assigned an address, but the
35760     compiler will still use in/out instructions where applicable,
35761     assuming some other module assigns an address in the io address
35762     range.  Example:
35763
35764          extern volatile int porta __attribute__((io));
35765
35766'io_low'
35767'io_low (ADDR)'
35768     This is like the 'io' attribute, but additionally it informs the
35769     compiler that the object lies in the lower half of the I/O area,
35770     allowing the use of 'cbi', 'sbi', 'sbic' and 'sbis' instructions.
35771
35772'address'
35773'address (ADDR)'
35774     Variables with the 'address' attribute are used to address
35775     memory-mapped peripherals that may lie outside the io address
35776     range.
35777
35778          volatile int porta __attribute__((address (0x600)));
35779
35780'absdata'
35781     Variables in static storage and with the 'absdata' attribute can be
35782     accessed by the 'LDS' and 'STS' instructions which take absolute
35783     addresses.
35784
35785        * This attribute is only supported for the reduced AVR Tiny core
35786          like ATtiny40.
35787
35788        * You must make sure that respective data is located in the
35789          address range '0x40'...'0xbf' accessible by 'LDS' and 'STS'.
35790          One way to achieve this as an appropriate linker description
35791          file.
35792
35793        * If the location does not fit the address range of 'LDS' and
35794          'STS', there is currently (Binutils 2.26) just an unspecific
35795          warning like
35796               'module.c:(.text+0x1c): warning: internal error: out of
35797               range error'
35798
35799     See also the '-mabsdata' *note command-line option: AVR Options.
35800
35801
35802File: gcc.info,  Node: Blackfin Variable Attributes,  Next: H8/300 Variable Attributes,  Prev: AVR Variable Attributes,  Up: Variable Attributes
35803
358046.34.4 Blackfin Variable Attributes
35805-----------------------------------
35806
35807Three attributes are currently defined for the Blackfin.
35808
35809'l1_data'
35810'l1_data_A'
35811'l1_data_B'
35812     Use these attributes on the Blackfin to place the variable into L1
35813     Data SRAM. Variables with 'l1_data' attribute are put into the
35814     specific section named '.l1.data'.  Those with 'l1_data_A'
35815     attribute are put into the specific section named '.l1.data.A'.
35816     Those with 'l1_data_B' attribute are put into the specific section
35817     named '.l1.data.B'.
35818
35819'l2'
35820     Use this attribute on the Blackfin to place the variable into L2
35821     SRAM. Variables with 'l2' attribute are put into the specific
35822     section named '.l2.data'.
35823
35824
35825File: gcc.info,  Node: H8/300 Variable Attributes,  Next: IA-64 Variable Attributes,  Prev: Blackfin Variable Attributes,  Up: Variable Attributes
35826
358276.34.5 H8/300 Variable Attributes
35828---------------------------------
35829
35830These variable attributes are available for H8/300 targets:
35831
35832'eightbit_data'
35833     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
35834     the specified variable should be placed into the eight-bit data
35835     section.  The compiler generates more efficient code for certain
35836     operations on data in the eight-bit data area.  Note the eight-bit
35837     data area is limited to 256 bytes of data.
35838
35839     You must use GAS and GLD from GNU binutils version 2.7 or later for
35840     this attribute to work correctly.
35841
35842'tiny_data'
35843     Use this attribute on the H8/300H and H8S to indicate that the
35844     specified variable should be placed into the tiny data section.
35845     The compiler generates more efficient code for loads and stores on
35846     data in the tiny data section.  Note the tiny data area is limited
35847     to slightly under 32KB of data.
35848
35849
35850File: gcc.info,  Node: IA-64 Variable Attributes,  Next: M32R/D Variable Attributes,  Prev: H8/300 Variable Attributes,  Up: Variable Attributes
35851
358526.34.6 IA-64 Variable Attributes
35853--------------------------------
35854
35855The IA-64 back end supports the following variable attribute:
35856
35857'model (MODEL-NAME)'
35858
35859     On IA-64, use this attribute to set the addressability of an
35860     object.  At present, the only supported identifier for MODEL-NAME
35861     is 'small', indicating addressability via "small" (22-bit)
35862     addresses (so that their addresses can be loaded with the 'addl'
35863     instruction).  Caveat: such addressing is by definition not
35864     position independent and hence this attribute must not be used for
35865     objects defined by shared libraries.
35866
35867
35868File: gcc.info,  Node: M32R/D Variable Attributes,  Next: MeP Variable Attributes,  Prev: IA-64 Variable Attributes,  Up: Variable Attributes
35869
358706.34.7 M32R/D Variable Attributes
35871---------------------------------
35872
35873One attribute is currently defined for the M32R/D.
35874
35875'model (MODEL-NAME)'
35876     Use this attribute on the M32R/D to set the addressability of an
35877     object.  The identifier MODEL-NAME is one of 'small', 'medium', or
35878     'large', representing each of the code models.
35879
35880     Small model objects live in the lower 16MB of memory (so that their
35881     addresses can be loaded with the 'ld24' instruction).
35882
35883     Medium and large model objects may live anywhere in the 32-bit
35884     address space (the compiler generates 'seth/add3' instructions to
35885     load their addresses).
35886
35887
35888File: gcc.info,  Node: MeP Variable Attributes,  Next: Microsoft Windows Variable Attributes,  Prev: M32R/D Variable Attributes,  Up: Variable Attributes
35889
358906.34.8 MeP Variable Attributes
35891------------------------------
35892
35893The MeP target has a number of addressing modes and busses.  The 'near'
35894space spans the standard memory space's first 16 megabytes (24 bits).
35895The 'far' space spans the entire 32-bit memory space.  The 'based' space
35896is a 128-byte region in the memory space that is addressed relative to
35897the '$tp' register.  The 'tiny' space is a 65536-byte region relative to
35898the '$gp' register.  In addition to these memory regions, the MeP target
35899has a separate 16-bit control bus which is specified with 'cb'
35900attributes.
35901
35902'based'
35903     Any variable with the 'based' attribute is assigned to the '.based'
35904     section, and is accessed with relative to the '$tp' register.
35905
35906'tiny'
35907     Likewise, the 'tiny' attribute assigned variables to the '.tiny'
35908     section, relative to the '$gp' register.
35909
35910'near'
35911     Variables with the 'near' attribute are assumed to have addresses
35912     that fit in a 24-bit addressing mode.  This is the default for
35913     large variables ('-mtiny=4' is the default) but this attribute can
35914     override '-mtiny=' for small variables, or override '-ml'.
35915
35916'far'
35917     Variables with the 'far' attribute are addressed using a full
35918     32-bit address.  Since this covers the entire memory space, this
35919     allows modules to make no assumptions about where variables might
35920     be stored.
35921
35922'io'
35923'io (ADDR)'
35924     Variables with the 'io' attribute are used to address memory-mapped
35925     peripherals.  If an address is specified, the variable is assigned
35926     that address, else it is not assigned an address (it is assumed
35927     some other module assigns an address).  Example:
35928
35929          int timer_count __attribute__((io(0x123)));
35930
35931'cb'
35932'cb (ADDR)'
35933     Variables with the 'cb' attribute are used to access the control
35934     bus, using special instructions.  'addr' indicates the control bus
35935     address.  Example:
35936
35937          int cpu_clock __attribute__((cb(0x123)));
35938
35939
35940File: gcc.info,  Node: Microsoft Windows Variable Attributes,  Next: MSP430 Variable Attributes,  Prev: MeP Variable Attributes,  Up: Variable Attributes
35941
359426.34.9 Microsoft Windows Variable Attributes
35943--------------------------------------------
35944
35945You can use these attributes on Microsoft Windows targets.  *note x86
35946Variable Attributes:: for additional Windows compatibility attributes
35947available on all x86 targets.
35948
35949'dllimport'
35950'dllexport'
35951     The 'dllimport' and 'dllexport' attributes are described in *note
35952     Microsoft Windows Function Attributes::.
35953
35954'selectany'
35955     The 'selectany' attribute causes an initialized global variable to
35956     have link-once semantics.  When multiple definitions of the
35957     variable are encountered by the linker, the first is selected and
35958     the remainder are discarded.  Following usage by the Microsoft
35959     compiler, the linker is told _not_ to warn about size or content
35960     differences of the multiple definitions.
35961
35962     Although the primary usage of this attribute is for POD types, the
35963     attribute can also be applied to global C++ objects that are
35964     initialized by a constructor.  In this case, the static
35965     initialization and destruction code for the object is emitted in
35966     each translation defining the object, but the calls to the
35967     constructor and destructor are protected by a link-once guard
35968     variable.
35969
35970     The 'selectany' attribute is only available on Microsoft Windows
35971     targets.  You can use '__declspec (selectany)' as a synonym for
35972     '__attribute__ ((selectany))' for compatibility with other
35973     compilers.
35974
35975'shared'
35976     On Microsoft Windows, in addition to putting variable definitions
35977     in a named section, the section can also be shared among all
35978     running copies of an executable or DLL.  For example, this small
35979     program defines shared data by putting it in a named section
35980     'shared' and marking the section shareable:
35981
35982          int foo __attribute__((section ("shared"), shared)) = 0;
35983
35984          int
35985          main()
35986          {
35987            /* Read and write foo.  All running
35988               copies see the same value.  */
35989            return 0;
35990          }
35991
35992     You may only use the 'shared' attribute along with 'section'
35993     attribute with a fully-initialized global definition because of the
35994     way linkers work.  See 'section' attribute for more information.
35995
35996     The 'shared' attribute is only available on Microsoft Windows.
35997
35998
35999File: gcc.info,  Node: MSP430 Variable Attributes,  Next: Nvidia PTX Variable Attributes,  Prev: Microsoft Windows Variable Attributes,  Up: Variable Attributes
36000
360016.34.10 MSP430 Variable Attributes
36002----------------------------------
36003
36004'noinit'
36005     Any data with the 'noinit' attribute will not be initialised by the
36006     C runtime startup code, or the program loader.  Not initialising
36007     data in this way can reduce program startup times.
36008
36009'persistent'
36010     Any variable with the 'persistent' attribute will not be
36011     initialised by the C runtime startup code.  Instead its value will
36012     be set once, when the application is loaded, and then never
36013     initialised again, even if the processor is reset or the program
36014     restarts.  Persistent data is intended to be placed into FLASH RAM,
36015     where its value will be retained across resets.  The linker script
36016     being used to create the application should ensure that persistent
36017     data is correctly placed.
36018
36019'upper'
36020'either'
36021     These attributes are the same as the MSP430 function attributes of
36022     the same name (*note MSP430 Function Attributes::).
36023
36024'lower'
36025     This option behaves mostly the same as the MSP430 function
36026     attribute of the same name (*note MSP430 Function Attributes::),
36027     but it has some additional functionality.
36028
36029     If '-mdata-region='{'upper,either,none'} has been passed, or the
36030     'section' attribute is applied to a variable, the compiler will
36031     generate 430X instructions to handle it.  This is because the
36032     compiler has to assume that the variable could get placed in the
36033     upper memory region (above address 0xFFFF). Marking the variable
36034     with the 'lower' attribute informs the compiler that the variable
36035     will be placed in lower memory so it is safe to use 430
36036     instructions to handle it.
36037
36038     In the case of the 'section' attribute, the section name given will
36039     be used, and the '.lower' prefix will not be added.
36040
36041
36042File: gcc.info,  Node: Nvidia PTX Variable Attributes,  Next: PowerPC Variable Attributes,  Prev: MSP430 Variable Attributes,  Up: Variable Attributes
36043
360446.34.11 Nvidia PTX Variable Attributes
36045--------------------------------------
36046
36047These variable attributes are supported by the Nvidia PTX back end:
36048
36049'shared'
36050     Use this attribute to place a variable in the '.shared' memory
36051     space.  This memory space is private to each cooperative thread
36052     array; only threads within one thread block refer to the same
36053     instance of the variable.  The runtime does not initialize
36054     variables in this memory space.
36055
36056
36057File: gcc.info,  Node: PowerPC Variable Attributes,  Next: RL78 Variable Attributes,  Prev: Nvidia PTX Variable Attributes,  Up: Variable Attributes
36058
360596.34.12 PowerPC Variable Attributes
36060-----------------------------------
36061
36062Three attributes currently are defined for PowerPC configurations:
36063'altivec', 'ms_struct' and 'gcc_struct'.
36064
36065 For full documentation of the struct attributes please see the
36066documentation in *note x86 Variable Attributes::.
36067
36068 For documentation of 'altivec' attribute please see the documentation
36069in *note PowerPC Type Attributes::.
36070
36071
36072File: gcc.info,  Node: RL78 Variable Attributes,  Next: V850 Variable Attributes,  Prev: PowerPC Variable Attributes,  Up: Variable Attributes
36073
360746.34.13 RL78 Variable Attributes
36075--------------------------------
36076
36077The RL78 back end supports the 'saddr' variable attribute.  This
36078specifies placement of the corresponding variable in the SADDR area,
36079which can be accessed more efficiently than the default memory region.
36080
36081
36082File: gcc.info,  Node: V850 Variable Attributes,  Next: x86 Variable Attributes,  Prev: RL78 Variable Attributes,  Up: Variable Attributes
36083
360846.34.14 V850 Variable Attributes
36085--------------------------------
36086
36087These variable attributes are supported by the V850 back end:
36088
36089'sda'
36090     Use this attribute to explicitly place a variable in the small data
36091     area, which can hold up to 64 kilobytes.
36092
36093'tda'
36094     Use this attribute to explicitly place a variable in the tiny data
36095     area, which can hold up to 256 bytes in total.
36096
36097'zda'
36098     Use this attribute to explicitly place a variable in the first 32
36099     kilobytes of memory.
36100
36101
36102File: gcc.info,  Node: x86 Variable Attributes,  Next: Xstormy16 Variable Attributes,  Prev: V850 Variable Attributes,  Up: Variable Attributes
36103
361046.34.15 x86 Variable Attributes
36105-------------------------------
36106
36107Two attributes are currently defined for x86 configurations: 'ms_struct'
36108and 'gcc_struct'.
36109
36110'ms_struct'
36111'gcc_struct'
36112
36113     If 'packed' is used on a structure, or if bit-fields are used, it
36114     may be that the Microsoft ABI lays out the structure differently
36115     than the way GCC normally does.  Particularly when moving packed
36116     data between functions compiled with GCC and the native Microsoft
36117     compiler (either via function call or as data in a file), it may be
36118     necessary to access either format.
36119
36120     The 'ms_struct' and 'gcc_struct' attributes correspond to the
36121     '-mms-bitfields' and '-mno-ms-bitfields' command-line options,
36122     respectively; see *note x86 Options::, for details of how structure
36123     layout is affected.  *Note x86 Type Attributes::, for information
36124     about the corresponding attributes on types.
36125
36126
36127File: gcc.info,  Node: Xstormy16 Variable Attributes,  Prev: x86 Variable Attributes,  Up: Variable Attributes
36128
361296.34.16 Xstormy16 Variable Attributes
36130-------------------------------------
36131
36132One attribute is currently defined for xstormy16 configurations:
36133'below100'.
36134
36135'below100'
36136
36137     If a variable has the 'below100' attribute ('BELOW100' is allowed
36138     also), GCC places the variable in the first 0x100 bytes of memory
36139     and use special opcodes to access it.  Such variables are placed in
36140     either the '.bss_below100' section or the '.data_below100' section.
36141
36142
36143File: gcc.info,  Node: Type Attributes,  Next: Label Attributes,  Prev: Variable Attributes,  Up: C Extensions
36144
361456.35 Specifying Attributes of Types
36146===================================
36147
36148The keyword '__attribute__' allows you to specify various special
36149properties of types.  Some type attributes apply only to structure and
36150union types, and in C++, also class types, while others can apply to any
36151type defined via a 'typedef' declaration.  Unless otherwise specified,
36152the same restrictions and effects apply to attributes regardless of
36153whether a type is a trivial structure or a C++ class with user-defined
36154constructors, destructors, or a copy assignment.
36155
36156 Other attributes are defined for functions (*note Function
36157Attributes::), labels (*note Label Attributes::), enumerators (*note
36158Enumerator Attributes::), statements (*note Statement Attributes::), and
36159for variables (*note Variable Attributes::).
36160
36161 The '__attribute__' keyword is followed by an attribute specification
36162enclosed in double parentheses.
36163
36164 You may specify type attributes in an enum, struct or union type
36165declaration or definition by placing them immediately after the
36166'struct', 'union' or 'enum' keyword.  You can also place them just past
36167the closing curly brace of the definition, but this is less preferred
36168because logically the type should be fully defined at the closing brace.
36169
36170 You can also include type attributes in a 'typedef' declaration.  *Note
36171Attribute Syntax::, for details of the exact syntax for using
36172attributes.
36173
36174* Menu:
36175
36176* Common Type Attributes::
36177* ARC Type Attributes::
36178* ARM Type Attributes::
36179* MeP Type Attributes::
36180* PowerPC Type Attributes::
36181* x86 Type Attributes::
36182
36183
36184File: gcc.info,  Node: Common Type Attributes,  Next: ARC Type Attributes,  Up: Type Attributes
36185
361866.35.1 Common Type Attributes
36187-----------------------------
36188
36189The following type attributes are supported on most targets.
36190
36191'aligned'
36192'aligned (ALIGNMENT)'
36193     The 'aligned' attribute specifies a minimum alignment (in bytes)
36194     for variables of the specified type.  When specified, ALIGNMENT
36195     must be a power of 2.  Specifying no ALIGNMENT argument implies the
36196     maximum alignment for the target, which is often, but by no means
36197     always, 8 or 16 bytes.  For example, the declarations:
36198
36199          struct __attribute__ ((aligned (8))) S { short f[3]; };
36200          typedef int more_aligned_int __attribute__ ((aligned (8)));
36201
36202     force the compiler to ensure (as far as it can) that each variable
36203     whose type is 'struct S' or 'more_aligned_int' is allocated and
36204     aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
36205     variables of type 'struct S' aligned to 8-byte boundaries allows
36206     the compiler to use the 'ldd' and 'std' (doubleword load and store)
36207     instructions when copying one variable of type 'struct S' to
36208     another, thus improving run-time efficiency.
36209
36210     Note that the alignment of any given 'struct' or 'union' type is
36211     required by the ISO C standard to be at least a perfect multiple of
36212     the lowest common multiple of the alignments of all of the members
36213     of the 'struct' or 'union' in question.  This means that you _can_
36214     effectively adjust the alignment of a 'struct' or 'union' type by
36215     attaching an 'aligned' attribute to any one of the members of such
36216     a type, but the notation illustrated in the example above is a more
36217     obvious, intuitive, and readable way to request the compiler to
36218     adjust the alignment of an entire 'struct' or 'union' type.
36219
36220     As in the preceding example, you can explicitly specify the
36221     alignment (in bytes) that you wish the compiler to use for a given
36222     'struct' or 'union' type.  Alternatively, you can leave out the
36223     alignment factor and just ask the compiler to align a type to the
36224     maximum useful alignment for the target machine you are compiling
36225     for.  For example, you could write:
36226
36227          struct __attribute__ ((aligned)) S { short f[3]; };
36228
36229     Whenever you leave out the alignment factor in an 'aligned'
36230     attribute specification, the compiler automatically sets the
36231     alignment for the type to the largest alignment that is ever used
36232     for any data type on the target machine you are compiling for.
36233     Doing this can often make copy operations more efficient, because
36234     the compiler can use whatever instructions copy the biggest chunks
36235     of memory when performing copies to or from the variables that have
36236     types that you have aligned this way.
36237
36238     In the example above, if the size of each 'short' is 2 bytes, then
36239     the size of the entire 'struct S' type is 6 bytes.  The smallest
36240     power of two that is greater than or equal to that is 8, so the
36241     compiler sets the alignment for the entire 'struct S' type to 8
36242     bytes.
36243
36244     Note that although you can ask the compiler to select a
36245     time-efficient alignment for a given type and then declare only
36246     individual stand-alone objects of that type, the compiler's ability
36247     to select a time-efficient alignment is primarily useful only when
36248     you plan to create arrays of variables having the relevant
36249     (efficiently aligned) type.  If you declare or use arrays of
36250     variables of an efficiently-aligned type, then it is likely that
36251     your program also does pointer arithmetic (or subscripting, which
36252     amounts to the same thing) on pointers to the relevant type, and
36253     the code that the compiler generates for these pointer arithmetic
36254     operations is often more efficient for efficiently-aligned types
36255     than for other types.
36256
36257     Note that the effectiveness of 'aligned' attributes may be limited
36258     by inherent limitations in your linker.  On many systems, the
36259     linker is only able to arrange for variables to be aligned up to a
36260     certain maximum alignment.  (For some linkers, the maximum
36261     supported alignment may be very very small.)  If your linker is
36262     only able to align variables up to a maximum of 8-byte alignment,
36263     then specifying 'aligned (16)' in an '__attribute__' still only
36264     provides you with 8-byte alignment.  See your linker documentation
36265     for further information.
36266
36267     When used on a struct, or struct member, the 'aligned' attribute
36268     can only increase the alignment; in order to decrease it, the
36269     'packed' attribute must be specified as well.  When used as part of
36270     a typedef, the 'aligned' attribute can both increase and decrease
36271     alignment, and specifying the 'packed' attribute generates a
36272     warning.
36273
36274'warn_if_not_aligned (ALIGNMENT)'
36275     This attribute specifies a threshold for the structure field,
36276     measured in bytes.  If the structure field is aligned below the
36277     threshold, a warning will be issued.  For example, the declaration:
36278
36279          typedef unsigned long long __u64
36280             __attribute__((aligned (4), warn_if_not_aligned (8)));
36281
36282          struct foo
36283          {
36284            int i1;
36285            int i2;
36286            __u64 x;
36287          };
36288
36289     causes the compiler to issue an warning on 'struct foo', like
36290     'warning: alignment 4 of 'struct foo' is less than 8'.  It is used
36291     to define 'struct foo' in such a way that 'struct foo' has the same
36292     layout and the structure field 'x' has the same alignment when
36293     '__u64' is aligned at either 4 or 8 bytes.  Align 'struct foo' to 8
36294     bytes:
36295
36296          struct __attribute__ ((aligned (8))) foo
36297          {
36298            int i1;
36299            int i2;
36300            __u64 x;
36301          };
36302
36303     silences the warning.  The compiler also issues a warning, like
36304     'warning: 'x' offset 12 in 'struct foo' isn't aligned to 8', when
36305     the structure field has the misaligned offset:
36306
36307          struct __attribute__ ((aligned (8))) foo
36308          {
36309            int i1;
36310            int i2;
36311            int i3;
36312            __u64 x;
36313          };
36314
36315     This warning can be disabled by '-Wno-if-not-aligned'.
36316
36317'alloc_size (POSITION)'
36318'alloc_size (POSITION-1, POSITION-2)'
36319     The 'alloc_size' type attribute may be applied to the definition of
36320     a type of a function that returns a pointer and takes at least one
36321     argument of an integer type.  It indicates that the returned
36322     pointer points to an object whose size is given by the function
36323     argument at POSITION-1, or by the product of the arguments at
36324     POSITION-1 and POSITION-2.  Meaningful sizes are positive values
36325     less than 'PTRDIFF_MAX'.  Other sizes are disagnosed when detected.
36326     GCC uses this information to improve the results of
36327     '__builtin_object_size'.
36328
36329     For instance, the following declarations
36330
36331          typedef __attribute__ ((alloc_size (1, 2))) void*
36332            calloc_type (size_t, size_t);
36333          typedef __attribute__ ((alloc_size (1))) void*
36334            malloc_type (size_t);
36335
36336     specify that 'calloc_type' is a type of a function that, like the
36337     standard C function 'calloc', returns an object whose size is given
36338     by the product of arguments 1 and 2, and that 'malloc_type', like
36339     the standard C function 'malloc', returns an object whose size is
36340     given by argument 1 to the function.
36341
36342'copy'
36343'copy (EXPRESSION)'
36344     The 'copy' attribute applies the set of attributes with which the
36345     type of the EXPRESSION has been declared to the declaration of the
36346     type to which the attribute is applied.  The attribute is designed
36347     for libraries that define aliases that are expected to specify the
36348     same set of attributes as the aliased symbols.  The 'copy'
36349     attribute can be used with types, variables, or functions.
36350     However, the kind of symbol to which the attribute is applied
36351     (either varible or function) must match the kind of symbol to which
36352     the argument refers.  The 'copy' attribute copies only syntactic
36353     and semantic attributes but not attributes that affect a symbol's
36354     linkage or visibility such as 'alias', 'visibility', or 'weak'.
36355     The 'deprecated' attribute is also not copied.  *Note Common
36356     Function Attributes::.  *Note Common Variable Attributes::.
36357
36358     For example, suppose 'struct A' below is defined in some third
36359     party library header to have the alignment requirement 'N' and to
36360     force a warning whenever a variable of the type is not so aligned
36361     due to attribute 'packed'.  Specifying the 'copy' attribute on the
36362     definition on the unrelated 'struct B' has the effect of copying
36363     all relevant attributes from the type referenced by the pointer
36364     expression to 'struct B'.
36365
36366          struct __attribute__ ((aligned (N), warn_if_not_aligned (N)))
36367          A { /* ... */ };
36368          struct __attribute__ ((copy ( (struct A *)0)) B { /* ... */ };
36369
36370'deprecated'
36371'deprecated (MSG)'
36372     The 'deprecated' attribute results in a warning if the type is used
36373     anywhere in the source file.  This is useful when identifying types
36374     that are expected to be removed in a future version of a program.
36375     If possible, the warning also includes the location of the
36376     declaration of the deprecated type, to enable users to easily find
36377     further information about why the type is deprecated, or what they
36378     should do instead.  Note that the warnings only occur for uses and
36379     then only if the type is being applied to an identifier that itself
36380     is not being declared as deprecated.
36381
36382          typedef int T1 __attribute__ ((deprecated));
36383          T1 x;
36384          typedef T1 T2;
36385          T2 y;
36386          typedef T1 T3 __attribute__ ((deprecated));
36387          T3 z __attribute__ ((deprecated));
36388
36389     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
36390     warning is issued for line 4 because T2 is not explicitly
36391     deprecated.  Line 5 has no warning because T3 is explicitly
36392     deprecated.  Similarly for line 6.  The optional MSG argument,
36393     which must be a string, is printed in the warning if present.
36394     Control characters in the string will be replaced with escape
36395     sequences, and if the '-fmessage-length' option is set to 0 (its
36396     default value) then any newline characters will be ignored.
36397
36398     The 'deprecated' attribute can also be used for functions and
36399     variables (*note Function Attributes::, *note Variable
36400     Attributes::.)
36401
36402     The message attached to the attribute is affected by the setting of
36403     the '-fmessage-length' option.
36404
36405'designated_init'
36406     This attribute may only be applied to structure types.  It
36407     indicates that any initialization of an object of this type must
36408     use designated initializers rather than positional initializers.
36409     The intent of this attribute is to allow the programmer to indicate
36410     that a structure's layout may change, and that therefore relying on
36411     positional initialization will result in future breakage.
36412
36413     GCC emits warnings based on this attribute by default; use
36414     '-Wno-designated-init' to suppress them.
36415
36416'may_alias'
36417     Accesses through pointers to types with this attribute are not
36418     subject to type-based alias analysis, but are instead assumed to be
36419     able to alias any other type of objects.  In the context of section
36420     6.5 paragraph 7 of the C99 standard, an lvalue expression
36421     dereferencing such a pointer is treated like having a character
36422     type.  See '-fstrict-aliasing' for more information on aliasing
36423     issues.  This extension exists to support some vector APIs, in
36424     which pointers to one vector type are permitted to alias pointers
36425     to a different vector type.
36426
36427     Note that an object of a type with this attribute does not have any
36428     special semantics.
36429
36430     Example of use:
36431
36432          typedef short __attribute__ ((__may_alias__)) short_a;
36433
36434          int
36435          main (void)
36436          {
36437            int a = 0x12345678;
36438            short_a *b = (short_a *) &a;
36439
36440            b[1] = 0;
36441
36442            if (a == 0x12345678)
36443              abort();
36444
36445            exit(0);
36446          }
36447
36448     If you replaced 'short_a' with 'short' in the variable declaration,
36449     the above program would abort when compiled with
36450     '-fstrict-aliasing', which is on by default at '-O2' or above.
36451
36452'mode (MODE)'
36453     This attribute specifies the data type for the
36454     declaration--whichever type corresponds to the mode MODE.  This in
36455     effect lets you request an integer or floating-point type according
36456     to its width.
36457
36458     *Note (gccint)Machine Modes::, for a list of the possible keywords
36459     for MODE.  You may also specify a mode of 'byte' or '__byte__' to
36460     indicate the mode corresponding to a one-byte integer, 'word' or
36461     '__word__' for the mode of a one-word integer, and 'pointer' or
36462     '__pointer__' for the mode used to represent pointers.
36463
36464'packed'
36465     This attribute, attached to a 'struct', 'union', or C++ 'class'
36466     type definition, specifies that each of its members (other than
36467     zero-width bit-fields) is placed to minimize the memory required.
36468     This is equivalent to specifying the 'packed' attribute on each of
36469     the members.
36470
36471     When attached to an 'enum' definition, the 'packed' attribute
36472     indicates that the smallest integral type should be used.
36473     Specifying the '-fshort-enums' flag on the command line is
36474     equivalent to specifying the 'packed' attribute on all 'enum'
36475     definitions.
36476
36477     In the following example 'struct my_packed_struct''s members are
36478     packed closely together, but the internal layout of its 's' member
36479     is not packed--to do that, 'struct my_unpacked_struct' needs to be
36480     packed too.
36481
36482          struct my_unpacked_struct
36483           {
36484              char c;
36485              int i;
36486           };
36487
36488          struct __attribute__ ((__packed__)) my_packed_struct
36489            {
36490               char c;
36491               int  i;
36492               struct my_unpacked_struct s;
36493            };
36494
36495     You may only specify the 'packed' attribute on the definition of an
36496     'enum', 'struct', 'union', or 'class', not on a 'typedef' that does
36497     not also define the enumerated type, structure, union, or class.
36498
36499'scalar_storage_order ("ENDIANNESS")'
36500     When attached to a 'union' or a 'struct', this attribute sets the
36501     storage order, aka endianness, of the scalar fields of the type, as
36502     well as the array fields whose component is scalar.  The supported
36503     endiannesses are 'big-endian' and 'little-endian'.  The attribute
36504     has no effects on fields which are themselves a 'union', a 'struct'
36505     or an array whose component is a 'union' or a 'struct', and it is
36506     possible for these fields to have a different scalar storage order
36507     than the enclosing type.
36508
36509     This attribute is supported only for targets that use a uniform
36510     default scalar storage order (fortunately, most of them), i.e.
36511     targets that store the scalars either all in big-endian or all in
36512     little-endian.
36513
36514     Additional restrictions are enforced for types with the reverse
36515     scalar storage order with regard to the scalar storage order of the
36516     target:
36517
36518        * Taking the address of a scalar field of a 'union' or a
36519          'struct' with reverse scalar storage order is not permitted
36520          and yields an error.
36521        * Taking the address of an array field, whose component is
36522          scalar, of a 'union' or a 'struct' with reverse scalar storage
36523          order is permitted but yields a warning, unless
36524          '-Wno-scalar-storage-order' is specified.
36525        * Taking the address of a 'union' or a 'struct' with reverse
36526          scalar storage order is permitted.
36527
36528     These restrictions exist because the storage order attribute is
36529     lost when the address of a scalar or the address of an array with
36530     scalar component is taken, so storing indirectly through this
36531     address generally does not work.  The second case is nevertheless
36532     allowed to be able to perform a block copy from or to the array.
36533
36534     Moreover, the use of type punning or aliasing to toggle the storage
36535     order is not supported; that is to say, a given scalar object
36536     cannot be accessed through distinct types that assign a different
36537     storage order to it.
36538
36539'transparent_union'
36540
36541     This attribute, attached to a 'union' type definition, indicates
36542     that any function parameter having that union type causes calls to
36543     that function to be treated in a special way.
36544
36545     First, the argument corresponding to a transparent union type can
36546     be of any type in the union; no cast is required.  Also, if the
36547     union contains a pointer type, the corresponding argument can be a
36548     null pointer constant or a void pointer expression; and if the
36549     union contains a void pointer type, the corresponding argument can
36550     be any pointer expression.  If the union member type is a pointer,
36551     qualifiers like 'const' on the referenced type must be respected,
36552     just as with normal pointer conversions.
36553
36554     Second, the argument is passed to the function using the calling
36555     conventions of the first member of the transparent union, not the
36556     calling conventions of the union itself.  All members of the union
36557     must have the same machine representation; this is necessary for
36558     this argument passing to work properly.
36559
36560     Transparent unions are designed for library functions that have
36561     multiple interfaces for compatibility reasons.  For example,
36562     suppose the 'wait' function must accept either a value of type 'int
36563     *' to comply with POSIX, or a value of type 'union wait *' to
36564     comply with the 4.1BSD interface.  If 'wait''s parameter were 'void
36565     *', 'wait' would accept both kinds of arguments, but it would also
36566     accept any other pointer type and this would make argument type
36567     checking less useful.  Instead, '<sys/wait.h>' might define the
36568     interface as follows:
36569
36570          typedef union __attribute__ ((__transparent_union__))
36571            {
36572              int *__ip;
36573              union wait *__up;
36574            } wait_status_ptr_t;
36575
36576          pid_t wait (wait_status_ptr_t);
36577
36578     This interface allows either 'int *' or 'union wait *' arguments to
36579     be passed, using the 'int *' calling convention.  The program can
36580     call 'wait' with arguments of either type:
36581
36582          int w1 () { int w; return wait (&w); }
36583          int w2 () { union wait w; return wait (&w); }
36584
36585     With this interface, 'wait''s implementation might look like this:
36586
36587          pid_t wait (wait_status_ptr_t p)
36588          {
36589            return waitpid (-1, p.__ip, 0);
36590          }
36591
36592'unused'
36593     When attached to a type (including a 'union' or a 'struct'), this
36594     attribute means that variables of that type are meant to appear
36595     possibly unused.  GCC does not produce a warning for any variables
36596     of that type, even if the variable appears to do nothing.  This is
36597     often the case with lock or thread classes, which are usually
36598     defined and then not referenced, but contain constructors and
36599     destructors that have nontrivial bookkeeping functions.
36600
36601'vector_size (BYTES)'
36602     This attribute specifies the vector size for the type, measured in
36603     bytes.  The type to which it applies is known as the "base type".
36604     The BYTES argument must be a positive power-of-two multiple of the
36605     base type size.  For example, the following declarations:
36606
36607          typedef __attribute__ ((vector_size (32))) int int_vec32_t ;
36608          typedef __attribute__ ((vector_size (32))) int* int_vec32_ptr_t;
36609          typedef __attribute__ ((vector_size (32))) int int_vec32_arr3_t[3];
36610
36611     define 'int_vec32_t' to be a 32-byte vector type composed of 'int'
36612     sized units.  With 'int' having a size of 4 bytes, the type defines
36613     a vector of eight units, four bytes each.  The mode of variables of
36614     type 'int_vec32_t' is 'V8SI'.  'int_vec32_ptr_t' is then defined to
36615     be a pointer to such a vector type, and 'int_vec32_arr3_t' to be an
36616     array of three such vectors.  *Note Vector Extensions::, for
36617     details of manipulating objects of vector types.
36618
36619     This attribute is only applicable to integral and floating scalar
36620     types.  In function declarations the attribute applies to the
36621     function return type.
36622
36623     For example, the following:
36624          __attribute__ ((vector_size (16))) float get_flt_vec16 (void);
36625     declares 'get_flt_vec16' to be a function returning a 16-byte
36626     vector with the base type 'float'.
36627
36628'visibility'
36629     In C++, attribute visibility (*note Function Attributes::) can also
36630     be applied to class, struct, union and enum types.  Unlike other
36631     type attributes, the attribute must appear between the initial
36632     keyword and the name of the type; it cannot appear after the body
36633     of the type.
36634
36635     Note that the type visibility is applied to vague linkage entities
36636     associated with the class (vtable, typeinfo node, etc.).  In
36637     particular, if a class is thrown as an exception in one shared
36638     object and caught in another, the class must have default
36639     visibility.  Otherwise the two shared objects are unable to use the
36640     same typeinfo node and exception handling will break.
36641
36642 To specify multiple attributes, separate them by commas within the
36643double parentheses: for example, '__attribute__ ((aligned (16),
36644packed))'.
36645
36646
36647File: gcc.info,  Node: ARC Type Attributes,  Next: ARM Type Attributes,  Prev: Common Type Attributes,  Up: Type Attributes
36648
366496.35.2 ARC Type Attributes
36650--------------------------
36651
36652Declaring objects with 'uncached' allows you to exclude data-cache
36653participation in load and store operations on those objects without
36654involving the additional semantic implications of 'volatile'.  The '.di'
36655instruction suffix is used for all loads and stores of data declared
36656'uncached'.
36657
36658
36659File: gcc.info,  Node: ARM Type Attributes,  Next: MeP Type Attributes,  Prev: ARC Type Attributes,  Up: Type Attributes
36660
366616.35.3 ARM Type Attributes
36662--------------------------
36663
36664On those ARM targets that support 'dllimport' (such as Symbian OS), you
36665can use the 'notshared' attribute to indicate that the virtual table and
36666other similar data for a class should not be exported from a DLL.  For
36667example:
36668
36669     class __declspec(notshared) C {
36670     public:
36671       __declspec(dllimport) C();
36672       virtual void f();
36673     }
36674
36675     __declspec(dllexport)
36676     C::C() {}
36677
36678In this code, 'C::C' is exported from the current DLL, but the virtual
36679table for 'C' is not exported.  (You can use '__attribute__' instead of
36680'__declspec' if you prefer, but most Symbian OS code uses '__declspec'.)
36681
36682
36683File: gcc.info,  Node: MeP Type Attributes,  Next: PowerPC Type Attributes,  Prev: ARM Type Attributes,  Up: Type Attributes
36684
366856.35.4 MeP Type Attributes
36686--------------------------
36687
36688Many of the MeP variable attributes may be applied to types as well.
36689Specifically, the 'based', 'tiny', 'near', and 'far' attributes may be
36690applied to either.  The 'io' and 'cb' attributes may not be applied to
36691types.
36692
36693
36694File: gcc.info,  Node: PowerPC Type Attributes,  Next: x86 Type Attributes,  Prev: MeP Type Attributes,  Up: Type Attributes
36695
366966.35.5 PowerPC Type Attributes
36697------------------------------
36698
36699Three attributes currently are defined for PowerPC configurations:
36700'altivec', 'ms_struct' and 'gcc_struct'.
36701
36702 For full documentation of the 'ms_struct' and 'gcc_struct' attributes
36703please see the documentation in *note x86 Type Attributes::.
36704
36705 The 'altivec' attribute allows one to declare AltiVec vector data types
36706supported by the AltiVec Programming Interface Manual.  The attribute
36707requires an argument to specify one of three vector types: 'vector__',
36708'pixel__' (always followed by unsigned short), and 'bool__' (always
36709followed by unsigned).
36710
36711     __attribute__((altivec(vector__)))
36712     __attribute__((altivec(pixel__))) unsigned short
36713     __attribute__((altivec(bool__))) unsigned
36714
36715 These attributes mainly are intended to support the '__vector',
36716'__pixel', and '__bool' AltiVec keywords.
36717
36718
36719File: gcc.info,  Node: x86 Type Attributes,  Prev: PowerPC Type Attributes,  Up: Type Attributes
36720
367216.35.6 x86 Type Attributes
36722--------------------------
36723
36724Two attributes are currently defined for x86 configurations: 'ms_struct'
36725and 'gcc_struct'.
36726
36727'ms_struct'
36728'gcc_struct'
36729
36730     If 'packed' is used on a structure, or if bit-fields are used it
36731     may be that the Microsoft ABI packs them differently than GCC
36732     normally packs them.  Particularly when moving packed data between
36733     functions compiled with GCC and the native Microsoft compiler
36734     (either via function call or as data in a file), it may be
36735     necessary to access either format.
36736
36737     The 'ms_struct' and 'gcc_struct' attributes correspond to the
36738     '-mms-bitfields' and '-mno-ms-bitfields' command-line options,
36739     respectively; see *note x86 Options::, for details of how structure
36740     layout is affected.  *Note x86 Variable Attributes::, for
36741     information about the corresponding attributes on variables.
36742
36743
36744File: gcc.info,  Node: Label Attributes,  Next: Enumerator Attributes,  Prev: Type Attributes,  Up: C Extensions
36745
367466.36 Label Attributes
36747=====================
36748
36749GCC allows attributes to be set on C labels.  *Note Attribute Syntax::,
36750for details of the exact syntax for using attributes.  Other attributes
36751are available for functions (*note Function Attributes::), variables
36752(*note Variable Attributes::), enumerators (*note Enumerator
36753Attributes::), statements (*note Statement Attributes::), and for types
36754(*note Type Attributes::).
36755
36756 This example uses the 'cold' label attribute to indicate the
36757'ErrorHandling' branch is unlikely to be taken and that the
36758'ErrorHandling' label is unused:
36759
36760
36761        asm goto ("some asm" : : : : NoError);
36762
36763     /* This branch (the fall-through from the asm) is less commonly used */
36764     ErrorHandling:
36765        __attribute__((cold, unused)); /* Semi-colon is required here */
36766        printf("error\n");
36767        return 0;
36768
36769     NoError:
36770        printf("no error\n");
36771        return 1;
36772
36773'unused'
36774     This feature is intended for program-generated code that may
36775     contain unused labels, but which is compiled with '-Wall'.  It is
36776     not normally appropriate to use in it human-written code, though it
36777     could be useful in cases where the code that jumps to the label is
36778     contained within an '#ifdef' conditional.
36779
36780'hot'
36781     The 'hot' attribute on a label is used to inform the compiler that
36782     the path following the label is more likely than paths that are not
36783     so annotated.  This attribute is used in cases where
36784     '__builtin_expect' cannot be used, for instance with computed goto
36785     or 'asm goto'.
36786
36787'cold'
36788     The 'cold' attribute on labels is used to inform the compiler that
36789     the path following the label is unlikely to be executed.  This
36790     attribute is used in cases where '__builtin_expect' cannot be used,
36791     for instance with computed goto or 'asm goto'.
36792
36793
36794File: gcc.info,  Node: Enumerator Attributes,  Next: Statement Attributes,  Prev: Label Attributes,  Up: C Extensions
36795
367966.37 Enumerator Attributes
36797==========================
36798
36799GCC allows attributes to be set on enumerators.  *Note Attribute
36800Syntax::, for details of the exact syntax for using attributes.  Other
36801attributes are available for functions (*note Function Attributes::),
36802variables (*note Variable Attributes::), labels (*note Label
36803Attributes::), statements (*note Statement Attributes::), and for types
36804(*note Type Attributes::).
36805
36806 This example uses the 'deprecated' enumerator attribute to indicate the
36807'oldval' enumerator is deprecated:
36808
36809     enum E {
36810       oldval __attribute__((deprecated)),
36811       newval
36812     };
36813
36814     int
36815     fn (void)
36816     {
36817       return oldval;
36818     }
36819
36820'deprecated'
36821     The 'deprecated' attribute results in a warning if the enumerator
36822     is used anywhere in the source file.  This is useful when
36823     identifying enumerators that are expected to be removed in a future
36824     version of a program.  The warning also includes the location of
36825     the declaration of the deprecated enumerator, to enable users to
36826     easily find further information about why the enumerator is
36827     deprecated, or what they should do instead.  Note that the warnings
36828     only occurs for uses.
36829
36830
36831File: gcc.info,  Node: Statement Attributes,  Next: Attribute Syntax,  Prev: Enumerator Attributes,  Up: C Extensions
36832
368336.38 Statement Attributes
36834=========================
36835
36836GCC allows attributes to be set on null statements.  *Note Attribute
36837Syntax::, for details of the exact syntax for using attributes.  Other
36838attributes are available for functions (*note Function Attributes::),
36839variables (*note Variable Attributes::), labels (*note Label
36840Attributes::), enumerators (*note Enumerator Attributes::), and for
36841types (*note Type Attributes::).
36842
36843 This example uses the 'fallthrough' statement attribute to indicate
36844that the '-Wimplicit-fallthrough' warning should not be emitted:
36845
36846     switch (cond)
36847       {
36848       case 1:
36849         bar (1);
36850         __attribute__((fallthrough));
36851       case 2:
36852         ...
36853       }
36854
36855'fallthrough'
36856     The 'fallthrough' attribute with a null statement serves as a
36857     fallthrough statement.  It hints to the compiler that a statement
36858     that falls through to another case label, or user-defined label in
36859     a switch statement is intentional and thus the
36860     '-Wimplicit-fallthrough' warning must not trigger.  The fallthrough
36861     attribute may appear at most once in each attribute list, and may
36862     not be mixed with other attributes.  It can only be used in a
36863     switch statement (the compiler will issue an error otherwise),
36864     after a preceding statement and before a logically succeeding case
36865     label, or user-defined label.
36866
36867
36868File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Statement Attributes,  Up: C Extensions
36869
368706.39 Attribute Syntax
36871=====================
36872
36873This section describes the syntax with which '__attribute__' may be
36874used, and the constructs to which attribute specifiers bind, for the C
36875language.  Some details may vary for C++ and Objective-C.  Because of
36876infelicities in the grammar for attributes, some forms described here
36877may not be successfully parsed in all cases.
36878
36879 There are some problems with the semantics of attributes in C++.  For
36880example, there are no manglings for attributes, although they may affect
36881code generation, so problems may arise when attributed types are used in
36882conjunction with templates or overloading.  Similarly, 'typeid' does not
36883distinguish between types with different attributes.  Support for
36884attributes in C++ may be restricted in future to attributes on
36885declarations only, but not on nested declarators.
36886
36887 *Note Function Attributes::, for details of the semantics of attributes
36888applying to functions.  *Note Variable Attributes::, for details of the
36889semantics of attributes applying to variables.  *Note Type Attributes::,
36890for details of the semantics of attributes applying to structure, union
36891and enumerated types.  *Note Label Attributes::, for details of the
36892semantics of attributes applying to labels.  *Note Enumerator
36893Attributes::, for details of the semantics of attributes applying to
36894enumerators.  *Note Statement Attributes::, for details of the semantics
36895of attributes applying to statements.
36896
36897 An "attribute specifier" is of the form '__attribute__
36898((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
36899comma-separated sequence of "attributes", where each attribute is one of
36900the following:
36901
36902   * Empty.  Empty attributes are ignored.
36903
36904   * An attribute name (which may be an identifier such as 'unused', or
36905     a reserved word such as 'const').
36906
36907   * An attribute name followed by a parenthesized list of parameters
36908     for the attribute.  These parameters take one of the following
36909     forms:
36910
36911        * An identifier.  For example, 'mode' attributes use this form.
36912
36913        * An identifier followed by a comma and a non-empty
36914          comma-separated list of expressions.  For example, 'format'
36915          attributes use this form.
36916
36917        * A possibly empty comma-separated list of expressions.  For
36918          example, 'format_arg' attributes use this form with the list
36919          being a single integer constant expression, and 'alias'
36920          attributes use this form with the list being a single string
36921          constant.
36922
36923 An "attribute specifier list" is a sequence of one or more attribute
36924specifiers, not separated by any other tokens.
36925
36926 You may optionally specify attribute names with '__' preceding and
36927following the name.  This allows you to use them in header files without
36928being concerned about a possible macro of the same name.  For example,
36929you may use the attribute name '__noreturn__' instead of 'noreturn'.
36930
36931Label Attributes
36932................
36933
36934In GNU C, an attribute specifier list may appear after the colon
36935following a label, other than a 'case' or 'default' label.  GNU C++ only
36936permits attributes on labels if the attribute specifier is immediately
36937followed by a semicolon (i.e., the label applies to an empty statement).
36938If the semicolon is missing, C++ label attributes are ambiguous, as it
36939is permissible for a declaration, which could begin with an attribute
36940list, to be labelled in C++.  Declarations cannot be labelled in C90 or
36941C99, so the ambiguity does not arise there.
36942
36943Enumerator Attributes
36944.....................
36945
36946In GNU C, an attribute specifier list may appear as part of an
36947enumerator.  The attribute goes after the enumeration constant, before
36948'=', if present.  The optional attribute in the enumerator appertains to
36949the enumeration constant.  It is not possible to place the attribute
36950after the constant expression, if present.
36951
36952Statement Attributes
36953....................
36954
36955In GNU C, an attribute specifier list may appear as part of a null
36956statement.  The attribute goes before the semicolon.
36957
36958Type Attributes
36959...............
36960
36961An attribute specifier list may appear as part of a 'struct', 'union' or
36962'enum' specifier.  It may go either immediately after the 'struct',
36963'union' or 'enum' keyword, or after the closing brace.  The former
36964syntax is preferred.  Where attribute specifiers follow the closing
36965brace, they are considered to relate to the structure, union or
36966enumerated type defined, not to any enclosing declaration the type
36967specifier appears in, and the type defined is not complete until after
36968the attribute specifiers.
36969
36970All other attributes
36971....................
36972
36973Otherwise, an attribute specifier appears as part of a declaration,
36974counting declarations of unnamed parameters and type names, and relates
36975to that declaration (which may be nested in another declaration, for
36976example in the case of a parameter declaration), or to a particular
36977declarator within a declaration.  Where an attribute specifier is
36978applied to a parameter declared as a function or an array, it should
36979apply to the function or array rather than the pointer to which the
36980parameter is implicitly converted, but this is not yet correctly
36981implemented.
36982
36983 Any list of specifiers and qualifiers at the start of a declaration may
36984contain attribute specifiers, whether or not such a list may in that
36985context contain storage class specifiers.  (Some attributes, however,
36986are essentially in the nature of storage class specifiers, and only make
36987sense where storage class specifiers may be used; for example,
36988'section'.)  There is one necessary limitation to this syntax: the first
36989old-style parameter declaration in a function definition cannot begin
36990with an attribute specifier, because such an attribute applies to the
36991function instead by syntax described below (which, however, is not yet
36992implemented in this case).  In some other cases, attribute specifiers
36993are permitted by this grammar but not yet supported by the compiler.
36994All attribute specifiers in this place relate to the declaration as a
36995whole.  In the obsolescent usage where a type of 'int' is implied by the
36996absence of type specifiers, such a list of specifiers and qualifiers may
36997be an attribute specifier list with no other specifiers or qualifiers.
36998
36999 At present, the first parameter in a function prototype must have some
37000type specifier that is not an attribute specifier; this resolves an
37001ambiguity in the interpretation of 'void f(int (__attribute__((foo))
37002x))', but is subject to change.  At present, if the parentheses of a
37003function declarator contain only attributes then those attributes are
37004ignored, rather than yielding an error or warning or implying a single
37005parameter of type int, but this is subject to change.
37006
37007 An attribute specifier list may appear immediately before a declarator
37008(other than the first) in a comma-separated list of declarators in a
37009declaration of more than one identifier using a single list of
37010specifiers and qualifiers.  Such attribute specifiers apply only to the
37011identifier before whose declarator they appear.  For example, in
37012
37013     __attribute__((noreturn)) void d0 (void),
37014         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
37015          d2 (void);
37016
37017the 'noreturn' attribute applies to all the functions declared; the
37018'format' attribute only applies to 'd1'.
37019
37020 An attribute specifier list may appear immediately before the comma,
37021'=' or semicolon terminating the declaration of an identifier other than
37022a function definition.  Such attribute specifiers apply to the declared
37023object or function.  Where an assembler name for an object or function
37024is specified (*note Asm Labels::), the attribute must follow the 'asm'
37025specification.
37026
37027 An attribute specifier list may, in future, be permitted to appear
37028after the declarator in a function definition (before any old-style
37029parameter declarations or the function body).
37030
37031 Attribute specifiers may be mixed with type qualifiers appearing inside
37032the '[]' of a parameter array declarator, in the C99 construct by which
37033such qualifiers are applied to the pointer to which the array is
37034implicitly converted.  Such attribute specifiers apply to the pointer,
37035not to the array, but at present this is not implemented and they are
37036ignored.
37037
37038 An attribute specifier list may appear at the start of a nested
37039declarator.  At present, there are some limitations in this usage: the
37040attributes correctly apply to the declarator, but for most individual
37041attributes the semantics this implies are not implemented.  When
37042attribute specifiers follow the '*' of a pointer declarator, they may be
37043mixed with any type qualifiers present.  The following describes the
37044formal semantics of this syntax.  It makes the most sense if you are
37045familiar with the formal specification of declarators in the ISO C
37046standard.
37047
37048 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration 'T D1',
37049where 'T' contains declaration specifiers that specify a type TYPE (such
37050as 'int') and 'D1' is a declarator that contains an identifier IDENT.
37051The type specified for IDENT for derived declarators whose type does not
37052include an attribute specifier is as in the ISO C standard.
37053
37054 If 'D1' has the form '( ATTRIBUTE-SPECIFIER-LIST D )', and the
37055declaration 'T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST TYPE"
37056for IDENT, then 'T D1' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
37057ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
37058
37059 If 'D1' has the form '* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST D',
37060and the declaration 'T D' specifies the type
37061"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then 'T D1' specifies the
37062type "DERIVED-DECLARATOR-TYPE-LIST
37063TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
37064
37065 For example,
37066
37067     void (__attribute__((noreturn)) ****f) (void);
37068
37069specifies the type "pointer to pointer to pointer to pointer to
37070non-returning function returning 'void'".  As another example,
37071
37072     char *__attribute__((aligned(8))) *f;
37073
37074specifies the type "pointer to 8-byte-aligned pointer to 'char'".  Note
37075again that this does not work with most attributes; for example, the
37076usage of 'aligned' and 'noreturn' attributes given above is not yet
37077supported.
37078
37079 For compatibility with existing code written for compiler versions that
37080did not implement attributes on nested declarators, some laxity is
37081allowed in the placing of attributes.  If an attribute that only applies
37082to types is applied to a declaration, it is treated as applying to the
37083type of that declaration.  If an attribute that only applies to
37084declarations is applied to the type of a declaration, it is treated as
37085applying to that declaration; and, for compatibility with code placing
37086the attributes immediately before the identifier declared, such an
37087attribute applied to a function return type is treated as applying to
37088the function type, and such an attribute applied to an array element
37089type is treated as applying to the array type.  If an attribute that
37090only applies to function types is applied to a pointer-to-function type,
37091it is treated as applying to the pointer target type; if such an
37092attribute is applied to a function return type that is not a
37093pointer-to-function type, it is treated as applying to the function
37094type.
37095
37096
37097File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
37098
370996.40 Prototypes and Old-Style Function Definitions
37100==================================================
37101
37102GNU C extends ISO C to allow a function prototype to override a later
37103old-style non-prototype definition.  Consider the following example:
37104
37105     /* Use prototypes unless the compiler is old-fashioned.  */
37106     #ifdef __STDC__
37107     #define P(x) x
37108     #else
37109     #define P(x) ()
37110     #endif
37111
37112     /* Prototype function declaration.  */
37113     int isroot P((uid_t));
37114
37115     /* Old-style function definition.  */
37116     int
37117     isroot (x)   /* ??? lossage here ??? */
37118          uid_t x;
37119     {
37120       return x == 0;
37121     }
37122
37123 Suppose the type 'uid_t' happens to be 'short'.  ISO C does not allow
37124this example, because subword arguments in old-style non-prototype
37125definitions are promoted.  Therefore in this example the function
37126definition's argument is really an 'int', which does not match the
37127prototype argument type of 'short'.
37128
37129 This restriction of ISO C makes it hard to write code that is portable
37130to traditional C compilers, because the programmer does not know whether
37131the 'uid_t' type is 'short', 'int', or 'long'.  Therefore, in cases like
37132these GNU C allows a prototype to override a later old-style definition.
37133More precisely, in GNU C, a function prototype argument type overrides
37134the argument type specified by a later old-style definition if the
37135former type is the same as the latter type before promotion.  Thus in
37136GNU C the above example is equivalent to the following:
37137
37138     int isroot (uid_t);
37139
37140     int
37141     isroot (uid_t x)
37142     {
37143       return x == 0;
37144     }
37145
37146GNU C++ does not support old-style function definitions, so this
37147extension is irrelevant.
37148
37149
37150File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
37151
371526.41 C++ Style Comments
37153=======================
37154
37155In GNU C, you may use C++ style comments, which start with '//' and
37156continue until the end of the line.  Many other C implementations allow
37157such comments, and they are included in the 1999 C standard.  However,
37158C++ style comments are not recognized if you specify an '-std' option
37159specifying a version of ISO C before C99, or '-ansi' (equivalent to
37160'-std=c90').
37161
37162
37163File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
37164
371656.42 Dollar Signs in Identifier Names
37166=====================================
37167
37168In GNU C, you may normally use dollar signs in identifier names.  This
37169is because many traditional C implementations allow such identifiers.
37170However, dollar signs in identifiers are not supported on a few target
37171machines, typically because the target assembler does not allow them.
37172
37173
37174File: gcc.info,  Node: Character Escapes,  Next: Alignment,  Prev: Dollar Signs,  Up: C Extensions
37175
371766.43 The Character <ESC> in Constants
37177=====================================
37178
37179You can use the sequence '\e' in a string or character constant to stand
37180for the ASCII character <ESC>.
37181
37182
37183File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Character Escapes,  Up: C Extensions
37184
371856.44 Determining the Alignment of Functions, Types or Variables
37186===============================================================
37187
37188The keyword '__alignof__' determines the alignment requirement of a
37189function, object, or a type, or the minimum alignment usually required
37190by a type.  Its syntax is just like 'sizeof' and C11 '_Alignof'.
37191
37192 For example, if the target machine requires a 'double' value to be
37193aligned on an 8-byte boundary, then '__alignof__ (double)' is 8.  This
37194is true on many RISC machines.  On more traditional machine designs,
37195'__alignof__ (double)' is 4 or even 2.
37196
37197 Some machines never actually require alignment; they allow references
37198to any data type even at an odd address.  For these machines,
37199'__alignof__' reports the smallest alignment that GCC gives the data
37200type, usually as mandated by the target ABI.
37201
37202 If the operand of '__alignof__' is an lvalue rather than a type, its
37203value is the required alignment for its type, taking into account any
37204minimum alignment specified by attribute 'aligned' (*note Common
37205Variable Attributes::).  For example, after this declaration:
37206
37207     struct foo { int x; char y; } foo1;
37208
37209the value of '__alignof__ (foo1.y)' is 1, even though its actual
37210alignment is probably 2 or 4, the same as '__alignof__ (int)'.  It is an
37211error to ask for the alignment of an incomplete type other than 'void'.
37212
37213 If the operand of the '__alignof__' expression is a function, the
37214expression evaluates to the alignment of the function which may be
37215specified by attribute 'aligned' (*note Common Function Attributes::).
37216
37217
37218File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
37219
372206.45 An Inline Function is As Fast As a Macro
37221=============================================
37222
37223By declaring a function inline, you can direct GCC to make calls to that
37224function faster.  One way GCC can achieve this is to integrate that
37225function's code into the code for its callers.  This makes execution
37226faster by eliminating the function-call overhead; in addition, if any of
37227the actual argument values are constant, their known values may permit
37228simplifications at compile time so that not all of the inline function's
37229code needs to be included.  The effect on code size is less predictable;
37230object code may be larger or smaller with function inlining, depending
37231on the particular case.  You can also direct GCC to try to integrate all
37232"simple enough" functions into their callers with the option
37233'-finline-functions'.
37234
37235 GCC implements three different semantics of declaring a function
37236inline.  One is available with '-std=gnu89' or '-fgnu89-inline' or when
37237'gnu_inline' attribute is present on all inline declarations, another
37238when '-std=c99', '-std=gnu99' or an option for a later C version is used
37239(without '-fgnu89-inline'), and the third is used when compiling C++.
37240
37241 To declare a function inline, use the 'inline' keyword in its
37242declaration, like this:
37243
37244     static inline int
37245     inc (int *a)
37246     {
37247       return (*a)++;
37248     }
37249
37250 If you are writing a header file to be included in ISO C90 programs,
37251write '__inline__' instead of 'inline'.  *Note Alternate Keywords::.
37252
37253 The three types of inlining behave similarly in two important cases:
37254when the 'inline' keyword is used on a 'static' function, like the
37255example above, and when a function is first declared without using the
37256'inline' keyword and then is defined with 'inline', like this:
37257
37258     extern int inc (int *a);
37259     inline int
37260     inc (int *a)
37261     {
37262       return (*a)++;
37263     }
37264
37265 In both of these common cases, the program behaves the same as if you
37266had not used the 'inline' keyword, except for its speed.
37267
37268 When a function is both inline and 'static', if all calls to the
37269function are integrated into the caller, and the function's address is
37270never used, then the function's own assembler code is never referenced.
37271In this case, GCC does not actually output assembler code for the
37272function, unless you specify the option '-fkeep-inline-functions'.  If
37273there is a nonintegrated call, then the function is compiled to
37274assembler code as usual.  The function must also be compiled as usual if
37275the program refers to its address, because that cannot be inlined.
37276
37277 Note that certain usages in a function definition can make it
37278unsuitable for inline substitution.  Among these usages are: variadic
37279functions, use of 'alloca', use of computed goto (*note Labels as
37280Values::), use of nonlocal goto, use of nested functions, use of
37281'setjmp', use of '__builtin_longjmp' and use of '__builtin_return' or
37282'__builtin_apply_args'.  Using '-Winline' warns when a function marked
37283'inline' could not be substituted, and gives the reason for the failure.
37284
37285 As required by ISO C++, GCC considers member functions defined within
37286the body of a class to be marked inline even if they are not explicitly
37287declared with the 'inline' keyword.  You can override this with
37288'-fno-default-inline'; *note Options Controlling C++ Dialect: C++
37289Dialect Options.
37290
37291 GCC does not inline any functions when not optimizing unless you
37292specify the 'always_inline' attribute for the function, like this:
37293
37294     /* Prototype.  */
37295     inline void foo (const char) __attribute__((always_inline));
37296
37297 The remainder of this section is specific to GNU C90 inlining.
37298
37299 When an inline function is not 'static', then the compiler must assume
37300that there may be calls from other source files; since a global symbol
37301can be defined only once in any program, the function must not be
37302defined in the other source files, so the calls therein cannot be
37303integrated.  Therefore, a non-'static' inline function is always
37304compiled on its own in the usual fashion.
37305
37306 If you specify both 'inline' and 'extern' in the function definition,
37307then the definition is used only for inlining.  In no case is the
37308function compiled on its own, not even if you refer to its address
37309explicitly.  Such an address becomes an external reference, as if you
37310had only declared the function, and had not defined it.
37311
37312 This combination of 'inline' and 'extern' has almost the effect of a
37313macro.  The way to use it is to put a function definition in a header
37314file with these keywords, and put another copy of the definition
37315(lacking 'inline' and 'extern') in a library file.  The definition in
37316the header file causes most calls to the function to be inlined.  If any
37317uses of the function remain, they refer to the single copy in the
37318library.
37319
37320
37321File: gcc.info,  Node: Volatiles,  Next: Using Assembly Language with C,  Prev: Inline,  Up: C Extensions
37322
373236.46 When is a Volatile Object Accessed?
37324========================================
37325
37326C has the concept of volatile objects.  These are normally accessed by
37327pointers and used for accessing hardware or inter-thread communication.
37328The standard encourages compilers to refrain from optimizations
37329concerning accesses to volatile objects, but leaves it implementation
37330defined as to what constitutes a volatile access.  The minimum
37331requirement is that at a sequence point all previous accesses to
37332volatile objects have stabilized and no subsequent accesses have
37333occurred.  Thus an implementation is free to reorder and combine
37334volatile accesses that occur between sequence points, but cannot do so
37335for accesses across a sequence point.  The use of volatile does not
37336allow you to violate the restriction on updating objects multiple times
37337between two sequence points.
37338
37339 Accesses to non-volatile objects are not ordered with respect to
37340volatile accesses.  You cannot use a volatile object as a memory barrier
37341to order a sequence of writes to non-volatile memory.  For instance:
37342
37343     int *ptr = SOMETHING;
37344     volatile int vobj;
37345     *ptr = SOMETHING;
37346     vobj = 1;
37347
37348Unless *PTR and VOBJ can be aliased, it is not guaranteed that the write
37349to *PTR occurs by the time the update of VOBJ happens.  If you need this
37350guarantee, you must use a stronger memory barrier such as:
37351
37352     int *ptr = SOMETHING;
37353     volatile int vobj;
37354     *ptr = SOMETHING;
37355     asm volatile ("" : : : "memory");
37356     vobj = 1;
37357
37358 A scalar volatile object is read when it is accessed in a void context:
37359
37360     volatile int *src = SOMEVALUE;
37361     *src;
37362
37363 Such expressions are rvalues, and GCC implements this as a read of the
37364volatile object being pointed to.
37365
37366 Assignments are also expressions and have an rvalue.  However when
37367assigning to a scalar volatile, the volatile object is not reread,
37368regardless of whether the assignment expression's rvalue is used or not.
37369If the assignment's rvalue is used, the value is that assigned to the
37370volatile object.  For instance, there is no read of VOBJ in all the
37371following cases:
37372
37373     int obj;
37374     volatile int vobj;
37375     vobj = SOMETHING;
37376     obj = vobj = SOMETHING;
37377     obj ? vobj = ONETHING : vobj = ANOTHERTHING;
37378     obj = (SOMETHING, vobj = ANOTHERTHING);
37379
37380 If you need to read the volatile object after an assignment has
37381occurred, you must use a separate expression with an intervening
37382sequence point.
37383
37384 As bit-fields are not individually addressable, volatile bit-fields may
37385be implicitly read when written to, or when adjacent bit-fields are
37386accessed.  Bit-field operations may be optimized such that adjacent
37387bit-fields are only partially accessed, if they straddle a storage unit
37388boundary.  For these reasons it is unwise to use volatile bit-fields to
37389access hardware.
37390
37391
37392File: gcc.info,  Node: Using Assembly Language with C,  Next: Alternate Keywords,  Prev: Volatiles,  Up: C Extensions
37393
373946.47 How to Use Inline Assembly Language in C Code
37395==================================================
37396
37397The 'asm' keyword allows you to embed assembler instructions within C
37398code.  GCC provides two forms of inline 'asm' statements.  A "basic
37399'asm'" statement is one with no operands (*note Basic Asm::), while an
37400"extended 'asm'" statement (*note Extended Asm::) includes one or more
37401operands.  The extended form is preferred for mixing C and assembly
37402language within a function, but to include assembly language at top
37403level you must use basic 'asm'.
37404
37405 You can also use the 'asm' keyword to override the assembler name for a
37406C symbol, or to place a C variable in a specific register.
37407
37408* Menu:
37409
37410* Basic Asm::          Inline assembler without operands.
37411* Extended Asm::       Inline assembler with operands.
37412* Constraints::        Constraints for 'asm' operands
37413* Asm Labels::         Specifying the assembler name to use for a C symbol.
37414* Explicit Register Variables::  Defining variables residing in specified
37415                       registers.
37416* Size of an asm::     How GCC calculates the size of an 'asm' block.
37417
37418
37419File: gcc.info,  Node: Basic Asm,  Next: Extended Asm,  Up: Using Assembly Language with C
37420
374216.47.1 Basic Asm -- Assembler Instructions Without Operands
37422-----------------------------------------------------------
37423
37424A basic 'asm' statement has the following syntax:
37425
37426     asm ASM-QUALIFIERS ( ASSEMBLERINSTRUCTIONS )
37427
37428 The 'asm' keyword is a GNU extension.  When writing code that can be
37429compiled with '-ansi' and the various '-std' options, use '__asm__'
37430instead of 'asm' (*note Alternate Keywords::).
37431
37432Qualifiers
37433..........
37434
37435'volatile'
37436     The optional 'volatile' qualifier has no effect.  All basic 'asm'
37437     blocks are implicitly volatile.
37438
37439'inline'
37440     If you use the 'inline' qualifier, then for inlining purposes the
37441     size of the 'asm' statement is taken as the smallest size possible
37442     (*note Size of an asm::).
37443
37444Parameters
37445..........
37446
37447ASSEMBLERINSTRUCTIONS
37448     This is a literal string that specifies the assembler code.  The
37449     string can contain any instructions recognized by the assembler,
37450     including directives.  GCC does not parse the assembler
37451     instructions themselves and does not know what they mean or even
37452     whether they are valid assembler input.
37453
37454     You may place multiple assembler instructions together in a single
37455     'asm' string, separated by the characters normally used in assembly
37456     code for the system.  A combination that works in most places is a
37457     newline to break the line, plus a tab character (written as
37458     '\n\t').  Some assemblers allow semicolons as a line separator.
37459     However, note that some assembler dialects use semicolons to start
37460     a comment.
37461
37462Remarks
37463.......
37464
37465Using extended 'asm' (*note Extended Asm::) typically produces smaller,
37466safer, and more efficient code, and in most cases it is a better
37467solution than basic 'asm'.  However, there are two situations where only
37468basic 'asm' can be used:
37469
37470   * Extended 'asm' statements have to be inside a C function, so to
37471     write inline assembly language at file scope ("top-level"), outside
37472     of C functions, you must use basic 'asm'.  You can use this
37473     technique to emit assembler directives, define assembly language
37474     macros that can be invoked elsewhere in the file, or write entire
37475     functions in assembly language.  Basic 'asm' statements outside of
37476     functions may not use any qualifiers.
37477
37478   * Functions declared with the 'naked' attribute also require basic
37479     'asm' (*note Function Attributes::).
37480
37481 Safely accessing C data and calling functions from basic 'asm' is more
37482complex than it may appear.  To access C data, it is better to use
37483extended 'asm'.
37484
37485 Do not expect a sequence of 'asm' statements to remain perfectly
37486consecutive after compilation.  If certain instructions need to remain
37487consecutive in the output, put them in a single multi-instruction 'asm'
37488statement.  Note that GCC's optimizers can move 'asm' statements
37489relative to other code, including across jumps.
37490
37491 'asm' statements may not perform jumps into other 'asm' statements.
37492GCC does not know about these jumps, and therefore cannot take account
37493of them when deciding how to optimize.  Jumps from 'asm' to C labels are
37494only supported in extended 'asm'.
37495
37496 Under certain circumstances, GCC may duplicate (or remove duplicates
37497of) your assembly code when optimizing.  This can lead to unexpected
37498duplicate symbol errors during compilation if your assembly code defines
37499symbols or labels.
37500
37501 *Warning:* The C standards do not specify semantics for 'asm', making
37502it a potential source of incompatibilities between compilers.  These
37503incompatibilities may not produce compiler warnings/errors.
37504
37505 GCC does not parse basic 'asm''s ASSEMBLERINSTRUCTIONS, which means
37506there is no way to communicate to the compiler what is happening inside
37507them.  GCC has no visibility of symbols in the 'asm' and may discard
37508them as unreferenced.  It also does not know about side effects of the
37509assembler code, such as modifications to memory or registers.  Unlike
37510some compilers, GCC assumes that no changes to general purpose registers
37511occur.  This assumption may change in a future release.
37512
37513 To avoid complications from future changes to the semantics and the
37514compatibility issues between compilers, consider replacing basic 'asm'
37515with extended 'asm'.  See How to convert from basic asm to extended asm
37516(https://gcc.gnu.org/wiki/ConvertBasicAsmToExtended) for information
37517about how to perform this conversion.
37518
37519 The compiler copies the assembler instructions in a basic 'asm'
37520verbatim to the assembly language output file, without processing
37521dialects or any of the '%' operators that are available with extended
37522'asm'.  This results in minor differences between basic 'asm' strings
37523and extended 'asm' templates.  For example, to refer to registers you
37524might use '%eax' in basic 'asm' and '%%eax' in extended 'asm'.
37525
37526 On targets such as x86 that support multiple assembler dialects, all
37527basic 'asm' blocks use the assembler dialect specified by the '-masm'
37528command-line option (*note x86 Options::).  Basic 'asm' provides no
37529mechanism to provide different assembler strings for different dialects.
37530
37531 For basic 'asm' with non-empty assembler string GCC assumes the
37532assembler block does not change any general purpose registers, but it
37533may read or write any globally accessible variable.
37534
37535 Here is an example of basic 'asm' for i386:
37536
37537     /* Note that this code will not compile with -masm=intel */
37538     #define DebugBreak() asm("int $3")
37539
37540
37541File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Basic Asm,  Up: Using Assembly Language with C
37542
375436.47.2 Extended Asm - Assembler Instructions with C Expression Operands
37544-----------------------------------------------------------------------
37545
37546With extended 'asm' you can read and write C variables from assembler
37547and perform jumps from assembler code to C labels.  Extended 'asm'
37548syntax uses colons (':') to delimit the operand parameters after the
37549assembler template:
37550
37551     asm ASM-QUALIFIERS ( ASSEMBLERTEMPLATE
37552                      : OUTPUTOPERANDS
37553                      [ : INPUTOPERANDS
37554                      [ : CLOBBERS ] ])
37555
37556     asm ASM-QUALIFIERS ( ASSEMBLERTEMPLATE
37557                           :
37558                           : INPUTOPERANDS
37559                           : CLOBBERS
37560                           : GOTOLABELS)
37561 where in the last form, ASM-QUALIFIERS contains 'goto' (and in the
37562first form, not).
37563
37564 The 'asm' keyword is a GNU extension.  When writing code that can be
37565compiled with '-ansi' and the various '-std' options, use '__asm__'
37566instead of 'asm' (*note Alternate Keywords::).
37567
37568Qualifiers
37569..........
37570
37571'volatile'
37572     The typical use of extended 'asm' statements is to manipulate input
37573     values to produce output values.  However, your 'asm' statements
37574     may also produce side effects.  If so, you may need to use the
37575     'volatile' qualifier to disable certain optimizations.  *Note
37576     Volatile::.
37577
37578'inline'
37579     If you use the 'inline' qualifier, then for inlining purposes the
37580     size of the 'asm' statement is taken as the smallest size possible
37581     (*note Size of an asm::).
37582
37583'goto'
37584     This qualifier informs the compiler that the 'asm' statement may
37585     perform a jump to one of the labels listed in the GOTOLABELS.
37586     *Note GotoLabels::.
37587
37588Parameters
37589..........
37590
37591ASSEMBLERTEMPLATE
37592     This is a literal string that is the template for the assembler
37593     code.  It is a combination of fixed text and tokens that refer to
37594     the input, output, and goto parameters.  *Note AssemblerTemplate::.
37595
37596OUTPUTOPERANDS
37597     A comma-separated list of the C variables modified by the
37598     instructions in the ASSEMBLERTEMPLATE.  An empty list is permitted.
37599     *Note OutputOperands::.
37600
37601INPUTOPERANDS
37602     A comma-separated list of C expressions read by the instructions in
37603     the ASSEMBLERTEMPLATE.  An empty list is permitted.  *Note
37604     InputOperands::.
37605
37606CLOBBERS
37607     A comma-separated list of registers or other values changed by the
37608     ASSEMBLERTEMPLATE, beyond those listed as outputs.  An empty list
37609     is permitted.  *Note Clobbers and Scratch Registers::.
37610
37611GOTOLABELS
37612     When you are using the 'goto' form of 'asm', this section contains
37613     the list of all C labels to which the code in the ASSEMBLERTEMPLATE
37614     may jump.  *Note GotoLabels::.
37615
37616     'asm' statements may not perform jumps into other 'asm' statements,
37617     only to the listed GOTOLABELS.  GCC's optimizers do not know about
37618     other jumps; therefore they cannot take account of them when
37619     deciding how to optimize.
37620
37621 The total number of input + output + goto operands is limited to 30.
37622
37623Remarks
37624.......
37625
37626The 'asm' statement allows you to include assembly instructions directly
37627within C code.  This may help you to maximize performance in
37628time-sensitive code or to access assembly instructions that are not
37629readily available to C programs.
37630
37631 Note that extended 'asm' statements must be inside a function.  Only
37632basic 'asm' may be outside functions (*note Basic Asm::).  Functions
37633declared with the 'naked' attribute also require basic 'asm' (*note
37634Function Attributes::).
37635
37636 While the uses of 'asm' are many and varied, it may help to think of an
37637'asm' statement as a series of low-level instructions that convert input
37638parameters to output parameters.  So a simple (if not particularly
37639useful) example for i386 using 'asm' might look like this:
37640
37641     int src = 1;
37642     int dst;
37643
37644     asm ("mov %1, %0\n\t"
37645         "add $1, %0"
37646         : "=r" (dst)
37647         : "r" (src));
37648
37649     printf("%d\n", dst);
37650
37651 This code copies 'src' to 'dst' and add 1 to 'dst'.
37652
376536.47.2.1 Volatile
37654.................
37655
37656GCC's optimizers sometimes discard 'asm' statements if they determine
37657there is no need for the output variables.  Also, the optimizers may
37658move code out of loops if they believe that the code will always return
37659the same result (i.e. none of its input values change between calls).
37660Using the 'volatile' qualifier disables these optimizations.  'asm'
37661statements that have no output operands, including 'asm goto'
37662statements, are implicitly volatile.
37663
37664 This i386 code demonstrates a case that does not use (or require) the
37665'volatile' qualifier.  If it is performing assertion checking, this code
37666uses 'asm' to perform the validation.  Otherwise, 'dwRes' is
37667unreferenced by any code.  As a result, the optimizers can discard the
37668'asm' statement, which in turn removes the need for the entire 'DoCheck'
37669routine.  By omitting the 'volatile' qualifier when it isn't needed you
37670allow the optimizers to produce the most efficient code possible.
37671
37672     void DoCheck(uint32_t dwSomeValue)
37673     {
37674        uint32_t dwRes;
37675
37676        // Assumes dwSomeValue is not zero.
37677        asm ("bsfl %1,%0"
37678          : "=r" (dwRes)
37679          : "r" (dwSomeValue)
37680          : "cc");
37681
37682        assert(dwRes > 3);
37683     }
37684
37685 The next example shows a case where the optimizers can recognize that
37686the input ('dwSomeValue') never changes during the execution of the
37687function and can therefore move the 'asm' outside the loop to produce
37688more efficient code.  Again, using the 'volatile' qualifier disables
37689this type of optimization.
37690
37691     void do_print(uint32_t dwSomeValue)
37692     {
37693        uint32_t dwRes;
37694
37695        for (uint32_t x=0; x < 5; x++)
37696        {
37697           // Assumes dwSomeValue is not zero.
37698           asm ("bsfl %1,%0"
37699             : "=r" (dwRes)
37700             : "r" (dwSomeValue)
37701             : "cc");
37702
37703           printf("%u: %u %u\n", x, dwSomeValue, dwRes);
37704        }
37705     }
37706
37707 The following example demonstrates a case where you need to use the
37708'volatile' qualifier.  It uses the x86 'rdtsc' instruction, which reads
37709the computer's time-stamp counter.  Without the 'volatile' qualifier,
37710the optimizers might assume that the 'asm' block will always return the
37711same value and therefore optimize away the second call.
37712
37713     uint64_t msr;
37714
37715     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
37716             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
37717             "or %%rdx, %0"        // 'Or' in the lower bits.
37718             : "=a" (msr)
37719             :
37720             : "rdx");
37721
37722     printf("msr: %llx\n", msr);
37723
37724     // Do other work...
37725
37726     // Reprint the timestamp
37727     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
37728             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
37729             "or %%rdx, %0"        // 'Or' in the lower bits.
37730             : "=a" (msr)
37731             :
37732             : "rdx");
37733
37734     printf("msr: %llx\n", msr);
37735
37736 GCC's optimizers do not treat this code like the non-volatile code in
37737the earlier examples.  They do not move it out of loops or omit it on
37738the assumption that the result from a previous call is still valid.
37739
37740 Note that the compiler can move even 'volatile asm' instructions
37741relative to other code, including across jump instructions.  For
37742example, on many targets there is a system register that controls the
37743rounding mode of floating-point operations.  Setting it with a 'volatile
37744asm' statement, as in the following PowerPC example, does not work
37745reliably.
37746
37747     asm volatile("mtfsf 255, %0" : : "f" (fpenv));
37748     sum = x + y;
37749
37750 The compiler may move the addition back before the 'volatile asm'
37751statement.  To make it work as expected, add an artificial dependency to
37752the 'asm' by referencing a variable in the subsequent code, for example:
37753
37754     asm volatile ("mtfsf 255,%1" : "=X" (sum) : "f" (fpenv));
37755     sum = x + y;
37756
37757 Under certain circumstances, GCC may duplicate (or remove duplicates
37758of) your assembly code when optimizing.  This can lead to unexpected
37759duplicate symbol errors during compilation if your 'asm' code defines
37760symbols or labels.  Using '%=' (*note AssemblerTemplate::) may help
37761resolve this problem.
37762
377636.47.2.2 Assembler Template
37764...........................
37765
37766An assembler template is a literal string containing assembler
37767instructions.  The compiler replaces tokens in the template that refer
37768to inputs, outputs, and goto labels, and then outputs the resulting
37769string to the assembler.  The string can contain any instructions
37770recognized by the assembler, including directives.  GCC does not parse
37771the assembler instructions themselves and does not know what they mean
37772or even whether they are valid assembler input.  However, it does count
37773the statements (*note Size of an asm::).
37774
37775 You may place multiple assembler instructions together in a single
37776'asm' string, separated by the characters normally used in assembly code
37777for the system.  A combination that works in most places is a newline to
37778break the line, plus a tab character to move to the instruction field
37779(written as '\n\t').  Some assemblers allow semicolons as a line
37780separator.  However, note that some assembler dialects use semicolons to
37781start a comment.
37782
37783 Do not expect a sequence of 'asm' statements to remain perfectly
37784consecutive after compilation, even when you are using the 'volatile'
37785qualifier.  If certain instructions need to remain consecutive in the
37786output, put them in a single multi-instruction 'asm' statement.
37787
37788 Accessing data from C programs without using input/output operands
37789(such as by using global symbols directly from the assembler template)
37790may not work as expected.  Similarly, calling functions directly from an
37791assembler template requires a detailed understanding of the target
37792assembler and ABI.
37793
37794 Since GCC does not parse the assembler template, it has no visibility
37795of any symbols it references.  This may result in GCC discarding those
37796symbols as unreferenced unless they are also listed as input, output, or
37797goto operands.
37798
37799Special format strings
37800......................
37801
37802In addition to the tokens described by the input, output, and goto
37803operands, these tokens have special meanings in the assembler template:
37804
37805'%%'
37806     Outputs a single '%' into the assembler code.
37807
37808'%='
37809     Outputs a number that is unique to each instance of the 'asm'
37810     statement in the entire compilation.  This option is useful when
37811     creating local labels and referring to them multiple times in a
37812     single template that generates multiple assembler instructions.
37813
37814'%{'
37815'%|'
37816'%}'
37817     Outputs '{', '|', and '}' characters (respectively) into the
37818     assembler code.  When unescaped, these characters have special
37819     meaning to indicate multiple assembler dialects, as described
37820     below.
37821
37822Multiple assembler dialects in 'asm' templates
37823..............................................
37824
37825On targets such as x86, GCC supports multiple assembler dialects.  The
37826'-masm' option controls which dialect GCC uses as its default for inline
37827assembler.  The target-specific documentation for the '-masm' option
37828contains the list of supported dialects, as well as the default dialect
37829if the option is not specified.  This information may be important to
37830understand, since assembler code that works correctly when compiled
37831using one dialect will likely fail if compiled using another.  *Note x86
37832Options::.
37833
37834 If your code needs to support multiple assembler dialects (for example,
37835if you are writing public headers that need to support a variety of
37836compilation options), use constructs of this form:
37837
37838     { dialect0 | dialect1 | dialect2... }
37839
37840 This construct outputs 'dialect0' when using dialect #0 to compile the
37841code, 'dialect1' for dialect #1, etc.  If there are fewer alternatives
37842within the braces than the number of dialects the compiler supports, the
37843construct outputs nothing.
37844
37845 For example, if an x86 compiler supports two dialects ('att', 'intel'),
37846an assembler template such as this:
37847
37848     "bt{l %[Offset],%[Base] | %[Base],%[Offset]}; jc %l2"
37849
37850is equivalent to one of
37851
37852     "btl %[Offset],%[Base] ; jc %l2"   /* att dialect */
37853     "bt %[Base],%[Offset]; jc %l2"     /* intel dialect */
37854
37855 Using that same compiler, this code:
37856
37857     "xchg{l}\t{%%}ebx, %1"
37858
37859corresponds to either
37860
37861     "xchgl\t%%ebx, %1"                 /* att dialect */
37862     "xchg\tebx, %1"                    /* intel dialect */
37863
37864 There is no support for nesting dialect alternatives.
37865
378666.47.2.3 Output Operands
37867........................
37868
37869An 'asm' statement has zero or more output operands indicating the names
37870of C variables modified by the assembler code.
37871
37872 In this i386 example, 'old' (referred to in the template string as
37873'%0') and '*Base' (as '%1') are outputs and 'Offset' ('%2') is an input:
37874
37875     bool old;
37876
37877     __asm__ ("btsl %2,%1\n\t" // Turn on zero-based bit #Offset in Base.
37878              "sbb %0,%0"      // Use the CF to calculate old.
37879        : "=r" (old), "+rm" (*Base)
37880        : "Ir" (Offset)
37881        : "cc");
37882
37883     return old;
37884
37885 Operands are separated by commas.  Each operand has this format:
37886
37887     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CVARIABLENAME)
37888
37889ASMSYMBOLICNAME
37890     Specifies a symbolic name for the operand.  Reference the name in
37891     the assembler template by enclosing it in square brackets (i.e.
37892     '%[Value]').  The scope of the name is the 'asm' statement that
37893     contains the definition.  Any valid C variable name is acceptable,
37894     including names already defined in the surrounding code.  No two
37895     operands within the same 'asm' statement can use the same symbolic
37896     name.
37897
37898     When not using an ASMSYMBOLICNAME, use the (zero-based) position of
37899     the operand in the list of operands in the assembler template.  For
37900     example if there are three output operands, use '%0' in the
37901     template to refer to the first, '%1' for the second, and '%2' for
37902     the third.
37903
37904CONSTRAINT
37905     A string constant specifying constraints on the placement of the
37906     operand; *Note Constraints::, for details.
37907
37908     Output constraints must begin with either '=' (a variable
37909     overwriting an existing value) or '+' (when reading and writing).
37910     When using '=', do not assume the location contains the existing
37911     value on entry to the 'asm', except when the operand is tied to an
37912     input; *note Input Operands: InputOperands.
37913
37914     After the prefix, there must be one or more additional constraints
37915     (*note Constraints::) that describe where the value resides.
37916     Common constraints include 'r' for register and 'm' for memory.
37917     When you list more than one possible location (for example,
37918     '"=rm"'), the compiler chooses the most efficient one based on the
37919     current context.  If you list as many alternates as the 'asm'
37920     statement allows, you permit the optimizers to produce the best
37921     possible code.  If you must use a specific register, but your
37922     Machine Constraints do not provide sufficient control to select the
37923     specific register you want, local register variables may provide a
37924     solution (*note Local Register Variables::).
37925
37926CVARIABLENAME
37927     Specifies a C lvalue expression to hold the output, typically a
37928     variable name.  The enclosing parentheses are a required part of
37929     the syntax.
37930
37931 When the compiler selects the registers to use to represent the output
37932operands, it does not use any of the clobbered registers (*note Clobbers
37933and Scratch Registers::).
37934
37935 Output operand expressions must be lvalues.  The compiler cannot check
37936whether the operands have data types that are reasonable for the
37937instruction being executed.  For output expressions that are not
37938directly addressable (for example a bit-field), the constraint must
37939allow a register.  In that case, GCC uses the register as the output of
37940the 'asm', and then stores that register into the output.
37941
37942 Operands using the '+' constraint modifier count as two operands (that
37943is, both as input and output) towards the total maximum of 30 operands
37944per 'asm' statement.
37945
37946 Use the '&' constraint modifier (*note Modifiers::) on all output
37947operands that must not overlap an input.  Otherwise, GCC may allocate
37948the output operand in the same register as an unrelated input operand,
37949on the assumption that the assembler code consumes its inputs before
37950producing outputs.  This assumption may be false if the assembler code
37951actually consists of more than one instruction.
37952
37953 The same problem can occur if one output parameter (A) allows a
37954register constraint and another output parameter (B) allows a memory
37955constraint.  The code generated by GCC to access the memory address in B
37956can contain registers which _might_ be shared by A, and GCC considers
37957those registers to be inputs to the asm.  As above, GCC assumes that
37958such input registers are consumed before any outputs are written.  This
37959assumption may result in incorrect behavior if the 'asm' statement
37960writes to A before using B.  Combining the '&' modifier with the
37961register constraint on A ensures that modifying A does not affect the
37962address referenced by B.  Otherwise, the location of B is undefined if A
37963is modified before using B.
37964
37965 'asm' supports operand modifiers on operands (for example '%k2' instead
37966of simply '%2').  Typically these qualifiers are hardware dependent.
37967The list of supported modifiers for x86 is found at *note x86 Operand
37968modifiers: x86Operandmodifiers.
37969
37970 If the C code that follows the 'asm' makes no use of any of the output
37971operands, use 'volatile' for the 'asm' statement to prevent the
37972optimizers from discarding the 'asm' statement as unneeded (see *note
37973Volatile::).
37974
37975 This code makes no use of the optional ASMSYMBOLICNAME.  Therefore it
37976references the first output operand as '%0' (were there a second, it
37977would be '%1', etc).  The number of the first input operand is one
37978greater than that of the last output operand.  In this i386 example,
37979that makes 'Mask' referenced as '%1':
37980
37981     uint32_t Mask = 1234;
37982     uint32_t Index;
37983
37984       asm ("bsfl %1, %0"
37985          : "=r" (Index)
37986          : "r" (Mask)
37987          : "cc");
37988
37989 That code overwrites the variable 'Index' ('='), placing the value in a
37990register ('r').  Using the generic 'r' constraint instead of a
37991constraint for a specific register allows the compiler to pick the
37992register to use, which can result in more efficient code.  This may not
37993be possible if an assembler instruction requires a specific register.
37994
37995 The following i386 example uses the ASMSYMBOLICNAME syntax.  It
37996produces the same result as the code above, but some may consider it
37997more readable or more maintainable since reordering index numbers is not
37998necessary when adding or removing operands.  The names 'aIndex' and
37999'aMask' are only used in this example to emphasize which names get used
38000where.  It is acceptable to reuse the names 'Index' and 'Mask'.
38001
38002     uint32_t Mask = 1234;
38003     uint32_t Index;
38004
38005       asm ("bsfl %[aMask], %[aIndex]"
38006          : [aIndex] "=r" (Index)
38007          : [aMask] "r" (Mask)
38008          : "cc");
38009
38010 Here are some more examples of output operands.
38011
38012     uint32_t c = 1;
38013     uint32_t d;
38014     uint32_t *e = &c;
38015
38016     asm ("mov %[e], %[d]"
38017        : [d] "=rm" (d)
38018        : [e] "rm" (*e));
38019
38020 Here, 'd' may either be in a register or in memory.  Since the compiler
38021might already have the current value of the 'uint32_t' location pointed
38022to by 'e' in a register, you can enable it to choose the best location
38023for 'd' by specifying both constraints.
38024
380256.47.2.4 Flag Output Operands
38026.............................
38027
38028Some targets have a special register that holds the "flags" for the
38029result of an operation or comparison.  Normally, the contents of that
38030register are either unmodifed by the asm, or the 'asm' statement is
38031considered to clobber the contents.
38032
38033 On some targets, a special form of output operand exists by which
38034conditions in the flags register may be outputs of the asm.  The set of
38035conditions supported are target specific, but the general rule is that
38036the output variable must be a scalar integer, and the value is boolean.
38037When supported, the target defines the preprocessor symbol
38038'__GCC_ASM_FLAG_OUTPUTS__'.
38039
38040 Because of the special nature of the flag output operands, the
38041constraint may not include alternatives.
38042
38043 Most often, the target has only one flags register, and thus is an
38044implied operand of many instructions.  In this case, the operand should
38045not be referenced within the assembler template via '%0' etc, as there's
38046no corresponding text in the assembly language.
38047
38048ARM
38049AArch64
38050     The flag output constraints for the ARM family are of the form
38051     '=@ccCOND' where COND is one of the standard conditions defined in
38052     the ARM ARM for 'ConditionHolds'.
38053
38054     'eq'
38055          Z flag set, or equal
38056     'ne'
38057          Z flag clear or not equal
38058     'cs'
38059     'hs'
38060          C flag set or unsigned greater than equal
38061     'cc'
38062     'lo'
38063          C flag clear or unsigned less than
38064     'mi'
38065          N flag set or "minus"
38066     'pl'
38067          N flag clear or "plus"
38068     'vs'
38069          V flag set or signed overflow
38070     'vc'
38071          V flag clear
38072     'hi'
38073          unsigned greater than
38074     'ls'
38075          unsigned less than equal
38076     'ge'
38077          signed greater than equal
38078     'lt'
38079          signed less than
38080     'gt'
38081          signed greater than
38082     'le'
38083          signed less than equal
38084
38085     The flag output constraints are not supported in thumb1 mode.
38086
38087x86 family
38088     The flag output constraints for the x86 family are of the form
38089     '=@ccCOND' where COND is one of the standard conditions defined in
38090     the ISA manual for 'jCC' or 'setCC'.
38091
38092     'a'
38093          "above" or unsigned greater than
38094     'ae'
38095          "above or equal" or unsigned greater than or equal
38096     'b'
38097          "below" or unsigned less than
38098     'be'
38099          "below or equal" or unsigned less than or equal
38100     'c'
38101          carry flag set
38102     'e'
38103     'z'
38104          "equal" or zero flag set
38105     'g'
38106          signed greater than
38107     'ge'
38108          signed greater than or equal
38109     'l'
38110          signed less than
38111     'le'
38112          signed less than or equal
38113     'o'
38114          overflow flag set
38115     'p'
38116          parity flag set
38117     's'
38118          sign flag set
38119     'na'
38120     'nae'
38121     'nb'
38122     'nbe'
38123     'nc'
38124     'ne'
38125     'ng'
38126     'nge'
38127     'nl'
38128     'nle'
38129     'no'
38130     'np'
38131     'ns'
38132     'nz'
38133          "not" FLAG, or inverted versions of those above
38134
381356.47.2.5 Input Operands
38136.......................
38137
38138Input operands make values from C variables and expressions available to
38139the assembly code.
38140
38141 Operands are separated by commas.  Each operand has this format:
38142
38143     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CEXPRESSION)
38144
38145ASMSYMBOLICNAME
38146     Specifies a symbolic name for the operand.  Reference the name in
38147     the assembler template by enclosing it in square brackets (i.e.
38148     '%[Value]').  The scope of the name is the 'asm' statement that
38149     contains the definition.  Any valid C variable name is acceptable,
38150     including names already defined in the surrounding code.  No two
38151     operands within the same 'asm' statement can use the same symbolic
38152     name.
38153
38154     When not using an ASMSYMBOLICNAME, use the (zero-based) position of
38155     the operand in the list of operands in the assembler template.  For
38156     example if there are two output operands and three inputs, use '%2'
38157     in the template to refer to the first input operand, '%3' for the
38158     second, and '%4' for the third.
38159
38160CONSTRAINT
38161     A string constant specifying constraints on the placement of the
38162     operand; *Note Constraints::, for details.
38163
38164     Input constraint strings may not begin with either '=' or '+'.
38165     When you list more than one possible location (for example,
38166     '"irm"'), the compiler chooses the most efficient one based on the
38167     current context.  If you must use a specific register, but your
38168     Machine Constraints do not provide sufficient control to select the
38169     specific register you want, local register variables may provide a
38170     solution (*note Local Register Variables::).
38171
38172     Input constraints can also be digits (for example, '"0"').  This
38173     indicates that the specified input must be in the same place as the
38174     output constraint at the (zero-based) index in the output
38175     constraint list.  When using ASMSYMBOLICNAME syntax for the output
38176     operands, you may use these names (enclosed in brackets '[]')
38177     instead of digits.
38178
38179CEXPRESSION
38180     This is the C variable or expression being passed to the 'asm'
38181     statement as input.  The enclosing parentheses are a required part
38182     of the syntax.
38183
38184 When the compiler selects the registers to use to represent the input
38185operands, it does not use any of the clobbered registers (*note Clobbers
38186and Scratch Registers::).
38187
38188 If there are no output operands but there are input operands, place two
38189consecutive colons where the output operands would go:
38190
38191     __asm__ ("some instructions"
38192        : /* No outputs. */
38193        : "r" (Offset / 8));
38194
38195 *Warning:* Do _not_ modify the contents of input-only operands (except
38196for inputs tied to outputs).  The compiler assumes that on exit from the
38197'asm' statement these operands contain the same values as they had
38198before executing the statement.  It is _not_ possible to use clobbers to
38199inform the compiler that the values in these inputs are changing.  One
38200common work-around is to tie the changing input variable to an output
38201variable that never gets used.  Note, however, that if the code that
38202follows the 'asm' statement makes no use of any of the output operands,
38203the GCC optimizers may discard the 'asm' statement as unneeded (see
38204*note Volatile::).
38205
38206 'asm' supports operand modifiers on operands (for example '%k2' instead
38207of simply '%2').  Typically these qualifiers are hardware dependent.
38208The list of supported modifiers for x86 is found at *note x86 Operand
38209modifiers: x86Operandmodifiers.
38210
38211 In this example using the fictitious 'combine' instruction, the
38212constraint '"0"' for input operand 1 says that it must occupy the same
38213location as output operand 0.  Only input operands may use numbers in
38214constraints, and they must each refer to an output operand.  Only a
38215number (or the symbolic assembler name) in the constraint can guarantee
38216that one operand is in the same place as another.  The mere fact that
38217'foo' is the value of both operands is not enough to guarantee that they
38218are in the same place in the generated assembler code.
38219
38220     asm ("combine %2, %0"
38221        : "=r" (foo)
38222        : "0" (foo), "g" (bar));
38223
38224 Here is an example using symbolic names.
38225
38226     asm ("cmoveq %1, %2, %[result]"
38227        : [result] "=r"(result)
38228        : "r" (test), "r" (new), "[result]" (old));
38229
382306.47.2.6 Clobbers and Scratch Registers
38231.......................................
38232
38233While the compiler is aware of changes to entries listed in the output
38234operands, the inline 'asm' code may modify more than just the outputs.
38235For example, calculations may require additional registers, or the
38236processor may overwrite a register as a side effect of a particular
38237assembler instruction.  In order to inform the compiler of these
38238changes, list them in the clobber list.  Clobber list items are either
38239register names or the special clobbers (listed below).  Each clobber
38240list item is a string constant enclosed in double quotes and separated
38241by commas.
38242
38243 Clobber descriptions may not in any way overlap with an input or output
38244operand.  For example, you may not have an operand describing a register
38245class with one member when listing that register in the clobber list.
38246Variables declared to live in specific registers (*note Explicit
38247Register Variables::) and used as 'asm' input or output operands must
38248have no part mentioned in the clobber description.  In particular, there
38249is no way to specify that input operands get modified without also
38250specifying them as output operands.
38251
38252 When the compiler selects which registers to use to represent input and
38253output operands, it does not use any of the clobbered registers.  As a
38254result, clobbered registers are available for any use in the assembler
38255code.
38256
38257 Another restriction is that the clobber list should not contain the
38258stack pointer register.  This is because the compiler requires the value
38259of the stack pointer to be the same after an 'asm' statement as it was
38260on entry to the statement.  However, previous versions of GCC did not
38261enforce this rule and allowed the stack pointer to appear in the list,
38262with unclear semantics.  This behavior is deprecated and listing the
38263stack pointer may become an error in future versions of GCC.
38264
38265 Here is a realistic example for the VAX showing the use of clobbered
38266registers:
38267
38268     asm volatile ("movc3 %0, %1, %2"
38269                        : /* No outputs. */
38270                        : "g" (from), "g" (to), "g" (count)
38271                        : "r0", "r1", "r2", "r3", "r4", "r5", "memory");
38272
38273 Also, there are two special clobber arguments:
38274
38275'"cc"'
38276     The '"cc"' clobber indicates that the assembler code modifies the
38277     flags register.  On some machines, GCC represents the condition
38278     codes as a specific hardware register; '"cc"' serves to name this
38279     register.  On other machines, condition code handling is different,
38280     and specifying '"cc"' has no effect.  But it is valid no matter
38281     what the target.
38282
38283'"memory"'
38284     The '"memory"' clobber tells the compiler that the assembly code
38285     performs memory reads or writes to items other than those listed in
38286     the input and output operands (for example, accessing the memory
38287     pointed to by one of the input parameters).  To ensure memory
38288     contains correct values, GCC may need to flush specific register
38289     values to memory before executing the 'asm'.  Further, the compiler
38290     does not assume that any values read from memory before an 'asm'
38291     remain unchanged after that 'asm'; it reloads them as needed.
38292     Using the '"memory"' clobber effectively forms a read/write memory
38293     barrier for the compiler.
38294
38295     Note that this clobber does not prevent the _processor_ from doing
38296     speculative reads past the 'asm' statement.  To prevent that, you
38297     need processor-specific fence instructions.
38298
38299 Flushing registers to memory has performance implications and may be an
38300issue for time-sensitive code.  You can provide better information to
38301GCC to avoid this, as shown in the following examples.  At a minimum,
38302aliasing rules allow GCC to know what memory _doesn't_ need to be
38303flushed.
38304
38305 Here is a fictitious sum of squares instruction, that takes two
38306pointers to floating point values in memory and produces a floating
38307point register output.  Notice that 'x', and 'y' both appear twice in
38308the 'asm' parameters, once to specify memory accessed, and once to
38309specify a base register used by the 'asm'.  You won't normally be
38310wasting a register by doing this as GCC can use the same register for
38311both purposes.  However, it would be foolish to use both '%1' and '%3'
38312for 'x' in this 'asm' and expect them to be the same.  In fact, '%3' may
38313well not be a register.  It might be a symbolic memory reference to the
38314object pointed to by 'x'.
38315
38316     asm ("sumsq %0, %1, %2"
38317          : "+f" (result)
38318          : "r" (x), "r" (y), "m" (*x), "m" (*y));
38319
38320 Here is a fictitious '*z++ = *x++ * *y++' instruction.  Notice that the
38321'x', 'y' and 'z' pointer registers must be specified as input/output
38322because the 'asm' modifies them.
38323
38324     asm ("vecmul %0, %1, %2"
38325          : "+r" (z), "+r" (x), "+r" (y), "=m" (*z)
38326          : "m" (*x), "m" (*y));
38327
38328 An x86 example where the string memory argument is of unknown length.
38329
38330     asm("repne scasb"
38331         : "=c" (count), "+D" (p)
38332         : "m" (*(const char (*)[]) p), "0" (-1), "a" (0));
38333
38334 If you know the above will only be reading a ten byte array then you
38335could instead use a memory input like: '"m" (*(const char (*)[10]) p)'.
38336
38337 Here is an example of a PowerPC vector scale implemented in assembly,
38338complete with vector and condition code clobbers, and some initialized
38339offset registers that are unchanged by the 'asm'.
38340
38341     void
38342     dscal (size_t n, double *x, double alpha)
38343     {
38344       asm ("/* lots of asm here */"
38345            : "+m" (*(double (*)[n]) x), "+&r" (n), "+b" (x)
38346            : "d" (alpha), "b" (32), "b" (48), "b" (64),
38347              "b" (80), "b" (96), "b" (112)
38348            : "cr0",
38349              "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
38350              "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47");
38351     }
38352
38353 Rather than allocating fixed registers via clobbers to provide scratch
38354registers for an 'asm' statement, an alternative is to define a variable
38355and make it an early-clobber output as with 'a2' and 'a3' in the example
38356below.  This gives the compiler register allocator more freedom.  You
38357can also define a variable and make it an output tied to an input as
38358with 'a0' and 'a1', tied respectively to 'ap' and 'lda'.  Of course,
38359with tied outputs your 'asm' can't use the input value after modifying
38360the output register since they are one and the same register.  What's
38361more, if you omit the early-clobber on the output, it is possible that
38362GCC might allocate the same register to another of the inputs if GCC
38363could prove they had the same value on entry to the 'asm'.  This is why
38364'a1' has an early-clobber.  Its tied input, 'lda' might conceivably be
38365known to have the value 16 and without an early-clobber share the same
38366register as '%11'.  On the other hand, 'ap' can't be the same as any of
38367the other inputs, so an early-clobber on 'a0' is not needed.  It is also
38368not desirable in this case.  An early-clobber on 'a0' would cause GCC to
38369allocate a separate register for the '"m" (*(const double (*)[]) ap)'
38370input.  Note that tying an input to an output is the way to set up an
38371initialized temporary register modified by an 'asm' statement.  An input
38372not tied to an output is assumed by GCC to be unchanged, for example
38373'"b" (16)' below sets up '%11' to 16, and GCC might use that register in
38374following code if the value 16 happened to be needed.  You can even use
38375a normal 'asm' output for a scratch if all inputs that might share the
38376same register are consumed before the scratch is used.  The VSX
38377registers clobbered by the 'asm' statement could have used this
38378technique except for GCC's limit on the number of 'asm' parameters.
38379
38380     static void
38381     dgemv_kernel_4x4 (long n, const double *ap, long lda,
38382                       const double *x, double *y, double alpha)
38383     {
38384       double *a0;
38385       double *a1;
38386       double *a2;
38387       double *a3;
38388
38389       __asm__
38390         (
38391          /* lots of asm here */
38392          "#n=%1 ap=%8=%12 lda=%13 x=%7=%10 y=%0=%2 alpha=%9 o16=%11\n"
38393          "#a0=%3 a1=%4 a2=%5 a3=%6"
38394          :
38395            "+m" (*(double (*)[n]) y),
38396            "+&r" (n),	// 1
38397            "+b" (y),	// 2
38398            "=b" (a0),	// 3
38399            "=&b" (a1),	// 4
38400            "=&b" (a2),	// 5
38401            "=&b" (a3)	// 6
38402          :
38403            "m" (*(const double (*)[n]) x),
38404            "m" (*(const double (*)[]) ap),
38405            "d" (alpha),	// 9
38406            "r" (x),		// 10
38407            "b" (16),	// 11
38408            "3" (ap),	// 12
38409            "4" (lda)	// 13
38410          :
38411            "cr0",
38412            "vs32","vs33","vs34","vs35","vs36","vs37",
38413            "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47"
38414          );
38415     }
38416
384176.47.2.7 Goto Labels
38418....................
38419
38420'asm goto' allows assembly code to jump to one or more C labels.  The
38421GOTOLABELS section in an 'asm goto' statement contains a comma-separated
38422list of all C labels to which the assembler code may jump.  GCC assumes
38423that 'asm' execution falls through to the next statement (if this is not
38424the case, consider using the '__builtin_unreachable' intrinsic after the
38425'asm' statement).  Optimization of 'asm goto' may be improved by using
38426the 'hot' and 'cold' label attributes (*note Label Attributes::).
38427
38428 An 'asm goto' statement cannot have outputs.  This is due to an
38429internal restriction of the compiler: control transfer instructions
38430cannot have outputs.  If the assembler code does modify anything, use
38431the '"memory"' clobber to force the optimizers to flush all register
38432values to memory and reload them if necessary after the 'asm' statement.
38433
38434 Also note that an 'asm goto' statement is always implicitly considered
38435volatile.
38436
38437 To reference a label in the assembler template, prefix it with '%l'
38438(lowercase 'L') followed by its (zero-based) position in GOTOLABELS plus
38439the number of input operands.  For example, if the 'asm' has three
38440inputs and references two labels, refer to the first label as '%l3' and
38441the second as '%l4').
38442
38443 Alternately, you can reference labels using the actual C label name
38444enclosed in brackets.  For example, to reference a label named 'carry',
38445you can use '%l[carry]'.  The label must still be listed in the
38446GOTOLABELS section when using this approach.
38447
38448 Here is an example of 'asm goto' for i386:
38449
38450     asm goto (
38451         "btl %1, %0\n\t"
38452         "jc %l2"
38453         : /* No outputs. */
38454         : "r" (p1), "r" (p2)
38455         : "cc"
38456         : carry);
38457
38458     return 0;
38459
38460     carry:
38461     return 1;
38462
38463 The following example shows an 'asm goto' that uses a memory clobber.
38464
38465     int frob(int x)
38466     {
38467       int y;
38468       asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
38469                 : /* No outputs. */
38470                 : "r"(x), "r"(&y)
38471                 : "r5", "memory"
38472                 : error);
38473       return y;
38474     error:
38475       return -1;
38476     }
38477
384786.47.2.8 x86 Operand Modifiers
38479..............................
38480
38481References to input, output, and goto operands in the assembler template
38482of extended 'asm' statements can use modifiers to affect the way the
38483operands are formatted in the code output to the assembler.  For
38484example, the following code uses the 'h' and 'b' modifiers for x86:
38485
38486     uint16_t  num;
38487     asm volatile ("xchg %h0, %b0" : "+a" (num) );
38488
38489These modifiers generate this assembler code:
38490
38491     xchg %ah, %al
38492
38493 The rest of this discussion uses the following code for illustrative
38494purposes.
38495
38496     int main()
38497     {
38498        int iInt = 1;
38499
38500     top:
38501
38502        asm volatile goto ("some assembler instructions here"
38503        : /* No outputs. */
38504        : "q" (iInt), "X" (sizeof(unsigned char) + 1), "i" (42)
38505        : /* No clobbers. */
38506        : top);
38507     }
38508
38509 With no modifiers, this is what the output from the operands would be
38510for the 'att' and 'intel' dialects of assembler:
38511
38512Operand   'att'  'intel'
38513-----------------------------------
38514'%0'      '%eax' 'eax'
38515'%1'      '$2'   '2'
38516'%3'      '$.L3' 'OFFSET
38517                 FLAT:.L3'
38518
38519 The table below shows the list of supported modifiers and their
38520effects.
38521
38522Modifier   Description                                  Operand   'att'   'intel'
38523------------------------------------------------------------------------------------
38524'A'        Print an absolute memory reference.          '%A0'     '*%rax' 'rax'
38525'b'        Print the QImode name of the register.       '%b0'     '%al'   'al'
38526'c'        Require a constant operand and print the     '%c1'     '2'     '2'
38527           constant expression with no punctuation.
38528'E'        Print the address in Double Integer          '%E1'     '%(rax)''[rax]'
38529           (DImode) mode (8 bytes) when the target is
38530           64-bit.  Otherwise mode is unspecified
38531           (VOIDmode).
38532'h'        Print the QImode name for a "high"           '%h0'     '%ah'   'ah'
38533           register.
38534'H'        Add 8 bytes to an offsettable memory         '%H0'     '8(%rax)''8[rax]'
38535           reference.  Useful when accessing the high
38536           8 bytes of SSE values.  For a memref in
38537           (%rax), it generates
38538'k'        Print the SImode name of the register.       '%k0'     '%eax'  'eax'
38539'l'        Print the label name with no punctuation.    '%l3'     '.L3'   '.L3'
38540'p'        Print raw symbol name (without               '%p2'     '42'    '42'
38541           syntax-specific prefixes).
38542'P'        If used for a function, print the PLT
38543           suffix and generate PIC code.  For
38544           example, emit 'foo@PLT' instead of 'foo'
38545           for the function foo().  If used for a
38546           constant, drop all syntax-specific
38547           prefixes and issue the bare constant.  See
38548           'p' above.
38549'q'        Print the DImode name of the register.       '%q0'     '%rax'  'rax'
38550'w'        Print the HImode name of the register.       '%w0'     '%ax'   'ax'
38551'z'        Print the opcode suffix for the size of      '%z0'     'l'
38552           the current integer operand (one of
38553           'b'/'w'/'l'/'q').
38554
38555 'V' is a special modifier which prints the name of the full integer
38556register without '%'.
38557
385586.47.2.9 x86 Floating-Point 'asm' Operands
38559..........................................
38560
38561On x86 targets, there are several rules on the usage of stack-like
38562registers in the operands of an 'asm'.  These rules apply only to the
38563operands that are stack-like registers:
38564
38565  1. Given a set of input registers that die in an 'asm', it is
38566     necessary to know which are implicitly popped by the 'asm', and
38567     which must be explicitly popped by GCC.
38568
38569     An input register that is implicitly popped by the 'asm' must be
38570     explicitly clobbered, unless it is constrained to match an output
38571     operand.
38572
38573  2. For any input register that is implicitly popped by an 'asm', it is
38574     necessary to know how to adjust the stack to compensate for the
38575     pop.  If any non-popped input is closer to the top of the reg-stack
38576     than the implicitly popped register, it would not be possible to
38577     know what the stack looked like--it's not clear how the rest of the
38578     stack "slides up".
38579
38580     All implicitly popped input registers must be closer to the top of
38581     the reg-stack than any input that is not implicitly popped.
38582
38583     It is possible that if an input dies in an 'asm', the compiler
38584     might use the input register for an output reload.  Consider this
38585     example:
38586
38587          asm ("foo" : "=t" (a) : "f" (b));
38588
38589     This code says that input 'b' is not popped by the 'asm', and that
38590     the 'asm' pushes a result onto the reg-stack, i.e., the stack is
38591     one deeper after the 'asm' than it was before.  But, it is possible
38592     that reload may think that it can use the same register for both
38593     the input and the output.
38594
38595     To prevent this from happening, if any input operand uses the 'f'
38596     constraint, all output register constraints must use the '&'
38597     early-clobber modifier.
38598
38599     The example above is correctly written as:
38600
38601          asm ("foo" : "=&t" (a) : "f" (b));
38602
38603  3. Some operands need to be in particular places on the stack.  All
38604     output operands fall in this category--GCC has no other way to know
38605     which registers the outputs appear in unless you indicate this in
38606     the constraints.
38607
38608     Output operands must specifically indicate which register an output
38609     appears in after an 'asm'.  '=f' is not allowed: the operand
38610     constraints must select a class with a single register.
38611
38612  4. Output operands may not be "inserted" between existing stack
38613     registers.  Since no 387 opcode uses a read/write operand, all
38614     output operands are dead before the 'asm', and are pushed by the
38615     'asm'.  It makes no sense to push anywhere but the top of the
38616     reg-stack.
38617
38618     Output operands must start at the top of the reg-stack: output
38619     operands may not "skip" a register.
38620
38621  5. Some 'asm' statements may need extra stack space for internal
38622     calculations.  This can be guaranteed by clobbering stack registers
38623     unrelated to the inputs and outputs.
38624
38625 This 'asm' takes one input, which is internally popped, and produces
38626two outputs.
38627
38628     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
38629
38630This 'asm' takes two inputs, which are popped by the 'fyl2xp1' opcode,
38631and replaces them with one output.  The 'st(1)' clobber is necessary for
38632the compiler to know that 'fyl2xp1' pops both inputs.
38633
38634     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
38635
38636
38637File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: Using Assembly Language with C
38638
386396.47.3 Constraints for 'asm' Operands
38640-------------------------------------
38641
38642Here are specific details on what constraint letters you can use with
38643'asm' operands.  Constraints can say whether an operand may be in a
38644register, and which kinds of register; whether the operand can be a
38645memory reference, and which kinds of address; whether the operand may be
38646an immediate constant, and which possible values it may have.
38647Constraints can also require two operands to match.  Side-effects aren't
38648allowed in operands of inline 'asm', unless '<' or '>' constraints are
38649used, because there is no guarantee that the side effects will happen
38650exactly once in an instruction that can update the addressing register.
38651
38652* Menu:
38653
38654* Simple Constraints::  Basic use of constraints.
38655* Multi-Alternative::   When an insn has two alternative constraint-patterns.
38656* Modifiers::           More precise control over effects of constraints.
38657* Machine Constraints:: Special constraints for some particular machines.
38658
38659
38660File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
38661
386626.47.3.1 Simple Constraints
38663...........................
38664
38665The simplest kind of constraint is a string full of letters, each of
38666which describes one kind of operand that is permitted.  Here are the
38667letters that are allowed:
38668
38669whitespace
38670     Whitespace characters are ignored and can be inserted at any
38671     position except the first.  This enables each alternative for
38672     different operands to be visually aligned in the machine
38673     description even if they have different number of constraints and
38674     modifiers.
38675
38676'm'
38677     A memory operand is allowed, with any kind of address that the
38678     machine supports in general.  Note that the letter used for the
38679     general memory constraint can be re-defined by a back end using the
38680     'TARGET_MEM_CONSTRAINT' macro.
38681
38682'o'
38683     A memory operand is allowed, but only if the address is
38684     "offsettable".  This means that adding a small integer (actually,
38685     the width in bytes of the operand, as determined by its machine
38686     mode) may be added to the address and the result is also a valid
38687     memory address.
38688
38689     For example, an address which is constant is offsettable; so is an
38690     address that is the sum of a register and a constant (as long as a
38691     slightly larger constant is also within the range of
38692     address-offsets supported by the machine); but an autoincrement or
38693     autodecrement address is not offsettable.  More complicated
38694     indirect/indexed addresses may or may not be offsettable depending
38695     on the other addressing modes that the machine supports.
38696
38697     Note that in an output operand which can be matched by another
38698     operand, the constraint letter 'o' is valid only when accompanied
38699     by both '<' (if the target machine has predecrement addressing) and
38700     '>' (if the target machine has preincrement addressing).
38701
38702'V'
38703     A memory operand that is not offsettable.  In other words, anything
38704     that would fit the 'm' constraint but not the 'o' constraint.
38705
38706'<'
38707     A memory operand with autodecrement addressing (either predecrement
38708     or postdecrement) is allowed.  In inline 'asm' this constraint is
38709     only allowed if the operand is used exactly once in an instruction
38710     that can handle the side effects.  Not using an operand with '<' in
38711     constraint string in the inline 'asm' pattern at all or using it in
38712     multiple instructions isn't valid, because the side effects
38713     wouldn't be performed or would be performed more than once.
38714     Furthermore, on some targets the operand with '<' in constraint
38715     string must be accompanied by special instruction suffixes like
38716     '%U0' instruction suffix on PowerPC or '%P0' on IA-64.
38717
38718'>'
38719     A memory operand with autoincrement addressing (either preincrement
38720     or postincrement) is allowed.  In inline 'asm' the same
38721     restrictions as for '<' apply.
38722
38723'r'
38724     A register operand is allowed provided that it is in a general
38725     register.
38726
38727'i'
38728     An immediate integer operand (one with constant value) is allowed.
38729     This includes symbolic constants whose values will be known only at
38730     assembly time or later.
38731
38732'n'
38733     An immediate integer operand with a known numeric value is allowed.
38734     Many systems cannot support assembly-time constants for operands
38735     less than a word wide.  Constraints for these operands should use
38736     'n' rather than 'i'.
38737
38738'I', 'J', 'K', ... 'P'
38739     Other letters in the range 'I' through 'P' may be defined in a
38740     machine-dependent fashion to permit immediate integer operands with
38741     explicit integer values in specified ranges.  For example, on the
38742     68000, 'I' is defined to stand for the range of values 1 to 8.
38743     This is the range permitted as a shift count in the shift
38744     instructions.
38745
38746'E'
38747     An immediate floating operand (expression code 'const_double') is
38748     allowed, but only if the target floating point format is the same
38749     as that of the host machine (on which the compiler is running).
38750
38751'F'
38752     An immediate floating operand (expression code 'const_double' or
38753     'const_vector') is allowed.
38754
38755'G', 'H'
38756     'G' and 'H' may be defined in a machine-dependent fashion to permit
38757     immediate floating operands in particular ranges of values.
38758
38759's'
38760     An immediate integer operand whose value is not an explicit integer
38761     is allowed.
38762
38763     This might appear strange; if an insn allows a constant operand
38764     with a value not known at compile time, it certainly must allow any
38765     known value.  So why use 's' instead of 'i'?  Sometimes it allows
38766     better code to be generated.
38767
38768     For example, on the 68000 in a fullword instruction it is possible
38769     to use an immediate operand; but if the immediate value is between
38770     -128 and 127, better code results from loading the value into a
38771     register and using the register.  This is because the load into the
38772     register can be done with a 'moveq' instruction.  We arrange for
38773     this to happen by defining the letter 'K' to mean "any integer
38774     outside the range -128 to 127", and then specifying 'Ks' in the
38775     operand constraints.
38776
38777'g'
38778     Any register, memory or immediate integer operand is allowed,
38779     except for registers that are not general registers.
38780
38781'X'
38782     Any operand whatsoever is allowed.
38783
38784'0', '1', '2', ... '9'
38785     An operand that matches the specified operand number is allowed.
38786     If a digit is used together with letters within the same
38787     alternative, the digit should come last.
38788
38789     This number is allowed to be more than a single digit.  If multiple
38790     digits are encountered consecutively, they are interpreted as a
38791     single decimal integer.  There is scant chance for ambiguity, since
38792     to-date it has never been desirable that '10' be interpreted as
38793     matching either operand 1 _or_ operand 0.  Should this be desired,
38794     one can use multiple alternatives instead.
38795
38796     This is called a "matching constraint" and what it really means is
38797     that the assembler has only a single operand that fills two roles
38798     which 'asm' distinguishes.  For example, an add instruction uses
38799     two input operands and an output operand, but on most CISC machines
38800     an add instruction really has only two operands, one of them an
38801     input-output operand:
38802
38803          addl #35,r12
38804
38805     Matching constraints are used in these circumstances.  More
38806     precisely, the two operands that match must include one input-only
38807     operand and one output-only operand.  Moreover, the digit must be a
38808     smaller number than the number of the operand that uses it in the
38809     constraint.
38810
38811'p'
38812     An operand that is a valid memory address is allowed.  This is for
38813     "load address" and "push address" instructions.
38814
38815     'p' in the constraint must be accompanied by 'address_operand' as
38816     the predicate in the 'match_operand'.  This predicate interprets
38817     the mode specified in the 'match_operand' as the mode of the memory
38818     reference for which the address would be valid.
38819
38820OTHER-LETTERS
38821     Other letters can be defined in machine-dependent fashion to stand
38822     for particular classes of registers or other arbitrary operand
38823     types.  'd', 'a' and 'f' are defined on the 68000/68020 to stand
38824     for data, address and floating point registers.
38825
38826
38827File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
38828
388296.47.3.2 Multiple Alternative Constraints
38830.........................................
38831
38832Sometimes a single instruction has multiple alternative sets of possible
38833operands.  For example, on the 68000, a logical-or instruction can
38834combine register or an immediate value into memory, or it can combine
38835any kind of operand into a register; but it cannot combine one memory
38836location into another.
38837
38838 These constraints are represented as multiple alternatives.  An
38839alternative can be described by a series of letters for each operand.
38840The overall constraint for an operand is made from the letters for this
38841operand from the first alternative, a comma, the letters for this
38842operand from the second alternative, a comma, and so on until the last
38843alternative.  All operands for a single instruction must have the same
38844number of alternatives.
38845
38846 So the first alternative for the 68000's logical-or could be written as
38847'"+m" (output) : "ir" (input)'.  The second could be '"+r" (output):
38848"irm" (input)'.  However, the fact that two memory locations cannot be
38849used in a single instruction prevents simply using '"+rm" (output) :
38850"irm" (input)'.  Using multi-alternatives, this might be written as
38851'"+m,r" (output) : "ir,irm" (input)'.  This describes all the available
38852alternatives to the compiler, allowing it to choose the most efficient
38853one for the current conditions.
38854
38855 There is no way within the template to determine which alternative was
38856chosen.  However you may be able to wrap your 'asm' statements with
38857builtins such as '__builtin_constant_p' to achieve the desired results.
38858
38859
38860File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
38861
388626.47.3.3 Constraint Modifier Characters
38863.......................................
38864
38865Here are constraint modifier characters.
38866
38867'='
38868     Means that this operand is written to by this instruction: the
38869     previous value is discarded and replaced by new data.
38870
38871'+'
38872     Means that this operand is both read and written by the
38873     instruction.
38874
38875     When the compiler fixes up the operands to satisfy the constraints,
38876     it needs to know which operands are read by the instruction and
38877     which are written by it.  '=' identifies an operand which is only
38878     written; '+' identifies an operand that is both read and written;
38879     all other operands are assumed to only be read.
38880
38881     If you specify '=' or '+' in a constraint, you put it in the first
38882     character of the constraint string.
38883
38884'&'
38885     Means (in a particular alternative) that this operand is an
38886     "earlyclobber" operand, which is written before the instruction is
38887     finished using the input operands.  Therefore, this operand may not
38888     lie in a register that is read by the instruction or as part of any
38889     memory address.
38890
38891     '&' applies only to the alternative in which it is written.  In
38892     constraints with multiple alternatives, sometimes one alternative
38893     requires '&' while others do not.  See, for example, the 'movdf'
38894     insn of the 68000.
38895
38896     A operand which is read by the instruction can be tied to an
38897     earlyclobber operand if its only use as an input occurs before the
38898     early result is written.  Adding alternatives of this form often
38899     allows GCC to produce better code when only some of the read
38900     operands can be affected by the earlyclobber.  See, for example,
38901     the 'mulsi3' insn of the ARM.
38902
38903     Furthermore, if the "earlyclobber" operand is also a read/write
38904     operand, then that operand is written only after it's used.
38905
38906     '&' does not obviate the need to write '=' or '+'.  As
38907     "earlyclobber" operands are always written, a read-only
38908     "earlyclobber" operand is ill-formed and will be rejected by the
38909     compiler.
38910
38911'%'
38912     Declares the instruction to be commutative for this operand and the
38913     following operand.  This means that the compiler may interchange
38914     the two operands if that is the cheapest way to make all operands
38915     fit the constraints.  '%' applies to all alternatives and must
38916     appear as the first character in the constraint.  Only read-only
38917     operands can use '%'.
38918
38919     GCC can only handle one commutative pair in an asm; if you use
38920     more, the compiler may fail.  Note that you need not use the
38921     modifier if the two alternatives are strictly identical; this would
38922     only waste time in the reload pass.
38923
38924
38925File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
38926
389276.47.3.4 Constraints for Particular Machines
38928............................................
38929
38930Whenever possible, you should use the general-purpose constraint letters
38931in 'asm' arguments, since they will convey meaning more readily to
38932people reading your code.  Failing that, use the constraint letters that
38933usually have very similar meanings across architectures.  The most
38934commonly used constraints are 'm' and 'r' (for memory and
38935general-purpose registers respectively; *note Simple Constraints::), and
38936'I', usually the letter indicating the most common immediate-constant
38937format.
38938
38939 Each architecture defines additional constraints.  These constraints
38940are used by the compiler itself for instruction generation, as well as
38941for 'asm' statements; therefore, some of the constraints are not
38942particularly useful for 'asm'.  Here is a summary of some of the
38943machine-dependent constraints available on some particular machines; it
38944includes both constraints that are useful for 'asm' and constraints that
38945aren't.  The compiler source file mentioned in the table heading for
38946each architecture is the definitive reference for the meanings of that
38947architecture's constraints.
38948
38949_AArch64 family--'config/aarch64/constraints.md'_
38950     'k'
38951          The stack pointer register ('SP')
38952
38953     'w'
38954          Floating point register, Advanced SIMD vector register or SVE
38955          vector register
38956
38957     'x'
38958          Like 'w', but restricted to registers 0 to 15 inclusive.
38959
38960     'y'
38961          Like 'w', but restricted to registers 0 to 7 inclusive.
38962
38963     'Upl'
38964          One of the low eight SVE predicate registers ('P0' to 'P7')
38965
38966     'Upa'
38967          Any of the SVE predicate registers ('P0' to 'P15')
38968
38969     'I'
38970          Integer constant that is valid as an immediate operand in an
38971          'ADD' instruction
38972
38973     'J'
38974          Integer constant that is valid as an immediate operand in a
38975          'SUB' instruction (once negated)
38976
38977     'K'
38978          Integer constant that can be used with a 32-bit logical
38979          instruction
38980
38981     'L'
38982          Integer constant that can be used with a 64-bit logical
38983          instruction
38984
38985     'M'
38986          Integer constant that is valid as an immediate operand in a
38987          32-bit 'MOV' pseudo instruction.  The 'MOV' may be assembled
38988          to one of several different machine instructions depending on
38989          the value
38990
38991     'N'
38992          Integer constant that is valid as an immediate operand in a
38993          64-bit 'MOV' pseudo instruction
38994
38995     'S'
38996          An absolute symbolic address or a label reference
38997
38998     'Y'
38999          Floating point constant zero
39000
39001     'Z'
39002          Integer constant zero
39003
39004     'Ush'
39005          The high part (bits 12 and upwards) of the pc-relative address
39006          of a symbol within 4GB of the instruction
39007
39008     'Q'
39009          A memory address which uses a single base register with no
39010          offset
39011
39012     'Ump'
39013          A memory address suitable for a load/store pair instruction in
39014          SI, DI, SF and DF modes
39015
39016_AMD GCN --'config/gcn/constraints.md'_
39017     'I'
39018          Immediate integer in the range -16 to 64
39019
39020     'J'
39021          Immediate 16-bit signed integer
39022
39023     'Kf'
39024          Immediate constant -1
39025
39026     'L'
39027          Immediate 15-bit unsigned integer
39028
39029     'A'
39030          Immediate constant that can be inlined in an instruction
39031          encoding: integer -16..64, or float 0.0, +/-0.5, +/-1.0,
39032          +/-2.0, +/-4.0, 1.0/(2.0*PI)
39033
39034     'B'
39035          Immediate 32-bit signed integer that can be attached to an
39036          instruction encoding
39037
39038     'C'
39039          Immediate 32-bit integer in range -16..4294967295 (i.e.
39040          32-bit unsigned integer or 'A' constraint)
39041
39042     'DA'
39043          Immediate 64-bit constant that can be split into two 'A'
39044          constants
39045
39046     'DB'
39047          Immediate 64-bit constant that can be split into two 'B'
39048          constants
39049
39050     'U'
39051          Any 'unspec'
39052
39053     'Y'
39054          Any 'symbol_ref' or 'label_ref'
39055
39056     'v'
39057          VGPR register
39058
39059     'Sg'
39060          SGPR register
39061
39062     'SD'
39063          SGPR registers valid for instruction destinations, including
39064          VCC, M0 and EXEC
39065
39066     'SS'
39067          SGPR registers valid for instruction sources, including VCC,
39068          M0, EXEC and SCC
39069
39070     'Sm'
39071          SGPR registers valid as a source for scalar memory
39072          instructions (excludes M0 and EXEC)
39073
39074     'Sv'
39075          SGPR registers valid as a source or destination for vector
39076          instructions (excludes EXEC)
39077
39078     'ca'
39079          All condition registers: SCC, VCCZ, EXECZ
39080
39081     'cs'
39082          Scalar condition register: SCC
39083
39084     'cV'
39085          Vector condition register: VCC, VCC_LO, VCC_HI
39086
39087     'e'
39088          EXEC register (EXEC_LO and EXEC_HI)
39089
39090     'RB'
39091          Memory operand with address space suitable for 'buffer_*'
39092          instructions
39093
39094     'RF'
39095          Memory operand with address space suitable for 'flat_*'
39096          instructions
39097
39098     'RS'
39099          Memory operand with address space suitable for 's_*'
39100          instructions
39101
39102     'RL'
39103          Memory operand with address space suitable for 'ds_*' LDS
39104          instructions
39105
39106     'RG'
39107          Memory operand with address space suitable for 'ds_*' GDS
39108          instructions
39109
39110     'RD'
39111          Memory operand with address space suitable for any 'ds_*'
39112          instructions
39113
39114     'RM'
39115          Memory operand with address space suitable for 'global_*'
39116          instructions
39117
39118_ARC --'config/arc/constraints.md'_
39119     'q'
39120          Registers usable in ARCompact 16-bit instructions: 'r0'-'r3',
39121          'r12'-'r15'.  This constraint can only match when the '-mq'
39122          option is in effect.
39123
39124     'e'
39125          Registers usable as base-regs of memory addresses in ARCompact
39126          16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'.
39127          This constraint can only match when the '-mq' option is in
39128          effect.
39129     'D'
39130          ARC FPX (dpfp) 64-bit registers.  'D0', 'D1'.
39131
39132     'I'
39133          A signed 12-bit integer constant.
39134
39135     'Cal'
39136          constant for arithmetic/logical operations.  This might be any
39137          constant that can be put into a long immediate by the assmbler
39138          or linker without involving a PIC relocation.
39139
39140     'K'
39141          A 3-bit unsigned integer constant.
39142
39143     'L'
39144          A 6-bit unsigned integer constant.
39145
39146     'CnL'
39147          One's complement of a 6-bit unsigned integer constant.
39148
39149     'CmL'
39150          Two's complement of a 6-bit unsigned integer constant.
39151
39152     'M'
39153          A 5-bit unsigned integer constant.
39154
39155     'O'
39156          A 7-bit unsigned integer constant.
39157
39158     'P'
39159          A 8-bit unsigned integer constant.
39160
39161     'H'
39162          Any const_double value.
39163
39164_ARM family--'config/arm/constraints.md'_
39165
39166     'h'
39167          In Thumb state, the core registers 'r8'-'r15'.
39168
39169     'k'
39170          The stack pointer register.
39171
39172     'l'
39173          In Thumb State the core registers 'r0'-'r7'.  In ARM state
39174          this is an alias for the 'r' constraint.
39175
39176     't'
39177          VFP floating-point registers 's0'-'s31'.  Used for 32 bit
39178          values.
39179
39180     'w'
39181          VFP floating-point registers 'd0'-'d31' and the appropriate
39182          subset 'd0'-'d15' based on command line options.  Used for 64
39183          bit values only.  Not valid for Thumb1.
39184
39185     'y'
39186          The iWMMX co-processor registers.
39187
39188     'z'
39189          The iWMMX GR registers.
39190
39191     'G'
39192          The floating-point constant 0.0
39193
39194     'I'
39195          Integer that is valid as an immediate operand in a data
39196          processing instruction.  That is, an integer in the range 0 to
39197          255 rotated by a multiple of 2
39198
39199     'J'
39200          Integer in the range -4095 to 4095
39201
39202     'K'
39203          Integer that satisfies constraint 'I' when inverted (ones
39204          complement)
39205
39206     'L'
39207          Integer that satisfies constraint 'I' when negated (twos
39208          complement)
39209
39210     'M'
39211          Integer in the range 0 to 32
39212
39213     'Q'
39214          A memory reference where the exact address is in a single
39215          register (''m'' is preferable for 'asm' statements)
39216
39217     'R'
39218          An item in the constant pool
39219
39220     'S'
39221          A symbol in the text segment of the current file
39222
39223     'Uv'
39224          A memory reference suitable for VFP load/store insns
39225          (reg+constant offset)
39226
39227     'Uy'
39228          A memory reference suitable for iWMMXt load/store
39229          instructions.
39230
39231     'Uq'
39232          A memory reference suitable for the ARMv4 ldrsb instruction.
39233
39234_AVR family--'config/avr/constraints.md'_
39235     'l'
39236          Registers from r0 to r15
39237
39238     'a'
39239          Registers from r16 to r23
39240
39241     'd'
39242          Registers from r16 to r31
39243
39244     'w'
39245          Registers from r24 to r31.  These registers can be used in
39246          'adiw' command
39247
39248     'e'
39249          Pointer register (r26-r31)
39250
39251     'b'
39252          Base pointer register (r28-r31)
39253
39254     'q'
39255          Stack pointer register (SPH:SPL)
39256
39257     't'
39258          Temporary register r0
39259
39260     'x'
39261          Register pair X (r27:r26)
39262
39263     'y'
39264          Register pair Y (r29:r28)
39265
39266     'z'
39267          Register pair Z (r31:r30)
39268
39269     'I'
39270          Constant greater than -1, less than 64
39271
39272     'J'
39273          Constant greater than -64, less than 1
39274
39275     'K'
39276          Constant integer 2
39277
39278     'L'
39279          Constant integer 0
39280
39281     'M'
39282          Constant that fits in 8 bits
39283
39284     'N'
39285          Constant integer -1
39286
39287     'O'
39288          Constant integer 8, 16, or 24
39289
39290     'P'
39291          Constant integer 1
39292
39293     'G'
39294          A floating point constant 0.0
39295
39296     'Q'
39297          A memory address based on Y or Z pointer with displacement.
39298
39299_Blackfin family--'config/bfin/constraints.md'_
39300     'a'
39301          P register
39302
39303     'd'
39304          D register
39305
39306     'z'
39307          A call clobbered P register.
39308
39309     'qN'
39310          A single register.  If N is in the range 0 to 7, the
39311          corresponding D register.  If it is 'A', then the register P0.
39312
39313     'D'
39314          Even-numbered D register
39315
39316     'W'
39317          Odd-numbered D register
39318
39319     'e'
39320          Accumulator register.
39321
39322     'A'
39323          Even-numbered accumulator register.
39324
39325     'B'
39326          Odd-numbered accumulator register.
39327
39328     'b'
39329          I register
39330
39331     'v'
39332          B register
39333
39334     'f'
39335          M register
39336
39337     'c'
39338          Registers used for circular buffering, i.e. I, B, or L
39339          registers.
39340
39341     'C'
39342          The CC register.
39343
39344     't'
39345          LT0 or LT1.
39346
39347     'k'
39348          LC0 or LC1.
39349
39350     'u'
39351          LB0 or LB1.
39352
39353     'x'
39354          Any D, P, B, M, I or L register.
39355
39356     'y'
39357          Additional registers typically used only in prologues and
39358          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
39359          USP.
39360
39361     'w'
39362          Any register except accumulators or CC.
39363
39364     'Ksh'
39365          Signed 16 bit integer (in the range -32768 to 32767)
39366
39367     'Kuh'
39368          Unsigned 16 bit integer (in the range 0 to 65535)
39369
39370     'Ks7'
39371          Signed 7 bit integer (in the range -64 to 63)
39372
39373     'Ku7'
39374          Unsigned 7 bit integer (in the range 0 to 127)
39375
39376     'Ku5'
39377          Unsigned 5 bit integer (in the range 0 to 31)
39378
39379     'Ks4'
39380          Signed 4 bit integer (in the range -8 to 7)
39381
39382     'Ks3'
39383          Signed 3 bit integer (in the range -3 to 4)
39384
39385     'Ku3'
39386          Unsigned 3 bit integer (in the range 0 to 7)
39387
39388     'PN'
39389          Constant N, where N is a single-digit constant in the range 0
39390          to 4.
39391
39392     'PA'
39393          An integer equal to one of the MACFLAG_XXX constants that is
39394          suitable for use with either accumulator.
39395
39396     'PB'
39397          An integer equal to one of the MACFLAG_XXX constants that is
39398          suitable for use only with accumulator A1.
39399
39400     'M1'
39401          Constant 255.
39402
39403     'M2'
39404          Constant 65535.
39405
39406     'J'
39407          An integer constant with exactly a single bit set.
39408
39409     'L'
39410          An integer constant with all bits set except exactly one.
39411
39412     'H'
39413
39414     'Q'
39415          Any SYMBOL_REF.
39416
39417_CR16 Architecture--'config/cr16/cr16.h'_
39418
39419     'b'
39420          Registers from r0 to r14 (registers without stack pointer)
39421
39422     't'
39423          Register from r0 to r11 (all 16-bit registers)
39424
39425     'p'
39426          Register from r12 to r15 (all 32-bit registers)
39427
39428     'I'
39429          Signed constant that fits in 4 bits
39430
39431     'J'
39432          Signed constant that fits in 5 bits
39433
39434     'K'
39435          Signed constant that fits in 6 bits
39436
39437     'L'
39438          Unsigned constant that fits in 4 bits
39439
39440     'M'
39441          Signed constant that fits in 32 bits
39442
39443     'N'
39444          Check for 64 bits wide constants for add/sub instructions
39445
39446     'G'
39447          Floating point constant that is legal for store immediate
39448
39449_C-SKY--'config/csky/constraints.md'_
39450
39451     'a'
39452          The mini registers r0 - r7.
39453
39454     'b'
39455          The low registers r0 - r15.
39456
39457     'c'
39458          C register.
39459
39460     'y'
39461          HI and LO registers.
39462
39463     'l'
39464          LO register.
39465
39466     'h'
39467          HI register.
39468
39469     'v'
39470          Vector registers.
39471
39472     'z'
39473          Stack pointer register (SP).
39474
39475_Epiphany--'config/epiphany/constraints.md'_
39476     'U16'
39477          An unsigned 16-bit constant.
39478
39479     'K'
39480          An unsigned 5-bit constant.
39481
39482     'L'
39483          A signed 11-bit constant.
39484
39485     'Cm1'
39486          A signed 11-bit constant added to -1.  Can only match when the
39487          '-m1reg-REG' option is active.
39488
39489     'Cl1'
39490          Left-shift of -1, i.e., a bit mask with a block of leading
39491          ones, the rest being a block of trailing zeroes.  Can only
39492          match when the '-m1reg-REG' option is active.
39493
39494     'Cr1'
39495          Right-shift of -1, i.e., a bit mask with a trailing block of
39496          ones, the rest being zeroes.  Or to put it another way, one
39497          less than a power of two.  Can only match when the
39498          '-m1reg-REG' option is active.
39499
39500     'Cal'
39501          Constant for arithmetic/logical operations.  This is like 'i',
39502          except that for position independent code, no symbols /
39503          expressions needing relocations are allowed.
39504
39505     'Csy'
39506          Symbolic constant for call/jump instruction.
39507
39508     'Rcs'
39509          The register class usable in short insns.  This is a register
39510          class constraint, and can thus drive register allocation.
39511          This constraint won't match unless '-mprefer-short-insn-regs'
39512          is in effect.
39513
39514     'Rsc'
39515          The the register class of registers that can be used to hold a
39516          sibcall call address.  I.e., a caller-saved register.
39517
39518     'Rct'
39519          Core control register class.
39520
39521     'Rgs'
39522          The register group usable in short insns.  This constraint
39523          does not use a register class, so that it only passively
39524          matches suitable registers, and doesn't drive register
39525          allocation.
39526
39527     'Rra'
39528          Matches the return address if it can be replaced with the link
39529          register.
39530
39531     'Rcc'
39532          Matches the integer condition code register.
39533
39534     'Sra'
39535          Matches the return address if it is in a stack slot.
39536
39537     'Cfm'
39538          Matches control register values to switch fp mode, which are
39539          encapsulated in 'UNSPEC_FP_MODE'.
39540
39541_FRV--'config/frv/frv.h'_
39542     'a'
39543          Register in the class 'ACC_REGS' ('acc0' to 'acc7').
39544
39545     'b'
39546          Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7').
39547
39548     'c'
39549          Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0'
39550          to 'icc3').
39551
39552     'd'
39553          Register in the class 'GPR_REGS' ('gr0' to 'gr63').
39554
39555     'e'
39556          Register in the class 'EVEN_REGS' ('gr0' to 'gr63').  Odd
39557          registers are excluded not in the class but through the use of
39558          a machine mode larger than 4 bytes.
39559
39560     'f'
39561          Register in the class 'FPR_REGS' ('fr0' to 'fr63').
39562
39563     'h'
39564          Register in the class 'FEVEN_REGS' ('fr0' to 'fr63').  Odd
39565          registers are excluded not in the class but through the use of
39566          a machine mode larger than 4 bytes.
39567
39568     'l'
39569          Register in the class 'LR_REG' (the 'lr' register).
39570
39571     'q'
39572          Register in the class 'QUAD_REGS' ('gr2' to 'gr63').  Register
39573          numbers not divisible by 4 are excluded not in the class but
39574          through the use of a machine mode larger than 8 bytes.
39575
39576     't'
39577          Register in the class 'ICC_REGS' ('icc0' to 'icc3').
39578
39579     'u'
39580          Register in the class 'FCC_REGS' ('fcc0' to 'fcc3').
39581
39582     'v'
39583          Register in the class 'ICR_REGS' ('cc4' to 'cc7').
39584
39585     'w'
39586          Register in the class 'FCR_REGS' ('cc0' to 'cc3').
39587
39588     'x'
39589          Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63').
39590          Register numbers not divisible by 4 are excluded not in the
39591          class but through the use of a machine mode larger than 8
39592          bytes.
39593
39594     'z'
39595          Register in the class 'SPR_REGS' ('lcr' and 'lr').
39596
39597     'A'
39598          Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7').
39599
39600     'B'
39601          Register in the class 'ACCG_REGS' ('accg0' to 'accg7').
39602
39603     'C'
39604          Register in the class 'CR_REGS' ('cc0' to 'cc7').
39605
39606     'G'
39607          Floating point constant zero
39608
39609     'I'
39610          6-bit signed integer constant
39611
39612     'J'
39613          10-bit signed integer constant
39614
39615     'L'
39616          16-bit signed integer constant
39617
39618     'M'
39619          16-bit unsigned integer constant
39620
39621     'N'
39622          12-bit signed integer constant that is negative--i.e. in the
39623          range of -2048 to -1
39624
39625     'O'
39626          Constant zero
39627
39628     'P'
39629          12-bit signed integer constant that is greater than zero--i.e.
39630          in the range of 1 to 2047.
39631
39632_FT32--'config/ft32/constraints.md'_
39633     'A'
39634          An absolute address
39635
39636     'B'
39637          An offset address
39638
39639     'W'
39640          A register indirect memory operand
39641
39642     'e'
39643          An offset address.
39644
39645     'f'
39646          An offset address.
39647
39648     'O'
39649          The constant zero or one
39650
39651     'I'
39652          A 16-bit signed constant (-32768 ... 32767)
39653
39654     'w'
39655          A bitfield mask suitable for bext or bins
39656
39657     'x'
39658          An inverted bitfield mask suitable for bext or bins
39659
39660     'L'
39661          A 16-bit unsigned constant, multiple of 4 (0 ... 65532)
39662
39663     'S'
39664          A 20-bit signed constant (-524288 ... 524287)
39665
39666     'b'
39667          A constant for a bitfield width (1 ... 16)
39668
39669     'KA'
39670          A 10-bit signed constant (-512 ... 511)
39671
39672_Hewlett-Packard PA-RISC--'config/pa/pa.h'_
39673     'a'
39674          General register 1
39675
39676     'f'
39677          Floating point register
39678
39679     'q'
39680          Shift amount register
39681
39682     'x'
39683          Floating point register (deprecated)
39684
39685     'y'
39686          Upper floating point register (32-bit), floating point
39687          register (64-bit)
39688
39689     'Z'
39690          Any register
39691
39692     'I'
39693          Signed 11-bit integer constant
39694
39695     'J'
39696          Signed 14-bit integer constant
39697
39698     'K'
39699          Integer constant that can be deposited with a 'zdepi'
39700          instruction
39701
39702     'L'
39703          Signed 5-bit integer constant
39704
39705     'M'
39706          Integer constant 0
39707
39708     'N'
39709          Integer constant that can be loaded with a 'ldil' instruction
39710
39711     'O'
39712          Integer constant whose value plus one is a power of 2
39713
39714     'P'
39715          Integer constant that can be used for 'and' operations in
39716          'depi' and 'extru' instructions
39717
39718     'S'
39719          Integer constant 31
39720
39721     'U'
39722          Integer constant 63
39723
39724     'G'
39725          Floating-point constant 0.0
39726
39727     'A'
39728          A 'lo_sum' data-linkage-table memory operand
39729
39730     'Q'
39731          A memory operand that can be used as the destination operand
39732          of an integer store instruction
39733
39734     'R'
39735          A scaled or unscaled indexed memory operand
39736
39737     'T'
39738          A memory operand for floating-point loads and stores
39739
39740     'W'
39741          A register indirect memory operand
39742
39743_Intel IA-64--'config/ia64/ia64.h'_
39744     'a'
39745          General register 'r0' to 'r3' for 'addl' instruction
39746
39747     'b'
39748          Branch register
39749
39750     'c'
39751          Predicate register ('c' as in "conditional")
39752
39753     'd'
39754          Application register residing in M-unit
39755
39756     'e'
39757          Application register residing in I-unit
39758
39759     'f'
39760          Floating-point register
39761
39762     'm'
39763          Memory operand.  If used together with '<' or '>', the operand
39764          can have postincrement and postdecrement which require
39765          printing with '%Pn' on IA-64.
39766
39767     'G'
39768          Floating-point constant 0.0 or 1.0
39769
39770     'I'
39771          14-bit signed integer constant
39772
39773     'J'
39774          22-bit signed integer constant
39775
39776     'K'
39777          8-bit signed integer constant for logical instructions
39778
39779     'L'
39780          8-bit adjusted signed integer constant for compare pseudo-ops
39781
39782     'M'
39783          6-bit unsigned integer constant for shift counts
39784
39785     'N'
39786          9-bit signed integer constant for load and store
39787          postincrements
39788
39789     'O'
39790          The constant zero
39791
39792     'P'
39793          0 or -1 for 'dep' instruction
39794
39795     'Q'
39796          Non-volatile memory for floating-point loads and stores
39797
39798     'R'
39799          Integer constant in the range 1 to 4 for 'shladd' instruction
39800
39801     'S'
39802          Memory operand except postincrement and postdecrement.  This
39803          is now roughly the same as 'm' when not used together with '<'
39804          or '>'.
39805
39806_M32C--'config/m32c/m32c.c'_
39807     'Rsp'
39808     'Rfb'
39809     'Rsb'
39810          '$sp', '$fb', '$sb'.
39811
39812     'Rcr'
39813          Any control register, when they're 16 bits wide (nothing if
39814          control registers are 24 bits wide)
39815
39816     'Rcl'
39817          Any control register, when they're 24 bits wide.
39818
39819     'R0w'
39820     'R1w'
39821     'R2w'
39822     'R3w'
39823          $r0, $r1, $r2, $r3.
39824
39825     'R02'
39826          $r0 or $r2, or $r2r0 for 32 bit values.
39827
39828     'R13'
39829          $r1 or $r3, or $r3r1 for 32 bit values.
39830
39831     'Rdi'
39832          A register that can hold a 64 bit value.
39833
39834     'Rhl'
39835          $r0 or $r1 (registers with addressable high/low bytes)
39836
39837     'R23'
39838          $r2 or $r3
39839
39840     'Raa'
39841          Address registers
39842
39843     'Raw'
39844          Address registers when they're 16 bits wide.
39845
39846     'Ral'
39847          Address registers when they're 24 bits wide.
39848
39849     'Rqi'
39850          Registers that can hold QI values.
39851
39852     'Rad'
39853          Registers that can be used with displacements ($a0, $a1, $sb).
39854
39855     'Rsi'
39856          Registers that can hold 32 bit values.
39857
39858     'Rhi'
39859          Registers that can hold 16 bit values.
39860
39861     'Rhc'
39862          Registers chat can hold 16 bit values, including all control
39863          registers.
39864
39865     'Rra'
39866          $r0 through R1, plus $a0 and $a1.
39867
39868     'Rfl'
39869          The flags register.
39870
39871     'Rmm'
39872          The memory-based pseudo-registers $mem0 through $mem15.
39873
39874     'Rpi'
39875          Registers that can hold pointers (16 bit registers for r8c,
39876          m16c; 24 bit registers for m32cm, m32c).
39877
39878     'Rpa'
39879          Matches multiple registers in a PARALLEL to form a larger
39880          register.  Used to match function return values.
39881
39882     'Is3'
39883          -8 ... 7
39884
39885     'IS1'
39886          -128 ... 127
39887
39888     'IS2'
39889          -32768 ... 32767
39890
39891     'IU2'
39892          0 ... 65535
39893
39894     'In4'
39895          -8 ... -1 or 1 ... 8
39896
39897     'In5'
39898          -16 ... -1 or 1 ... 16
39899
39900     'In6'
39901          -32 ... -1 or 1 ... 32
39902
39903     'IM2'
39904          -65536 ... -1
39905
39906     'Ilb'
39907          An 8 bit value with exactly one bit set.
39908
39909     'Ilw'
39910          A 16 bit value with exactly one bit set.
39911
39912     'Sd'
39913          The common src/dest memory addressing modes.
39914
39915     'Sa'
39916          Memory addressed using $a0 or $a1.
39917
39918     'Si'
39919          Memory addressed with immediate addresses.
39920
39921     'Ss'
39922          Memory addressed using the stack pointer ($sp).
39923
39924     'Sf'
39925          Memory addressed using the frame base register ($fb).
39926
39927     'Ss'
39928          Memory addressed using the small base register ($sb).
39929
39930     'S1'
39931          $r1h
39932
39933_MicroBlaze--'config/microblaze/constraints.md'_
39934     'd'
39935          A general register ('r0' to 'r31').
39936
39937     'z'
39938          A status register ('rmsr', '$fcc1' to '$fcc7').
39939
39940_MIPS--'config/mips/constraints.md'_
39941     'd'
39942          A general-purpose register.  This is equivalent to 'r' unless
39943          generating MIPS16 code, in which case the MIPS16 register set
39944          is used.
39945
39946     'f'
39947          A floating-point register (if available).
39948
39949     'h'
39950          Formerly the 'hi' register.  This constraint is no longer
39951          supported.
39952
39953     'l'
39954          The 'lo' register.  Use this register to store values that are
39955          no bigger than a word.
39956
39957     'x'
39958          The concatenated 'hi' and 'lo' registers.  Use this register
39959          to store doubleword values.
39960
39961     'c'
39962          A register suitable for use in an indirect jump.  This will
39963          always be '$25' for '-mabicalls'.
39964
39965     'v'
39966          Register '$3'.  Do not use this constraint in new code; it is
39967          retained only for compatibility with glibc.
39968
39969     'y'
39970          Equivalent to 'r'; retained for backwards compatibility.
39971
39972     'z'
39973          A floating-point condition code register.
39974
39975     'I'
39976          A signed 16-bit constant (for arithmetic instructions).
39977
39978     'J'
39979          Integer zero.
39980
39981     'K'
39982          An unsigned 16-bit constant (for logic instructions).
39983
39984     'L'
39985          A signed 32-bit constant in which the lower 16 bits are zero.
39986          Such constants can be loaded using 'lui'.
39987
39988     'M'
39989          A constant that cannot be loaded using 'lui', 'addiu' or
39990          'ori'.
39991
39992     'N'
39993          A constant in the range -65535 to -1 (inclusive).
39994
39995     'O'
39996          A signed 15-bit constant.
39997
39998     'P'
39999          A constant in the range 1 to 65535 (inclusive).
40000
40001     'G'
40002          Floating-point zero.
40003
40004     'R'
40005          An address that can be used in a non-macro load or store.
40006
40007     'ZC'
40008          A memory operand whose address is formed by a base register
40009          and offset that is suitable for use in instructions with the
40010          same addressing mode as 'll' and 'sc'.
40011
40012     'ZD'
40013          An address suitable for a 'prefetch' instruction, or for any
40014          other instruction with the same addressing mode as 'prefetch'.
40015
40016_Motorola 680x0--'config/m68k/constraints.md'_
40017     'a'
40018          Address register
40019
40020     'd'
40021          Data register
40022
40023     'f'
40024          68881 floating-point register, if available
40025
40026     'I'
40027          Integer in the range 1 to 8
40028
40029     'J'
40030          16-bit signed number
40031
40032     'K'
40033          Signed number whose magnitude is greater than 0x80
40034
40035     'L'
40036          Integer in the range -8 to -1
40037
40038     'M'
40039          Signed number whose magnitude is greater than 0x100
40040
40041     'N'
40042          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
40043
40044     'O'
40045          16 (for rotate using swap)
40046
40047     'P'
40048          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
40049
40050     'R'
40051          Numbers that mov3q can handle
40052
40053     'G'
40054          Floating point constant that is not a 68881 constant
40055
40056     'S'
40057          Operands that satisfy 'm' when -mpcrel is in effect
40058
40059     'T'
40060          Operands that satisfy 's' when -mpcrel is not in effect
40061
40062     'Q'
40063          Address register indirect addressing mode
40064
40065     'U'
40066          Register offset addressing
40067
40068     'W'
40069          const_call_operand
40070
40071     'Cs'
40072          symbol_ref or const
40073
40074     'Ci'
40075          const_int
40076
40077     'C0'
40078          const_int 0
40079
40080     'Cj'
40081          Range of signed numbers that don't fit in 16 bits
40082
40083     'Cmvq'
40084          Integers valid for mvq
40085
40086     'Capsw'
40087          Integers valid for a moveq followed by a swap
40088
40089     'Cmvz'
40090          Integers valid for mvz
40091
40092     'Cmvs'
40093          Integers valid for mvs
40094
40095     'Ap'
40096          push_operand
40097
40098     'Ac'
40099          Non-register operands allowed in clr
40100
40101_Moxie--'config/moxie/constraints.md'_
40102     'A'
40103          An absolute address
40104
40105     'B'
40106          An offset address
40107
40108     'W'
40109          A register indirect memory operand
40110
40111     'I'
40112          A constant in the range of 0 to 255.
40113
40114     'N'
40115          A constant in the range of 0 to -255.
40116
40117_MSP430-'config/msp430/constraints.md'_
40118
40119     'R12'
40120          Register R12.
40121
40122     'R13'
40123          Register R13.
40124
40125     'K'
40126          Integer constant 1.
40127
40128     'L'
40129          Integer constant -1^20..1^19.
40130
40131     'M'
40132          Integer constant 1-4.
40133
40134     'Ya'
40135          Memory references which do not require an extended MOVX
40136          instruction.
40137
40138     'Yl'
40139          Memory reference, labels only.
40140
40141     'Ys'
40142          Memory reference, stack only.
40143
40144_NDS32--'config/nds32/constraints.md'_
40145     'w'
40146          LOW register class $r0 to $r7 constraint for V3/V3M ISA.
40147     'l'
40148          LOW register class $r0 to $r7.
40149     'd'
40150          MIDDLE register class $r0 to $r11, $r16 to $r19.
40151     'h'
40152          HIGH register class $r12 to $r14, $r20 to $r31.
40153     't'
40154          Temporary assist register $ta (i.e. $r15).
40155     'k'
40156          Stack register $sp.
40157     'Iu03'
40158          Unsigned immediate 3-bit value.
40159     'In03'
40160          Negative immediate 3-bit value in the range of -7-0.
40161     'Iu04'
40162          Unsigned immediate 4-bit value.
40163     'Is05'
40164          Signed immediate 5-bit value.
40165     'Iu05'
40166          Unsigned immediate 5-bit value.
40167     'In05'
40168          Negative immediate 5-bit value in the range of -31-0.
40169     'Ip05'
40170          Unsigned immediate 5-bit value for movpi45 instruction with
40171          range 16-47.
40172     'Iu06'
40173          Unsigned immediate 6-bit value constraint for addri36.sp
40174          instruction.
40175     'Iu08'
40176          Unsigned immediate 8-bit value.
40177     'Iu09'
40178          Unsigned immediate 9-bit value.
40179     'Is10'
40180          Signed immediate 10-bit value.
40181     'Is11'
40182          Signed immediate 11-bit value.
40183     'Is15'
40184          Signed immediate 15-bit value.
40185     'Iu15'
40186          Unsigned immediate 15-bit value.
40187     'Ic15'
40188          A constant which is not in the range of imm15u but ok for bclr
40189          instruction.
40190     'Ie15'
40191          A constant which is not in the range of imm15u but ok for bset
40192          instruction.
40193     'It15'
40194          A constant which is not in the range of imm15u but ok for btgl
40195          instruction.
40196     'Ii15'
40197          A constant whose compliment value is in the range of imm15u
40198          and ok for bitci instruction.
40199     'Is16'
40200          Signed immediate 16-bit value.
40201     'Is17'
40202          Signed immediate 17-bit value.
40203     'Is19'
40204          Signed immediate 19-bit value.
40205     'Is20'
40206          Signed immediate 20-bit value.
40207     'Ihig'
40208          The immediate value that can be simply set high 20-bit.
40209     'Izeb'
40210          The immediate value 0xff.
40211     'Izeh'
40212          The immediate value 0xffff.
40213     'Ixls'
40214          The immediate value 0x01.
40215     'Ix11'
40216          The immediate value 0x7ff.
40217     'Ibms'
40218          The immediate value with power of 2.
40219     'Ifex'
40220          The immediate value with power of 2 minus 1.
40221     'U33'
40222          Memory constraint for 333 format.
40223     'U45'
40224          Memory constraint for 45 format.
40225     'U37'
40226          Memory constraint for 37 format.
40227
40228_Nios II family--'config/nios2/constraints.md'_
40229
40230     'I'
40231          Integer that is valid as an immediate operand in an
40232          instruction taking a signed 16-bit number.  Range -32768 to
40233          32767.
40234
40235     'J'
40236          Integer that is valid as an immediate operand in an
40237          instruction taking an unsigned 16-bit number.  Range 0 to
40238          65535.
40239
40240     'K'
40241          Integer that is valid as an immediate operand in an
40242          instruction taking only the upper 16-bits of a 32-bit number.
40243          Range 32-bit numbers with the lower 16-bits being 0.
40244
40245     'L'
40246          Integer that is valid as an immediate operand for a shift
40247          instruction.  Range 0 to 31.
40248
40249     'M'
40250          Integer that is valid as an immediate operand for only the
40251          value 0.  Can be used in conjunction with the format modifier
40252          'z' to use 'r0' instead of '0' in the assembly output.
40253
40254     'N'
40255          Integer that is valid as an immediate operand for a custom
40256          instruction opcode.  Range 0 to 255.
40257
40258     'P'
40259          An immediate operand for R2 andchi/andci instructions.
40260
40261     'S'
40262          Matches immediates which are addresses in the small data
40263          section and therefore can be added to 'gp' as a 16-bit
40264          immediate to re-create their 32-bit value.
40265
40266     'U'
40267          Matches constants suitable as an operand for the rdprs and
40268          cache instructions.
40269
40270     'v'
40271          A memory operand suitable for Nios II R2 load/store exclusive
40272          instructions.
40273
40274     'w'
40275          A memory operand suitable for load/store IO and cache
40276          instructions.
40277
40278_OpenRISC--'config/or1k/constraints.md'_
40279     'I'
40280          Integer that is valid as an immediate operand in an
40281          instruction taking a signed 16-bit number.  Range -32768 to
40282          32767.
40283
40284     'K'
40285          Integer that is valid as an immediate operand in an
40286          instruction taking an unsigned 16-bit number.  Range 0 to
40287          65535.
40288
40289     'M'
40290          Signed 16-bit constant shifted left 16 bits.  (Used with
40291          'l.movhi')
40292
40293     'O'
40294          Zero
40295
40296_PDP-11--'config/pdp11/constraints.md'_
40297     'a'
40298          Floating point registers AC0 through AC3.  These can be loaded
40299          from/to memory with a single instruction.
40300
40301     'd'
40302          Odd numbered general registers (R1, R3, R5).  These are used
40303          for 16-bit multiply operations.
40304
40305     'D'
40306          A memory reference that is encoded within the opcode, but not
40307          auto-increment or auto-decrement.
40308
40309     'f'
40310          Any of the floating point registers (AC0 through AC5).
40311
40312     'G'
40313          Floating point constant 0.
40314
40315     'h'
40316          Floating point registers AC4 and AC5.  These cannot be loaded
40317          from/to memory with a single instruction.
40318
40319     'I'
40320          An integer constant that fits in 16 bits.
40321
40322     'J'
40323          An integer constant whose low order 16 bits are zero.
40324
40325     'K'
40326          An integer constant that does not meet the constraints for
40327          codes 'I' or 'J'.
40328
40329     'L'
40330          The integer constant 1.
40331
40332     'M'
40333          The integer constant -1.
40334
40335     'N'
40336          The integer constant 0.
40337
40338     'O'
40339          Integer constants 0 through 3; shifts by these amounts are
40340          handled as multiple single-bit shifts rather than a single
40341          variable-length shift.
40342
40343     'Q'
40344          A memory reference which requires an additional word (address
40345          or offset) after the opcode.
40346
40347     'R'
40348          A memory reference that is encoded within the opcode.
40349
40350_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
40351     'r'
40352          A general purpose register (GPR), 'r0'...'r31'.
40353
40354     'b'
40355          A base register.  Like 'r', but 'r0' is not allowed, so
40356          'r1'...'r31'.
40357
40358     'f'
40359          A floating point register (FPR), 'f0'...'f31'.
40360
40361     'd'
40362          A floating point register.  This is the same as 'f' nowadays;
40363          historically 'f' was for single-precision and 'd' was for
40364          double-precision floating point.
40365
40366     'v'
40367          An Altivec vector register (VR), 'v0'...'v31'.
40368
40369     'wa'
40370          A VSX register (VSR), 'vs0'...'vs63'.  This is either an FPR
40371          ('vs0'...'vs31' are 'f0'...'f31') or a VR ('vs32'...'vs63' are
40372          'v0'...'v31').
40373
40374          When using 'wa', you should use the '%x' output modifier, so
40375          that the correct register number is printed.  For example:
40376
40377               asm ("xvadddp %x0,%x1,%x2"
40378                    : "=wa" (v1)
40379                    : "wa" (v2), "wa" (v3));
40380
40381          You should not use '%x' for 'v' operands:
40382
40383               asm ("xsaddqp %0,%1,%2"
40384                    : "=v" (v1)
40385                    : "v" (v2), "v" (v3));
40386
40387     'c'
40388          The count register, 'ctr'.
40389
40390     'l'
40391          The link register, 'lr'.
40392
40393     'x'
40394          Condition register field 0, 'cr0'.
40395
40396     'y'
40397          Any condition register field, 'cr0'...'cr7'.
40398
40399     'I'
40400          A signed 16-bit constant.
40401
40402     'J'
40403          An unsigned 16-bit constant shifted left 16 bits (use 'L'
40404          instead for 'SImode' constants).
40405
40406     'K'
40407          An unsigned 16-bit constant.
40408
40409     'L'
40410          A signed 16-bit constant shifted left 16 bits.
40411
40412     'eI'
40413          A signed 34-bit integer constant if prefixed instructions are
40414          supported.
40415
40416     'm'
40417          A memory operand.  Normally, 'm' does not allow addresses that
40418          update the base register.  If the '<' or '>' constraint is
40419          also used, they are allowed and therefore on PowerPC targets
40420          in that case it is only safe to use 'm<>' in an 'asm'
40421          statement if that 'asm' statement accesses the operand exactly
40422          once.  The 'asm' statement must also use '%U<OPNO>' as a
40423          placeholder for the "update" flag in the corresponding load or
40424          store instruction.  For example:
40425
40426               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
40427
40428          is correct but:
40429
40430               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
40431
40432          is not.
40433
40434     'Q'
40435          A memory operand addressed by just a base register.
40436
40437     'Z'
40438          A memory operand accessed with indexed or indirect addressing.
40439
40440     'a'
40441          An indexed or indirect address.
40442
40443_PRU--'config/pru/constraints.md'_
40444     'I'
40445          An unsigned 8-bit integer constant.
40446
40447     'J'
40448          An unsigned 16-bit integer constant.
40449
40450     'L'
40451          An unsigned 5-bit integer constant (for shift counts).
40452
40453     'T'
40454          A text segment (program memory) constant label.
40455
40456     'Z'
40457          Integer constant zero.
40458
40459_RL78--'config/rl78/constraints.md'_
40460
40461     'Int3'
40462          An integer constant in the range 1 ... 7.
40463     'Int8'
40464          An integer constant in the range 0 ... 255.
40465     'J'
40466          An integer constant in the range -255 ... 0
40467     'K'
40468          The integer constant 1.
40469     'L'
40470          The integer constant -1.
40471     'M'
40472          The integer constant 0.
40473     'N'
40474          The integer constant 2.
40475     'O'
40476          The integer constant -2.
40477     'P'
40478          An integer constant in the range 1 ... 15.
40479     'Qbi'
40480          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
40481     'Qsc'
40482          The synthetic compare types-gt, lt, ge, and le.
40483     'Wab'
40484          A memory reference with an absolute address.
40485     'Wbc'
40486          A memory reference using 'BC' as a base register, with an
40487          optional offset.
40488     'Wca'
40489          A memory reference using 'AX', 'BC', 'DE', or 'HL' for the
40490          address, for calls.
40491     'Wcv'
40492          A memory reference using any 16-bit register pair for the
40493          address, for calls.
40494     'Wd2'
40495          A memory reference using 'DE' as a base register, with an
40496          optional offset.
40497     'Wde'
40498          A memory reference using 'DE' as a base register, without any
40499          offset.
40500     'Wfr'
40501          Any memory reference to an address in the far address space.
40502     'Wh1'
40503          A memory reference using 'HL' as a base register, with an
40504          optional one-byte offset.
40505     'Whb'
40506          A memory reference using 'HL' as a base register, with 'B' or
40507          'C' as the index register.
40508     'Whl'
40509          A memory reference using 'HL' as a base register, without any
40510          offset.
40511     'Ws1'
40512          A memory reference using 'SP' as a base register, with an
40513          optional one-byte offset.
40514     'Y'
40515          Any memory reference to an address in the near address space.
40516     'A'
40517          The 'AX' register.
40518     'B'
40519          The 'BC' register.
40520     'D'
40521          The 'DE' register.
40522     'R'
40523          'A' through 'L' registers.
40524     'S'
40525          The 'SP' register.
40526     'T'
40527          The 'HL' register.
40528     'Z08W'
40529          The 16-bit 'R8' register.
40530     'Z10W'
40531          The 16-bit 'R10' register.
40532     'Zint'
40533          The registers reserved for interrupts ('R24' to 'R31').
40534     'a'
40535          The 'A' register.
40536     'b'
40537          The 'B' register.
40538     'c'
40539          The 'C' register.
40540     'd'
40541          The 'D' register.
40542     'e'
40543          The 'E' register.
40544     'h'
40545          The 'H' register.
40546     'l'
40547          The 'L' register.
40548     'v'
40549          The virtual registers.
40550     'w'
40551          The 'PSW' register.
40552     'x'
40553          The 'X' register.
40554
40555_RISC-V--'config/riscv/constraints.md'_
40556
40557     'f'
40558          A floating-point register (if available).
40559
40560     'I'
40561          An I-type 12-bit signed immediate.
40562
40563     'J'
40564          Integer zero.
40565
40566     'K'
40567          A 5-bit unsigned immediate for CSR access instructions.
40568
40569     'A'
40570          An address that is held in a general-purpose register.
40571
40572_RX--'config/rx/constraints.md'_
40573     'Q'
40574          An address which does not involve register indirect addressing
40575          or pre/post increment/decrement addressing.
40576
40577     'Symbol'
40578          A symbol reference.
40579
40580     'Int08'
40581          A constant in the range -256 to 255, inclusive.
40582
40583     'Sint08'
40584          A constant in the range -128 to 127, inclusive.
40585
40586     'Sint16'
40587          A constant in the range -32768 to 32767, inclusive.
40588
40589     'Sint24'
40590          A constant in the range -8388608 to 8388607, inclusive.
40591
40592     'Uint04'
40593          A constant in the range 0 to 15, inclusive.
40594
40595_S/390 and zSeries--'config/s390/s390.h'_
40596     'a'
40597          Address register (general purpose register except r0)
40598
40599     'c'
40600          Condition code register
40601
40602     'd'
40603          Data register (arbitrary general purpose register)
40604
40605     'f'
40606          Floating-point register
40607
40608     'I'
40609          Unsigned 8-bit constant (0-255)
40610
40611     'J'
40612          Unsigned 12-bit constant (0-4095)
40613
40614     'K'
40615          Signed 16-bit constant (-32768-32767)
40616
40617     'L'
40618          Value appropriate as displacement.
40619          '(0..4095)'
40620               for short displacement
40621          '(-524288..524287)'
40622               for long displacement
40623
40624     'M'
40625          Constant integer with a value of 0x7fffffff.
40626
40627     'N'
40628          Multiple letter constraint followed by 4 parameter letters.
40629          '0..9:'
40630               number of the part counting from most to least
40631               significant
40632          'H,Q:'
40633               mode of the part
40634          'D,S,H:'
40635               mode of the containing operand
40636          '0,F:'
40637               value of the other parts (F--all bits set)
40638          The constraint matches if the specified part of a constant has
40639          a value different from its other parts.
40640
40641     'Q'
40642          Memory reference without index register and with short
40643          displacement.
40644
40645     'R'
40646          Memory reference with index register and short displacement.
40647
40648     'S'
40649          Memory reference without index register but with long
40650          displacement.
40651
40652     'T'
40653          Memory reference with index register and long displacement.
40654
40655     'U'
40656          Pointer with short displacement.
40657
40658     'W'
40659          Pointer with long displacement.
40660
40661     'Y'
40662          Shift count operand.
40663
40664_SPARC--'config/sparc/sparc.h'_
40665     'f'
40666          Floating-point register on the SPARC-V8 architecture and lower
40667          floating-point register on the SPARC-V9 architecture.
40668
40669     'e'
40670          Floating-point register.  It is equivalent to 'f' on the
40671          SPARC-V8 architecture and contains both lower and upper
40672          floating-point registers on the SPARC-V9 architecture.
40673
40674     'c'
40675          Floating-point condition code register.
40676
40677     'd'
40678          Lower floating-point register.  It is only valid on the
40679          SPARC-V9 architecture when the Visual Instruction Set is
40680          available.
40681
40682     'b'
40683          Floating-point register.  It is only valid on the SPARC-V9
40684          architecture when the Visual Instruction Set is available.
40685
40686     'h'
40687          64-bit global or out register for the SPARC-V8+ architecture.
40688
40689     'C'
40690          The constant all-ones, for floating-point.
40691
40692     'A'
40693          Signed 5-bit constant
40694
40695     'D'
40696          A vector constant
40697
40698     'I'
40699          Signed 13-bit constant
40700
40701     'J'
40702          Zero
40703
40704     'K'
40705          32-bit constant with the low 12 bits clear (a constant that
40706          can be loaded with the 'sethi' instruction)
40707
40708     'L'
40709          A constant in the range supported by 'movcc' instructions
40710          (11-bit signed immediate)
40711
40712     'M'
40713          A constant in the range supported by 'movrcc' instructions
40714          (10-bit signed immediate)
40715
40716     'N'
40717          Same as 'K', except that it verifies that bits that are not in
40718          the lower 32-bit range are all zero.  Must be used instead of
40719          'K' for modes wider than 'SImode'
40720
40721     'O'
40722          The constant 4096
40723
40724     'G'
40725          Floating-point zero
40726
40727     'H'
40728          Signed 13-bit constant, sign-extended to 32 or 64 bits
40729
40730     'P'
40731          The constant -1
40732
40733     'Q'
40734          Floating-point constant whose integral representation can be
40735          moved into an integer register using a single sethi
40736          instruction
40737
40738     'R'
40739          Floating-point constant whose integral representation can be
40740          moved into an integer register using a single mov instruction
40741
40742     'S'
40743          Floating-point constant whose integral representation can be
40744          moved into an integer register using a high/lo_sum instruction
40745          sequence
40746
40747     'T'
40748          Memory address aligned to an 8-byte boundary
40749
40750     'U'
40751          Even register
40752
40753     'W'
40754          Memory address for 'e' constraint registers
40755
40756     'w'
40757          Memory address with only a base register
40758
40759     'Y'
40760          Vector zero
40761
40762_TI C6X family--'config/c6x/constraints.md'_
40763     'a'
40764          Register file A (A0-A31).
40765
40766     'b'
40767          Register file B (B0-B31).
40768
40769     'A'
40770          Predicate registers in register file A (A0-A2 on C64X and
40771          higher, A1 and A2 otherwise).
40772
40773     'B'
40774          Predicate registers in register file B (B0-B2).
40775
40776     'C'
40777          A call-used register in register file B (B0-B9, B16-B31).
40778
40779     'Da'
40780          Register file A, excluding predicate registers (A3-A31, plus
40781          A0 if not C64X or higher).
40782
40783     'Db'
40784          Register file B, excluding predicate registers (B3-B31).
40785
40786     'Iu4'
40787          Integer constant in the range 0 ... 15.
40788
40789     'Iu5'
40790          Integer constant in the range 0 ... 31.
40791
40792     'In5'
40793          Integer constant in the range -31 ... 0.
40794
40795     'Is5'
40796          Integer constant in the range -16 ... 15.
40797
40798     'I5x'
40799          Integer constant that can be the operand of an ADDA or a SUBA
40800          insn.
40801
40802     'IuB'
40803          Integer constant in the range 0 ... 65535.
40804
40805     'IsB'
40806          Integer constant in the range -32768 ... 32767.
40807
40808     'IsC'
40809          Integer constant in the range -2^{20} ... 2^{20} - 1.
40810
40811     'Jc'
40812          Integer constant that is a valid mask for the clr instruction.
40813
40814     'Js'
40815          Integer constant that is a valid mask for the set instruction.
40816
40817     'Q'
40818          Memory location with A base register.
40819
40820     'R'
40821          Memory location with B base register.
40822
40823     'Z'
40824          Register B14 (aka DP).
40825
40826_TILE-Gx--'config/tilegx/constraints.md'_
40827     'R00'
40828     'R01'
40829     'R02'
40830     'R03'
40831     'R04'
40832     'R05'
40833     'R06'
40834     'R07'
40835     'R08'
40836     'R09'
40837     'R10'
40838          Each of these represents a register constraint for an
40839          individual register, from r0 to r10.
40840
40841     'I'
40842          Signed 8-bit integer constant.
40843
40844     'J'
40845          Signed 16-bit integer constant.
40846
40847     'K'
40848          Unsigned 16-bit integer constant.
40849
40850     'L'
40851          Integer constant that fits in one signed byte when incremented
40852          by one (-129 ... 126).
40853
40854     'm'
40855          Memory operand.  If used together with '<' or '>', the operand
40856          can have postincrement which requires printing with '%In' and
40857          '%in' on TILE-Gx.  For example:
40858
40859               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
40860
40861     'M'
40862          A bit mask suitable for the BFINS instruction.
40863
40864     'N'
40865          Integer constant that is a byte tiled out eight times.
40866
40867     'O'
40868          The integer zero constant.
40869
40870     'P'
40871          Integer constant that is a sign-extended byte tiled out as
40872          four shorts.
40873
40874     'Q'
40875          Integer constant that fits in one signed byte when incremented
40876          (-129 ... 126), but excluding -1.
40877
40878     'S'
40879          Integer constant that has all 1 bits consecutive and starting
40880          at bit 0.
40881
40882     'T'
40883          A 16-bit fragment of a got, tls, or pc-relative reference.
40884
40885     'U'
40886          Memory operand except postincrement.  This is roughly the same
40887          as 'm' when not used together with '<' or '>'.
40888
40889     'W'
40890          An 8-element vector constant with identical elements.
40891
40892     'Y'
40893          A 4-element vector constant with identical elements.
40894
40895     'Z0'
40896          The integer constant 0xffffffff.
40897
40898     'Z1'
40899          The integer constant 0xffffffff00000000.
40900
40901_TILEPro--'config/tilepro/constraints.md'_
40902     'R00'
40903     'R01'
40904     'R02'
40905     'R03'
40906     'R04'
40907     'R05'
40908     'R06'
40909     'R07'
40910     'R08'
40911     'R09'
40912     'R10'
40913          Each of these represents a register constraint for an
40914          individual register, from r0 to r10.
40915
40916     'I'
40917          Signed 8-bit integer constant.
40918
40919     'J'
40920          Signed 16-bit integer constant.
40921
40922     'K'
40923          Nonzero integer constant with low 16 bits zero.
40924
40925     'L'
40926          Integer constant that fits in one signed byte when incremented
40927          by one (-129 ... 126).
40928
40929     'm'
40930          Memory operand.  If used together with '<' or '>', the operand
40931          can have postincrement which requires printing with '%In' and
40932          '%in' on TILEPro.  For example:
40933
40934               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
40935
40936     'M'
40937          A bit mask suitable for the MM instruction.
40938
40939     'N'
40940          Integer constant that is a byte tiled out four times.
40941
40942     'O'
40943          The integer zero constant.
40944
40945     'P'
40946          Integer constant that is a sign-extended byte tiled out as two
40947          shorts.
40948
40949     'Q'
40950          Integer constant that fits in one signed byte when incremented
40951          (-129 ... 126), but excluding -1.
40952
40953     'T'
40954          A symbolic operand, or a 16-bit fragment of a got, tls, or
40955          pc-relative reference.
40956
40957     'U'
40958          Memory operand except postincrement.  This is roughly the same
40959          as 'm' when not used together with '<' or '>'.
40960
40961     'W'
40962          A 4-element vector constant with identical elements.
40963
40964     'Y'
40965          A 2-element vector constant with identical elements.
40966
40967_Visium--'config/visium/constraints.md'_
40968     'b'
40969          EAM register 'mdb'
40970
40971     'c'
40972          EAM register 'mdc'
40973
40974     'f'
40975          Floating point register
40976
40977     'l'
40978          General register, but not 'r29', 'r30' and 'r31'
40979
40980     't'
40981          Register 'r1'
40982
40983     'u'
40984          Register 'r2'
40985
40986     'v'
40987          Register 'r3'
40988
40989     'G'
40990          Floating-point constant 0.0
40991
40992     'J'
40993          Integer constant in the range 0 ..  65535 (16-bit immediate)
40994
40995     'K'
40996          Integer constant in the range 1 ..  31 (5-bit immediate)
40997
40998     'L'
40999          Integer constant in the range -65535 ..  -1 (16-bit negative
41000          immediate)
41001
41002     'M'
41003          Integer constant -1
41004
41005     'O'
41006          Integer constant 0
41007
41008     'P'
41009          Integer constant 32
41010
41011_x86 family--'config/i386/constraints.md'_
41012     'R'
41013          Legacy register--the eight integer registers available on all
41014          i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp').
41015
41016     'q'
41017          Any register accessible as 'Rl'.  In 32-bit mode, 'a', 'b',
41018          'c', and 'd'; in 64-bit mode, any integer register.
41019
41020     'Q'
41021          Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'.
41022
41023     'a'
41024          The 'a' register.
41025
41026     'b'
41027          The 'b' register.
41028
41029     'c'
41030          The 'c' register.
41031
41032     'd'
41033          The 'd' register.
41034
41035     'S'
41036          The 'si' register.
41037
41038     'D'
41039          The 'di' register.
41040
41041     'A'
41042          The 'a' and 'd' registers.  This class is used for
41043          instructions that return double word results in the 'ax:dx'
41044          register pair.  Single word values will be allocated either in
41045          'ax' or 'dx'.  For example on i386 the following implements
41046          'rdtsc':
41047
41048               unsigned long long rdtsc (void)
41049               {
41050                 unsigned long long tick;
41051                 __asm__ __volatile__("rdtsc":"=A"(tick));
41052                 return tick;
41053               }
41054
41055          This is not correct on x86-64 as it would allocate tick in
41056          either 'ax' or 'dx'.  You have to use the following variant
41057          instead:
41058
41059               unsigned long long rdtsc (void)
41060               {
41061                 unsigned int tickl, tickh;
41062                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
41063                 return ((unsigned long long)tickh << 32)|tickl;
41064               }
41065
41066     'U'
41067          The call-clobbered integer registers.
41068
41069     'f'
41070          Any 80387 floating-point (stack) register.
41071
41072     't'
41073          Top of 80387 floating-point stack ('%st(0)').
41074
41075     'u'
41076          Second from top of 80387 floating-point stack ('%st(1)').
41077
41078     'y'
41079          Any MMX register.
41080
41081     'x'
41082          Any SSE register.
41083
41084     'v'
41085          Any EVEX encodable SSE register ('%xmm0-%xmm31').
41086
41087     'Yz'
41088          First SSE register ('%xmm0').
41089
41090     'I'
41091          Integer constant in the range 0 ... 31, for 32-bit shifts.
41092
41093     'J'
41094          Integer constant in the range 0 ... 63, for 64-bit shifts.
41095
41096     'K'
41097          Signed 8-bit integer constant.
41098
41099     'L'
41100          '0xFF' or '0xFFFF', for andsi as a zero-extending move.
41101
41102     'M'
41103          0, 1, 2, or 3 (shifts for the 'lea' instruction).
41104
41105     'N'
41106          Unsigned 8-bit integer constant (for 'in' and 'out'
41107          instructions).
41108
41109     'G'
41110          Standard 80387 floating point constant.
41111
41112     'C'
41113          SSE constant zero operand.
41114
41115     'e'
41116          32-bit signed integer constant, or a symbolic reference known
41117          to fit that range (for immediate operands in sign-extending
41118          x86-64 instructions).
41119
41120     'We'
41121          32-bit signed integer constant, or a symbolic reference known
41122          to fit that range (for sign-extending conversion operations
41123          that require non-'VOIDmode' immediate operands).
41124
41125     'Wz'
41126          32-bit unsigned integer constant, or a symbolic reference
41127          known to fit that range (for zero-extending conversion
41128          operations that require non-'VOIDmode' immediate operands).
41129
41130     'Wd'
41131          128-bit integer constant where both the high and low 64-bit
41132          word satisfy the 'e' constraint.
41133
41134     'Z'
41135          32-bit unsigned integer constant, or a symbolic reference
41136          known to fit that range (for immediate operands in
41137          zero-extending x86-64 instructions).
41138
41139     'Tv'
41140          VSIB address operand.
41141
41142     'Ts'
41143          Address operand without segment register.
41144
41145_Xstormy16--'config/stormy16/stormy16.h'_
41146     'a'
41147          Register r0.
41148
41149     'b'
41150          Register r1.
41151
41152     'c'
41153          Register r2.
41154
41155     'd'
41156          Register r8.
41157
41158     'e'
41159          Registers r0 through r7.
41160
41161     't'
41162          Registers r0 and r1.
41163
41164     'y'
41165          The carry register.
41166
41167     'z'
41168          Registers r8 and r9.
41169
41170     'I'
41171          A constant between 0 and 3 inclusive.
41172
41173     'J'
41174          A constant that has exactly one bit set.
41175
41176     'K'
41177          A constant that has exactly one bit clear.
41178
41179     'L'
41180          A constant between 0 and 255 inclusive.
41181
41182     'M'
41183          A constant between -255 and 0 inclusive.
41184
41185     'N'
41186          A constant between -3 and 0 inclusive.
41187
41188     'O'
41189          A constant between 1 and 4 inclusive.
41190
41191     'P'
41192          A constant between -4 and -1 inclusive.
41193
41194     'Q'
41195          A memory reference that is a stack push.
41196
41197     'R'
41198          A memory reference that is a stack pop.
41199
41200     'S'
41201          A memory reference that refers to a constant address of known
41202          value.
41203
41204     'T'
41205          The register indicated by Rx (not implemented yet).
41206
41207     'U'
41208          A constant that is not between 2 and 15 inclusive.
41209
41210     'Z'
41211          The constant 0.
41212
41213_Xtensa--'config/xtensa/constraints.md'_
41214     'a'
41215          General-purpose 32-bit register
41216
41217     'b'
41218          One-bit boolean register
41219
41220     'A'
41221          MAC16 40-bit accumulator register
41222
41223     'I'
41224          Signed 12-bit integer constant, for use in MOVI instructions
41225
41226     'J'
41227          Signed 8-bit integer constant, for use in ADDI instructions
41228
41229     'K'
41230          Integer constant valid for BccI instructions
41231
41232     'L'
41233          Unsigned constant valid for BccUI instructions
41234
41235
41236File: gcc.info,  Node: Asm Labels,  Next: Explicit Register Variables,  Prev: Constraints,  Up: Using Assembly Language with C
41237
412386.47.4 Controlling Names Used in Assembler Code
41239-----------------------------------------------
41240
41241You can specify the name to be used in the assembler code for a C
41242function or variable by writing the 'asm' (or '__asm__') keyword after
41243the declarator.  It is up to you to make sure that the assembler names
41244you choose do not conflict with any other assembler symbols, or
41245reference registers.
41246
41247Assembler names for data:
41248.........................
41249
41250This sample shows how to specify the assembler name for data:
41251
41252     int foo asm ("myfoo") = 2;
41253
41254This specifies that the name to be used for the variable 'foo' in the
41255assembler code should be 'myfoo' rather than the usual '_foo'.
41256
41257 On systems where an underscore is normally prepended to the name of a C
41258variable, this feature allows you to define names for the linker that do
41259not start with an underscore.
41260
41261 GCC does not support using this feature with a non-static local
41262variable since such variables do not have assembler names.  If you are
41263trying to put the variable in a particular register, see *note Explicit
41264Register Variables::.
41265
41266Assembler names for functions:
41267..............................
41268
41269To specify the assembler name for functions, write a declaration for the
41270function before its definition and put 'asm' there, like this:
41271
41272     int func (int x, int y) asm ("MYFUNC");
41273
41274     int func (int x, int y)
41275     {
41276        /* ... */
41277
41278This specifies that the name to be used for the function 'func' in the
41279assembler code should be 'MYFUNC'.
41280
41281
41282File: gcc.info,  Node: Explicit Register Variables,  Next: Size of an asm,  Prev: Asm Labels,  Up: Using Assembly Language with C
41283
412846.47.5 Variables in Specified Registers
41285---------------------------------------
41286
41287GNU C allows you to associate specific hardware registers with C
41288variables.  In almost all cases, allowing the compiler to assign
41289registers produces the best code.  However under certain unusual
41290circumstances, more precise control over the variable storage is
41291required.
41292
41293 Both global and local variables can be associated with a register.  The
41294consequences of performing this association are very different between
41295the two, as explained in the sections below.
41296
41297* Menu:
41298
41299* Global Register Variables::   Variables declared at global scope.
41300* Local Register Variables::    Variables declared within a function.
41301
41302
41303File: gcc.info,  Node: Global Register Variables,  Next: Local Register Variables,  Up: Explicit Register Variables
41304
413056.47.5.1 Defining Global Register Variables
41306...........................................
41307
41308You can define a global register variable and associate it with a
41309specified register like this:
41310
41311     register int *foo asm ("r12");
41312
41313Here 'r12' is the name of the register that should be used.  Note that
41314this is the same syntax used for defining local register variables, but
41315for a global variable the declaration appears outside a function.  The
41316'register' keyword is required, and cannot be combined with 'static'.
41317The register name must be a valid register name for the target platform.
41318
41319 Do not use type qualifiers such as 'const' and 'volatile', as the
41320outcome may be contrary to expectations.  In particular, using the
41321'volatile' qualifier does not fully prevent the compiler from optimizing
41322accesses to the register.
41323
41324 Registers are a scarce resource on most systems and allowing the
41325compiler to manage their usage usually results in the best code.
41326However, under special circumstances it can make sense to reserve some
41327globally.  For example this may be useful in programs such as
41328programming language interpreters that have a couple of global variables
41329that are accessed very often.
41330
41331 After defining a global register variable, for the current compilation
41332unit:
41333
41334   * If the register is a call-saved register, call ABI is affected: the
41335     register will not be restored in function epilogue sequences after
41336     the variable has been assigned.  Therefore, functions cannot safely
41337     return to callers that assume standard ABI.
41338   * Conversely, if the register is a call-clobbered register, making
41339     calls to functions that use standard ABI may lose contents of the
41340     variable.  Such calls may be created by the compiler even if none
41341     are evident in the original program, for example when libgcc
41342     functions are used to make up for unavailable instructions.
41343   * Accesses to the variable may be optimized as usual and the register
41344     remains available for allocation and use in any computations,
41345     provided that observable values of the variable are not affected.
41346   * If the variable is referenced in inline assembly, the type of
41347     access must be provided to the compiler via constraints (*note
41348     Constraints::).  Accesses from basic asms are not supported.
41349
41350 Note that these points _only_ apply to code that is compiled with the
41351definition.  The behavior of code that is merely linked in (for example
41352code from libraries) is not affected.
41353
41354 If you want to recompile source files that do not actually use your
41355global register variable so they do not use the specified register for
41356any other purpose, you need not actually add the global register
41357declaration to their source code.  It suffices to specify the compiler
41358option '-ffixed-REG' (*note Code Gen Options::) to reserve the register.
41359
41360Declaring the variable
41361......................
41362
41363Global register variables cannot have initial values, because an
41364executable file has no means to supply initial contents for a register.
41365
41366 When selecting a register, choose one that is normally saved and
41367restored by function calls on your machine.  This ensures that code
41368which is unaware of this reservation (such as library routines) will
41369restore it before returning.
41370
41371 On machines with register windows, be sure to choose a global register
41372that is not affected magically by the function call mechanism.
41373
41374Using the variable
41375..................
41376
41377When calling routines that are not aware of the reservation, be cautious
41378if those routines call back into code which uses them.  As an example,
41379if you call the system library version of 'qsort', it may clobber your
41380registers during execution, but (if you have selected appropriate
41381registers) it will restore them before returning.  However it will _not_
41382restore them before calling 'qsort''s comparison function.  As a result,
41383global values will not reliably be available to the comparison function
41384unless the 'qsort' function itself is rebuilt.
41385
41386 Similarly, it is not safe to access the global register variables from
41387signal handlers or from more than one thread of control.  Unless you
41388recompile them specially for the task at hand, the system library
41389routines may temporarily use the register for other things.
41390Furthermore, since the register is not reserved exclusively for the
41391variable, accessing it from handlers of asynchronous signals may observe
41392unrelated temporary values residing in the register.
41393
41394 On most machines, 'longjmp' restores to each global register variable
41395the value it had at the time of the 'setjmp'.  On some machines,
41396however, 'longjmp' does not change the value of global register
41397variables.  To be portable, the function that called 'setjmp' should
41398make other arrangements to save the values of the global register
41399variables, and to restore them in a 'longjmp'.  This way, the same thing
41400happens regardless of what 'longjmp' does.
41401
41402
41403File: gcc.info,  Node: Local Register Variables,  Prev: Global Register Variables,  Up: Explicit Register Variables
41404
414056.47.5.2 Specifying Registers for Local Variables
41406.................................................
41407
41408You can define a local register variable and associate it with a
41409specified register like this:
41410
41411     register int *foo asm ("r12");
41412
41413Here 'r12' is the name of the register that should be used.  Note that
41414this is the same syntax used for defining global register variables, but
41415for a local variable the declaration appears within a function.  The
41416'register' keyword is required, and cannot be combined with 'static'.
41417The register name must be a valid register name for the target platform.
41418
41419 Do not use type qualifiers such as 'const' and 'volatile', as the
41420outcome may be contrary to expectations.  In particular, when the
41421'const' qualifier is used, the compiler may substitute the variable with
41422its initializer in 'asm' statements, which may cause the corresponding
41423operand to appear in a different register.
41424
41425 As with global register variables, it is recommended that you choose a
41426register that is normally saved and restored by function calls on your
41427machine, so that calls to library routines will not clobber it.
41428
41429 The only supported use for this feature is to specify registers for
41430input and output operands when calling Extended 'asm' (*note Extended
41431Asm::).  This may be necessary if the constraints for a particular
41432machine don't provide sufficient control to select the desired register.
41433To force an operand into a register, create a local variable and specify
41434the register name after the variable's declaration.  Then use the local
41435variable for the 'asm' operand and specify any constraint letter that
41436matches the register:
41437
41438     register int *p1 asm ("r0") = ...;
41439     register int *p2 asm ("r1") = ...;
41440     register int *result asm ("r0");
41441     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
41442
41443 _Warning:_ In the above example, be aware that a register (for example
41444'r0') can be call-clobbered by subsequent code, including function calls
41445and library calls for arithmetic operators on other variables (for
41446example the initialization of 'p2').  In this case, use temporary
41447variables for expressions between the register assignments:
41448
41449     int t1 = ...;
41450     register int *p1 asm ("r0") = ...;
41451     register int *p2 asm ("r1") = t1;
41452     register int *result asm ("r0");
41453     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
41454
41455 Defining a register variable does not reserve the register.  Other than
41456when invoking the Extended 'asm', the contents of the specified register
41457are not guaranteed.  For this reason, the following uses are explicitly
41458_not_ supported.  If they appear to work, it is only happenstance, and
41459may stop working as intended due to (seemingly) unrelated changes in
41460surrounding code, or even minor changes in the optimization of a future
41461version of gcc:
41462
41463   * Passing parameters to or from Basic 'asm'
41464   * Passing parameters to or from Extended 'asm' without using input or
41465     output operands.
41466   * Passing parameters to or from routines written in assembler (or
41467     other languages) using non-standard calling conventions.
41468
41469 Some developers use Local Register Variables in an attempt to improve
41470gcc's allocation of registers, especially in large functions.  In this
41471case the register name is essentially a hint to the register allocator.
41472While in some instances this can generate better code, improvements are
41473subject to the whims of the allocator/optimizers.  Since there are no
41474guarantees that your improvements won't be lost, this usage of Local
41475Register Variables is discouraged.
41476
41477 On the MIPS platform, there is related use for local register variables
41478with slightly different characteristics (*note Defining coprocessor
41479specifics for MIPS targets: (gccint)MIPS Coprocessors.).
41480
41481
41482File: gcc.info,  Node: Size of an asm,  Prev: Explicit Register Variables,  Up: Using Assembly Language with C
41483
414846.47.6 Size of an 'asm'
41485-----------------------
41486
41487Some targets require that GCC track the size of each instruction used in
41488order to generate correct code.  Because the final length of the code
41489produced by an 'asm' statement is only known by the assembler, GCC must
41490make an estimate as to how big it will be.  It does this by counting the
41491number of instructions in the pattern of the 'asm' and multiplying that
41492by the length of the longest instruction supported by that processor.
41493(When working out the number of instructions, it assumes that any
41494occurrence of a newline or of whatever statement separator character is
41495supported by the assembler -- typically ';' -- indicates the end of an
41496instruction.)
41497
41498 Normally, GCC's estimate is adequate to ensure that correct code is
41499generated, but it is possible to confuse the compiler if you use pseudo
41500instructions or assembler macros that expand into multiple real
41501instructions, or if you use assembler directives that expand to more
41502space in the object file than is needed for a single instruction.  If
41503this happens then the assembler may produce a diagnostic saying that a
41504label is unreachable.
41505
41506 This size is also used for inlining decisions.  If you use 'asm inline'
41507instead of just 'asm', then for inlining purposes the size of the asm is
41508taken as the minimum size, ignoring how many instructions GCC thinks it
41509is.
41510
41511
41512File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Using Assembly Language with C,  Up: C Extensions
41513
415146.48 Alternate Keywords
41515=======================
41516
41517'-ansi' and the various '-std' options disable certain keywords.  This
41518causes trouble when you want to use GNU C extensions, or a
41519general-purpose header file that should be usable by all programs,
41520including ISO C programs.  The keywords 'asm', 'typeof' and 'inline' are
41521not available in programs compiled with '-ansi' or '-std' (although
41522'inline' can be used in a program compiled with '-std=c99' or a later
41523standard).  The ISO C99 keyword 'restrict' is only available when
41524'-std=gnu99' (which will eventually be the default) or '-std=c99' (or
41525the equivalent '-std=iso9899:1999'), or an option for a later standard
41526version, is used.
41527
41528 The way to solve these problems is to put '__' at the beginning and end
41529of each problematical keyword.  For example, use '__asm__' instead of
41530'asm', and '__inline__' instead of 'inline'.
41531
41532 Other C compilers won't accept these alternative keywords; if you want
41533to compile with another compiler, you can define the alternate keywords
41534as macros to replace them with the customary keywords.  It looks like
41535this:
41536
41537     #ifndef __GNUC__
41538     #define __asm__ asm
41539     #endif
41540
41541 '-pedantic' and other options cause warnings for many GNU C extensions.
41542You can prevent such warnings within one expression by writing
41543'__extension__' before the expression.  '__extension__' has no effect
41544aside from this.
41545
41546
41547File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
41548
415496.49 Incomplete 'enum' Types
41550============================
41551
41552You can define an 'enum' tag without specifying its possible values.
41553This results in an incomplete type, much like what you get if you write
41554'struct foo' without describing the elements.  A later declaration that
41555does specify the possible values completes the type.
41556
41557 You cannot allocate variables or storage using the type while it is
41558incomplete.  However, you can work with pointers to that type.
41559
41560 This extension may not be very useful, but it makes the handling of
41561'enum' more consistent with the way 'struct' and 'union' are handled.
41562
41563 This extension is not supported by GNU C++.
41564
41565
41566File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
41567
415686.50 Function Names as Strings
41569==============================
41570
41571GCC provides three magic constants that hold the name of the current
41572function as a string.  In C++11 and later modes, all three are treated
41573as constant expressions and can be used in 'constexpr' constexts.  The
41574first of these constants is '__func__', which is part of the C99
41575standard:
41576
41577 The identifier '__func__' is implicitly declared by the translator as
41578if, immediately following the opening brace of each function definition,
41579the declaration
41580
41581     static const char __func__[] = "function-name";
41582
41583appeared, where function-name is the name of the lexically-enclosing
41584function.  This name is the unadorned name of the function.  As an
41585extension, at file (or, in C++, namespace scope), '__func__' evaluates
41586to the empty string.
41587
41588 '__FUNCTION__' is another name for '__func__', provided for backward
41589compatibility with old versions of GCC.
41590
41591 In C, '__PRETTY_FUNCTION__' is yet another name for '__func__', except
41592that at file scope (or, in C++, namespace scope), it evaluates to the
41593string '"top level"'.  In addition, in C++, '__PRETTY_FUNCTION__'
41594contains the signature of the function as well as its bare name.  For
41595example, this program:
41596
41597     extern "C" int printf (const char *, ...);
41598
41599     class a {
41600      public:
41601       void sub (int i)
41602         {
41603           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
41604           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
41605         }
41606     };
41607
41608     int
41609     main (void)
41610     {
41611       a ax;
41612       ax.sub (0);
41613       return 0;
41614     }
41615
41616gives this output:
41617
41618     __FUNCTION__ = sub
41619     __PRETTY_FUNCTION__ = void a::sub(int)
41620
41621 These identifiers are variables, not preprocessor macros, and may not
41622be used to initialize 'char' arrays or be concatenated with string
41623literals.
41624
41625
41626File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
41627
416286.51 Getting the Return or Frame Address of a Function
41629======================================================
41630
41631These functions may be used to get information about the callers of a
41632function.
41633
41634 -- Built-in Function: void * __builtin_return_address (unsigned int
41635          LEVEL)
41636     This function returns the return address of the current function,
41637     or of one of its callers.  The LEVEL argument is number of frames
41638     to scan up the call stack.  A value of '0' yields the return
41639     address of the current function, a value of '1' yields the return
41640     address of the caller of the current function, and so forth.  When
41641     inlining the expected behavior is that the function returns the
41642     address of the function that is returned to.  To work around this
41643     behavior use the 'noinline' function attribute.
41644
41645     The LEVEL argument must be a constant integer.
41646
41647     On some machines it may be impossible to determine the return
41648     address of any function other than the current one; in such cases,
41649     or when the top of the stack has been reached, this function
41650     returns an unspecified value.  In addition,
41651     '__builtin_frame_address' may be used to determine if the top of
41652     the stack has been reached.
41653
41654     Additional post-processing of the returned value may be needed, see
41655     '__builtin_extract_return_addr'.
41656
41657     The stored representation of the return address in memory may be
41658     different from the address returned by '__builtin_return_address'.
41659     For example, on AArch64 the stored address may be mangled with
41660     return address signing whereas the address returned by
41661     '__builtin_return_address' is not.
41662
41663     Calling this function with a nonzero argument can have
41664     unpredictable effects, including crashing the calling program.  As
41665     a result, calls that are considered unsafe are diagnosed when the
41666     '-Wframe-address' option is in effect.  Such calls should only be
41667     made in debugging situations.
41668
41669     On targets where code addresses are representable as 'void *',
41670          void *addr = __builtin_extract_return_addr (__builtin_return_address (0));
41671     gives the code address where the current function would return.
41672     For example, such an address may be used with 'dladdr' or other
41673     interfaces that work with code addresses.
41674
41675 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
41676     The address as returned by '__builtin_return_address' may have to
41677     be fed through this function to get the actual encoded address.
41678     For example, on the 31-bit S/390 platform the highest bit has to be
41679     masked out, or on SPARC platforms an offset has to be added for the
41680     true next instruction to be executed.
41681
41682     If no fixup is needed, this function simply passes through ADDR.
41683
41684 -- Built-in Function: void * __builtin_frob_return_addr (void *ADDR)
41685     This function does the reverse of '__builtin_extract_return_addr'.
41686
41687 -- Built-in Function: void * __builtin_frame_address (unsigned int
41688          LEVEL)
41689     This function is similar to '__builtin_return_address', but it
41690     returns the address of the function frame rather than the return
41691     address of the function.  Calling '__builtin_frame_address' with a
41692     value of '0' yields the frame address of the current function, a
41693     value of '1' yields the frame address of the caller of the current
41694     function, and so forth.
41695
41696     The frame is the area on the stack that holds local variables and
41697     saved registers.  The frame address is normally the address of the
41698     first word pushed on to the stack by the function.  However, the
41699     exact definition depends upon the processor and the calling
41700     convention.  If the processor has a dedicated frame pointer
41701     register, and the function has a frame, then
41702     '__builtin_frame_address' returns the value of the frame pointer
41703     register.
41704
41705     On some machines it may be impossible to determine the frame
41706     address of any function other than the current one; in such cases,
41707     or when the top of the stack has been reached, this function
41708     returns '0' if the first frame pointer is properly initialized by
41709     the startup code.
41710
41711     Calling this function with a nonzero argument can have
41712     unpredictable effects, including crashing the calling program.  As
41713     a result, calls that are considered unsafe are diagnosed when the
41714     '-Wframe-address' option is in effect.  Such calls should only be
41715     made in debugging situations.
41716
41717
41718File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
41719
417206.52 Using Vector Instructions through Built-in Functions
41721=========================================================
41722
41723On some targets, the instruction set contains SIMD vector instructions
41724which operate on multiple values contained in one large register at the
41725same time.  For example, on the x86 the MMX, 3DNow! and SSE extensions
41726can be used this way.
41727
41728 The first step in using these extensions is to provide the necessary
41729data types.  This should be done using an appropriate 'typedef':
41730
41731     typedef int v4si __attribute__ ((vector_size (16)));
41732
41733The 'int' type specifies the "base type", while the attribute specifies
41734the vector size for the variable, measured in bytes.  For example, the
41735declaration above causes the compiler to set the mode for the 'v4si'
41736type to be 16 bytes wide and divided into 'int' sized units.  For a
4173732-bit 'int' this means a vector of 4 units of 4 bytes, and the
41738corresponding mode of 'foo' is V4SI.
41739
41740 The 'vector_size' attribute is only applicable to integral and floating
41741scalars, although arrays, pointers, and function return values are
41742allowed in conjunction with this construct.  Only sizes that are
41743positive power-of-two multiples of the base type size are currently
41744allowed.
41745
41746 All the basic integer types can be used as base types, both as signed
41747and as unsigned: 'char', 'short', 'int', 'long', 'long long'.  In
41748addition, 'float' and 'double' can be used to build floating-point
41749vector types.
41750
41751 Specifying a combination that is not valid for the current architecture
41752causes GCC to synthesize the instructions using a narrower mode.  For
41753example, if you specify a variable of type 'V4SI' and your architecture
41754does not allow for this specific SIMD type, GCC produces code that uses
417554 'SIs'.
41756
41757 The types defined in this manner can be used with a subset of normal C
41758operations.  Currently, GCC allows using the following operators on
41759these types: '+, -, *, /, unary minus, ^, |, &, ~, %'.
41760
41761 The operations behave like C++ 'valarrays'.  Addition is defined as the
41762addition of the corresponding elements of the operands.  For example, in
41763the code below, each of the 4 elements in A is added to the
41764corresponding 4 elements in B and the resulting vector is stored in C.
41765
41766     typedef int v4si __attribute__ ((vector_size (16)));
41767
41768     v4si a, b, c;
41769
41770     c = a + b;
41771
41772 Subtraction, multiplication, division, and the logical operations
41773operate in a similar manner.  Likewise, the result of using the unary
41774minus or complement operators on a vector type is a vector whose
41775elements are the negative or complemented values of the corresponding
41776elements in the operand.
41777
41778 It is possible to use shifting operators '<<', '>>' on integer-type
41779vectors.  The operation is defined as following: '{a0, a1, ..., an} >>
41780{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'.  Vector
41781operands must have the same number of elements.
41782
41783 For convenience, it is allowed to use a binary vector operation where
41784one operand is a scalar.  In that case the compiler transforms the
41785scalar operand into a vector where each element is the scalar from the
41786operation.  The transformation happens only if the scalar could be
41787safely converted to the vector-element type.  Consider the following
41788code.
41789
41790     typedef int v4si __attribute__ ((vector_size (16)));
41791
41792     v4si a, b, c;
41793     long l;
41794
41795     a = b + 1;    /* a = b + {1,1,1,1}; */
41796     a = 2 * b;    /* a = {2,2,2,2} * b; */
41797
41798     a = l + a;    /* Error, cannot convert long to int. */
41799
41800 Vectors can be subscripted as if the vector were an array with the same
41801number of elements and base type.  Out of bound accesses invoke
41802undefined behavior at run time.  Warnings for out of bound accesses for
41803vector subscription can be enabled with '-Warray-bounds'.
41804
41805 Vector comparison is supported with standard comparison operators: '==,
41806!=, <, <=, >, >='.  Comparison operands can be vector expressions of
41807integer-type or real-type.  Comparison between integer-type vectors and
41808real-type vectors are not supported.  The result of the comparison is a
41809vector of the same width and number of elements as the comparison
41810operands with a signed integral element type.
41811
41812 Vectors are compared element-wise producing 0 when comparison is false
41813and -1 (constant of the appropriate type where all bits are set)
41814otherwise.  Consider the following example.
41815
41816     typedef int v4si __attribute__ ((vector_size (16)));
41817
41818     v4si a = {1,2,3,4};
41819     v4si b = {3,2,1,4};
41820     v4si c;
41821
41822     c = a >  b;     /* The result would be {0, 0,-1, 0}  */
41823     c = a == b;     /* The result would be {0,-1, 0,-1}  */
41824
41825 In C++, the ternary operator '?:' is available.  'a?b:c', where 'b' and
41826'c' are vectors of the same type and 'a' is an integer vector with the
41827same number of elements of the same size as 'b' and 'c', computes all
41828three arguments and creates a vector '{a[0]?b[0]:c[0], a[1]?b[1]:c[1],
41829...}'.  Note that unlike in OpenCL, 'a' is thus interpreted as 'a != 0'
41830and not 'a < 0'.  As in the case of binary operations, this syntax is
41831also accepted when one of 'b' or 'c' is a scalar that is then
41832transformed into a vector.  If both 'b' and 'c' are scalars and the type
41833of 'true?b:c' has the same size as the element type of 'a', then 'b' and
41834'c' are converted to a vector type whose elements have this type and
41835with the same number of elements as 'a'.
41836
41837 In C++, the logic operators '!, &&, ||' are available for vectors.
41838'!v' is equivalent to 'v == 0', 'a && b' is equivalent to 'a!=0 & b!=0'
41839and 'a || b' is equivalent to 'a!=0 | b!=0'.  For mixed operations
41840between a scalar 's' and a vector 'v', 's && v' is equivalent to
41841's?v!=0:0' (the evaluation is short-circuit) and 'v && s' is equivalent
41842to 'v!=0 & (s?-1:0)'.
41843
41844 Vector shuffling is available using functions '__builtin_shuffle (vec,
41845mask)' and '__builtin_shuffle (vec0, vec1, mask)'.  Both functions
41846construct a permutation of elements from one or two vectors and return a
41847vector of the same type as the input vector(s).  The MASK is an integral
41848vector with the same width (W) and element count (N) as the output
41849vector.
41850
41851 The elements of the input vectors are numbered in memory ordering of
41852VEC0 beginning at 0 and VEC1 beginning at N.  The elements of MASK are
41853considered modulo N in the single-operand case and modulo 2*N in the
41854two-operand case.
41855
41856 Consider the following example,
41857
41858     typedef int v4si __attribute__ ((vector_size (16)));
41859
41860     v4si a = {1,2,3,4};
41861     v4si b = {5,6,7,8};
41862     v4si mask1 = {0,1,1,3};
41863     v4si mask2 = {0,4,2,5};
41864     v4si res;
41865
41866     res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
41867     res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
41868
41869 Note that '__builtin_shuffle' is intentionally semantically compatible
41870with the OpenCL 'shuffle' and 'shuffle2' functions.
41871
41872 You can declare variables and use them in function calls and returns,
41873as well as in assignments and some casts.  You can specify a vector type
41874as a return type for a function.  Vector types can also be used as
41875function arguments.  It is possible to cast from one vector type to
41876another, provided they are of the same size (in fact, you can also cast
41877vectors to and from other datatypes of the same size).
41878
41879 You cannot operate between vectors of different lengths or different
41880signedness without a cast.
41881
41882 Vector conversion is available using the '__builtin_convertvector (vec,
41883vectype)' function.  VEC must be an expression with integral or floating
41884vector type and VECTYPE an integral or floating vector type with the
41885same number of elements.  The result has VECTYPE type and value of a C
41886cast of every element of VEC to the element type of VECTYPE.
41887
41888 Consider the following example,
41889     typedef int v4si __attribute__ ((vector_size (16)));
41890     typedef float v4sf __attribute__ ((vector_size (16)));
41891     typedef double v4df __attribute__ ((vector_size (32)));
41892     typedef unsigned long long v4di __attribute__ ((vector_size (32)));
41893
41894     v4si a = {1,-2,3,-4};
41895     v4sf b = {1.5f,-2.5f,3.f,7.f};
41896     v4di c = {1ULL,5ULL,0ULL,10ULL};
41897     v4sf d = __builtin_convertvector (a, v4sf); /* d is {1.f,-2.f,3.f,-4.f} */
41898     /* Equivalent of:
41899        v4sf d = { (float)a[0], (float)a[1], (float)a[2], (float)a[3] }; */
41900     v4df e = __builtin_convertvector (a, v4df); /* e is {1.,-2.,3.,-4.} */
41901     v4df f = __builtin_convertvector (b, v4df); /* f is {1.5,-2.5,3.,7.} */
41902     v4si g = __builtin_convertvector (f, v4si); /* g is {1,-2,3,7} */
41903     v4si h = __builtin_convertvector (c, v4si); /* h is {1,5,0,10} */
41904
41905 Sometimes it is desirable to write code using a mix of generic vector
41906operations (for clarity) and machine-specific vector intrinsics (to
41907access vector instructions that are not exposed via generic built-ins).
41908On x86, intrinsic functions for integer vectors typically use the same
41909vector type '__m128i' irrespective of how they interpret the vector,
41910making it necessary to cast their arguments and return values from/to
41911other vector types.  In C, you can make use of a 'union' type:
41912     #include <immintrin.h>
41913
41914     typedef unsigned char u8x16 __attribute__ ((vector_size (16)));
41915     typedef unsigned int  u32x4 __attribute__ ((vector_size (16)));
41916
41917     typedef union {
41918             __m128i mm;
41919             u8x16   u8;
41920             u32x4   u32;
41921     } v128;
41922
41923for variables that can be used with both built-in operators and x86
41924intrinsics:
41925
41926     v128 x, y = { 0 };
41927     memcpy (&x, ptr, sizeof x);
41928     y.u8  += 0x80;
41929     x.mm  = _mm_adds_epu8 (x.mm, y.mm);
41930     x.u32 &= 0xffffff;
41931
41932     /* Instead of a variable, a compound literal may be used to pass the
41933        return value of an intrinsic call to a function expecting the union: */
41934     v128 foo (v128);
41935     x = foo ((v128) {_mm_adds_epu8 (x.mm, y.mm)});
41936
41937
41938File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
41939
419406.53 Support for 'offsetof'
41941===========================
41942
41943GCC implements for both C and C++ a syntactic extension to implement the
41944'offsetof' macro.
41945
41946     primary:
41947             "__builtin_offsetof" "(" typename "," offsetof_member_designator ")"
41948
41949     offsetof_member_designator:
41950               identifier
41951             | offsetof_member_designator "." identifier
41952             | offsetof_member_designator "[" expr "]"
41953
41954 This extension is sufficient such that
41955
41956     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
41957
41958is a suitable definition of the 'offsetof' macro.  In C++, TYPE may be
41959dependent.  In either case, MEMBER may consist of a single identifier,
41960or a sequence of member accesses and array references.
41961
41962
41963File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
41964
419656.54 Legacy '__sync' Built-in Functions for Atomic Memory Access
41966================================================================
41967
41968The following built-in functions are intended to be compatible with
41969those described in the 'Intel Itanium Processor-specific Application
41970Binary Interface', section 7.4.  As such, they depart from normal GCC
41971practice by not using the '__builtin_' prefix and also by being
41972overloaded so that they work on multiple types.
41973
41974 The definition given in the Intel documentation allows only for the use
41975of the types 'int', 'long', 'long long' or their unsigned counterparts.
41976GCC allows any scalar type that is 1, 2, 4 or 8 bytes in size other than
41977the C type '_Bool' or the C++ type 'bool'.  Operations on pointer
41978arguments are performed as if the operands were of the 'uintptr_t' type.
41979That is, they are not scaled by the size of the type to which the
41980pointer points.
41981
41982 These functions are implemented in terms of the '__atomic' builtins
41983(*note __atomic Builtins::).  They should not be used for new code which
41984should use the '__atomic' builtins instead.
41985
41986 Not all operations are supported by all target processors.  If a
41987particular operation cannot be implemented on the target processor, a
41988warning is generated and a call to an external function is generated.
41989The external function carries the same name as the built-in version,
41990with an additional suffix '_N' where N is the size of the data type.
41991
41992 In most cases, these built-in functions are considered a "full
41993barrier".  That is, no memory operand is moved across the operation,
41994either forward or backward.  Further, instructions are issued as
41995necessary to prevent the processor from speculating loads across the
41996operation and from queuing stores after the operation.
41997
41998 All of the routines are described in the Intel documentation to take
41999"an optional list of variables protected by the memory barrier".  It's
42000not clear what is meant by that; it could mean that _only_ the listed
42001variables are protected, or it could mean a list of additional variables
42002to be protected.  The list is ignored by GCC which treats it as empty.
42003GCC interprets an empty list as meaning that all globally accessible
42004variables should be protected.
42005
42006'TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
42007'TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
42008'TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
42009'TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
42010'TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
42011'TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
42012     These built-in functions perform the operation suggested by the
42013     name, and returns the value that had previously been in memory.
42014     That is, operations on integer operands have the following
42015     semantics.  Operations on pointer arguments are performed as if the
42016     operands were of the 'uintptr_t' type.  That is, they are not
42017     scaled by the size of the type to which the pointer points.
42018
42019          { tmp = *ptr; *ptr OP= value; return tmp; }
42020          { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
42021
42022     The object pointed to by the first argument must be of integer or
42023     pointer type.  It must not be a boolean type.
42024
42025     _Note:_ GCC 4.4 and later implement '__sync_fetch_and_nand' as
42026     '*ptr = ~(tmp & value)' instead of '*ptr = ~tmp & value'.
42027
42028'TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
42029'TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
42030'TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
42031'TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
42032'TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
42033'TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
42034     These built-in functions perform the operation suggested by the
42035     name, and return the new value.  That is, operations on integer
42036     operands have the following semantics.  Operations on pointer
42037     operands are performed as if the operand's type were 'uintptr_t'.
42038
42039          { *ptr OP= value; return *ptr; }
42040          { *ptr = ~(*ptr & value); return *ptr; }   // nand
42041
42042     The same constraints on arguments apply as for the corresponding
42043     '__sync_op_and_fetch' built-in functions.
42044
42045     _Note:_ GCC 4.4 and later implement '__sync_nand_and_fetch' as
42046     '*ptr = ~(*ptr & value)' instead of '*ptr = ~*ptr & value'.
42047
42048'bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
42049'TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
42050     These built-in functions perform an atomic compare and swap.  That
42051     is, if the current value of '*PTR' is OLDVAL, then write NEWVAL
42052     into '*PTR'.
42053
42054     The "bool" version returns 'true' if the comparison is successful
42055     and NEWVAL is written.  The "val" version returns the contents of
42056     '*PTR' before the operation.
42057
42058'__sync_synchronize (...)'
42059     This built-in function issues a full memory barrier.
42060
42061'TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
42062     This built-in function, as described by Intel, is not a traditional
42063     test-and-set operation, but rather an atomic exchange operation.
42064     It writes VALUE into '*PTR', and returns the previous contents of
42065     '*PTR'.
42066
42067     Many targets have only minimal support for such locks, and do not
42068     support a full exchange operation.  In this case, a target may
42069     support reduced functionality here by which the _only_ valid value
42070     to store is the immediate constant 1.  The exact value actually
42071     stored in '*PTR' is implementation defined.
42072
42073     This built-in function is not a full barrier, but rather an
42074     "acquire barrier".  This means that references after the operation
42075     cannot move to (or be speculated to) before the operation, but
42076     previous memory stores may not be globally visible yet, and
42077     previous memory loads may not yet be satisfied.
42078
42079'void __sync_lock_release (TYPE *ptr, ...)'
42080     This built-in function releases the lock acquired by
42081     '__sync_lock_test_and_set'.  Normally this means writing the
42082     constant 0 to '*PTR'.
42083
42084     This built-in function is not a full barrier, but rather a "release
42085     barrier".  This means that all previous memory stores are globally
42086     visible, and all previous memory loads have been satisfied, but
42087     following memory reads are not prevented from being speculated to
42088     before the barrier.
42089
42090
42091File: gcc.info,  Node: __atomic Builtins,  Next: Integer Overflow Builtins,  Prev: __sync Builtins,  Up: C Extensions
42092
420936.55 Built-in Functions for Memory Model Aware Atomic Operations
42094================================================================
42095
42096The following built-in functions approximately match the requirements
42097for the C++11 memory model.  They are all identified by being prefixed
42098with '__atomic' and most are overloaded so that they work with multiple
42099types.
42100
42101 These functions are intended to replace the legacy '__sync' builtins.
42102The main difference is that the memory order that is requested is a
42103parameter to the functions.  New code should always use the '__atomic'
42104builtins rather than the '__sync' builtins.
42105
42106 Note that the '__atomic' builtins assume that programs will conform to
42107the C++11 memory model.  In particular, they assume that programs are
42108free of data races.  See the C++11 standard for detailed requirements.
42109
42110 The '__atomic' builtins can be used with any integral scalar or pointer
42111type that is 1, 2, 4, or 8 bytes in length.  16-byte integral types are
42112also allowed if '__int128' (*note __int128::) is supported by the
42113architecture.
42114
42115 The four non-arithmetic functions (load, store, exchange, and
42116compare_exchange) all have a generic version as well.  This generic
42117version works on any data type.  It uses the lock-free built-in function
42118if the specific data type size makes that possible; otherwise, an
42119external call is left to be resolved at run time.  This external call is
42120the same format with the addition of a 'size_t' parameter inserted as
42121the first parameter indicating the size of the object being pointed to.
42122All objects must be the same size.
42123
42124 There are 6 different memory orders that can be specified.  These map
42125to the C++11 memory orders with the same names, see the C++11 standard
42126or the GCC wiki on atomic synchronization
42127(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for detailed
42128definitions.  Individual targets may also support additional memory
42129orders for use on specific architectures.  Refer to the target
42130documentation for details of these.
42131
42132 An atomic operation can both constrain code motion and be mapped to
42133hardware instructions for synchronization between threads (e.g., a
42134fence).  To which extent this happens is controlled by the memory
42135orders, which are listed here in approximately ascending order of
42136strength.  The description of each memory order is only meant to roughly
42137illustrate the effects and is not a specification; see the C++11 memory
42138model for precise semantics.
42139
42140'__ATOMIC_RELAXED'
42141     Implies no inter-thread ordering constraints.
42142'__ATOMIC_CONSUME'
42143     This is currently implemented using the stronger '__ATOMIC_ACQUIRE'
42144     memory order because of a deficiency in C++11's semantics for
42145     'memory_order_consume'.
42146'__ATOMIC_ACQUIRE'
42147     Creates an inter-thread happens-before constraint from the release
42148     (or stronger) semantic store to this acquire load.  Can prevent
42149     hoisting of code to before the operation.
42150'__ATOMIC_RELEASE'
42151     Creates an inter-thread happens-before constraint to acquire (or
42152     stronger) semantic loads that read from this release store.  Can
42153     prevent sinking of code to after the operation.
42154'__ATOMIC_ACQ_REL'
42155     Combines the effects of both '__ATOMIC_ACQUIRE' and
42156     '__ATOMIC_RELEASE'.
42157'__ATOMIC_SEQ_CST'
42158     Enforces total ordering with all other '__ATOMIC_SEQ_CST'
42159     operations.
42160
42161 Note that in the C++11 memory model, _fences_ (e.g.,
42162'__atomic_thread_fence') take effect in combination with other atomic
42163operations on specific memory locations (e.g., atomic loads); operations
42164on specific memory locations do not necessarily affect other operations
42165in the same way.
42166
42167 Target architectures are encouraged to provide their own patterns for
42168each of the atomic built-in functions.  If no target is provided, the
42169original non-memory model set of '__sync' atomic built-in functions are
42170used, along with any required synchronization fences surrounding it in
42171order to achieve the proper behavior.  Execution in this case is subject
42172to the same restrictions as those built-in functions.
42173
42174 If there is no pattern or mechanism to provide a lock-free instruction
42175sequence, a call is made to an external routine with the same parameters
42176to be resolved at run time.
42177
42178 When implementing patterns for these built-in functions, the memory
42179order parameter can be ignored as long as the pattern implements the
42180most restrictive '__ATOMIC_SEQ_CST' memory order.  Any of the other
42181memory orders execute correctly with this memory order but they may not
42182execute as efficiently as they could with a more appropriate
42183implementation of the relaxed requirements.
42184
42185 Note that the C++11 standard allows for the memory order parameter to
42186be determined at run time rather than at compile time.  These built-in
42187functions map any run-time value to '__ATOMIC_SEQ_CST' rather than
42188invoke a runtime library call or inline a switch statement.  This is
42189standard compliant, safe, and the simplest approach for now.
42190
42191 The memory order parameter is a signed int, but only the lower 16 bits
42192are reserved for the memory order.  The remainder of the signed int is
42193reserved for target use and should be 0.  Use of the predefined atomic
42194values ensures proper usage.
42195
42196 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memorder)
42197     This built-in function implements an atomic load operation.  It
42198     returns the contents of '*PTR'.
42199
42200     The valid memory order variants are '__ATOMIC_RELAXED',
42201     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', and '__ATOMIC_CONSUME'.
42202
42203 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
42204          memorder)
42205     This is the generic version of an atomic load.  It returns the
42206     contents of '*PTR' in '*RET'.
42207
42208 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
42209          memorder)
42210     This built-in function implements an atomic store operation.  It
42211     writes 'VAL' into '*PTR'.
42212
42213     The valid memory order variants are '__ATOMIC_RELAXED',
42214     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
42215
42216 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
42217          memorder)
42218     This is the generic version of an atomic store.  It stores the
42219     value of '*VAL' into '*PTR'.
42220
42221 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
42222          int memorder)
42223     This built-in function implements an atomic exchange operation.  It
42224     writes VAL into '*PTR', and returns the previous contents of
42225     '*PTR'.
42226
42227     The valid memory order variants are '__ATOMIC_RELAXED',
42228     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', '__ATOMIC_RELEASE', and
42229     '__ATOMIC_ACQ_REL'.
42230
42231 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val,
42232          TYPE *ret, int memorder)
42233     This is the generic version of an atomic exchange.  It stores the
42234     contents of '*VAL' into '*PTR'.  The original value of '*PTR' is
42235     copied into '*RET'.
42236
42237 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, TYPE
42238          *expected, TYPE desired, bool weak, int success_memorder, int
42239          failure_memorder)
42240     This built-in function implements an atomic compare and exchange
42241     operation.  This compares the contents of '*PTR' with the contents
42242     of '*EXPECTED'.  If equal, the operation is a _read-modify-write_
42243     operation that writes DESIRED into '*PTR'.  If they are not equal,
42244     the operation is a _read_ and the current contents of '*PTR' are
42245     written into '*EXPECTED'.  WEAK is 'true' for weak
42246     compare_exchange, which may fail spuriously, and 'false' for the
42247     strong variation, which never fails spuriously.  Many targets only
42248     offer the strong variation and ignore the parameter.  When in
42249     doubt, use the strong variation.
42250
42251     If DESIRED is written into '*PTR' then 'true' is returned and
42252     memory is affected according to the memory order specified by
42253     SUCCESS_MEMORDER.  There are no restrictions on what memory order
42254     can be used here.
42255
42256     Otherwise, 'false' is returned and memory is affected according to
42257     FAILURE_MEMORDER.  This memory order cannot be '__ATOMIC_RELEASE'
42258     nor '__ATOMIC_ACQ_REL'.  It also cannot be a stronger order than
42259     that specified by SUCCESS_MEMORDER.
42260
42261 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE
42262          *expected, TYPE *desired, bool weak, int success_memorder, int
42263          failure_memorder)
42264     This built-in function implements the generic version of
42265     '__atomic_compare_exchange'.  The function is virtually identical
42266     to '__atomic_compare_exchange_n', except the desired value is also
42267     a pointer.
42268
42269 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, int
42270          memorder)
42271 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, int
42272          memorder)
42273 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, int
42274          memorder)
42275 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, int
42276          memorder)
42277 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
42278          memorder)
42279 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
42280          int memorder)
42281     These built-in functions perform the operation suggested by the
42282     name, and return the result of the operation.  Operations on
42283     pointer arguments are performed as if the operands were of the
42284     'uintptr_t' type.  That is, they are not scaled by the size of the
42285     type to which the pointer points.
42286
42287          { *ptr OP= val; return *ptr; }
42288          { *ptr = ~(*ptr & val); return *ptr; } // nand
42289
42290     The object pointed to by the first argument must be of integer or
42291     pointer type.  It must not be a boolean type.  All memory orders
42292     are valid.
42293
42294 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, int
42295          memorder)
42296 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, int
42297          memorder)
42298 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, int
42299          memorder)
42300 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, int
42301          memorder)
42302 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
42303          memorder)
42304 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
42305          int memorder)
42306     These built-in functions perform the operation suggested by the
42307     name, and return the value that had previously been in '*PTR'.
42308     Operations on pointer arguments are performed as if the operands
42309     were of the 'uintptr_t' type.  That is, they are not scaled by the
42310     size of the type to which the pointer points.
42311
42312          { tmp = *ptr; *ptr OP= val; return tmp; }
42313          { tmp = *ptr; *ptr = ~(*ptr & val); return tmp; } // nand
42314
42315     The same constraints on arguments apply as for the corresponding
42316     '__atomic_op_fetch' built-in functions.  All memory orders are
42317     valid.
42318
42319 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
42320          memorder)
42321
42322     This built-in function performs an atomic test-and-set operation on
42323     the byte at '*PTR'.  The byte is set to some implementation defined
42324     nonzero "set" value and the return value is 'true' if and only if
42325     the previous contents were "set".  It should be only used for
42326     operands of type 'bool' or 'char'.  For other types only part of
42327     the value may be set.
42328
42329     All memory orders are valid.
42330
42331 -- Built-in Function: void __atomic_clear (bool *ptr, int memorder)
42332
42333     This built-in function performs an atomic clear operation on
42334     '*PTR'.  After the operation, '*PTR' contains 0.  It should be only
42335     used for operands of type 'bool' or 'char' and in conjunction with
42336     '__atomic_test_and_set'.  For other types it may only clear
42337     partially.  If the type is not 'bool' prefer using
42338     '__atomic_store'.
42339
42340     The valid memory order variants are '__ATOMIC_RELAXED',
42341     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
42342
42343 -- Built-in Function: void __atomic_thread_fence (int memorder)
42344
42345     This built-in function acts as a synchronization fence between
42346     threads based on the specified memory order.
42347
42348     All memory orders are valid.
42349
42350 -- Built-in Function: void __atomic_signal_fence (int memorder)
42351
42352     This built-in function acts as a synchronization fence between a
42353     thread and signal handlers based in the same thread.
42354
42355     All memory orders are valid.
42356
42357 -- Built-in Function: bool __atomic_always_lock_free (size_t size, void
42358          *ptr)
42359
42360     This built-in function returns 'true' if objects of SIZE bytes
42361     always generate lock-free atomic instructions for the target
42362     architecture.  SIZE must resolve to a compile-time constant and the
42363     result also resolves to a compile-time constant.
42364
42365     PTR is an optional pointer to the object that may be used to
42366     determine alignment.  A value of 0 indicates typical alignment
42367     should be used.  The compiler may also ignore this parameter.
42368
42369          if (__atomic_always_lock_free (sizeof (long long), 0))
42370
42371 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
42372          *ptr)
42373
42374     This built-in function returns 'true' if objects of SIZE bytes
42375     always generate lock-free atomic instructions for the target
42376     architecture.  If the built-in function is not known to be
42377     lock-free, a call is made to a runtime routine named
42378     '__atomic_is_lock_free'.
42379
42380     PTR is an optional pointer to the object that may be used to
42381     determine alignment.  A value of 0 indicates typical alignment
42382     should be used.  The compiler may also ignore this parameter.
42383
42384
42385File: gcc.info,  Node: Integer Overflow Builtins,  Next: x86 specific memory model extensions for transactional memory,  Prev: __atomic Builtins,  Up: C Extensions
42386
423876.56 Built-in Functions to Perform Arithmetic with Overflow Checking
42388====================================================================
42389
42390The following built-in functions allow performing simple arithmetic
42391operations together with checking whether the operations overflowed.
42392
42393 -- Built-in Function: bool __builtin_add_overflow (TYPE1 a, TYPE2 b,
42394          TYPE3 *res)
42395 -- Built-in Function: bool __builtin_sadd_overflow (int a, int b, int
42396          *res)
42397 -- Built-in Function: bool __builtin_saddl_overflow (long int a, long
42398          int b, long int *res)
42399 -- Built-in Function: bool __builtin_saddll_overflow (long long int a,
42400          long long int b, long long int *res)
42401 -- Built-in Function: bool __builtin_uadd_overflow (unsigned int a,
42402          unsigned int b, unsigned int *res)
42403 -- Built-in Function: bool __builtin_uaddl_overflow (unsigned long int
42404          a, unsigned long int b, unsigned long int *res)
42405 -- Built-in Function: bool __builtin_uaddll_overflow (unsigned long
42406          long int a, unsigned long long int b, unsigned long long int
42407          *res)
42408
42409     These built-in functions promote the first two operands into
42410     infinite precision signed type and perform addition on those
42411     promoted operands.  The result is then cast to the type the third
42412     pointer argument points to and stored there.  If the stored result
42413     is equal to the infinite precision result, the built-in functions
42414     return 'false', otherwise they return 'true'.  As the addition is
42415     performed in infinite signed precision, these built-in functions
42416     have fully defined behavior for all argument values.
42417
42418     The first built-in function allows arbitrary integral types for
42419     operands and the result type must be pointer to some integral type
42420     other than enumerated or boolean type, the rest of the built-in
42421     functions have explicit integer types.
42422
42423     The compiler will attempt to use hardware instructions to implement
42424     these built-in functions where possible, like conditional jump on
42425     overflow after addition, conditional jump on carry etc.
42426
42427 -- Built-in Function: bool __builtin_sub_overflow (TYPE1 a, TYPE2 b,
42428          TYPE3 *res)
42429 -- Built-in Function: bool __builtin_ssub_overflow (int a, int b, int
42430          *res)
42431 -- Built-in Function: bool __builtin_ssubl_overflow (long int a, long
42432          int b, long int *res)
42433 -- Built-in Function: bool __builtin_ssubll_overflow (long long int a,
42434          long long int b, long long int *res)
42435 -- Built-in Function: bool __builtin_usub_overflow (unsigned int a,
42436          unsigned int b, unsigned int *res)
42437 -- Built-in Function: bool __builtin_usubl_overflow (unsigned long int
42438          a, unsigned long int b, unsigned long int *res)
42439 -- Built-in Function: bool __builtin_usubll_overflow (unsigned long
42440          long int a, unsigned long long int b, unsigned long long int
42441          *res)
42442
42443     These built-in functions are similar to the add overflow checking
42444     built-in functions above, except they perform subtraction, subtract
42445     the second argument from the first one, instead of addition.
42446
42447 -- Built-in Function: bool __builtin_mul_overflow (TYPE1 a, TYPE2 b,
42448          TYPE3 *res)
42449 -- Built-in Function: bool __builtin_smul_overflow (int a, int b, int
42450          *res)
42451 -- Built-in Function: bool __builtin_smull_overflow (long int a, long
42452          int b, long int *res)
42453 -- Built-in Function: bool __builtin_smulll_overflow (long long int a,
42454          long long int b, long long int *res)
42455 -- Built-in Function: bool __builtin_umul_overflow (unsigned int a,
42456          unsigned int b, unsigned int *res)
42457 -- Built-in Function: bool __builtin_umull_overflow (unsigned long int
42458          a, unsigned long int b, unsigned long int *res)
42459 -- Built-in Function: bool __builtin_umulll_overflow (unsigned long
42460          long int a, unsigned long long int b, unsigned long long int
42461          *res)
42462
42463     These built-in functions are similar to the add overflow checking
42464     built-in functions above, except they perform multiplication,
42465     instead of addition.
42466
42467 The following built-in functions allow checking if simple arithmetic
42468operation would overflow.
42469
42470 -- Built-in Function: bool __builtin_add_overflow_p (TYPE1 a, TYPE2 b,
42471          TYPE3 c)
42472 -- Built-in Function: bool __builtin_sub_overflow_p (TYPE1 a, TYPE2 b,
42473          TYPE3 c)
42474 -- Built-in Function: bool __builtin_mul_overflow_p (TYPE1 a, TYPE2 b,
42475          TYPE3 c)
42476
42477     These built-in functions are similar to '__builtin_add_overflow',
42478     '__builtin_sub_overflow', or '__builtin_mul_overflow', except that
42479     they don't store the result of the arithmetic operation anywhere
42480     and the last argument is not a pointer, but some expression with
42481     integral type other than enumerated or boolean type.
42482
42483     The built-in functions promote the first two operands into infinite
42484     precision signed type and perform addition on those promoted
42485     operands.  The result is then cast to the type of the third
42486     argument.  If the cast result is equal to the infinite precision
42487     result, the built-in functions return 'false', otherwise they
42488     return 'true'.  The value of the third argument is ignored, just
42489     the side effects in the third argument are evaluated, and no
42490     integral argument promotions are performed on the last argument.
42491     If the third argument is a bit-field, the type used for the result
42492     cast has the precision and signedness of the given bit-field,
42493     rather than precision and signedness of the underlying type.
42494
42495     For example, the following macro can be used to portably check, at
42496     compile-time, whether or not adding two constant integers will
42497     overflow, and perform the addition only when it is known to be safe
42498     and not to trigger a '-Woverflow' warning.
42499
42500          #define INT_ADD_OVERFLOW_P(a, b) \
42501             __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0)
42502
42503          enum {
42504              A = INT_MAX, B = 3,
42505              C = INT_ADD_OVERFLOW_P (A, B) ? 0 : A + B,
42506              D = __builtin_add_overflow_p (1, SCHAR_MAX, (signed char) 0)
42507          };
42508
42509     The compiler will attempt to use hardware instructions to implement
42510     these built-in functions where possible, like conditional jump on
42511     overflow after addition, conditional jump on carry etc.
42512
42513
42514File: gcc.info,  Node: x86 specific memory model extensions for transactional memory,  Next: Object Size Checking,  Prev: Integer Overflow Builtins,  Up: C Extensions
42515
425166.57 x86-Specific Memory Model Extensions for Transactional Memory
42517==================================================================
42518
42519The x86 architecture supports additional memory ordering flags to mark
42520critical sections for hardware lock elision.  These must be specified in
42521addition to an existing memory order to atomic intrinsics.
42522
42523'__ATOMIC_HLE_ACQUIRE'
42524     Start lock elision on a lock variable.  Memory order must be
42525     '__ATOMIC_ACQUIRE' or stronger.
42526'__ATOMIC_HLE_RELEASE'
42527     End lock elision on a lock variable.  Memory order must be
42528     '__ATOMIC_RELEASE' or stronger.
42529
42530 When a lock acquire fails, it is required for good performance to abort
42531the transaction quickly.  This can be done with a '_mm_pause'.
42532
42533     #include <immintrin.h> // For _mm_pause
42534
42535     int lockvar;
42536
42537     /* Acquire lock with lock elision */
42538     while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
42539         _mm_pause(); /* Abort failed transaction */
42540     ...
42541     /* Free lock with lock elision */
42542     __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
42543
42544
42545File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: x86 specific memory model extensions for transactional memory,  Up: C Extensions
42546
425476.58 Object Size Checking Built-in Functions
42548============================================
42549
42550GCC implements a limited buffer overflow protection mechanism that can
42551prevent some buffer overflow attacks by determining the sizes of objects
42552into which data is about to be written and preventing the writes when
42553the size isn't sufficient.  The built-in functions described below yield
42554the best results when used together and when optimization is enabled.
42555For example, to detect object sizes across function boundaries or to
42556follow pointer assignments through non-trivial control flow they rely on
42557various optimization passes enabled with '-O2'.  However, to a limited
42558extent, they can be used without optimization as well.
42559
42560 -- Built-in Function: size_t __builtin_object_size (const void * PTR,
42561          int TYPE)
42562     is a built-in construct that returns a constant number of bytes
42563     from PTR to the end of the object PTR pointer points to (if known
42564     at compile time).  To determine the sizes of dynamically allocated
42565     objects the function relies on the allocation functions called to
42566     obtain the storage to be declared with the 'alloc_size' attribute
42567     (*note Common Function Attributes::).  '__builtin_object_size'
42568     never evaluates its arguments for side effects.  If there are any
42569     side effects in them, it returns '(size_t) -1' for TYPE 0 or 1 and
42570     '(size_t) 0' for TYPE 2 or 3.  If there are multiple objects PTR
42571     can point to and all of them are known at compile time, the
42572     returned number is the maximum of remaining byte counts in those
42573     objects if TYPE & 2 is 0 and minimum if nonzero.  If it is not
42574     possible to determine which objects PTR points to at compile time,
42575     '__builtin_object_size' should return '(size_t) -1' for TYPE 0 or 1
42576     and '(size_t) 0' for TYPE 2 or 3.
42577
42578     TYPE is an integer constant from 0 to 3.  If the least significant
42579     bit is clear, objects are whole variables, if it is set, a closest
42580     surrounding subobject is considered the object a pointer points to.
42581     The second bit determines if maximum or minimum of remaining bytes
42582     is computed.
42583
42584          struct V { char buf1[10]; int b; char buf2[10]; } var;
42585          char *p = &var.buf1[1], *q = &var.b;
42586
42587          /* Here the object p points to is var.  */
42588          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
42589          /* The subobject p points to is var.buf1.  */
42590          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
42591          /* The object q points to is var.  */
42592          assert (__builtin_object_size (q, 0)
42593                  == (char *) (&var + 1) - (char *) &var.b);
42594          /* The subobject q points to is var.b.  */
42595          assert (__builtin_object_size (q, 1) == sizeof (var.b));
42596
42597 There are built-in functions added for many common string operation
42598functions, e.g., for 'memcpy' '__builtin___memcpy_chk' built-in is
42599provided.  This built-in has an additional last argument, which is the
42600number of bytes remaining in the object the DEST argument points to or
42601'(size_t) -1' if the size is not known.
42602
42603 The built-in functions are optimized into the normal string functions
42604like 'memcpy' if the last argument is '(size_t) -1' or if it is known at
42605compile time that the destination object will not be overflowed.  If the
42606compiler can determine at compile time that the object will always be
42607overflowed, it issues a warning.
42608
42609 The intended use can be e.g.
42610
42611     #undef memcpy
42612     #define bos0(dest) __builtin_object_size (dest, 0)
42613     #define memcpy(dest, src, n) \
42614       __builtin___memcpy_chk (dest, src, n, bos0 (dest))
42615
42616     char *volatile p;
42617     char buf[10];
42618     /* It is unknown what object p points to, so this is optimized
42619        into plain memcpy - no checking is possible.  */
42620     memcpy (p, "abcde", n);
42621     /* Destination is known and length too.  It is known at compile
42622        time there will be no overflow.  */
42623     memcpy (&buf[5], "abcde", 5);
42624     /* Destination is known, but the length is not known at compile time.
42625        This will result in __memcpy_chk call that can check for overflow
42626        at run time.  */
42627     memcpy (&buf[5], "abcde", n);
42628     /* Destination is known and it is known at compile time there will
42629        be overflow.  There will be a warning and __memcpy_chk call that
42630        will abort the program at run time.  */
42631     memcpy (&buf[6], "abcde", 5);
42632
42633 Such built-in functions are provided for 'memcpy', 'mempcpy',
42634'memmove', 'memset', 'strcpy', 'stpcpy', 'strncpy', 'strcat' and
42635'strncat'.
42636
42637 There are also checking built-in functions for formatted output
42638functions.
42639     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
42640     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
42641                                   const char *fmt, ...);
42642     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
42643                                   va_list ap);
42644     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
42645                                    const char *fmt, va_list ap);
42646
42647 The added FLAG argument is passed unchanged to '__sprintf_chk' etc.
42648functions and can contain implementation specific flags on what
42649additional security measures the checking function might take, such as
42650handling '%n' differently.
42651
42652 The OS argument is the object size S points to, like in the other
42653built-in functions.  There is a small difference in the behavior though,
42654if OS is '(size_t) -1', the built-in functions are optimized into the
42655non-checking functions only if FLAG is 0, otherwise the checking
42656function is called with OS argument set to '(size_t) -1'.
42657
42658 In addition to this, there are checking built-in functions
42659'__builtin___printf_chk', '__builtin___vprintf_chk',
42660'__builtin___fprintf_chk' and '__builtin___vfprintf_chk'.  These have
42661just one additional argument, FLAG, right before format string FMT.  If
42662the compiler is able to optimize them to 'fputc' etc. functions, it
42663does, otherwise the checking function is called and the FLAG argument
42664passed to it.
42665
42666
42667File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
42668
426696.59 Other Built-in Functions Provided by GCC
42670=============================================
42671
42672GCC provides a large number of built-in functions other than the ones
42673mentioned above.  Some of these are for internal use in the processing
42674of exceptions or variable-length argument lists and are not documented
42675here because they may change from time to time; we do not recommend
42676general use of these functions.
42677
42678 The remaining functions are provided for optimization purposes.
42679
42680 With the exception of built-ins that have library equivalents such as
42681the standard C library functions discussed below, or that expand to
42682library calls, GCC built-in functions are always expanded inline and
42683thus do not have corresponding entry points and their address cannot be
42684obtained.  Attempting to use them in an expression other than a function
42685call results in a compile-time error.
42686
42687 GCC includes built-in versions of many of the functions in the standard
42688C library.  These functions come in two forms: one whose names start
42689with the '__builtin_' prefix, and the other without.  Both forms have
42690the same type (including prototype), the same address (when their
42691address is taken), and the same meaning as the C library functions even
42692if you specify the '-fno-builtin' option *note C Dialect Options::).
42693Many of these functions are only optimized in certain cases; if they are
42694not optimized in a particular case, a call to the library function is
42695emitted.
42696
42697 Outside strict ISO C mode ('-ansi', '-std=c90', '-std=c99' or
42698'-std=c11'), the functions '_exit', 'alloca', 'bcmp', 'bzero',
42699'dcgettext', 'dgettext', 'dremf', 'dreml', 'drem', 'exp10f', 'exp10l',
42700'exp10', 'ffsll', 'ffsl', 'ffs', 'fprintf_unlocked', 'fputs_unlocked',
42701'gammaf', 'gammal', 'gamma', 'gammaf_r', 'gammal_r', 'gamma_r',
42702'gettext', 'index', 'isascii', 'j0f', 'j0l', 'j0', 'j1f', 'j1l', 'j1',
42703'jnf', 'jnl', 'jn', 'lgammaf_r', 'lgammal_r', 'lgamma_r', 'mempcpy',
42704'pow10f', 'pow10l', 'pow10', 'printf_unlocked', 'rindex', 'roundeven',
42705'roundevenf', 'roudnevenl', 'scalbf', 'scalbl', 'scalb', 'signbit',
42706'signbitf', 'signbitl', 'signbitd32', 'signbitd64', 'signbitd128',
42707'significandf', 'significandl', 'significand', 'sincosf', 'sincosl',
42708'sincos', 'stpcpy', 'stpncpy', 'strcasecmp', 'strdup', 'strfmon',
42709'strncasecmp', 'strndup', 'strnlen', 'toascii', 'y0f', 'y0l', 'y0',
42710'y1f', 'y1l', 'y1', 'ynf', 'ynl' and 'yn' may be handled as built-in
42711functions.  All these functions have corresponding versions prefixed
42712with '__builtin_', which may be used even in strict C90 mode.
42713
42714 The ISO C99 functions '_Exit', 'acoshf', 'acoshl', 'acosh', 'asinhf',
42715'asinhl', 'asinh', 'atanhf', 'atanhl', 'atanh', 'cabsf', 'cabsl',
42716'cabs', 'cacosf', 'cacoshf', 'cacoshl', 'cacosh', 'cacosl', 'cacos',
42717'cargf', 'cargl', 'carg', 'casinf', 'casinhf', 'casinhl', 'casinh',
42718'casinl', 'casin', 'catanf', 'catanhf', 'catanhl', 'catanh', 'catanl',
42719'catan', 'cbrtf', 'cbrtl', 'cbrt', 'ccosf', 'ccoshf', 'ccoshl', 'ccosh',
42720'ccosl', 'ccos', 'cexpf', 'cexpl', 'cexp', 'cimagf', 'cimagl', 'cimag',
42721'clogf', 'clogl', 'clog', 'conjf', 'conjl', 'conj', 'copysignf',
42722'copysignl', 'copysign', 'cpowf', 'cpowl', 'cpow', 'cprojf', 'cprojl',
42723'cproj', 'crealf', 'creall', 'creal', 'csinf', 'csinhf', 'csinhl',
42724'csinh', 'csinl', 'csin', 'csqrtf', 'csqrtl', 'csqrt', 'ctanf',
42725'ctanhf', 'ctanhl', 'ctanh', 'ctanl', 'ctan', 'erfcf', 'erfcl', 'erfc',
42726'erff', 'erfl', 'erf', 'exp2f', 'exp2l', 'exp2', 'expm1f', 'expm1l',
42727'expm1', 'fdimf', 'fdiml', 'fdim', 'fmaf', 'fmal', 'fmaxf', 'fmaxl',
42728'fmax', 'fma', 'fminf', 'fminl', 'fmin', 'hypotf', 'hypotl', 'hypot',
42729'ilogbf', 'ilogbl', 'ilogb', 'imaxabs', 'isblank', 'iswblank',
42730'lgammaf', 'lgammal', 'lgamma', 'llabs', 'llrintf', 'llrintl', 'llrint',
42731'llroundf', 'llroundl', 'llround', 'log1pf', 'log1pl', 'log1p', 'log2f',
42732'log2l', 'log2', 'logbf', 'logbl', 'logb', 'lrintf', 'lrintl', 'lrint',
42733'lroundf', 'lroundl', 'lround', 'nearbyintf', 'nearbyintl', 'nearbyint',
42734'nextafterf', 'nextafterl', 'nextafter', 'nexttowardf', 'nexttowardl',
42735'nexttoward', 'remainderf', 'remainderl', 'remainder', 'remquof',
42736'remquol', 'remquo', 'rintf', 'rintl', 'rint', 'roundf', 'roundl',
42737'round', 'scalblnf', 'scalblnl', 'scalbln', 'scalbnf', 'scalbnl',
42738'scalbn', 'snprintf', 'tgammaf', 'tgammal', 'tgamma', 'truncf',
42739'truncl', 'trunc', 'vfscanf', 'vscanf', 'vsnprintf' and 'vsscanf' are
42740handled as built-in functions except in strict ISO C90 mode ('-ansi' or
42741'-std=c90').
42742
42743 There are also built-in versions of the ISO C99 functions 'acosf',
42744'acosl', 'asinf', 'asinl', 'atan2f', 'atan2l', 'atanf', 'atanl',
42745'ceilf', 'ceill', 'cosf', 'coshf', 'coshl', 'cosl', 'expf', 'expl',
42746'fabsf', 'fabsl', 'floorf', 'floorl', 'fmodf', 'fmodl', 'frexpf',
42747'frexpl', 'ldexpf', 'ldexpl', 'log10f', 'log10l', 'logf', 'logl',
42748'modfl', 'modf', 'powf', 'powl', 'sinf', 'sinhf', 'sinhl', 'sinl',
42749'sqrtf', 'sqrtl', 'tanf', 'tanhf', 'tanhl' and 'tanl' that are
42750recognized in any mode since ISO C90 reserves these names for the
42751purpose to which ISO C99 puts them.  All these functions have
42752corresponding versions prefixed with '__builtin_'.
42753
42754 There are also built-in functions '__builtin_fabsfN',
42755'__builtin_fabsfNx', '__builtin_copysignfN' and '__builtin_copysignfNx',
42756corresponding to the TS 18661-3 functions 'fabsfN', 'fabsfNx',
42757'copysignfN' and 'copysignfNx', for supported types '_FloatN' and
42758'_FloatNx'.
42759
42760 There are also GNU extension functions 'clog10', 'clog10f' and
42761'clog10l' which names are reserved by ISO C99 for future use.  All these
42762functions have versions prefixed with '__builtin_'.
42763
42764 The ISO C94 functions 'iswalnum', 'iswalpha', 'iswcntrl', 'iswdigit',
42765'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace', 'iswupper',
42766'iswxdigit', 'towlower' and 'towupper' are handled as built-in functions
42767except in strict ISO C90 mode ('-ansi' or '-std=c90').
42768
42769 The ISO C90 functions 'abort', 'abs', 'acos', 'asin', 'atan2', 'atan',
42770'calloc', 'ceil', 'cosh', 'cos', 'exit', 'exp', 'fabs', 'floor', 'fmod',
42771'fprintf', 'fputs', 'free', 'frexp', 'fscanf', 'isalnum', 'isalpha',
42772'iscntrl', 'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct',
42773'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper', 'labs', 'ldexp',
42774'log10', 'log', 'malloc', 'memchr', 'memcmp', 'memcpy', 'memset',
42775'modf', 'pow', 'printf', 'putchar', 'puts', 'realloc', 'scanf', 'sinh',
42776'sin', 'snprintf', 'sprintf', 'sqrt', 'sscanf', 'strcat', 'strchr',
42777'strcmp', 'strcpy', 'strcspn', 'strlen', 'strncat', 'strncmp',
42778'strncpy', 'strpbrk', 'strrchr', 'strspn', 'strstr', 'tanh', 'tan',
42779'vfprintf', 'vprintf' and 'vsprintf' are all recognized as built-in
42780functions unless '-fno-builtin' is specified (or '-fno-builtin-FUNCTION'
42781is specified for an individual function).  All of these functions have
42782corresponding versions prefixed with '__builtin_'.
42783
42784 GCC provides built-in versions of the ISO C99 floating-point comparison
42785macros that avoid raising exceptions for unordered operands.  They have
42786the same names as the standard macros ( 'isgreater', 'isgreaterequal',
42787'isless', 'islessequal', 'islessgreater', and 'isunordered') , with
42788'__builtin_' prefixed.  We intend for a library implementor to be able
42789to simply '#define' each standard macro to its built-in equivalent.  In
42790the same fashion, GCC provides 'fpclassify', 'isfinite', 'isinf_sign',
42791'isnormal' and 'signbit' built-ins used with '__builtin_' prefixed.  The
42792'isinf' and 'isnan' built-in functions appear both with and without the
42793'__builtin_' prefix.
42794
42795 -- Built-in Function: void *__builtin_alloca (size_t size)
42796     The '__builtin_alloca' function must be called at block scope.  The
42797     function allocates an object SIZE bytes large on the stack of the
42798     calling function.  The object is aligned on the default stack
42799     alignment boundary for the target determined by the
42800     '__BIGGEST_ALIGNMENT__' macro.  The '__builtin_alloca' function
42801     returns a pointer to the first byte of the allocated object.  The
42802     lifetime of the allocated object ends just before the calling
42803     function returns to its caller.  This is so even when
42804     '__builtin_alloca' is called within a nested block.
42805
42806     For example, the following function allocates eight objects of 'n'
42807     bytes each on the stack, storing a pointer to each in consecutive
42808     elements of the array 'a'.  It then passes the array to function
42809     'g' which can safely use the storage pointed to by each of the
42810     array elements.
42811
42812          void f (unsigned n)
42813          {
42814            void *a [8];
42815            for (int i = 0; i != 8; ++i)
42816              a [i] = __builtin_alloca (n);
42817
42818            g (a, n);   // safe
42819          }
42820
42821     Since the '__builtin_alloca' function doesn't validate its argument
42822     it is the responsibility of its caller to make sure the argument
42823     doesn't cause it to exceed the stack size limit.  The
42824     '__builtin_alloca' function is provided to make it possible to
42825     allocate on the stack arrays of bytes with an upper bound that may
42826     be computed at run time.  Since C99 Variable Length Arrays offer
42827     similar functionality under a portable, more convenient, and safer
42828     interface they are recommended instead, in both C99 and C++
42829     programs where GCC provides them as an extension.  *Note Variable
42830     Length::, for details.
42831
42832 -- Built-in Function: void *__builtin_alloca_with_align (size_t size,
42833          size_t alignment)
42834     The '__builtin_alloca_with_align' function must be called at block
42835     scope.  The function allocates an object SIZE bytes large on the
42836     stack of the calling function.  The allocated object is aligned on
42837     the boundary specified by the argument ALIGNMENT whose unit is
42838     given in bits (not bytes).  The SIZE argument must be positive and
42839     not exceed the stack size limit.  The ALIGNMENT argument must be a
42840     constant integer expression that evaluates to a power of 2 greater
42841     than or equal to 'CHAR_BIT' and less than some unspecified maximum.
42842     Invocations with other values are rejected with an error indicating
42843     the valid bounds.  The function returns a pointer to the first byte
42844     of the allocated object.  The lifetime of the allocated object ends
42845     at the end of the block in which the function was called.  The
42846     allocated storage is released no later than just before the calling
42847     function returns to its caller, but may be released at the end of
42848     the block in which the function was called.
42849
42850     For example, in the following function the call to 'g' is unsafe
42851     because when 'overalign' is non-zero, the space allocated by
42852     '__builtin_alloca_with_align' may have been released at the end of
42853     the 'if' statement in which it was called.
42854
42855          void f (unsigned n, bool overalign)
42856          {
42857            void *p;
42858            if (overalign)
42859              p = __builtin_alloca_with_align (n, 64 /* bits */);
42860            else
42861              p = __builtin_alloc (n);
42862
42863            g (p, n);   // unsafe
42864          }
42865
42866     Since the '__builtin_alloca_with_align' function doesn't validate
42867     its SIZE argument it is the responsibility of its caller to make
42868     sure the argument doesn't cause it to exceed the stack size limit.
42869     The '__builtin_alloca_with_align' function is provided to make it
42870     possible to allocate on the stack overaligned arrays of bytes with
42871     an upper bound that may be computed at run time.  Since C99
42872     Variable Length Arrays offer the same functionality under a
42873     portable, more convenient, and safer interface they are recommended
42874     instead, in both C99 and C++ programs where GCC provides them as an
42875     extension.  *Note Variable Length::, for details.
42876
42877 -- Built-in Function: void *__builtin_alloca_with_align_and_max (size_t
42878          size, size_t alignment, size_t max_size)
42879     Similar to '__builtin_alloca_with_align' but takes an extra
42880     argument specifying an upper bound for SIZE in case its value
42881     cannot be computed at compile time, for use by '-fstack-usage',
42882     '-Wstack-usage' and '-Walloca-larger-than'.  MAX_SIZE must be a
42883     constant integer expression, it has no effect on code generation
42884     and no attempt is made to check its compatibility with SIZE.
42885
42886 -- Built-in Function: bool __builtin_has_attribute (TYPE-OR-EXPRESSION,
42887          ATTRIBUTE)
42888     The '__builtin_has_attribute' function evaluates to an integer
42889     constant expression equal to 'true' if the symbol or type
42890     referenced by the TYPE-OR-EXPRESSION argument has been declared
42891     with the ATTRIBUTE referenced by the second argument.  For an
42892     TYPE-OR-EXPRESSION argument that does not reference a symbol, since
42893     attributes do not apply to expressions the built-in consider the
42894     type of the argument.  Neither argument is evaluated.  The
42895     TYPE-OR-EXPRESSION argument is subject to the same restrictions as
42896     the argument to 'typeof' (*note Typeof::).  The ATTRIBUTE argument
42897     is an attribute name optionally followed by a comma-separated list
42898     of arguments enclosed in parentheses.  Both forms of attribute
42899     names--with and without double leading and trailing
42900     underscores--are recognized.  *Note Attribute Syntax::, for
42901     details.  When no attribute arguments are specified for an
42902     attribute that expects one or more arguments the function returns
42903     'true' if TYPE-OR-EXPRESSION has been declared with the attribute
42904     regardless of the attribute argument values.  Arguments provided
42905     for an attribute that expects some are validated and matched up to
42906     the provided number.  The function returns 'true' if all provided
42907     arguments match.  For example, the first call to the function below
42908     evaluates to 'true' because 'x' is declared with the 'aligned'
42909     attribute but the second call evaluates to 'false' because 'x' is
42910     declared 'aligned (8)' and not 'aligned (4)'.
42911
42912          __attribute__ ((aligned (8))) int x;
42913          _Static_assert (__builtin_has_attribute (x, aligned), "aligned");
42914          _Static_assert (!__builtin_has_attribute (x, aligned (4)), "aligned (4)");
42915
42916     Due to a limitation the '__builtin_has_attribute' function returns
42917     'false' for the 'mode' attribute even if the type or variable
42918     referenced by the TYPE-OR-EXPRESSION argument was declared with
42919     one.  The function is also not supported with labels, and in C with
42920     enumerators.
42921
42922     Note that unlike the '__has_attribute' preprocessor operator which
42923     is suitable for use in '#if' preprocessing directives
42924     '__builtin_has_attribute' is an intrinsic function that is not
42925     recognized in such contexts.
42926
42927 -- Built-in Function: TYPE __builtin_speculation_safe_value (TYPE val,
42928          TYPE failval)
42929
42930     This built-in function can be used to help mitigate against unsafe
42931     speculative execution.  TYPE may be any integral type or any
42932     pointer type.
42933
42934       1. If the CPU is not speculatively executing the code, then VAL
42935          is returned.
42936       2. If the CPU is executing speculatively then either:
42937             * The function may cause execution to pause until it is
42938               known that the code is no-longer being executed
42939               speculatively (in which case VAL can be returned, as
42940               above); or
42941             * The function may use target-dependent speculation
42942               tracking state to cause FAILVAL to be returned when it is
42943               known that speculative execution has incorrectly
42944               predicted a conditional branch operation.
42945
42946     The second argument, FAILVAL, is optional and defaults to zero if
42947     omitted.
42948
42949     GCC defines the preprocessor macro
42950     '__HAVE_BUILTIN_SPECULATION_SAFE_VALUE' for targets that have been
42951     updated to support this builtin.
42952
42953     The built-in function can be used where a variable appears to be
42954     used in a safe way, but the CPU, due to speculative execution may
42955     temporarily ignore the bounds checks.  Consider, for example, the
42956     following function:
42957
42958          int array[500];
42959          int f (unsigned untrusted_index)
42960          {
42961            if (untrusted_index < 500)
42962              return array[untrusted_index];
42963            return 0;
42964          }
42965
42966     If the function is called repeatedly with 'untrusted_index' less
42967     than the limit of 500, then a branch predictor will learn that the
42968     block of code that returns a value stored in 'array' will be
42969     executed.  If the function is subsequently called with an
42970     out-of-range value it will still try to execute that block of code
42971     first until the CPU determines that the prediction was incorrect
42972     (the CPU will unwind any incorrect operations at that point).
42973     However, depending on how the result of the function is used, it
42974     might be possible to leave traces in the cache that can reveal what
42975     was stored at the out-of-bounds location.  The built-in function
42976     can be used to provide some protection against leaking data in this
42977     way by changing the code to:
42978
42979          int array[500];
42980          int f (unsigned untrusted_index)
42981          {
42982            if (untrusted_index < 500)
42983              return array[__builtin_speculation_safe_value (untrusted_index)];
42984            return 0;
42985          }
42986
42987     The built-in function will either cause execution to stall until
42988     the conditional branch has been fully resolved, or it may permit
42989     speculative execution to continue, but using 0 instead of
42990     'untrusted_value' if that exceeds the limit.
42991
42992     If accessing any memory location is potentially unsafe when
42993     speculative execution is incorrect, then the code can be rewritten
42994     as
42995
42996          int array[500];
42997          int f (unsigned untrusted_index)
42998          {
42999            if (untrusted_index < 500)
43000              return *__builtin_speculation_safe_value (&array[untrusted_index], NULL);
43001            return 0;
43002          }
43003
43004     which will cause a 'NULL' pointer to be used for the unsafe case.
43005
43006 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
43007
43008     You can use the built-in function '__builtin_types_compatible_p' to
43009     determine whether two types are the same.
43010
43011     This built-in function returns 1 if the unqualified versions of the
43012     types TYPE1 and TYPE2 (which are types, not expressions) are
43013     compatible, 0 otherwise.  The result of this built-in function can
43014     be used in integer constant expressions.
43015
43016     This built-in function ignores top level qualifiers (e.g., 'const',
43017     'volatile').  For example, 'int' is equivalent to 'const int'.
43018
43019     The type 'int[]' and 'int[5]' are compatible.  On the other hand,
43020     'int' and 'char *' are not compatible, even if the size of their
43021     types, on the particular architecture are the same.  Also, the
43022     amount of pointer indirection is taken into account when
43023     determining similarity.  Consequently, 'short *' is not similar to
43024     'short **'.  Furthermore, two types that are typedefed are
43025     considered compatible if their underlying types are compatible.
43026
43027     An 'enum' type is not considered to be compatible with another
43028     'enum' type even if both are compatible with the same integer type;
43029     this is what the C standard specifies.  For example, 'enum {foo,
43030     bar}' is not similar to 'enum {hot, dog}'.
43031
43032     You typically use this function in code whose execution varies
43033     depending on the arguments' types.  For example:
43034
43035          #define foo(x)                                                  \
43036            ({                                                           \
43037              typeof (x) tmp = (x);                                       \
43038              if (__builtin_types_compatible_p (typeof (x), long double)) \
43039                tmp = foo_long_double (tmp);                              \
43040              else if (__builtin_types_compatible_p (typeof (x), double)) \
43041                tmp = foo_double (tmp);                                   \
43042              else if (__builtin_types_compatible_p (typeof (x), float))  \
43043                tmp = foo_float (tmp);                                    \
43044              else                                                        \
43045                abort ();                                                 \
43046              tmp;                                                        \
43047            })
43048
43049     _Note:_ This construct is only available for C.
43050
43051 -- Built-in Function: TYPE __builtin_call_with_static_chain (CALL_EXP,
43052          POINTER_EXP)
43053
43054     The CALL_EXP expression must be a function call, and the
43055     POINTER_EXP expression must be a pointer.  The POINTER_EXP is
43056     passed to the function call in the target's static chain location.
43057     The result of builtin is the result of the function call.
43058
43059     _Note:_ This builtin is only available for C.  This builtin can be
43060     used to call Go closures from C.
43061
43062 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
43063          EXP2)
43064
43065     You can use the built-in function '__builtin_choose_expr' to
43066     evaluate code depending on the value of a constant expression.
43067     This built-in function returns EXP1 if CONST_EXP, which is an
43068     integer constant expression, is nonzero.  Otherwise it returns
43069     EXP2.
43070
43071     This built-in function is analogous to the '? :' operator in C,
43072     except that the expression returned has its type unaltered by
43073     promotion rules.  Also, the built-in function does not evaluate the
43074     expression that is not chosen.  For example, if CONST_EXP evaluates
43075     to 'true', EXP2 is not evaluated even if it has side effects.
43076
43077     This built-in function can return an lvalue if the chosen argument
43078     is an lvalue.
43079
43080     If EXP1 is returned, the return type is the same as EXP1's type.
43081     Similarly, if EXP2 is returned, its return type is the same as
43082     EXP2.
43083
43084     Example:
43085
43086          #define foo(x)                                                    \
43087            __builtin_choose_expr (                                         \
43088              __builtin_types_compatible_p (typeof (x), double),            \
43089              foo_double (x),                                               \
43090              __builtin_choose_expr (                                       \
43091                __builtin_types_compatible_p (typeof (x), float),           \
43092                foo_float (x),                                              \
43093                /* The void expression results in a compile-time error  \
43094                   when assigning the result to something.  */          \
43095                (void)0))
43096
43097     _Note:_ This construct is only available for C.  Furthermore, the
43098     unused expression (EXP1 or EXP2 depending on the value of
43099     CONST_EXP) may still generate syntax errors.  This may change in
43100     future revisions.
43101
43102 -- Built-in Function: TYPE __builtin_tgmath (FUNCTIONS, ARGUMENTS)
43103
43104     The built-in function '__builtin_tgmath', available only for C and
43105     Objective-C, calls a function determined according to the rules of
43106     '<tgmath.h>' macros.  It is intended to be used in implementations
43107     of that header, so that expansions of macros from that header only
43108     expand each of their arguments once, to avoid problems when calls
43109     to such macros are nested inside the arguments of other calls to
43110     such macros; in addition, it results in better diagnostics for
43111     invalid calls to '<tgmath.h>' macros than implementations using
43112     other GNU C language features.  For example, the 'pow' type-generic
43113     macro might be defined as:
43114
43115          #define pow(a, b) __builtin_tgmath (powf, pow, powl, \
43116                                              cpowf, cpow, cpowl, a, b)
43117
43118     The arguments to '__builtin_tgmath' are at least two pointers to
43119     functions, followed by the arguments to the type-generic macro
43120     (which will be passed as arguments to the selected function).  All
43121     the pointers to functions must be pointers to prototyped functions,
43122     none of which may have variable arguments, and all of which must
43123     have the same number of parameters; the number of parameters of the
43124     first function determines how many arguments to '__builtin_tgmath'
43125     are interpreted as function pointers, and how many as the arguments
43126     to the called function.
43127
43128     The types of the specified functions must all be different, but
43129     related to each other in the same way as a set of functions that
43130     may be selected between by a macro in '<tgmath.h>'.  This means
43131     that the functions are parameterized by a floating-point type T,
43132     different for each such function.  The function return types may
43133     all be the same type, or they may be T for each function, or they
43134     may be the real type corresponding to T for each function (if some
43135     of the types T are complex).  Likewise, for each parameter
43136     position, the type of the parameter in that position may always be
43137     the same type, or may be T for each function (this case must apply
43138     for at least one parameter position), or may be the real type
43139     corresponding to T for each function.
43140
43141     The standard rules for '<tgmath.h>' macros are used to find a
43142     common type U from the types of the arguments for parameters whose
43143     types vary between the functions; complex integer types (a GNU
43144     extension) are treated like '_Complex double' for this purpose (or
43145     '_Complex _Float64' if all the function return types are the same
43146     '_FloatN' or '_FloatNx' type).  If the function return types vary,
43147     or are all the same integer type, the function called is the one
43148     for which T is U, and it is an error if there is no such function.
43149     If the function return types are all the same floating-point type,
43150     the type-generic macro is taken to be one of those from TS 18661
43151     that rounds the result to a narrower type; if there is a function
43152     for which T is U, it is called, and otherwise the first function,
43153     if any, for which T has at least the range and precision of U is
43154     called, and it is an error if there is no such function.
43155
43156 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
43157
43158     The built-in function '__builtin_complex' is provided for use in
43159     implementing the ISO C11 macros 'CMPLXF', 'CMPLX' and 'CMPLXL'.
43160     REAL and IMAG must have the same type, a real binary floating-point
43161     type, and the result has the corresponding complex type with real
43162     and imaginary parts REAL and IMAG.  Unlike 'REAL + I * IMAG', this
43163     works even when infinities, NaNs and negative zeros are involved.
43164
43165 -- Built-in Function: int __builtin_constant_p (EXP)
43166     You can use the built-in function '__builtin_constant_p' to
43167     determine if a value is known to be constant at compile time and
43168     hence that GCC can perform constant-folding on expressions
43169     involving that value.  The argument of the function is the value to
43170     test.  The function returns the integer 1 if the argument is known
43171     to be a compile-time constant and 0 if it is not known to be a
43172     compile-time constant.  A return of 0 does not indicate that the
43173     value is _not_ a constant, but merely that GCC cannot prove it is a
43174     constant with the specified value of the '-O' option.
43175
43176     You typically use this function in an embedded application where
43177     memory is a critical resource.  If you have some complex
43178     calculation, you may want it to be folded if it involves constants,
43179     but need to call a function if it does not.  For example:
43180
43181          #define Scale_Value(X)      \
43182            (__builtin_constant_p (X) \
43183            ? ((X) * SCALE + OFFSET) : Scale (X))
43184
43185     You may use this built-in function in either a macro or an inline
43186     function.  However, if you use it in an inlined function and pass
43187     an argument of the function as the argument to the built-in, GCC
43188     never returns 1 when you call the inline function with a string
43189     constant or compound literal (*note Compound Literals::) and does
43190     not return 1 when you pass a constant numeric value to the inline
43191     function unless you specify the '-O' option.
43192
43193     You may also use '__builtin_constant_p' in initializers for static
43194     data.  For instance, you can write
43195
43196          static const int table[] = {
43197             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
43198             /* ... */
43199          };
43200
43201     This is an acceptable initializer even if EXPRESSION is not a
43202     constant expression, including the case where
43203     '__builtin_constant_p' returns 1 because EXPRESSION can be folded
43204     to a constant but EXPRESSION contains operands that are not
43205     otherwise permitted in a static initializer (for example, '0 && foo
43206     ()').  GCC must be more conservative about evaluating the built-in
43207     in this case, because it has no opportunity to perform
43208     optimization.
43209
43210 -- Built-in Function: bool __builtin_is_constant_evaluated (void)
43211     The '__builtin_is_constant_evaluated' function is available only in
43212     C++.  The built-in is intended to be used by implementations of the
43213     'std::is_constant_evaluated' C++ function.  Programs should make
43214     use of the latter function rather than invoking the built-in
43215     directly.
43216
43217     The main use case of the built-in is to determine whether a
43218     'constexpr' function is being called in a 'constexpr' context.  A
43219     call to the function evaluates to a core constant expression with
43220     the value 'true' if and only if it occurs within the evaluation of
43221     an expression or conversion that is manifestly constant-evaluated
43222     as defined in the C++ standard.  Manifestly constant-evaluated
43223     contexts include constant-expressions, the conditions of 'constexpr
43224     if' statements, constraint-expressions, and initializers of
43225     variables usable in constant expressions.  For more details refer
43226     to the latest revision of the C++ standard.
43227
43228 -- Built-in Function: long __builtin_expect (long EXP, long C)
43229     You may use '__builtin_expect' to provide the compiler with branch
43230     prediction information.  In general, you should prefer to use
43231     actual profile feedback for this ('-fprofile-arcs'), as programmers
43232     are notoriously bad at predicting how their programs actually
43233     perform.  However, there are applications in which this data is
43234     hard to collect.
43235
43236     The return value is the value of EXP, which should be an integral
43237     expression.  The semantics of the built-in are that it is expected
43238     that EXP == C.  For example:
43239
43240          if (__builtin_expect (x, 0))
43241            foo ();
43242
43243     indicates that we do not expect to call 'foo', since we expect 'x'
43244     to be zero.  Since you are limited to integral expressions for EXP,
43245     you should use constructions such as
43246
43247          if (__builtin_expect (ptr != NULL, 1))
43248            foo (*ptr);
43249
43250     when testing pointer or floating-point values.
43251
43252     For the purposes of branch prediction optimizations, the
43253     probability that a '__builtin_expect' expression is 'true' is
43254     controlled by GCC's 'builtin-expect-probability' parameter, which
43255     defaults to 90%.
43256
43257     You can also use '__builtin_expect_with_probability' to explicitly
43258     assign a probability value to individual expressions.  If the
43259     built-in is used in a loop construct, the provided probability will
43260     influence the expected number of iterations made by loop
43261     optimizations.
43262
43263 -- Built-in Function: long __builtin_expect_with_probability
43264     (long EXP, long C, double PROBABILITY)
43265
43266     This function has the same semantics as '__builtin_expect', but the
43267     caller provides the expected probability that EXP == C.  The last
43268     argument, PROBABILITY, is a floating-point value in the range 0.0
43269     to 1.0, inclusive.  The PROBABILITY argument must be constant
43270     floating-point expression.
43271
43272 -- Built-in Function: void __builtin_trap (void)
43273     This function causes the program to exit abnormally.  GCC
43274     implements this function by using a target-dependent mechanism
43275     (such as intentionally executing an illegal instruction) or by
43276     calling 'abort'.  The mechanism used may vary from release to
43277     release so you should not rely on any particular implementation.
43278
43279 -- Built-in Function: void __builtin_unreachable (void)
43280     If control flow reaches the point of the '__builtin_unreachable',
43281     the program is undefined.  It is useful in situations where the
43282     compiler cannot deduce the unreachability of the code.
43283
43284     One such case is immediately following an 'asm' statement that
43285     either never terminates, or one that transfers control elsewhere
43286     and never returns.  In this example, without the
43287     '__builtin_unreachable', GCC issues a warning that control reaches
43288     the end of a non-void function.  It also generates code to return
43289     after the 'asm'.
43290
43291          int f (int c, int v)
43292          {
43293            if (c)
43294              {
43295                return v;
43296              }
43297            else
43298              {
43299                asm("jmp error_handler");
43300                __builtin_unreachable ();
43301              }
43302          }
43303
43304     Because the 'asm' statement unconditionally transfers control out
43305     of the function, control never reaches the end of the function
43306     body.  The '__builtin_unreachable' is in fact unreachable and
43307     communicates this fact to the compiler.
43308
43309     Another use for '__builtin_unreachable' is following a call a
43310     function that never returns but that is not declared
43311     '__attribute__((noreturn))', as in this example:
43312
43313          void function_that_never_returns (void);
43314
43315          int g (int c)
43316          {
43317            if (c)
43318              {
43319                return 1;
43320              }
43321            else
43322              {
43323                function_that_never_returns ();
43324                __builtin_unreachable ();
43325              }
43326          }
43327
43328 -- Built-in Function: void * __builtin_assume_aligned (const void *EXP,
43329          size_t ALIGN, ...)
43330     This function returns its first argument, and allows the compiler
43331     to assume that the returned pointer is at least ALIGN bytes
43332     aligned.  This built-in can have either two or three arguments, if
43333     it has three, the third argument should have integer type, and if
43334     it is nonzero means misalignment offset.  For example:
43335
43336          void *x = __builtin_assume_aligned (arg, 16);
43337
43338     means that the compiler can assume 'x', set to 'arg', is at least
43339     16-byte aligned, while:
43340
43341          void *x = __builtin_assume_aligned (arg, 32, 8);
43342
43343     means that the compiler can assume for 'x', set to 'arg', that
43344     '(char *) x - 8' is 32-byte aligned.
43345
43346 -- Built-in Function: int __builtin_LINE ()
43347     This function is the equivalent of the preprocessor '__LINE__'
43348     macro and returns a constant integer expression that evaluates to
43349     the line number of the invocation of the built-in.  When used as a
43350     C++ default argument for a function F, it returns the line number
43351     of the call to F.
43352
43353 -- Built-in Function: const char * __builtin_FUNCTION ()
43354     This function is the equivalent of the '__FUNCTION__' symbol and
43355     returns an address constant pointing to the name of the function
43356     from which the built-in was invoked, or the empty string if the
43357     invocation is not at function scope.  When used as a C++ default
43358     argument for a function F, it returns the name of F's caller or the
43359     empty string if the call was not made at function scope.
43360
43361 -- Built-in Function: const char * __builtin_FILE ()
43362     This function is the equivalent of the preprocessor '__FILE__'
43363     macro and returns an address constant pointing to the file name
43364     containing the invocation of the built-in, or the empty string if
43365     the invocation is not at function scope.  When used as a C++
43366     default argument for a function F, it returns the file name of the
43367     call to F or the empty string if the call was not made at function
43368     scope.
43369
43370     For example, in the following, each call to function 'foo' will
43371     print a line similar to '"file.c:123: foo: message"' with the name
43372     of the file and the line number of the 'printf' call, the name of
43373     the function 'foo', followed by the word 'message'.
43374
43375          const char*
43376          function (const char *func = __builtin_FUNCTION ())
43377          {
43378            return func;
43379          }
43380
43381          void foo (void)
43382          {
43383            printf ("%s:%i: %s: message\n", file (), line (), function ());
43384          }
43385
43386 -- Built-in Function: void __builtin___clear_cache (void *BEGIN, void
43387          *END)
43388     This function is used to flush the processor's instruction cache
43389     for the region of memory between BEGIN inclusive and END exclusive.
43390     Some targets require that the instruction cache be flushed, after
43391     modifying memory containing code, in order to obtain deterministic
43392     behavior.
43393
43394     If the target does not require instruction cache flushes,
43395     '__builtin___clear_cache' has no effect.  Otherwise either
43396     instructions are emitted in-line to clear the instruction cache or
43397     a call to the '__clear_cache' function in libgcc is made.
43398
43399 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
43400     This function is used to minimize cache-miss latency by moving data
43401     into a cache before it is accessed.  You can insert calls to
43402     '__builtin_prefetch' into code for which you know addresses of data
43403     in memory that is likely to be accessed soon.  If the target
43404     supports them, data prefetch instructions are generated.  If the
43405     prefetch is done early enough before the access then the data will
43406     be in the cache by the time it is accessed.
43407
43408     The value of ADDR is the address of the memory to prefetch.  There
43409     are two optional arguments, RW and LOCALITY.  The value of RW is a
43410     compile-time constant one or zero; one means that the prefetch is
43411     preparing for a write to the memory address and zero, the default,
43412     means that the prefetch is preparing for a read.  The value
43413     LOCALITY must be a compile-time constant integer between zero and
43414     three.  A value of zero means that the data has no temporal
43415     locality, so it need not be left in the cache after the access.  A
43416     value of three means that the data has a high degree of temporal
43417     locality and should be left in all levels of cache possible.
43418     Values of one and two mean, respectively, a low or moderate degree
43419     of temporal locality.  The default is three.
43420
43421          for (i = 0; i < n; i++)
43422            {
43423              a[i] = a[i] + b[i];
43424              __builtin_prefetch (&a[i+j], 1, 1);
43425              __builtin_prefetch (&b[i+j], 0, 1);
43426              /* ... */
43427            }
43428
43429     Data prefetch does not generate faults if ADDR is invalid, but the
43430     address expression itself must be valid.  For example, a prefetch
43431     of 'p->next' does not fault if 'p->next' is not a valid address,
43432     but evaluation faults if 'p' is not a valid address.
43433
43434     If the target does not support data prefetch, the address
43435     expression is evaluated if it includes side effects but no other
43436     code is generated and GCC does not issue a warning.
43437
43438 -- Built-in Function: size_t __builtin_object_size (const void * PTR,
43439          int TYPE)
43440     Returns the size of an object pointed to by PTR.  *Note Object Size
43441     Checking::, for a detailed description of the function.
43442
43443 -- Built-in Function: double __builtin_huge_val (void)
43444     Returns a positive infinity, if supported by the floating-point
43445     format, else 'DBL_MAX'.  This function is suitable for implementing
43446     the ISO C macro 'HUGE_VAL'.
43447
43448 -- Built-in Function: float __builtin_huge_valf (void)
43449     Similar to '__builtin_huge_val', except the return type is 'float'.
43450
43451 -- Built-in Function: long double __builtin_huge_vall (void)
43452     Similar to '__builtin_huge_val', except the return type is 'long
43453     double'.
43454
43455 -- Built-in Function: _FloatN __builtin_huge_valfN (void)
43456     Similar to '__builtin_huge_val', except the return type is
43457     '_FloatN'.
43458
43459 -- Built-in Function: _FloatNx __builtin_huge_valfNx (void)
43460     Similar to '__builtin_huge_val', except the return type is
43461     '_FloatNx'.
43462
43463 -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
43464          int, ...)
43465     This built-in implements the C99 fpclassify functionality.  The
43466     first five int arguments should be the target library's notion of
43467     the possible FP classes and are used for return values.  They must
43468     be constant values and they must appear in this order: 'FP_NAN',
43469     'FP_INFINITE', 'FP_NORMAL', 'FP_SUBNORMAL' and 'FP_ZERO'.  The
43470     ellipsis is for exactly one floating-point value to classify.  GCC
43471     treats the last argument as type-generic, which means it does not
43472     do default promotion from float to double.
43473
43474 -- Built-in Function: double __builtin_inf (void)
43475     Similar to '__builtin_huge_val', except a warning is generated if
43476     the target floating-point format does not support infinities.
43477
43478 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
43479     Similar to '__builtin_inf', except the return type is '_Decimal32'.
43480
43481 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
43482     Similar to '__builtin_inf', except the return type is '_Decimal64'.
43483
43484 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
43485     Similar to '__builtin_inf', except the return type is
43486     '_Decimal128'.
43487
43488 -- Built-in Function: float __builtin_inff (void)
43489     Similar to '__builtin_inf', except the return type is 'float'.
43490     This function is suitable for implementing the ISO C99 macro
43491     'INFINITY'.
43492
43493 -- Built-in Function: long double __builtin_infl (void)
43494     Similar to '__builtin_inf', except the return type is 'long
43495     double'.
43496
43497 -- Built-in Function: _FloatN __builtin_inffN (void)
43498     Similar to '__builtin_inf', except the return type is '_FloatN'.
43499
43500 -- Built-in Function: _FloatN __builtin_inffNx (void)
43501     Similar to '__builtin_inf', except the return type is '_FloatNx'.
43502
43503 -- Built-in Function: int __builtin_isinf_sign (...)
43504     Similar to 'isinf', except the return value is -1 for an argument
43505     of '-Inf' and 1 for an argument of '+Inf'.  Note while the
43506     parameter list is an ellipsis, this function only accepts exactly
43507     one floating-point argument.  GCC treats this parameter as
43508     type-generic, which means it does not do default promotion from
43509     float to double.
43510
43511 -- Built-in Function: double __builtin_nan (const char *str)
43512     This is an implementation of the ISO C99 function 'nan'.
43513
43514     Since ISO C99 defines this function in terms of 'strtod', which we
43515     do not implement, a description of the parsing is in order.  The
43516     string is parsed as by 'strtol'; that is, the base is recognized by
43517     leading '0' or '0x' prefixes.  The number parsed is placed in the
43518     significand such that the least significant bit of the number is at
43519     the least significant bit of the significand.  The number is
43520     truncated to fit the significand field provided.  The significand
43521     is forced to be a quiet NaN.
43522
43523     This function, if given a string literal all of which would have
43524     been consumed by 'strtol', is evaluated early enough that it is
43525     considered a compile-time constant.
43526
43527 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
43528     Similar to '__builtin_nan', except the return type is '_Decimal32'.
43529
43530 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
43531     Similar to '__builtin_nan', except the return type is '_Decimal64'.
43532
43533 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
43534     Similar to '__builtin_nan', except the return type is
43535     '_Decimal128'.
43536
43537 -- Built-in Function: float __builtin_nanf (const char *str)
43538     Similar to '__builtin_nan', except the return type is 'float'.
43539
43540 -- Built-in Function: long double __builtin_nanl (const char *str)
43541     Similar to '__builtin_nan', except the return type is 'long
43542     double'.
43543
43544 -- Built-in Function: _FloatN __builtin_nanfN (const char *str)
43545     Similar to '__builtin_nan', except the return type is '_FloatN'.
43546
43547 -- Built-in Function: _FloatNx __builtin_nanfNx (const char *str)
43548     Similar to '__builtin_nan', except the return type is '_FloatNx'.
43549
43550 -- Built-in Function: double __builtin_nans (const char *str)
43551     Similar to '__builtin_nan', except the significand is forced to be
43552     a signaling NaN.  The 'nans' function is proposed by WG14 N965.
43553
43554 -- Built-in Function: float __builtin_nansf (const char *str)
43555     Similar to '__builtin_nans', except the return type is 'float'.
43556
43557 -- Built-in Function: long double __builtin_nansl (const char *str)
43558     Similar to '__builtin_nans', except the return type is 'long
43559     double'.
43560
43561 -- Built-in Function: _FloatN __builtin_nansfN (const char *str)
43562     Similar to '__builtin_nans', except the return type is '_FloatN'.
43563
43564 -- Built-in Function: _FloatNx __builtin_nansfNx (const char *str)
43565     Similar to '__builtin_nans', except the return type is '_FloatNx'.
43566
43567 -- Built-in Function: int __builtin_ffs (int x)
43568     Returns one plus the index of the least significant 1-bit of X, or
43569     if X is zero, returns zero.
43570
43571 -- Built-in Function: int __builtin_clz (unsigned int x)
43572     Returns the number of leading 0-bits in X, starting at the most
43573     significant bit position.  If X is 0, the result is undefined.
43574
43575 -- Built-in Function: int __builtin_ctz (unsigned int x)
43576     Returns the number of trailing 0-bits in X, starting at the least
43577     significant bit position.  If X is 0, the result is undefined.
43578
43579 -- Built-in Function: int __builtin_clrsb (int x)
43580     Returns the number of leading redundant sign bits in X, i.e. the
43581     number of bits following the most significant bit that are
43582     identical to it.  There are no special cases for 0 or other values.
43583
43584 -- Built-in Function: int __builtin_popcount (unsigned int x)
43585     Returns the number of 1-bits in X.
43586
43587 -- Built-in Function: int __builtin_parity (unsigned int x)
43588     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
43589
43590 -- Built-in Function: int __builtin_ffsl (long)
43591     Similar to '__builtin_ffs', except the argument type is 'long'.
43592
43593 -- Built-in Function: int __builtin_clzl (unsigned long)
43594     Similar to '__builtin_clz', except the argument type is 'unsigned
43595     long'.
43596
43597 -- Built-in Function: int __builtin_ctzl (unsigned long)
43598     Similar to '__builtin_ctz', except the argument type is 'unsigned
43599     long'.
43600
43601 -- Built-in Function: int __builtin_clrsbl (long)
43602     Similar to '__builtin_clrsb', except the argument type is 'long'.
43603
43604 -- Built-in Function: int __builtin_popcountl (unsigned long)
43605     Similar to '__builtin_popcount', except the argument type is
43606     'unsigned long'.
43607
43608 -- Built-in Function: int __builtin_parityl (unsigned long)
43609     Similar to '__builtin_parity', except the argument type is
43610     'unsigned long'.
43611
43612 -- Built-in Function: int __builtin_ffsll (long long)
43613     Similar to '__builtin_ffs', except the argument type is 'long
43614     long'.
43615
43616 -- Built-in Function: int __builtin_clzll (unsigned long long)
43617     Similar to '__builtin_clz', except the argument type is 'unsigned
43618     long long'.
43619
43620 -- Built-in Function: int __builtin_ctzll (unsigned long long)
43621     Similar to '__builtin_ctz', except the argument type is 'unsigned
43622     long long'.
43623
43624 -- Built-in Function: int __builtin_clrsbll (long long)
43625     Similar to '__builtin_clrsb', except the argument type is 'long
43626     long'.
43627
43628 -- Built-in Function: int __builtin_popcountll (unsigned long long)
43629     Similar to '__builtin_popcount', except the argument type is
43630     'unsigned long long'.
43631
43632 -- Built-in Function: int __builtin_parityll (unsigned long long)
43633     Similar to '__builtin_parity', except the argument type is
43634     'unsigned long long'.
43635
43636 -- Built-in Function: double __builtin_powi (double, int)
43637     Returns the first argument raised to the power of the second.
43638     Unlike the 'pow' function no guarantees about precision and
43639     rounding are made.
43640
43641 -- Built-in Function: float __builtin_powif (float, int)
43642     Similar to '__builtin_powi', except the argument and return types
43643     are 'float'.
43644
43645 -- Built-in Function: long double __builtin_powil (long double, int)
43646     Similar to '__builtin_powi', except the argument and return types
43647     are 'long double'.
43648
43649 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
43650     Returns X with the order of the bytes reversed; for example,
43651     '0xaabb' becomes '0xbbaa'.  Byte here always means exactly 8 bits.
43652
43653 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
43654     Similar to '__builtin_bswap16', except the argument and return
43655     types are 32 bit.
43656
43657 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
43658     Similar to '__builtin_bswap32', except the argument and return
43659     types are 64 bit.
43660
43661 -- Built-in Function: Pmode __builtin_extend_pointer (void * x)
43662     On targets where the user visible pointer size is smaller than the
43663     size of an actual hardware address this function returns the
43664     extended user pointer.  Targets where this is true included ILP32
43665     mode on x86_64 or Aarch64.  This function is mainly useful when
43666     writing inline assembly code.
43667
43668 -- Built-in Function: int __builtin_goacc_parlevel_id (int x)
43669     Returns the openacc gang, worker or vector id depending on whether
43670     X is 0, 1 or 2.
43671
43672 -- Built-in Function: int __builtin_goacc_parlevel_size (int x)
43673     Returns the openacc gang, worker or vector size depending on
43674     whether X is 0, 1 or 2.
43675
43676
43677File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
43678
436796.60 Built-in Functions Specific to Particular Target Machines
43680==============================================================
43681
43682On some target machines, GCC supports many built-in functions specific
43683to those machines.  Generally these generate calls to specific machine
43684instructions, but allow the compiler to schedule those calls.
43685
43686* Menu:
43687
43688* AArch64 Built-in Functions::
43689* Alpha Built-in Functions::
43690* Altera Nios II Built-in Functions::
43691* ARC Built-in Functions::
43692* ARC SIMD Built-in Functions::
43693* ARM iWMMXt Built-in Functions::
43694* ARM C Language Extensions (ACLE)::
43695* ARM Floating Point Status and Control Intrinsics::
43696* ARM ARMv8-M Security Extensions::
43697* AVR Built-in Functions::
43698* Blackfin Built-in Functions::
43699* BPF Built-in Functions::
43700* FR-V Built-in Functions::
43701* MIPS DSP Built-in Functions::
43702* MIPS Paired-Single Support::
43703* MIPS Loongson Built-in Functions::
43704* MIPS SIMD Architecture (MSA) Support::
43705* Other MIPS Built-in Functions::
43706* MSP430 Built-in Functions::
43707* NDS32 Built-in Functions::
43708* picoChip Built-in Functions::
43709* Basic PowerPC Built-in Functions::
43710* PowerPC AltiVec/VSX Built-in Functions::
43711* PowerPC Hardware Transactional Memory Built-in Functions::
43712* PowerPC Atomic Memory Operation Functions::
43713* PowerPC Matrix-Multiply Assist Built-in Functions::
43714* RISC-V Built-in Functions::
43715* RX Built-in Functions::
43716* S/390 System z Built-in Functions::
43717* SH Built-in Functions::
43718* SPARC VIS Built-in Functions::
43719* TI C6X Built-in Functions::
43720* TILE-Gx Built-in Functions::
43721* TILEPro Built-in Functions::
43722* x86 Built-in Functions::
43723* x86 transactional memory intrinsics::
43724* x86 control-flow protection intrinsics::
43725
43726
43727File: gcc.info,  Node: AArch64 Built-in Functions,  Next: Alpha Built-in Functions,  Up: Target Builtins
43728
437296.60.1 AArch64 Built-in Functions
43730---------------------------------
43731
43732These built-in functions are available for the AArch64 family of
43733processors.
43734     unsigned int __builtin_aarch64_get_fpcr ()
43735     void __builtin_aarch64_set_fpcr (unsigned int)
43736     unsigned int __builtin_aarch64_get_fpsr ()
43737     void __builtin_aarch64_set_fpsr (unsigned int)
43738
43739
43740File: gcc.info,  Node: Alpha Built-in Functions,  Next: Altera Nios II Built-in Functions,  Prev: AArch64 Built-in Functions,  Up: Target Builtins
43741
437426.60.2 Alpha Built-in Functions
43743-------------------------------
43744
43745These built-in functions are available for the Alpha family of
43746processors, depending on the command-line switches used.
43747
43748 The following built-in functions are always available.  They all
43749generate the machine instruction that is part of the name.
43750
43751     long __builtin_alpha_implver (void)
43752     long __builtin_alpha_rpcc (void)
43753     long __builtin_alpha_amask (long)
43754     long __builtin_alpha_cmpbge (long, long)
43755     long __builtin_alpha_extbl (long, long)
43756     long __builtin_alpha_extwl (long, long)
43757     long __builtin_alpha_extll (long, long)
43758     long __builtin_alpha_extql (long, long)
43759     long __builtin_alpha_extwh (long, long)
43760     long __builtin_alpha_extlh (long, long)
43761     long __builtin_alpha_extqh (long, long)
43762     long __builtin_alpha_insbl (long, long)
43763     long __builtin_alpha_inswl (long, long)
43764     long __builtin_alpha_insll (long, long)
43765     long __builtin_alpha_insql (long, long)
43766     long __builtin_alpha_inswh (long, long)
43767     long __builtin_alpha_inslh (long, long)
43768     long __builtin_alpha_insqh (long, long)
43769     long __builtin_alpha_mskbl (long, long)
43770     long __builtin_alpha_mskwl (long, long)
43771     long __builtin_alpha_mskll (long, long)
43772     long __builtin_alpha_mskql (long, long)
43773     long __builtin_alpha_mskwh (long, long)
43774     long __builtin_alpha_msklh (long, long)
43775     long __builtin_alpha_mskqh (long, long)
43776     long __builtin_alpha_umulh (long, long)
43777     long __builtin_alpha_zap (long, long)
43778     long __builtin_alpha_zapnot (long, long)
43779
43780 The following built-in functions are always with '-mmax' or '-mcpu=CPU'
43781where CPU is 'pca56' or later.  They all generate the machine
43782instruction that is part of the name.
43783
43784     long __builtin_alpha_pklb (long)
43785     long __builtin_alpha_pkwb (long)
43786     long __builtin_alpha_unpkbl (long)
43787     long __builtin_alpha_unpkbw (long)
43788     long __builtin_alpha_minub8 (long, long)
43789     long __builtin_alpha_minsb8 (long, long)
43790     long __builtin_alpha_minuw4 (long, long)
43791     long __builtin_alpha_minsw4 (long, long)
43792     long __builtin_alpha_maxub8 (long, long)
43793     long __builtin_alpha_maxsb8 (long, long)
43794     long __builtin_alpha_maxuw4 (long, long)
43795     long __builtin_alpha_maxsw4 (long, long)
43796     long __builtin_alpha_perr (long, long)
43797
43798 The following built-in functions are always with '-mcix' or '-mcpu=CPU'
43799where CPU is 'ev67' or later.  They all generate the machine instruction
43800that is part of the name.
43801
43802     long __builtin_alpha_cttz (long)
43803     long __builtin_alpha_ctlz (long)
43804     long __builtin_alpha_ctpop (long)
43805
43806 The following built-in functions are available on systems that use the
43807OSF/1 PALcode.  Normally they invoke the 'rduniq' and 'wruniq' PAL
43808calls, but when invoked with '-mtls-kernel', they invoke 'rdval' and
43809'wrval'.
43810
43811     void *__builtin_thread_pointer (void)
43812     void __builtin_set_thread_pointer (void *)
43813
43814
43815File: gcc.info,  Node: Altera Nios II Built-in Functions,  Next: ARC Built-in Functions,  Prev: Alpha Built-in Functions,  Up: Target Builtins
43816
438176.60.3 Altera Nios II Built-in Functions
43818----------------------------------------
43819
43820These built-in functions are available for the Altera Nios II family of
43821processors.
43822
43823 The following built-in functions are always available.  They all
43824generate the machine instruction that is part of the name.
43825
43826     int __builtin_ldbio (volatile const void *)
43827     int __builtin_ldbuio (volatile const void *)
43828     int __builtin_ldhio (volatile const void *)
43829     int __builtin_ldhuio (volatile const void *)
43830     int __builtin_ldwio (volatile const void *)
43831     void __builtin_stbio (volatile void *, int)
43832     void __builtin_sthio (volatile void *, int)
43833     void __builtin_stwio (volatile void *, int)
43834     void __builtin_sync (void)
43835     int __builtin_rdctl (int)
43836     int __builtin_rdprs (int, int)
43837     void __builtin_wrctl (int, int)
43838     void __builtin_flushd (volatile void *)
43839     void __builtin_flushda (volatile void *)
43840     int __builtin_wrpie (int);
43841     void __builtin_eni (int);
43842     int __builtin_ldex (volatile const void *)
43843     int __builtin_stex (volatile void *, int)
43844     int __builtin_ldsex (volatile const void *)
43845     int __builtin_stsex (volatile void *, int)
43846
43847 The following built-in functions are always available.  They all
43848generate a Nios II Custom Instruction.  The name of the function
43849represents the types that the function takes and returns.  The letter
43850before the 'n' is the return type or void if absent.  The 'n' represents
43851the first parameter to all the custom instructions, the custom
43852instruction number.  The two letters after the 'n' represent the up to
43853two parameters to the function.
43854
43855 The letters represent the following data types:
43856'<no letter>'
43857     'void' for return type and no parameter for parameter types.
43858
43859'i'
43860     'int' for return type and parameter type
43861
43862'f'
43863     'float' for return type and parameter type
43864
43865'p'
43866     'void *' for return type and parameter type
43867
43868 And the function names are:
43869     void __builtin_custom_n (void)
43870     void __builtin_custom_ni (int)
43871     void __builtin_custom_nf (float)
43872     void __builtin_custom_np (void *)
43873     void __builtin_custom_nii (int, int)
43874     void __builtin_custom_nif (int, float)
43875     void __builtin_custom_nip (int, void *)
43876     void __builtin_custom_nfi (float, int)
43877     void __builtin_custom_nff (float, float)
43878     void __builtin_custom_nfp (float, void *)
43879     void __builtin_custom_npi (void *, int)
43880     void __builtin_custom_npf (void *, float)
43881     void __builtin_custom_npp (void *, void *)
43882     int __builtin_custom_in (void)
43883     int __builtin_custom_ini (int)
43884     int __builtin_custom_inf (float)
43885     int __builtin_custom_inp (void *)
43886     int __builtin_custom_inii (int, int)
43887     int __builtin_custom_inif (int, float)
43888     int __builtin_custom_inip (int, void *)
43889     int __builtin_custom_infi (float, int)
43890     int __builtin_custom_inff (float, float)
43891     int __builtin_custom_infp (float, void *)
43892     int __builtin_custom_inpi (void *, int)
43893     int __builtin_custom_inpf (void *, float)
43894     int __builtin_custom_inpp (void *, void *)
43895     float __builtin_custom_fn (void)
43896     float __builtin_custom_fni (int)
43897     float __builtin_custom_fnf (float)
43898     float __builtin_custom_fnp (void *)
43899     float __builtin_custom_fnii (int, int)
43900     float __builtin_custom_fnif (int, float)
43901     float __builtin_custom_fnip (int, void *)
43902     float __builtin_custom_fnfi (float, int)
43903     float __builtin_custom_fnff (float, float)
43904     float __builtin_custom_fnfp (float, void *)
43905     float __builtin_custom_fnpi (void *, int)
43906     float __builtin_custom_fnpf (void *, float)
43907     float __builtin_custom_fnpp (void *, void *)
43908     void * __builtin_custom_pn (void)
43909     void * __builtin_custom_pni (int)
43910     void * __builtin_custom_pnf (float)
43911     void * __builtin_custom_pnp (void *)
43912     void * __builtin_custom_pnii (int, int)
43913     void * __builtin_custom_pnif (int, float)
43914     void * __builtin_custom_pnip (int, void *)
43915     void * __builtin_custom_pnfi (float, int)
43916     void * __builtin_custom_pnff (float, float)
43917     void * __builtin_custom_pnfp (float, void *)
43918     void * __builtin_custom_pnpi (void *, int)
43919     void * __builtin_custom_pnpf (void *, float)
43920     void * __builtin_custom_pnpp (void *, void *)
43921
43922
43923File: gcc.info,  Node: ARC Built-in Functions,  Next: ARC SIMD Built-in Functions,  Prev: Altera Nios II Built-in Functions,  Up: Target Builtins
43924
439256.60.4 ARC Built-in Functions
43926-----------------------------
43927
43928The following built-in functions are provided for ARC targets.  The
43929built-ins generate the corresponding assembly instructions.  In the
43930examples given below, the generated code often requires an operand or
43931result to be in a register.  Where necessary further code will be
43932generated to ensure this is true, but for brevity this is not described
43933in each case.
43934
43935 _Note:_ Using a built-in to generate an instruction not supported by a
43936target may cause problems.  At present the compiler is not guaranteed to
43937detect such misuse, and as a result an internal compiler error may be
43938generated.
43939
43940 -- Built-in Function: int __builtin_arc_aligned (void *VAL, int
43941          ALIGNVAL)
43942     Return 1 if VAL is known to have the byte alignment given by
43943     ALIGNVAL, otherwise return 0.  Note that this is different from
43944          __alignof__(*(char *)VAL) >= alignval
43945     because __alignof__ sees only the type of the dereference, whereas
43946     __builtin_arc_align uses alignment information from the pointer as
43947     well as from the pointed-to type.  The information available will
43948     depend on optimization level.
43949
43950 -- Built-in Function: void __builtin_arc_brk (void)
43951     Generates
43952          brk
43953
43954 -- Built-in Function: unsigned int __builtin_arc_core_read (unsigned
43955          int REGNO)
43956     The operand is the number of a register to be read.  Generates:
43957          mov  DEST, rREGNO
43958     where the value in DEST will be the result returned from the
43959     built-in.
43960
43961 -- Built-in Function: void __builtin_arc_core_write (unsigned int
43962          REGNO, unsigned int VAL)
43963     The first operand is the number of a register to be written, the
43964     second operand is a compile time constant to write into that
43965     register.  Generates:
43966          mov  rREGNO, VAL
43967
43968 -- Built-in Function: int __builtin_arc_divaw (int A, int B)
43969     Only available if either '-mcpu=ARC700' or '-meA' is set.
43970     Generates:
43971          divaw  DEST, A, B
43972     where the value in DEST will be the result returned from the
43973     built-in.
43974
43975 -- Built-in Function: void __builtin_arc_flag (unsigned int A)
43976     Generates
43977          flag  A
43978
43979 -- Built-in Function: unsigned int __builtin_arc_lr (unsigned int AUXR)
43980     The operand, AUXV, is the address of an auxiliary register and must
43981     be a compile time constant.  Generates:
43982          lr  DEST, [AUXR]
43983     Where the value in DEST will be the result returned from the
43984     built-in.
43985
43986 -- Built-in Function: void __builtin_arc_mul64 (int A, int B)
43987     Only available with '-mmul64'.  Generates:
43988          mul64  A, B
43989
43990 -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A,
43991          unsigned int B)
43992     Only available with '-mmul64'.  Generates:
43993          mulu64  A, B
43994
43995 -- Built-in Function: void __builtin_arc_nop (void)
43996     Generates:
43997          nop
43998
43999 -- Built-in Function: int __builtin_arc_norm (int SRC)
44000     Only valid if the 'norm' instruction is available through the
44001     '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
44002          norm  DEST, SRC
44003     Where the value in DEST will be the result returned from the
44004     built-in.
44005
44006 -- Built-in Function: short int __builtin_arc_normw (short int SRC)
44007     Only valid if the 'normw' instruction is available through the
44008     '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
44009          normw  DEST, SRC
44010     Where the value in DEST will be the result returned from the
44011     built-in.
44012
44013 -- Built-in Function: void __builtin_arc_rtie (void)
44014     Generates:
44015          rtie
44016
44017 -- Built-in Function: void __builtin_arc_sleep (int A
44018     Generates:
44019          sleep  A
44020
44021 -- Built-in Function: void __builtin_arc_sr (unsigned int AUXR,
44022          unsigned int VAL)
44023     The first argument, AUXV, is the address of an auxiliary register,
44024     the second argument, VAL, is a compile time constant to be written
44025     to the register.  Generates:
44026          sr  AUXR, [VAL]
44027
44028 -- Built-in Function: int __builtin_arc_swap (int SRC)
44029     Only valid with '-mswap'.  Generates:
44030          swap  DEST, SRC
44031     Where the value in DEST will be the result returned from the
44032     built-in.
44033
44034 -- Built-in Function: void __builtin_arc_swi (void)
44035     Generates:
44036          swi
44037
44038 -- Built-in Function: void __builtin_arc_sync (void)
44039     Only available with '-mcpu=ARC700'.  Generates:
44040          sync
44041
44042 -- Built-in Function: void __builtin_arc_trap_s (unsigned int C)
44043     Only available with '-mcpu=ARC700'.  Generates:
44044          trap_s  C
44045
44046 -- Built-in Function: void __builtin_arc_unimp_s (void)
44047     Only available with '-mcpu=ARC700'.  Generates:
44048          unimp_s
44049
44050 The instructions generated by the following builtins are not considered
44051as candidates for scheduling.  They are not moved around by the compiler
44052during scheduling, and thus can be expected to appear where they are put
44053in the C code:
44054     __builtin_arc_brk()
44055     __builtin_arc_core_read()
44056     __builtin_arc_core_write()
44057     __builtin_arc_flag()
44058     __builtin_arc_lr()
44059     __builtin_arc_sleep()
44060     __builtin_arc_sr()
44061     __builtin_arc_swi()
44062
44063
44064File: gcc.info,  Node: ARC SIMD Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Prev: ARC Built-in Functions,  Up: Target Builtins
44065
440666.60.5 ARC SIMD Built-in Functions
44067----------------------------------
44068
44069SIMD builtins provided by the compiler can be used to generate the
44070vector instructions.  This section describes the available builtins and
44071their usage in programs.  With the '-msimd' option, the compiler
44072provides 128-bit vector types, which can be specified using the
44073'vector_size' attribute.  The header file 'arc-simd.h' can be included
44074to use the following predefined types:
44075     typedef int __v4si   __attribute__((vector_size(16)));
44076     typedef short __v8hi __attribute__((vector_size(16)));
44077
44078 These types can be used to define 128-bit variables.  The built-in
44079functions listed in the following section can be used on these variables
44080to generate the vector operations.
44081
44082 For all builtins, '__builtin_arc_SOMEINSN', the header file
44083'arc-simd.h' also provides equivalent macros called '_SOMEINSN' that can
44084be used for programming ease and improved readability.  The following
44085macros for DMA control are also provided:
44086     #define _setup_dma_in_channel_reg _vdiwr
44087     #define _setup_dma_out_channel_reg _vdowr
44088
44089 The following is a complete list of all the SIMD built-ins provided for
44090ARC, grouped by calling signature.
44091
44092 The following take two '__v8hi' arguments and return a '__v8hi' result:
44093     __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi)
44094     __v8hi __builtin_arc_vaddw (__v8hi, __v8hi)
44095     __v8hi __builtin_arc_vand (__v8hi, __v8hi)
44096     __v8hi __builtin_arc_vandaw (__v8hi, __v8hi)
44097     __v8hi __builtin_arc_vavb (__v8hi, __v8hi)
44098     __v8hi __builtin_arc_vavrb (__v8hi, __v8hi)
44099     __v8hi __builtin_arc_vbic (__v8hi, __v8hi)
44100     __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi)
44101     __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi)
44102     __v8hi __builtin_arc_vdifw (__v8hi, __v8hi)
44103     __v8hi __builtin_arc_veqw (__v8hi, __v8hi)
44104     __v8hi __builtin_arc_vh264f (__v8hi, __v8hi)
44105     __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi)
44106     __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi)
44107     __v8hi __builtin_arc_vlew (__v8hi, __v8hi)
44108     __v8hi __builtin_arc_vltw (__v8hi, __v8hi)
44109     __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi)
44110     __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi)
44111     __v8hi __builtin_arc_vminaw (__v8hi, __v8hi)
44112     __v8hi __builtin_arc_vminw (__v8hi, __v8hi)
44113     __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi)
44114     __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi)
44115     __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi)
44116     __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi)
44117     __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi)
44118     __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi)
44119     __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi)
44120     __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi)
44121     __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi)
44122     __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi)
44123     __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi)
44124     __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi)
44125     __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi)
44126     __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi)
44127     __v8hi __builtin_arc_vmrb (__v8hi, __v8hi)
44128     __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi)
44129     __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi)
44130     __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi)
44131     __v8hi __builtin_arc_vmulw (__v8hi, __v8hi)
44132     __v8hi __builtin_arc_vnew (__v8hi, __v8hi)
44133     __v8hi __builtin_arc_vor (__v8hi, __v8hi)
44134     __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi)
44135     __v8hi __builtin_arc_vsubw (__v8hi, __v8hi)
44136     __v8hi __builtin_arc_vsummw (__v8hi, __v8hi)
44137     __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi)
44138     __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi)
44139     __v8hi __builtin_arc_vxor (__v8hi, __v8hi)
44140     __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi)
44141
44142 The following take one '__v8hi' and one 'int' argument and return a
44143'__v8hi' result:
44144
44145     __v8hi __builtin_arc_vbaddw (__v8hi, int)
44146     __v8hi __builtin_arc_vbmaxw (__v8hi, int)
44147     __v8hi __builtin_arc_vbminw (__v8hi, int)
44148     __v8hi __builtin_arc_vbmulaw (__v8hi, int)
44149     __v8hi __builtin_arc_vbmulfw (__v8hi, int)
44150     __v8hi __builtin_arc_vbmulw (__v8hi, int)
44151     __v8hi __builtin_arc_vbrsubw (__v8hi, int)
44152     __v8hi __builtin_arc_vbsubw (__v8hi, int)
44153
44154 The following take one '__v8hi' argument and one 'int' argument which
44155must be a 3-bit compile time constant indicating a register number
44156I0-I7.  They return a '__v8hi' result.
44157     __v8hi __builtin_arc_vasrw (__v8hi, const int)
44158     __v8hi __builtin_arc_vsr8 (__v8hi, const int)
44159     __v8hi __builtin_arc_vsr8aw (__v8hi, const int)
44160
44161 The following take one '__v8hi' argument and one 'int' argument which
44162must be a 6-bit compile time constant.  They return a '__v8hi' result.
44163     __v8hi __builtin_arc_vasrpwbi (__v8hi, const int)
44164     __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int)
44165     __v8hi __builtin_arc_vasrrwi (__v8hi, const int)
44166     __v8hi __builtin_arc_vasrsrwi (__v8hi, const int)
44167     __v8hi __builtin_arc_vasrwi (__v8hi, const int)
44168     __v8hi __builtin_arc_vsr8awi (__v8hi, const int)
44169     __v8hi __builtin_arc_vsr8i (__v8hi, const int)
44170
44171 The following take one '__v8hi' argument and one 'int' argument which
44172must be a 8-bit compile time constant.  They return a '__v8hi' result.
44173     __v8hi __builtin_arc_vd6tapf (__v8hi, const int)
44174     __v8hi __builtin_arc_vmvaw (__v8hi, const int)
44175     __v8hi __builtin_arc_vmvw (__v8hi, const int)
44176     __v8hi __builtin_arc_vmvzw (__v8hi, const int)
44177
44178 The following take two 'int' arguments, the second of which which must
44179be a 8-bit compile time constant.  They return a '__v8hi' result:
44180     __v8hi __builtin_arc_vmovaw (int, const int)
44181     __v8hi __builtin_arc_vmovw (int, const int)
44182     __v8hi __builtin_arc_vmovzw (int, const int)
44183
44184 The following take a single '__v8hi' argument and return a '__v8hi'
44185result:
44186     __v8hi __builtin_arc_vabsaw (__v8hi)
44187     __v8hi __builtin_arc_vabsw (__v8hi)
44188     __v8hi __builtin_arc_vaddsuw (__v8hi)
44189     __v8hi __builtin_arc_vexch1 (__v8hi)
44190     __v8hi __builtin_arc_vexch2 (__v8hi)
44191     __v8hi __builtin_arc_vexch4 (__v8hi)
44192     __v8hi __builtin_arc_vsignw (__v8hi)
44193     __v8hi __builtin_arc_vupbaw (__v8hi)
44194     __v8hi __builtin_arc_vupbw (__v8hi)
44195     __v8hi __builtin_arc_vupsbaw (__v8hi)
44196     __v8hi __builtin_arc_vupsbw (__v8hi)
44197
44198 The following take two 'int' arguments and return no result:
44199     void __builtin_arc_vdirun (int, int)
44200     void __builtin_arc_vdorun (int, int)
44201
44202 The following take two 'int' arguments and return no result.  The first
44203argument must a 3-bit compile time constant indicating one of the
44204DR0-DR7 DMA setup channels:
44205     void __builtin_arc_vdiwr (const int, int)
44206     void __builtin_arc_vdowr (const int, int)
44207
44208 The following take an 'int' argument and return no result:
44209     void __builtin_arc_vendrec (int)
44210     void __builtin_arc_vrec (int)
44211     void __builtin_arc_vrecrun (int)
44212     void __builtin_arc_vrun (int)
44213
44214 The following take a '__v8hi' argument and two 'int' arguments and
44215return a '__v8hi' result.  The second argument must be a 3-bit compile
44216time constants, indicating one the registers I0-I7, and the third
44217argument must be an 8-bit compile time constant.
44218
44219 _Note:_ Although the equivalent hardware instructions do not take an
44220SIMD register as an operand, these builtins overwrite the relevant bits
44221of the '__v8hi' register provided as the first argument with the value
44222loaded from the '[Ib, u8]' location in the SDM.
44223
44224     __v8hi __builtin_arc_vld32 (__v8hi, const int, const int)
44225     __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int)
44226     __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int)
44227     __v8hi __builtin_arc_vld64 (__v8hi, const int, const int)
44228
44229 The following take two 'int' arguments and return a '__v8hi' result.
44230The first argument must be a 3-bit compile time constants, indicating
44231one the registers I0-I7, and the second argument must be an 8-bit
44232compile time constant.
44233
44234     __v8hi __builtin_arc_vld128 (const int, const int)
44235     __v8hi __builtin_arc_vld64w (const int, const int)
44236
44237 The following take a '__v8hi' argument and two 'int' arguments and
44238return no result.  The second argument must be a 3-bit compile time
44239constants, indicating one the registers I0-I7, and the third argument
44240must be an 8-bit compile time constant.
44241
44242     void __builtin_arc_vst128 (__v8hi, const int, const int)
44243     void __builtin_arc_vst64 (__v8hi, const int, const int)
44244
44245 The following take a '__v8hi' argument and three 'int' arguments and
44246return no result.  The second argument must be a 3-bit compile-time
44247constant, identifying the 16-bit sub-register to be stored, the third
44248argument must be a 3-bit compile time constants, indicating one the
44249registers I0-I7, and the fourth argument must be an 8-bit compile time
44250constant.
44251
44252     void __builtin_arc_vst16_n (__v8hi, const int, const int, const int)
44253     void __builtin_arc_vst32_n (__v8hi, const int, const int, const int)
44254
44255
44256File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM C Language Extensions (ACLE),  Prev: ARC SIMD Built-in Functions,  Up: Target Builtins
44257
442586.60.6 ARM iWMMXt Built-in Functions
44259------------------------------------
44260
44261These built-in functions are available for the ARM family of processors
44262when the '-mcpu=iwmmxt' switch is used:
44263
44264     typedef int v2si __attribute__ ((vector_size (8)));
44265     typedef short v4hi __attribute__ ((vector_size (8)));
44266     typedef char v8qi __attribute__ ((vector_size (8)));
44267
44268     int __builtin_arm_getwcgr0 (void)
44269     void __builtin_arm_setwcgr0 (int)
44270     int __builtin_arm_getwcgr1 (void)
44271     void __builtin_arm_setwcgr1 (int)
44272     int __builtin_arm_getwcgr2 (void)
44273     void __builtin_arm_setwcgr2 (int)
44274     int __builtin_arm_getwcgr3 (void)
44275     void __builtin_arm_setwcgr3 (int)
44276     int __builtin_arm_textrmsb (v8qi, int)
44277     int __builtin_arm_textrmsh (v4hi, int)
44278     int __builtin_arm_textrmsw (v2si, int)
44279     int __builtin_arm_textrmub (v8qi, int)
44280     int __builtin_arm_textrmuh (v4hi, int)
44281     int __builtin_arm_textrmuw (v2si, int)
44282     v8qi __builtin_arm_tinsrb (v8qi, int, int)
44283     v4hi __builtin_arm_tinsrh (v4hi, int, int)
44284     v2si __builtin_arm_tinsrw (v2si, int, int)
44285     long long __builtin_arm_tmia (long long, int, int)
44286     long long __builtin_arm_tmiabb (long long, int, int)
44287     long long __builtin_arm_tmiabt (long long, int, int)
44288     long long __builtin_arm_tmiaph (long long, int, int)
44289     long long __builtin_arm_tmiatb (long long, int, int)
44290     long long __builtin_arm_tmiatt (long long, int, int)
44291     int __builtin_arm_tmovmskb (v8qi)
44292     int __builtin_arm_tmovmskh (v4hi)
44293     int __builtin_arm_tmovmskw (v2si)
44294     long long __builtin_arm_waccb (v8qi)
44295     long long __builtin_arm_wacch (v4hi)
44296     long long __builtin_arm_waccw (v2si)
44297     v8qi __builtin_arm_waddb (v8qi, v8qi)
44298     v8qi __builtin_arm_waddbss (v8qi, v8qi)
44299     v8qi __builtin_arm_waddbus (v8qi, v8qi)
44300     v4hi __builtin_arm_waddh (v4hi, v4hi)
44301     v4hi __builtin_arm_waddhss (v4hi, v4hi)
44302     v4hi __builtin_arm_waddhus (v4hi, v4hi)
44303     v2si __builtin_arm_waddw (v2si, v2si)
44304     v2si __builtin_arm_waddwss (v2si, v2si)
44305     v2si __builtin_arm_waddwus (v2si, v2si)
44306     v8qi __builtin_arm_walign (v8qi, v8qi, int)
44307     long long __builtin_arm_wand(long long, long long)
44308     long long __builtin_arm_wandn (long long, long long)
44309     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
44310     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
44311     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
44312     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
44313     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
44314     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
44315     v2si __builtin_arm_wcmpeqw (v2si, v2si)
44316     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
44317     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
44318     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
44319     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
44320     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
44321     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
44322     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
44323     long long __builtin_arm_wmacsz (v4hi, v4hi)
44324     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
44325     long long __builtin_arm_wmacuz (v4hi, v4hi)
44326     v4hi __builtin_arm_wmadds (v4hi, v4hi)
44327     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
44328     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
44329     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
44330     v2si __builtin_arm_wmaxsw (v2si, v2si)
44331     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
44332     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
44333     v2si __builtin_arm_wmaxuw (v2si, v2si)
44334     v8qi __builtin_arm_wminsb (v8qi, v8qi)
44335     v4hi __builtin_arm_wminsh (v4hi, v4hi)
44336     v2si __builtin_arm_wminsw (v2si, v2si)
44337     v8qi __builtin_arm_wminub (v8qi, v8qi)
44338     v4hi __builtin_arm_wminuh (v4hi, v4hi)
44339     v2si __builtin_arm_wminuw (v2si, v2si)
44340     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
44341     v4hi __builtin_arm_wmulul (v4hi, v4hi)
44342     v4hi __builtin_arm_wmulum (v4hi, v4hi)
44343     long long __builtin_arm_wor (long long, long long)
44344     v2si __builtin_arm_wpackdss (long long, long long)
44345     v2si __builtin_arm_wpackdus (long long, long long)
44346     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
44347     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
44348     v4hi __builtin_arm_wpackwss (v2si, v2si)
44349     v4hi __builtin_arm_wpackwus (v2si, v2si)
44350     long long __builtin_arm_wrord (long long, long long)
44351     long long __builtin_arm_wrordi (long long, int)
44352     v4hi __builtin_arm_wrorh (v4hi, long long)
44353     v4hi __builtin_arm_wrorhi (v4hi, int)
44354     v2si __builtin_arm_wrorw (v2si, long long)
44355     v2si __builtin_arm_wrorwi (v2si, int)
44356     v2si __builtin_arm_wsadb (v2si, v8qi, v8qi)
44357     v2si __builtin_arm_wsadbz (v8qi, v8qi)
44358     v2si __builtin_arm_wsadh (v2si, v4hi, v4hi)
44359     v2si __builtin_arm_wsadhz (v4hi, v4hi)
44360     v4hi __builtin_arm_wshufh (v4hi, int)
44361     long long __builtin_arm_wslld (long long, long long)
44362     long long __builtin_arm_wslldi (long long, int)
44363     v4hi __builtin_arm_wsllh (v4hi, long long)
44364     v4hi __builtin_arm_wsllhi (v4hi, int)
44365     v2si __builtin_arm_wsllw (v2si, long long)
44366     v2si __builtin_arm_wsllwi (v2si, int)
44367     long long __builtin_arm_wsrad (long long, long long)
44368     long long __builtin_arm_wsradi (long long, int)
44369     v4hi __builtin_arm_wsrah (v4hi, long long)
44370     v4hi __builtin_arm_wsrahi (v4hi, int)
44371     v2si __builtin_arm_wsraw (v2si, long long)
44372     v2si __builtin_arm_wsrawi (v2si, int)
44373     long long __builtin_arm_wsrld (long long, long long)
44374     long long __builtin_arm_wsrldi (long long, int)
44375     v4hi __builtin_arm_wsrlh (v4hi, long long)
44376     v4hi __builtin_arm_wsrlhi (v4hi, int)
44377     v2si __builtin_arm_wsrlw (v2si, long long)
44378     v2si __builtin_arm_wsrlwi (v2si, int)
44379     v8qi __builtin_arm_wsubb (v8qi, v8qi)
44380     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
44381     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
44382     v4hi __builtin_arm_wsubh (v4hi, v4hi)
44383     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
44384     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
44385     v2si __builtin_arm_wsubw (v2si, v2si)
44386     v2si __builtin_arm_wsubwss (v2si, v2si)
44387     v2si __builtin_arm_wsubwus (v2si, v2si)
44388     v4hi __builtin_arm_wunpckehsb (v8qi)
44389     v2si __builtin_arm_wunpckehsh (v4hi)
44390     long long __builtin_arm_wunpckehsw (v2si)
44391     v4hi __builtin_arm_wunpckehub (v8qi)
44392     v2si __builtin_arm_wunpckehuh (v4hi)
44393     long long __builtin_arm_wunpckehuw (v2si)
44394     v4hi __builtin_arm_wunpckelsb (v8qi)
44395     v2si __builtin_arm_wunpckelsh (v4hi)
44396     long long __builtin_arm_wunpckelsw (v2si)
44397     v4hi __builtin_arm_wunpckelub (v8qi)
44398     v2si __builtin_arm_wunpckeluh (v4hi)
44399     long long __builtin_arm_wunpckeluw (v2si)
44400     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
44401     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
44402     v2si __builtin_arm_wunpckihw (v2si, v2si)
44403     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
44404     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
44405     v2si __builtin_arm_wunpckilw (v2si, v2si)
44406     long long __builtin_arm_wxor (long long, long long)
44407     long long __builtin_arm_wzero ()
44408
44409
44410File: 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
44411
444126.60.7 ARM C Language Extensions (ACLE)
44413---------------------------------------
44414
44415GCC implements extensions for C as described in the ARM C Language
44416Extensions (ACLE) specification, which can be found at
44417<https://developer.arm.com/documentation/ihi0053/latest/>.
44418
44419 As a part of ACLE, GCC implements extensions for Advanced SIMD as
44420described in the ARM C Language Extensions Specification.  The complete
44421list of Advanced SIMD intrinsics can be found at
44422<https://developer.arm.com/documentation/ihi0073/latest/>.  The built-in
44423intrinsics for the Advanced SIMD extension are available when NEON is
44424enabled.
44425
44426 Currently, ARM and AArch64 back ends do not support ACLE 2.0 fully.
44427Both back ends support CRC32 intrinsics and the ARM back end supports
44428the Coprocessor intrinsics, all from 'arm_acle.h'.  The ARM back end's
4442916-bit floating-point Advanced SIMD intrinsics currently comply to ACLE
44430v1.1.  AArch64's back end does not have support for 16-bit floating
44431point Advanced SIMD intrinsics yet.
44432
44433 See *note ARM Options:: and *note AArch64 Options:: for more
44434information on the availability of extensions.
44435
44436
44437File: 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
44438
444396.60.8 ARM Floating Point Status and Control Intrinsics
44440-------------------------------------------------------
44441
44442These built-in functions are available for the ARM family of processors
44443with floating-point unit.
44444
44445     unsigned int __builtin_arm_get_fpscr ()
44446     void __builtin_arm_set_fpscr (unsigned int)
44447
44448
44449File: gcc.info,  Node: ARM ARMv8-M Security Extensions,  Next: AVR Built-in Functions,  Prev: ARM Floating Point Status and Control Intrinsics,  Up: Target Builtins
44450
444516.60.9 ARM ARMv8-M Security Extensions
44452--------------------------------------
44453
44454GCC implements the ARMv8-M Security Extensions as described in the
44455ARMv8-M Security Extensions: Requirements on Development Tools
44456Engineering Specification, which can be found at
44457<https://developer.arm.com/documentation/ecm0359818/latest/>.
44458
44459 As part of the Security Extensions GCC implements two new function
44460attributes: 'cmse_nonsecure_entry' and 'cmse_nonsecure_call'.
44461
44462 As part of the Security Extensions GCC implements the intrinsics below.
44463FPTR is used here to mean any function pointer type.
44464
44465     cmse_address_info_t cmse_TT (void *)
44466     cmse_address_info_t cmse_TT_fptr (FPTR)
44467     cmse_address_info_t cmse_TTT (void *)
44468     cmse_address_info_t cmse_TTT_fptr (FPTR)
44469     cmse_address_info_t cmse_TTA (void *)
44470     cmse_address_info_t cmse_TTA_fptr (FPTR)
44471     cmse_address_info_t cmse_TTAT (void *)
44472     cmse_address_info_t cmse_TTAT_fptr (FPTR)
44473     void * cmse_check_address_range (void *, size_t, int)
44474     typeof(p) cmse_nsfptr_create (FPTR p)
44475     intptr_t cmse_is_nsfptr (FPTR)
44476     int cmse_nonsecure_caller (void)
44477
44478
44479File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM ARMv8-M Security Extensions,  Up: Target Builtins
44480
444816.60.10 AVR Built-in Functions
44482------------------------------
44483
44484For each built-in function for AVR, there is an equally named, uppercase
44485built-in macro defined.  That way users can easily query if or if not a
44486specific built-in is implemented or not.  For example, if
44487'__builtin_avr_nop' is available the macro '__BUILTIN_AVR_NOP' is
44488defined to '1' and undefined otherwise.
44489
44490'void __builtin_avr_nop (void)'
44491'void __builtin_avr_sei (void)'
44492'void __builtin_avr_cli (void)'
44493'void __builtin_avr_sleep (void)'
44494'void __builtin_avr_wdr (void)'
44495'unsigned char __builtin_avr_swap (unsigned char)'
44496'unsigned int __builtin_avr_fmul (unsigned char, unsigned char)'
44497'int __builtin_avr_fmuls (char, char)'
44498'int __builtin_avr_fmulsu (char, unsigned char)'
44499     These built-in functions map to the respective machine instruction,
44500     i.e. 'nop', 'sei', 'cli', 'sleep', 'wdr', 'swap', 'fmul', 'fmuls'
44501     resp.  'fmulsu'.  The three 'fmul*' built-ins are implemented as
44502     library call if no hardware multiplier is available.
44503
44504'void __builtin_avr_delay_cycles (unsigned long ticks)'
44505     Delay execution for TICKS cycles.  Note that this built-in does not
44506     take into account the effect of interrupts that might increase
44507     delay time.  TICKS must be a compile-time integer constant; delays
44508     with a variable number of cycles are not supported.
44509
44510'char __builtin_avr_flash_segment (const __memx void*)'
44511     This built-in takes a byte address to the 24-bit *note address
44512     space: AVR Named Address Spaces. '__memx' and returns the number of
44513     the flash segment (the 64 KiB chunk) where the address points to.
44514     Counting starts at '0'.  If the address does not point to flash
44515     memory, return '-1'.
44516
44517'uint8_t __builtin_avr_insert_bits (uint32_t map, uint8_t bits, uint8_t val)'
44518     Insert bits from BITS into VAL and return the resulting value.  The
44519     nibbles of MAP determine how the insertion is performed: Let X be
44520     the N-th nibble of MAP
44521       1. If X is '0xf', then the N-th bit of VAL is returned unaltered.
44522
44523       2. If X is in the range 0...7, then the N-th result bit is set to
44524          the X-th bit of BITS
44525
44526       3. If X is in the range 8...'0xe', then the N-th result bit is
44527          undefined.
44528
44529     One typical use case for this built-in is adjusting input and
44530     output values to non-contiguous port layouts.  Some examples:
44531
44532          // same as val, bits is unused
44533          __builtin_avr_insert_bits (0xffffffff, bits, val)
44534
44535          // same as bits, val is unused
44536          __builtin_avr_insert_bits (0x76543210, bits, val)
44537
44538          // same as rotating bits by 4
44539          __builtin_avr_insert_bits (0x32107654, bits, 0)
44540
44541          // high nibble of result is the high nibble of val
44542          // low nibble of result is the low nibble of bits
44543          __builtin_avr_insert_bits (0xffff3210, bits, val)
44544
44545          // reverse the bit order of bits
44546          __builtin_avr_insert_bits (0x01234567, bits, 0)
44547
44548'void __builtin_avr_nops (unsigned count)'
44549     Insert COUNT 'NOP' instructions.  The number of instructions must
44550     be a compile-time integer constant.
44551
44552There are many more AVR-specific built-in functions that are used to
44553implement the ISO/IEC TR 18037 "Embedded C" fixed-point functions of
44554section 7.18a.6.  You don't need to use these built-ins directly.
44555Instead, use the declarations as supplied by the 'stdfix.h' header with
44556GNU-C99:
44557
44558     #include <stdfix.h>
44559
44560     // Re-interpret the bit representation of unsigned 16-bit
44561     // integer UVAL as Q-format 0.16 value.
44562     unsigned fract get_bits (uint_ur_t uval)
44563     {
44564         return urbits (uval);
44565     }
44566
44567
44568File: gcc.info,  Node: Blackfin Built-in Functions,  Next: BPF Built-in Functions,  Prev: AVR Built-in Functions,  Up: Target Builtins
44569
445706.60.11 Blackfin Built-in Functions
44571-----------------------------------
44572
44573Currently, there are two Blackfin-specific built-in functions.  These
44574are used for generating 'CSYNC' and 'SSYNC' machine insns without using
44575inline assembly; by using these built-in functions the compiler can
44576automatically add workarounds for hardware errata involving these
44577instructions.  These functions are named as follows:
44578
44579     void __builtin_bfin_csync (void)
44580     void __builtin_bfin_ssync (void)
44581
44582
44583File: gcc.info,  Node: BPF Built-in Functions,  Next: FR-V Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
44584
445856.60.12 BPF Built-in Functions
44586------------------------------
44587
44588The following built-in functions are available for eBPF targets.
44589
44590 -- Built-in Function: unsigned long long __builtin_bpf_load_byte
44591          (unsigned long long OFFSET)
44592     Load a byte from the 'struct sk_buff' packet data pointed by the
44593     register '%r6' and return it.
44594
44595 -- Built-in Function: unsigned long long __builtin_bpf_load_half
44596          (unsigned long long OFFSET)
44597     Load 16-bits from the 'struct sk_buff' packet data pointed by the
44598     register '%r6' and return it.
44599
44600 -- Built-in Function: unsigned long long __builtin_bpf_load_word
44601          (unsigned long long OFFSET)
44602     Load 32-bits from the 'struct sk_buff' packet data pointed by the
44603     register '%r6' and return it.
44604
44605
44606File: gcc.info,  Node: FR-V Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: BPF Built-in Functions,  Up: Target Builtins
44607
446086.60.13 FR-V Built-in Functions
44609-------------------------------
44610
44611GCC provides many FR-V-specific built-in functions.  In general, these
44612functions are intended to be compatible with those described by 'FR-V
44613Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.  The
44614two exceptions are '__MDUNPACKH' and '__MBTOHE', the GCC forms of which
44615pass 128-bit values by pointer rather than by value.
44616
44617 Most of the functions are named after specific FR-V instructions.  Such
44618functions are said to be "directly mapped" and are summarized here in
44619tabular form.
44620
44621* Menu:
44622
44623* Argument Types::
44624* Directly-mapped Integer Functions::
44625* Directly-mapped Media Functions::
44626* Raw read/write Functions::
44627* Other Built-in Functions::
44628
44629
44630File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
44631
446326.60.13.1 Argument Types
44633........................
44634
44635The arguments to the built-in functions can be divided into three
44636groups: register numbers, compile-time constants and run-time values.
44637In order to make this classification clear at a glance, the arguments
44638and return values are given the following pseudo types:
44639
44640Pseudo type    Real C type            Constant?   Description
44641'uh'           'unsigned short'       No          an unsigned halfword
44642'uw1'          'unsigned int'         No          an unsigned word
44643'sw1'          'int'                  No          a signed word
44644'uw2'          'unsigned long long'   No          an unsigned doubleword
44645'sw2'          'long long'            No          a signed doubleword
44646'const'        'int'                  Yes         an integer constant
44647'acc'          'int'                  Yes         an ACC register number
44648'iacc'         'int'                  Yes         an IACC register number
44649
44650 These pseudo types are not defined by GCC, they are simply a notational
44651convenience used in this manual.
44652
44653 Arguments of type 'uh', 'uw1', 'sw1', 'uw2' and 'sw2' are evaluated at
44654run time.  They correspond to register operands in the underlying FR-V
44655instructions.
44656
44657 'const' arguments represent immediate operands in the underlying FR-V
44658instructions.  They must be compile-time constants.
44659
44660 'acc' arguments are evaluated at compile time and specify the number of
44661an accumulator register.  For example, an 'acc' argument of 2 selects
44662the ACC2 register.
44663
44664 'iacc' arguments are similar to 'acc' arguments but specify the number
44665of an IACC register.  See *note Other Built-in Functions:: for more
44666details.
44667
44668
44669File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
44670
446716.60.13.2 Directly-Mapped Integer Functions
44672...........................................
44673
44674The functions listed below map directly to FR-V I-type instructions.
44675
44676Function prototype               Example usage           Assembly output
44677'sw1 __ADDSS (sw1, sw1)'         'C = __ADDSS (A, B)'    'ADDSS A,B,C'
44678'sw1 __SCAN (sw1, sw1)'          'C = __SCAN (A, B)'     'SCAN A,B,C'
44679'sw1 __SCUTSS (sw1)'             'B = __SCUTSS (A)'      'SCUTSS A,B'
44680'sw1 __SLASS (sw1, sw1)'         'C = __SLASS (A, B)'    'SLASS A,B,C'
44681'void __SMASS (sw1, sw1)'        '__SMASS (A, B)'        'SMASS A,B'
44682'void __SMSSS (sw1, sw1)'        '__SMSSS (A, B)'        'SMSSS A,B'
44683'void __SMU (sw1, sw1)'          '__SMU (A, B)'          'SMU A,B'
44684'sw2 __SMUL (sw1, sw1)'          'C = __SMUL (A, B)'     'SMUL A,B,C'
44685'sw1 __SUBSS (sw1, sw1)'         'C = __SUBSS (A, B)'    'SUBSS A,B,C'
44686'uw2 __UMUL (uw1, uw1)'          'C = __UMUL (A, B)'     'UMUL A,B,C'
44687
44688
44689File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
44690
446916.60.13.3 Directly-Mapped Media Functions
44692.........................................
44693
44694The functions listed below map directly to FR-V M-type instructions.
44695
44696Function prototype               Example usage           Assembly output
44697'uw1 __MABSHS (sw1)'             'B = __MABSHS (A)'      'MABSHS A,B'
44698'void __MADDACCS (acc, acc)'     '__MADDACCS (B, A)'     'MADDACCS A,B'
44699'sw1 __MADDHSS (sw1, sw1)'       'C = __MADDHSS (A,      'MADDHSS A,B,C'
44700                                 B)'
44701'uw1 __MADDHUS (uw1, uw1)'       'C = __MADDHUS (A,      'MADDHUS A,B,C'
44702                                 B)'
44703'uw1 __MAND (uw1, uw1)'          'C = __MAND (A, B)'     'MAND A,B,C'
44704'void __MASACCS (acc, acc)'      '__MASACCS (B, A)'      'MASACCS A,B'
44705'uw1 __MAVEH (uw1, uw1)'         'C = __MAVEH (A, B)'    'MAVEH A,B,C'
44706'uw2 __MBTOH (uw1)'              'B = __MBTOH (A)'       'MBTOH A,B'
44707'void __MBTOHE (uw1 *, uw1)'     '__MBTOHE (&B, A)'      'MBTOHE A,B'
44708'void __MCLRACC (acc)'           '__MCLRACC (A)'         'MCLRACC A'
44709'void __MCLRACCA (void)'         '__MCLRACCA ()'         'MCLRACCA'
44710'uw1 __Mcop1 (uw1, uw1)'         'C = __Mcop1 (A, B)'    'Mcop1 A,B,C'
44711'uw1 __Mcop2 (uw1, uw1)'         'C = __Mcop2 (A, B)'    'Mcop2 A,B,C'
44712'uw1 __MCPLHI (uw2, const)'      'C = __MCPLHI (A, B)'   'MCPLHI A,#B,C'
44713'uw1 __MCPLI (uw2, const)'       'C = __MCPLI (A, B)'    'MCPLI A,#B,C'
44714'void __MCPXIS (acc, sw1,        '__MCPXIS (C, A, B)'    'MCPXIS A,B,C'
44715sw1)'
44716'void __MCPXIU (acc, uw1,        '__MCPXIU (C, A, B)'    'MCPXIU A,B,C'
44717uw1)'
44718'void __MCPXRS (acc, sw1,        '__MCPXRS (C, A, B)'    'MCPXRS A,B,C'
44719sw1)'
44720'void __MCPXRU (acc, uw1,        '__MCPXRU (C, A, B)'    'MCPXRU A,B,C'
44721uw1)'
44722'uw1 __MCUT (acc, uw1)'          'C = __MCUT (A, B)'     'MCUT A,B,C'
44723'uw1 __MCUTSS (acc, sw1)'        'C = __MCUTSS (A, B)'   'MCUTSS A,B,C'
44724'void __MDADDACCS (acc, acc)'    '__MDADDACCS (B, A)'    'MDADDACCS A,B'
44725'void __MDASACCS (acc, acc)'     '__MDASACCS (B, A)'     'MDASACCS A,B'
44726'uw2 __MDCUTSSI (acc, const)'    'C = __MDCUTSSI (A,     'MDCUTSSI
44727                                 B)'                     A,#B,C'
44728'uw2 __MDPACKH (uw2, uw2)'       'C = __MDPACKH (A,      'MDPACKH A,B,C'
44729                                 B)'
44730'uw2 __MDROTLI (uw2, const)'     'C = __MDROTLI (A,      'MDROTLI
44731                                 B)'                     A,#B,C'
44732'void __MDSUBACCS (acc, acc)'    '__MDSUBACCS (B, A)'    'MDSUBACCS A,B'
44733'void __MDUNPACKH (uw1 *,        '__MDUNPACKH (&B, A)'   'MDUNPACKH A,B'
44734uw2)'
44735'uw2 __MEXPDHD (uw1, const)'     'C = __MEXPDHD (A,      'MEXPDHD
44736                                 B)'                     A,#B,C'
44737'uw1 __MEXPDHW (uw1, const)'     'C = __MEXPDHW (A,      'MEXPDHW
44738                                 B)'                     A,#B,C'
44739'uw1 __MHDSETH (uw1, const)'     'C = __MHDSETH (A,      'MHDSETH
44740                                 B)'                     A,#B,C'
44741'sw1 __MHDSETS (const)'          'B = __MHDSETS (A)'     'MHDSETS #A,B'
44742'uw1 __MHSETHIH (uw1, const)'    'B = __MHSETHIH (B,     'MHSETHIH #A,B'
44743                                 A)'
44744'sw1 __MHSETHIS (sw1, const)'    'B = __MHSETHIS (B,     'MHSETHIS #A,B'
44745                                 A)'
44746'uw1 __MHSETLOH (uw1, const)'    'B = __MHSETLOH (B,     'MHSETLOH #A,B'
44747                                 A)'
44748'sw1 __MHSETLOS (sw1, const)'    'B = __MHSETLOS (B,     'MHSETLOS #A,B'
44749                                 A)'
44750'uw1 __MHTOB (uw2)'              'B = __MHTOB (A)'       'MHTOB A,B'
44751'void __MMACHS (acc, sw1,        '__MMACHS (C, A, B)'    'MMACHS A,B,C'
44752sw1)'
44753'void __MMACHU (acc, uw1,        '__MMACHU (C, A, B)'    'MMACHU A,B,C'
44754uw1)'
44755'void __MMRDHS (acc, sw1,        '__MMRDHS (C, A, B)'    'MMRDHS A,B,C'
44756sw1)'
44757'void __MMRDHU (acc, uw1,        '__MMRDHU (C, A, B)'    'MMRDHU A,B,C'
44758uw1)'
44759'void __MMULHS (acc, sw1,        '__MMULHS (C, A, B)'    'MMULHS A,B,C'
44760sw1)'
44761'void __MMULHU (acc, uw1,        '__MMULHU (C, A, B)'    'MMULHU A,B,C'
44762uw1)'
44763'void __MMULXHS (acc, sw1,       '__MMULXHS (C, A, B)'   'MMULXHS A,B,C'
44764sw1)'
44765'void __MMULXHU (acc, uw1,       '__MMULXHU (C, A, B)'   'MMULXHU A,B,C'
44766uw1)'
44767'uw1 __MNOT (uw1)'               'B = __MNOT (A)'        'MNOT A,B'
44768'uw1 __MOR (uw1, uw1)'           'C = __MOR (A, B)'      'MOR A,B,C'
44769'uw1 __MPACKH (uh, uh)'          'C = __MPACKH (A, B)'   'MPACKH A,B,C'
44770'sw2 __MQADDHSS (sw2, sw2)'      'C = __MQADDHSS (A,     'MQADDHSS
44771                                 B)'                     A,B,C'
44772'uw2 __MQADDHUS (uw2, uw2)'      'C = __MQADDHUS (A,     'MQADDHUS
44773                                 B)'                     A,B,C'
44774'void __MQCPXIS (acc, sw2,       '__MQCPXIS (C, A, B)'   'MQCPXIS A,B,C'
44775sw2)'
44776'void __MQCPXIU (acc, uw2,       '__MQCPXIU (C, A, B)'   'MQCPXIU A,B,C'
44777uw2)'
44778'void __MQCPXRS (acc, sw2,       '__MQCPXRS (C, A, B)'   'MQCPXRS A,B,C'
44779sw2)'
44780'void __MQCPXRU (acc, uw2,       '__MQCPXRU (C, A, B)'   'MQCPXRU A,B,C'
44781uw2)'
44782'sw2 __MQLCLRHS (sw2, sw2)'      'C = __MQLCLRHS (A,     'MQLCLRHS
44783                                 B)'                     A,B,C'
44784'sw2 __MQLMTHS (sw2, sw2)'       'C = __MQLMTHS (A,      'MQLMTHS A,B,C'
44785                                 B)'
44786'void __MQMACHS (acc, sw2,       '__MQMACHS (C, A, B)'   'MQMACHS A,B,C'
44787sw2)'
44788'void __MQMACHU (acc, uw2,       '__MQMACHU (C, A, B)'   'MQMACHU A,B,C'
44789uw2)'
44790'void __MQMACXHS (acc, sw2,      '__MQMACXHS (C, A,      'MQMACXHS
44791sw2)'                            B)'                     A,B,C'
44792'void __MQMULHS (acc, sw2,       '__MQMULHS (C, A, B)'   'MQMULHS A,B,C'
44793sw2)'
44794'void __MQMULHU (acc, uw2,       '__MQMULHU (C, A, B)'   'MQMULHU A,B,C'
44795uw2)'
44796'void __MQMULXHS (acc, sw2,      '__MQMULXHS (C, A,      'MQMULXHS
44797sw2)'                            B)'                     A,B,C'
44798'void __MQMULXHU (acc, uw2,      '__MQMULXHU (C, A,      'MQMULXHU
44799uw2)'                            B)'                     A,B,C'
44800'sw2 __MQSATHS (sw2, sw2)'       'C = __MQSATHS (A,      'MQSATHS A,B,C'
44801                                 B)'
44802'uw2 __MQSLLHI (uw2, int)'       'C = __MQSLLHI (A,      'MQSLLHI A,B,C'
44803                                 B)'
44804'sw2 __MQSRAHI (sw2, int)'       'C = __MQSRAHI (A,      'MQSRAHI A,B,C'
44805                                 B)'
44806'sw2 __MQSUBHSS (sw2, sw2)'      'C = __MQSUBHSS (A,     'MQSUBHSS
44807                                 B)'                     A,B,C'
44808'uw2 __MQSUBHUS (uw2, uw2)'      'C = __MQSUBHUS (A,     'MQSUBHUS
44809                                 B)'                     A,B,C'
44810'void __MQXMACHS (acc, sw2,      '__MQXMACHS (C, A,      'MQXMACHS
44811sw2)'                            B)'                     A,B,C'
44812'void __MQXMACXHS (acc, sw2,     '__MQXMACXHS (C, A,     'MQXMACXHS
44813sw2)'                            B)'                     A,B,C'
44814'uw1 __MRDACC (acc)'             'B = __MRDACC (A)'      'MRDACC A,B'
44815'uw1 __MRDACCG (acc)'            'B = __MRDACCG (A)'     'MRDACCG A,B'
44816'uw1 __MROTLI (uw1, const)'      'C = __MROTLI (A, B)'   'MROTLI A,#B,C'
44817'uw1 __MROTRI (uw1, const)'      'C = __MROTRI (A, B)'   'MROTRI A,#B,C'
44818'sw1 __MSATHS (sw1, sw1)'        'C = __MSATHS (A, B)'   'MSATHS A,B,C'
44819'uw1 __MSATHU (uw1, uw1)'        'C = __MSATHU (A, B)'   'MSATHU A,B,C'
44820'uw1 __MSLLHI (uw1, const)'      'C = __MSLLHI (A, B)'   'MSLLHI A,#B,C'
44821'sw1 __MSRAHI (sw1, const)'      'C = __MSRAHI (A, B)'   'MSRAHI A,#B,C'
44822'uw1 __MSRLHI (uw1, const)'      'C = __MSRLHI (A, B)'   'MSRLHI A,#B,C'
44823'void __MSUBACCS (acc, acc)'     '__MSUBACCS (B, A)'     'MSUBACCS A,B'
44824'sw1 __MSUBHSS (sw1, sw1)'       'C = __MSUBHSS (A,      'MSUBHSS A,B,C'
44825                                 B)'
44826'uw1 __MSUBHUS (uw1, uw1)'       'C = __MSUBHUS (A,      'MSUBHUS A,B,C'
44827                                 B)'
44828'void __MTRAP (void)'            '__MTRAP ()'            'MTRAP'
44829'uw2 __MUNPACKH (uw1)'           'B = __MUNPACKH (A)'    'MUNPACKH A,B'
44830'uw1 __MWCUT (uw2, uw1)'         'C = __MWCUT (A, B)'    'MWCUT A,B,C'
44831'void __MWTACC (acc, uw1)'       '__MWTACC (B, A)'       'MWTACC A,B'
44832'void __MWTACCG (acc, uw1)'      '__MWTACCG (B, A)'      'MWTACCG A,B'
44833'uw1 __MXOR (uw1, uw1)'          'C = __MXOR (A, B)'     'MXOR A,B,C'
44834
44835
44836File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
44837
448386.60.13.4 Raw Read/Write Functions
44839..................................
44840
44841This sections describes built-in functions related to read and write
44842instructions to access memory.  These functions generate 'membar'
44843instructions to flush the I/O load and stores where appropriate, as
44844described in Fujitsu's manual described above.
44845
44846'unsigned char __builtin_read8 (void *DATA)'
44847'unsigned short __builtin_read16 (void *DATA)'
44848'unsigned long __builtin_read32 (void *DATA)'
44849'unsigned long long __builtin_read64 (void *DATA)'
44850
44851'void __builtin_write8 (void *DATA, unsigned char DATUM)'
44852'void __builtin_write16 (void *DATA, unsigned short DATUM)'
44853'void __builtin_write32 (void *DATA, unsigned long DATUM)'
44854'void __builtin_write64 (void *DATA, unsigned long long DATUM)'
44855
44856
44857File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
44858
448596.60.13.5 Other Built-in Functions
44860..................................
44861
44862This section describes built-in functions that are not named after a
44863specific FR-V instruction.
44864
44865'sw2 __IACCreadll (iacc REG)'
44866     Return the full 64-bit value of IACC0.  The REG argument is
44867     reserved for future expansion and must be 0.
44868
44869'sw1 __IACCreadl (iacc REG)'
44870     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
44871     Other values of REG are rejected as invalid.
44872
44873'void __IACCsetll (iacc REG, sw2 X)'
44874     Set the full 64-bit value of IACC0 to X.  The REG argument is
44875     reserved for future expansion and must be 0.
44876
44877'void __IACCsetl (iacc REG, sw1 X)'
44878     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
44879     values of REG are rejected as invalid.
44880
44881'void __data_prefetch0 (const void *X)'
44882     Use the 'dcpl' instruction to load the contents of address X into
44883     the data cache.
44884
44885'void __data_prefetch (const void *X)'
44886     Use the 'nldub' instruction to load the contents of address X into
44887     the data cache.  The instruction is issued in slot I1.
44888
44889
44890File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: FR-V Built-in Functions,  Up: Target Builtins
44891
448926.60.14 MIPS DSP Built-in Functions
44893-----------------------------------
44894
44895The MIPS DSP Application-Specific Extension (ASE) includes new
44896instructions that are designed to improve the performance of DSP and
44897media applications.  It provides instructions that operate on packed
448988-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
44899
44900 GCC supports MIPS DSP operations using both the generic vector
44901extensions (*note Vector Extensions::) and a collection of MIPS-specific
44902built-in functions.  Both kinds of support are enabled by the '-mdsp'
44903command-line option.
44904
44905 Revision 2 of the ASE was introduced in the second half of 2006.  This
44906revision adds extra instructions to the original ASE, but is otherwise
44907backwards-compatible with it.  You can select revision 2 using the
44908command-line option '-mdspr2'; this option implies '-mdsp'.
44909
44910 The SCOUNT and POS bits of the DSP control register are global.  The
44911WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and POS
44912bits.  During optimization, the compiler does not delete these
44913instructions and it does not delete calls to functions containing these
44914instructions.
44915
44916 At present, GCC only provides support for operations on 32-bit vectors.
44917The vector type associated with 8-bit integer data is usually called
44918'v4i8', the vector type associated with Q7 is usually called 'v4q7', the
44919vector type associated with 16-bit integer data is usually called
44920'v2i16', and the vector type associated with Q15 is usually called
44921'v2q15'.  They can be defined in C as follows:
44922
44923     typedef signed char v4i8 __attribute__ ((vector_size(4)));
44924     typedef signed char v4q7 __attribute__ ((vector_size(4)));
44925     typedef short v2i16 __attribute__ ((vector_size(4)));
44926     typedef short v2q15 __attribute__ ((vector_size(4)));
44927
44928 'v4i8', 'v4q7', 'v2i16' and 'v2q15' values are initialized in the same
44929way as aggregates.  For example:
44930
44931     v4i8 a = {1, 2, 3, 4};
44932     v4i8 b;
44933     b = (v4i8) {5, 6, 7, 8};
44934
44935     v2q15 c = {0x0fcb, 0x3a75};
44936     v2q15 d;
44937     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
44938
44939 _Note:_ The CPU's endianness determines the order in which values are
44940packed.  On little-endian targets, the first value is the least
44941significant and the last value is the most significant.  The opposite
44942order applies to big-endian targets.  For example, the code above sets
44943the lowest byte of 'a' to '1' on little-endian targets and '4' on
44944big-endian targets.
44945
44946 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
44947representation.  As shown in this example, the integer representation of
44948a Q7 value can be obtained by multiplying the fractional value by
44949'0x1.0p7'.  The equivalent for Q15 values is to multiply by '0x1.0p15'.
44950The equivalent for Q31 values is to multiply by '0x1.0p31'.
44951
44952 The table below lists the 'v4i8' and 'v2q15' operations for which
44953hardware support exists.  'a' and 'b' are 'v4i8' values, and 'c' and 'd'
44954are 'v2q15' values.
44955
44956C code                               MIPS instruction
44957'a + b'                              'addu.qb'
44958'c + d'                              'addq.ph'
44959'a - b'                              'subu.qb'
44960'c - d'                              'subq.ph'
44961
44962 The table below lists the 'v2i16' operation for which hardware support
44963exists for the DSP ASE REV 2.  'e' and 'f' are 'v2i16' values.
44964
44965C code                               MIPS instruction
44966'e * f'                              'mul.ph'
44967
44968 It is easier to describe the DSP built-in functions if we first define
44969the following types:
44970
44971     typedef int q31;
44972     typedef int i32;
44973     typedef unsigned int ui32;
44974     typedef long long a64;
44975
44976 'q31' and 'i32' are actually the same as 'int', but we use 'q31' to
44977indicate a Q31 fractional value and 'i32' to indicate a 32-bit integer
44978value.  Similarly, 'a64' is the same as 'long long', but we use 'a64' to
44979indicate values that are placed in one of the four DSP accumulators
44980('$ac0', '$ac1', '$ac2' or '$ac3').
44981
44982 Also, some built-in functions prefer or require immediate numbers as
44983parameters, because the corresponding DSP instructions accept both
44984immediate numbers and register operands, or accept immediate numbers
44985only.  The immediate parameters are listed as follows.
44986
44987     imm0_3: 0 to 3.
44988     imm0_7: 0 to 7.
44989     imm0_15: 0 to 15.
44990     imm0_31: 0 to 31.
44991     imm0_63: 0 to 63.
44992     imm0_255: 0 to 255.
44993     imm_n32_31: -32 to 31.
44994     imm_n512_511: -512 to 511.
44995
44996 The following built-in functions map directly to a particular MIPS DSP
44997instruction.  Please refer to the architecture specification for details
44998on what each instruction does.
44999
45000     v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
45001     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
45002     q31 __builtin_mips_addq_s_w (q31, q31)
45003     v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
45004     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
45005     v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
45006     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
45007     q31 __builtin_mips_subq_s_w (q31, q31)
45008     v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
45009     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
45010     i32 __builtin_mips_addsc (i32, i32)
45011     i32 __builtin_mips_addwc (i32, i32)
45012     i32 __builtin_mips_modsub (i32, i32)
45013     i32 __builtin_mips_raddu_w_qb (v4i8)
45014     v2q15 __builtin_mips_absq_s_ph (v2q15)
45015     q31 __builtin_mips_absq_s_w (q31)
45016     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
45017     v2q15 __builtin_mips_precrq_ph_w (q31, q31)
45018     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
45019     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
45020     q31 __builtin_mips_preceq_w_phl (v2q15)
45021     q31 __builtin_mips_preceq_w_phr (v2q15)
45022     v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
45023     v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
45024     v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
45025     v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
45026     v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
45027     v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
45028     v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
45029     v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
45030     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
45031     v4i8 __builtin_mips_shll_qb (v4i8, i32)
45032     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
45033     v2q15 __builtin_mips_shll_ph (v2q15, i32)
45034     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
45035     v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
45036     q31 __builtin_mips_shll_s_w (q31, imm0_31)
45037     q31 __builtin_mips_shll_s_w (q31, i32)
45038     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
45039     v4i8 __builtin_mips_shrl_qb (v4i8, i32)
45040     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
45041     v2q15 __builtin_mips_shra_ph (v2q15, i32)
45042     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
45043     v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
45044     q31 __builtin_mips_shra_r_w (q31, imm0_31)
45045     q31 __builtin_mips_shra_r_w (q31, i32)
45046     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
45047     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
45048     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
45049     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
45050     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
45051     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
45052     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
45053     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
45054     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
45055     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
45056     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
45057     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
45058     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
45059     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
45060     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
45061     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
45062     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
45063     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
45064     i32 __builtin_mips_bitrev (i32)
45065     i32 __builtin_mips_insv (i32, i32)
45066     v4i8 __builtin_mips_repl_qb (imm0_255)
45067     v4i8 __builtin_mips_repl_qb (i32)
45068     v2q15 __builtin_mips_repl_ph (imm_n512_511)
45069     v2q15 __builtin_mips_repl_ph (i32)
45070     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
45071     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
45072     void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
45073     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
45074     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
45075     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
45076     void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
45077     void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
45078     void __builtin_mips_cmp_le_ph (v2q15, v2q15)
45079     v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
45080     v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
45081     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
45082     i32 __builtin_mips_extr_w (a64, imm0_31)
45083     i32 __builtin_mips_extr_w (a64, i32)
45084     i32 __builtin_mips_extr_r_w (a64, imm0_31)
45085     i32 __builtin_mips_extr_s_h (a64, i32)
45086     i32 __builtin_mips_extr_rs_w (a64, imm0_31)
45087     i32 __builtin_mips_extr_rs_w (a64, i32)
45088     i32 __builtin_mips_extr_s_h (a64, imm0_31)
45089     i32 __builtin_mips_extr_r_w (a64, i32)
45090     i32 __builtin_mips_extp (a64, imm0_31)
45091     i32 __builtin_mips_extp (a64, i32)
45092     i32 __builtin_mips_extpdp (a64, imm0_31)
45093     i32 __builtin_mips_extpdp (a64, i32)
45094     a64 __builtin_mips_shilo (a64, imm_n32_31)
45095     a64 __builtin_mips_shilo (a64, i32)
45096     a64 __builtin_mips_mthlip (a64, i32)
45097     void __builtin_mips_wrdsp (i32, imm0_63)
45098     i32 __builtin_mips_rddsp (imm0_63)
45099     i32 __builtin_mips_lbux (void *, i32)
45100     i32 __builtin_mips_lhx (void *, i32)
45101     i32 __builtin_mips_lwx (void *, i32)
45102     a64 __builtin_mips_ldx (void *, i32) [MIPS64 only]
45103     i32 __builtin_mips_bposge32 (void)
45104     a64 __builtin_mips_madd (a64, i32, i32);
45105     a64 __builtin_mips_maddu (a64, ui32, ui32);
45106     a64 __builtin_mips_msub (a64, i32, i32);
45107     a64 __builtin_mips_msubu (a64, ui32, ui32);
45108     a64 __builtin_mips_mult (i32, i32);
45109     a64 __builtin_mips_multu (ui32, ui32);
45110
45111 The following built-in functions map directly to a particular MIPS DSP
45112REV 2 instruction.  Please refer to the architecture specification for
45113details on what each instruction does.
45114
45115     v4q7 __builtin_mips_absq_s_qb (v4q7);
45116     v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
45117     v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
45118     v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
45119     v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
45120     i32 __builtin_mips_append (i32, i32, imm0_31);
45121     i32 __builtin_mips_balign (i32, i32, imm0_3);
45122     i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
45123     i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
45124     i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
45125     a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
45126     a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
45127     v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
45128     v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
45129     q31 __builtin_mips_mulq_rs_w (q31, q31);
45130     v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
45131     q31 __builtin_mips_mulq_s_w (q31, q31);
45132     a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
45133     v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
45134     v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
45135     v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
45136     i32 __builtin_mips_prepend (i32, i32, imm0_31);
45137     v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
45138     v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
45139     v4i8 __builtin_mips_shra_qb (v4i8, i32);
45140     v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
45141     v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
45142     v2i16 __builtin_mips_shrl_ph (v2i16, i32);
45143     v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
45144     v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
45145     v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
45146     v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
45147     v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
45148     v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
45149     q31 __builtin_mips_addqh_w (q31, q31);
45150     q31 __builtin_mips_addqh_r_w (q31, q31);
45151     v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
45152     v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
45153     q31 __builtin_mips_subqh_w (q31, q31);
45154     q31 __builtin_mips_subqh_r_w (q31, q31);
45155     a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
45156     a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
45157     a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
45158     a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
45159     a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
45160     a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
45161
45162
45163File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
45164
451656.60.15 MIPS Paired-Single Support
45166----------------------------------
45167
45168The MIPS64 architecture includes a number of instructions that operate
45169on pairs of single-precision floating-point values.  Each pair is packed
45170into a 64-bit floating-point register, with one element being designated
45171the "upper half" and the other being designated the "lower half".
45172
45173 GCC supports paired-single operations using both the generic vector
45174extensions (*note Vector Extensions::) and a collection of MIPS-specific
45175built-in functions.  Both kinds of support are enabled by the
45176'-mpaired-single' command-line option.
45177
45178 The vector type associated with paired-single values is usually called
45179'v2sf'.  It can be defined in C as follows:
45180
45181     typedef float v2sf __attribute__ ((vector_size (8)));
45182
45183 'v2sf' values are initialized in the same way as aggregates.  For
45184example:
45185
45186     v2sf a = {1.5, 9.1};
45187     v2sf b;
45188     float e, f;
45189     b = (v2sf) {e, f};
45190
45191 _Note:_ The CPU's endianness determines which value is stored in the
45192upper half of a register and which value is stored in the lower half.
45193On little-endian targets, the first value is the lower one and the
45194second value is the upper one.  The opposite order applies to big-endian
45195targets.  For example, the code above sets the lower half of 'a' to
45196'1.5' on little-endian targets and '9.1' on big-endian targets.
45197
45198
45199File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: MIPS SIMD Architecture (MSA) Support,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
45200
452016.60.16 MIPS Loongson Built-in Functions
45202----------------------------------------
45203
45204GCC provides intrinsics to access the SIMD instructions provided by the
45205ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
45206available after inclusion of the 'loongson.h' header file, operate on
45207the following 64-bit vector types:
45208
45209   * 'uint8x8_t', a vector of eight unsigned 8-bit integers;
45210   * 'uint16x4_t', a vector of four unsigned 16-bit integers;
45211   * 'uint32x2_t', a vector of two unsigned 32-bit integers;
45212   * 'int8x8_t', a vector of eight signed 8-bit integers;
45213   * 'int16x4_t', a vector of four signed 16-bit integers;
45214   * 'int32x2_t', a vector of two signed 32-bit integers.
45215
45216 The intrinsics provided are listed below; each is named after the
45217machine instruction to which it corresponds, with suffixes added as
45218appropriate to distinguish intrinsics that expand to the same machine
45219instruction yet have different argument types.  Refer to the
45220architecture documentation for a description of the functionality of
45221each instruction.
45222
45223     int16x4_t packsswh (int32x2_t s, int32x2_t t);
45224     int8x8_t packsshb (int16x4_t s, int16x4_t t);
45225     uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
45226     uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
45227     uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
45228     uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
45229     int32x2_t paddw_s (int32x2_t s, int32x2_t t);
45230     int16x4_t paddh_s (int16x4_t s, int16x4_t t);
45231     int8x8_t paddb_s (int8x8_t s, int8x8_t t);
45232     uint64_t paddd_u (uint64_t s, uint64_t t);
45233     int64_t paddd_s (int64_t s, int64_t t);
45234     int16x4_t paddsh (int16x4_t s, int16x4_t t);
45235     int8x8_t paddsb (int8x8_t s, int8x8_t t);
45236     uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
45237     uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
45238     uint64_t pandn_ud (uint64_t s, uint64_t t);
45239     uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
45240     uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
45241     uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
45242     int64_t pandn_sd (int64_t s, int64_t t);
45243     int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
45244     int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
45245     int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
45246     uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
45247     uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
45248     uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
45249     uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
45250     uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
45251     int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
45252     int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
45253     int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
45254     uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
45255     uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
45256     uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
45257     int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
45258     int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
45259     int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
45260     uint16x4_t pextrh_u (uint16x4_t s, int field);
45261     int16x4_t pextrh_s (int16x4_t s, int field);
45262     uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
45263     uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
45264     uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
45265     uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
45266     int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
45267     int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
45268     int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
45269     int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
45270     int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
45271     int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
45272     uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
45273     int16x4_t pminsh (int16x4_t s, int16x4_t t);
45274     uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
45275     uint8x8_t pmovmskb_u (uint8x8_t s);
45276     int8x8_t pmovmskb_s (int8x8_t s);
45277     uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
45278     int16x4_t pmulhh (int16x4_t s, int16x4_t t);
45279     int16x4_t pmullh (int16x4_t s, int16x4_t t);
45280     int64_t pmuluw (uint32x2_t s, uint32x2_t t);
45281     uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
45282     uint16x4_t biadd (uint8x8_t s);
45283     uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
45284     uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
45285     int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
45286     uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
45287     int16x4_t psllh_s (int16x4_t s, uint8_t amount);
45288     uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
45289     int32x2_t psllw_s (int32x2_t s, uint8_t amount);
45290     uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
45291     int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
45292     uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
45293     int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
45294     uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
45295     int16x4_t psrah_s (int16x4_t s, uint8_t amount);
45296     uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
45297     int32x2_t psraw_s (int32x2_t s, uint8_t amount);
45298     uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
45299     uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
45300     uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
45301     int32x2_t psubw_s (int32x2_t s, int32x2_t t);
45302     int16x4_t psubh_s (int16x4_t s, int16x4_t t);
45303     int8x8_t psubb_s (int8x8_t s, int8x8_t t);
45304     uint64_t psubd_u (uint64_t s, uint64_t t);
45305     int64_t psubd_s (int64_t s, int64_t t);
45306     int16x4_t psubsh (int16x4_t s, int16x4_t t);
45307     int8x8_t psubsb (int8x8_t s, int8x8_t t);
45308     uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
45309     uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
45310     uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
45311     uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
45312     uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
45313     int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
45314     int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
45315     int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
45316     uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
45317     uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
45318     uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
45319     int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
45320     int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
45321     int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
45322
45323* Menu:
45324
45325* Paired-Single Arithmetic::
45326* Paired-Single Built-in Functions::
45327* MIPS-3D Built-in Functions::
45328
45329
45330File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
45331
453326.60.16.1 Paired-Single Arithmetic
45333..................................
45334
45335The table below lists the 'v2sf' operations for which hardware support
45336exists.  'a', 'b' and 'c' are 'v2sf' values and 'x' is an integral
45337value.
45338
45339C code                               MIPS instruction
45340'a + b'                              'add.ps'
45341'a - b'                              'sub.ps'
45342'-a'                                 'neg.ps'
45343'a * b'                              'mul.ps'
45344'a * b + c'                          'madd.ps'
45345'a * b - c'                          'msub.ps'
45346'-(a * b + c)'                       'nmadd.ps'
45347'-(a * b - c)'                       'nmsub.ps'
45348'x ? a : b'                          'movn.ps'/'movz.ps'
45349
45350 Note that the multiply-accumulate instructions can be disabled using
45351the command-line option '-mno-fused-madd'.
45352
45353
45354File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
45355
453566.60.16.2 Paired-Single Built-in Functions
45357..........................................
45358
45359The following paired-single functions map directly to a particular MIPS
45360instruction.  Please refer to the architecture specification for details
45361on what each instruction does.
45362
45363'v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
45364     Pair lower lower ('pll.ps').
45365
45366'v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
45367     Pair upper lower ('pul.ps').
45368
45369'v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
45370     Pair lower upper ('plu.ps').
45371
45372'v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
45373     Pair upper upper ('puu.ps').
45374
45375'v2sf __builtin_mips_cvt_ps_s (float, float)'
45376     Convert pair to paired single ('cvt.ps.s').
45377
45378'float __builtin_mips_cvt_s_pl (v2sf)'
45379     Convert pair lower to single ('cvt.s.pl').
45380
45381'float __builtin_mips_cvt_s_pu (v2sf)'
45382     Convert pair upper to single ('cvt.s.pu').
45383
45384'v2sf __builtin_mips_abs_ps (v2sf)'
45385     Absolute value ('abs.ps').
45386
45387'v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
45388     Align variable ('alnv.ps').
45389
45390     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
45391     otherwise the result is unpredictable.  Please read the instruction
45392     description for details.
45393
45394 The following multi-instruction functions are also available.  In each
45395case, COND can be any of the 16 floating-point conditions: 'f', 'un',
45396'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
45397'lt', 'nge', 'le' or 'ngt'.
45398
45399'v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
45400'v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
45401     Conditional move based on floating-point comparison ('c.COND.ps',
45402     'movt.ps'/'movf.ps').
45403
45404     The 'movt' functions return the value X computed by:
45405
45406          c.COND.ps CC,A,B
45407          mov.ps X,C
45408          movt.ps X,D,CC
45409
45410     The 'movf' functions are similar but use 'movf.ps' instead of
45411     'movt.ps'.
45412
45413'int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
45414'int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
45415     Comparison of two paired-single values ('c.COND.ps',
45416     'bc1t'/'bc1f').
45417
45418     These functions compare A and B using 'c.COND.ps' and return either
45419     the upper or lower half of the result.  For example:
45420
45421          v2sf a, b;
45422          if (__builtin_mips_upper_c_eq_ps (a, b))
45423            upper_halves_are_equal ();
45424          else
45425            upper_halves_are_unequal ();
45426
45427          if (__builtin_mips_lower_c_eq_ps (a, b))
45428            lower_halves_are_equal ();
45429          else
45430            lower_halves_are_unequal ();
45431
45432
45433File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
45434
454356.60.16.3 MIPS-3D Built-in Functions
45436....................................
45437
45438The MIPS-3D Application-Specific Extension (ASE) includes additional
45439paired-single instructions that are designed to improve the performance
45440of 3D graphics operations.  Support for these instructions is controlled
45441by the '-mips3d' command-line option.
45442
45443 The functions listed below map directly to a particular MIPS-3D
45444instruction.  Please refer to the architecture specification for more
45445details on what each instruction does.
45446
45447'v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
45448     Reduction add ('addr.ps').
45449
45450'v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
45451     Reduction multiply ('mulr.ps').
45452
45453'v2sf __builtin_mips_cvt_pw_ps (v2sf)'
45454     Convert paired single to paired word ('cvt.pw.ps').
45455
45456'v2sf __builtin_mips_cvt_ps_pw (v2sf)'
45457     Convert paired word to paired single ('cvt.ps.pw').
45458
45459'float __builtin_mips_recip1_s (float)'
45460'double __builtin_mips_recip1_d (double)'
45461'v2sf __builtin_mips_recip1_ps (v2sf)'
45462     Reduced-precision reciprocal (sequence step 1) ('recip1.FMT').
45463
45464'float __builtin_mips_recip2_s (float, float)'
45465'double __builtin_mips_recip2_d (double, double)'
45466'v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
45467     Reduced-precision reciprocal (sequence step 2) ('recip2.FMT').
45468
45469'float __builtin_mips_rsqrt1_s (float)'
45470'double __builtin_mips_rsqrt1_d (double)'
45471'v2sf __builtin_mips_rsqrt1_ps (v2sf)'
45472     Reduced-precision reciprocal square root (sequence step 1)
45473     ('rsqrt1.FMT').
45474
45475'float __builtin_mips_rsqrt2_s (float, float)'
45476'double __builtin_mips_rsqrt2_d (double, double)'
45477'v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
45478     Reduced-precision reciprocal square root (sequence step 2)
45479     ('rsqrt2.FMT').
45480
45481 The following multi-instruction functions are also available.  In each
45482case, COND can be any of the 16 floating-point conditions: 'f', 'un',
45483'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
45484'lt', 'nge', 'le' or 'ngt'.
45485
45486'int __builtin_mips_cabs_COND_s (float A, float B)'
45487'int __builtin_mips_cabs_COND_d (double A, double B)'
45488     Absolute comparison of two scalar values ('cabs.COND.FMT',
45489     'bc1t'/'bc1f').
45490
45491     These functions compare A and B using 'cabs.COND.s' or
45492     'cabs.COND.d' and return the result as a boolean value.  For
45493     example:
45494
45495          float a, b;
45496          if (__builtin_mips_cabs_eq_s (a, b))
45497            true ();
45498          else
45499            false ();
45500
45501'int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
45502'int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
45503     Absolute comparison of two paired-single values ('cabs.COND.ps',
45504     'bc1t'/'bc1f').
45505
45506     These functions compare A and B using 'cabs.COND.ps' and return
45507     either the upper or lower half of the result.  For example:
45508
45509          v2sf a, b;
45510          if (__builtin_mips_upper_cabs_eq_ps (a, b))
45511            upper_halves_are_equal ();
45512          else
45513            upper_halves_are_unequal ();
45514
45515          if (__builtin_mips_lower_cabs_eq_ps (a, b))
45516            lower_halves_are_equal ();
45517          else
45518            lower_halves_are_unequal ();
45519
45520'v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
45521'v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
45522     Conditional move based on absolute comparison ('cabs.COND.ps',
45523     'movt.ps'/'movf.ps').
45524
45525     The 'movt' functions return the value X computed by:
45526
45527          cabs.COND.ps CC,A,B
45528          mov.ps X,C
45529          movt.ps X,D,CC
45530
45531     The 'movf' functions are similar but use 'movf.ps' instead of
45532     'movt.ps'.
45533
45534'int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
45535'int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
45536'int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
45537'int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
45538     Comparison of two paired-single values ('c.COND.ps'/'cabs.COND.ps',
45539     'bc1any2t'/'bc1any2f').
45540
45541     These functions compare A and B using 'c.COND.ps' or
45542     'cabs.COND.ps'.  The 'any' forms return 'true' if either result is
45543     'true' and the 'all' forms return 'true' if both results are
45544     'true'.  For example:
45545
45546          v2sf a, b;
45547          if (__builtin_mips_any_c_eq_ps (a, b))
45548            one_is_true ();
45549          else
45550            both_are_false ();
45551
45552          if (__builtin_mips_all_c_eq_ps (a, b))
45553            both_are_true ();
45554          else
45555            one_is_false ();
45556
45557'int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
45558'int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
45559'int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
45560'int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
45561     Comparison of four paired-single values
45562     ('c.COND.ps'/'cabs.COND.ps', 'bc1any4t'/'bc1any4f').
45563
45564     These functions use 'c.COND.ps' or 'cabs.COND.ps' to compare A with
45565     B and to compare C with D.  The 'any' forms return 'true' if any of
45566     the four results are 'true' and the 'all' forms return 'true' if
45567     all four results are 'true'.  For example:
45568
45569          v2sf a, b, c, d;
45570          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
45571            some_are_true ();
45572          else
45573            all_are_false ();
45574
45575          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
45576            all_are_true ();
45577          else
45578            some_are_false ();
45579
45580
45581File: gcc.info,  Node: MIPS SIMD Architecture (MSA) Support,  Next: Other MIPS Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
45582
455836.60.17 MIPS SIMD Architecture (MSA) Support
45584--------------------------------------------
45585
45586* Menu:
45587
45588* MIPS SIMD Architecture Built-in Functions::
45589
45590GCC provides intrinsics to access the SIMD instructions provided by the
45591MSA MIPS SIMD Architecture.  The interface is made available by
45592including '<msa.h>' and using '-mmsa -mhard-float -mfp64 -mnan=2008'.
45593For each '__builtin_msa_*', there is a shortened name of the intrinsic,
45594'__msa_*'.
45595
45596 MSA implements 128-bit wide vector registers, operating on 8-, 16-, 32-
45597and 64-bit integer, 16- and 32-bit fixed-point, or 32- and 64-bit
45598floating point data elements.  The following vectors typedefs are
45599included in 'msa.h':
45600   * 'v16i8', a vector of sixteen signed 8-bit integers;
45601   * 'v16u8', a vector of sixteen unsigned 8-bit integers;
45602   * 'v8i16', a vector of eight signed 16-bit integers;
45603   * 'v8u16', a vector of eight unsigned 16-bit integers;
45604   * 'v4i32', a vector of four signed 32-bit integers;
45605   * 'v4u32', a vector of four unsigned 32-bit integers;
45606   * 'v2i64', a vector of two signed 64-bit integers;
45607   * 'v2u64', a vector of two unsigned 64-bit integers;
45608   * 'v4f32', a vector of four 32-bit floats;
45609   * 'v2f64', a vector of two 64-bit doubles.
45610
45611 Instructions and corresponding built-ins may have additional
45612restrictions and/or input/output values manipulated:
45613   * 'imm0_1', an integer literal in range 0 to 1;
45614   * 'imm0_3', an integer literal in range 0 to 3;
45615   * 'imm0_7', an integer literal in range 0 to 7;
45616   * 'imm0_15', an integer literal in range 0 to 15;
45617   * 'imm0_31', an integer literal in range 0 to 31;
45618   * 'imm0_63', an integer literal in range 0 to 63;
45619   * 'imm0_255', an integer literal in range 0 to 255;
45620   * 'imm_n16_15', an integer literal in range -16 to 15;
45621   * 'imm_n512_511', an integer literal in range -512 to 511;
45622   * 'imm_n1024_1022', an integer literal in range -512 to 511 left
45623     shifted by 1 bit, i.e., -1024, -1022, ..., 1020, 1022;
45624   * 'imm_n2048_2044', an integer literal in range -512 to 511 left
45625     shifted by 2 bits, i.e., -2048, -2044, ..., 2040, 2044;
45626   * 'imm_n4096_4088', an integer literal in range -512 to 511 left
45627     shifted by 3 bits, i.e., -4096, -4088, ..., 4080, 4088;
45628   * 'imm1_4', an integer literal in range 1 to 4;
45629   * 'i32, i64, u32, u64, f32, f64', defined as follows:
45630
45631     {
45632     typedef int i32;
45633     #if __LONG_MAX__ == __LONG_LONG_MAX__
45634     typedef long i64;
45635     #else
45636     typedef long long i64;
45637     #endif
45638
45639     typedef unsigned int u32;
45640     #if __LONG_MAX__ == __LONG_LONG_MAX__
45641     typedef unsigned long u64;
45642     #else
45643     typedef unsigned long long u64;
45644     #endif
45645
45646     typedef double f64;
45647     typedef float f32;
45648     }
45649
45650
45651File: gcc.info,  Node: MIPS SIMD Architecture Built-in Functions,  Up: MIPS SIMD Architecture (MSA) Support
45652
456536.60.17.1 MIPS SIMD Architecture Built-in Functions
45654...................................................
45655
45656The intrinsics provided are listed below; each is named after the
45657machine instruction.
45658
45659     v16i8 __builtin_msa_add_a_b (v16i8, v16i8);
45660     v8i16 __builtin_msa_add_a_h (v8i16, v8i16);
45661     v4i32 __builtin_msa_add_a_w (v4i32, v4i32);
45662     v2i64 __builtin_msa_add_a_d (v2i64, v2i64);
45663
45664     v16i8 __builtin_msa_adds_a_b (v16i8, v16i8);
45665     v8i16 __builtin_msa_adds_a_h (v8i16, v8i16);
45666     v4i32 __builtin_msa_adds_a_w (v4i32, v4i32);
45667     v2i64 __builtin_msa_adds_a_d (v2i64, v2i64);
45668
45669     v16i8 __builtin_msa_adds_s_b (v16i8, v16i8);
45670     v8i16 __builtin_msa_adds_s_h (v8i16, v8i16);
45671     v4i32 __builtin_msa_adds_s_w (v4i32, v4i32);
45672     v2i64 __builtin_msa_adds_s_d (v2i64, v2i64);
45673
45674     v16u8 __builtin_msa_adds_u_b (v16u8, v16u8);
45675     v8u16 __builtin_msa_adds_u_h (v8u16, v8u16);
45676     v4u32 __builtin_msa_adds_u_w (v4u32, v4u32);
45677     v2u64 __builtin_msa_adds_u_d (v2u64, v2u64);
45678
45679     v16i8 __builtin_msa_addv_b (v16i8, v16i8);
45680     v8i16 __builtin_msa_addv_h (v8i16, v8i16);
45681     v4i32 __builtin_msa_addv_w (v4i32, v4i32);
45682     v2i64 __builtin_msa_addv_d (v2i64, v2i64);
45683
45684     v16i8 __builtin_msa_addvi_b (v16i8, imm0_31);
45685     v8i16 __builtin_msa_addvi_h (v8i16, imm0_31);
45686     v4i32 __builtin_msa_addvi_w (v4i32, imm0_31);
45687     v2i64 __builtin_msa_addvi_d (v2i64, imm0_31);
45688
45689     v16u8 __builtin_msa_and_v (v16u8, v16u8);
45690
45691     v16u8 __builtin_msa_andi_b (v16u8, imm0_255);
45692
45693     v16i8 __builtin_msa_asub_s_b (v16i8, v16i8);
45694     v8i16 __builtin_msa_asub_s_h (v8i16, v8i16);
45695     v4i32 __builtin_msa_asub_s_w (v4i32, v4i32);
45696     v2i64 __builtin_msa_asub_s_d (v2i64, v2i64);
45697
45698     v16u8 __builtin_msa_asub_u_b (v16u8, v16u8);
45699     v8u16 __builtin_msa_asub_u_h (v8u16, v8u16);
45700     v4u32 __builtin_msa_asub_u_w (v4u32, v4u32);
45701     v2u64 __builtin_msa_asub_u_d (v2u64, v2u64);
45702
45703     v16i8 __builtin_msa_ave_s_b (v16i8, v16i8);
45704     v8i16 __builtin_msa_ave_s_h (v8i16, v8i16);
45705     v4i32 __builtin_msa_ave_s_w (v4i32, v4i32);
45706     v2i64 __builtin_msa_ave_s_d (v2i64, v2i64);
45707
45708     v16u8 __builtin_msa_ave_u_b (v16u8, v16u8);
45709     v8u16 __builtin_msa_ave_u_h (v8u16, v8u16);
45710     v4u32 __builtin_msa_ave_u_w (v4u32, v4u32);
45711     v2u64 __builtin_msa_ave_u_d (v2u64, v2u64);
45712
45713     v16i8 __builtin_msa_aver_s_b (v16i8, v16i8);
45714     v8i16 __builtin_msa_aver_s_h (v8i16, v8i16);
45715     v4i32 __builtin_msa_aver_s_w (v4i32, v4i32);
45716     v2i64 __builtin_msa_aver_s_d (v2i64, v2i64);
45717
45718     v16u8 __builtin_msa_aver_u_b (v16u8, v16u8);
45719     v8u16 __builtin_msa_aver_u_h (v8u16, v8u16);
45720     v4u32 __builtin_msa_aver_u_w (v4u32, v4u32);
45721     v2u64 __builtin_msa_aver_u_d (v2u64, v2u64);
45722
45723     v16u8 __builtin_msa_bclr_b (v16u8, v16u8);
45724     v8u16 __builtin_msa_bclr_h (v8u16, v8u16);
45725     v4u32 __builtin_msa_bclr_w (v4u32, v4u32);
45726     v2u64 __builtin_msa_bclr_d (v2u64, v2u64);
45727
45728     v16u8 __builtin_msa_bclri_b (v16u8, imm0_7);
45729     v8u16 __builtin_msa_bclri_h (v8u16, imm0_15);
45730     v4u32 __builtin_msa_bclri_w (v4u32, imm0_31);
45731     v2u64 __builtin_msa_bclri_d (v2u64, imm0_63);
45732
45733     v16u8 __builtin_msa_binsl_b (v16u8, v16u8, v16u8);
45734     v8u16 __builtin_msa_binsl_h (v8u16, v8u16, v8u16);
45735     v4u32 __builtin_msa_binsl_w (v4u32, v4u32, v4u32);
45736     v2u64 __builtin_msa_binsl_d (v2u64, v2u64, v2u64);
45737
45738     v16u8 __builtin_msa_binsli_b (v16u8, v16u8, imm0_7);
45739     v8u16 __builtin_msa_binsli_h (v8u16, v8u16, imm0_15);
45740     v4u32 __builtin_msa_binsli_w (v4u32, v4u32, imm0_31);
45741     v2u64 __builtin_msa_binsli_d (v2u64, v2u64, imm0_63);
45742
45743     v16u8 __builtin_msa_binsr_b (v16u8, v16u8, v16u8);
45744     v8u16 __builtin_msa_binsr_h (v8u16, v8u16, v8u16);
45745     v4u32 __builtin_msa_binsr_w (v4u32, v4u32, v4u32);
45746     v2u64 __builtin_msa_binsr_d (v2u64, v2u64, v2u64);
45747
45748     v16u8 __builtin_msa_binsri_b (v16u8, v16u8, imm0_7);
45749     v8u16 __builtin_msa_binsri_h (v8u16, v8u16, imm0_15);
45750     v4u32 __builtin_msa_binsri_w (v4u32, v4u32, imm0_31);
45751     v2u64 __builtin_msa_binsri_d (v2u64, v2u64, imm0_63);
45752
45753     v16u8 __builtin_msa_bmnz_v (v16u8, v16u8, v16u8);
45754
45755     v16u8 __builtin_msa_bmnzi_b (v16u8, v16u8, imm0_255);
45756
45757     v16u8 __builtin_msa_bmz_v (v16u8, v16u8, v16u8);
45758
45759     v16u8 __builtin_msa_bmzi_b (v16u8, v16u8, imm0_255);
45760
45761     v16u8 __builtin_msa_bneg_b (v16u8, v16u8);
45762     v8u16 __builtin_msa_bneg_h (v8u16, v8u16);
45763     v4u32 __builtin_msa_bneg_w (v4u32, v4u32);
45764     v2u64 __builtin_msa_bneg_d (v2u64, v2u64);
45765
45766     v16u8 __builtin_msa_bnegi_b (v16u8, imm0_7);
45767     v8u16 __builtin_msa_bnegi_h (v8u16, imm0_15);
45768     v4u32 __builtin_msa_bnegi_w (v4u32, imm0_31);
45769     v2u64 __builtin_msa_bnegi_d (v2u64, imm0_63);
45770
45771     i32 __builtin_msa_bnz_b (v16u8);
45772     i32 __builtin_msa_bnz_h (v8u16);
45773     i32 __builtin_msa_bnz_w (v4u32);
45774     i32 __builtin_msa_bnz_d (v2u64);
45775
45776     i32 __builtin_msa_bnz_v (v16u8);
45777
45778     v16u8 __builtin_msa_bsel_v (v16u8, v16u8, v16u8);
45779
45780     v16u8 __builtin_msa_bseli_b (v16u8, v16u8, imm0_255);
45781
45782     v16u8 __builtin_msa_bset_b (v16u8, v16u8);
45783     v8u16 __builtin_msa_bset_h (v8u16, v8u16);
45784     v4u32 __builtin_msa_bset_w (v4u32, v4u32);
45785     v2u64 __builtin_msa_bset_d (v2u64, v2u64);
45786
45787     v16u8 __builtin_msa_bseti_b (v16u8, imm0_7);
45788     v8u16 __builtin_msa_bseti_h (v8u16, imm0_15);
45789     v4u32 __builtin_msa_bseti_w (v4u32, imm0_31);
45790     v2u64 __builtin_msa_bseti_d (v2u64, imm0_63);
45791
45792     i32 __builtin_msa_bz_b (v16u8);
45793     i32 __builtin_msa_bz_h (v8u16);
45794     i32 __builtin_msa_bz_w (v4u32);
45795     i32 __builtin_msa_bz_d (v2u64);
45796
45797     i32 __builtin_msa_bz_v (v16u8);
45798
45799     v16i8 __builtin_msa_ceq_b (v16i8, v16i8);
45800     v8i16 __builtin_msa_ceq_h (v8i16, v8i16);
45801     v4i32 __builtin_msa_ceq_w (v4i32, v4i32);
45802     v2i64 __builtin_msa_ceq_d (v2i64, v2i64);
45803
45804     v16i8 __builtin_msa_ceqi_b (v16i8, imm_n16_15);
45805     v8i16 __builtin_msa_ceqi_h (v8i16, imm_n16_15);
45806     v4i32 __builtin_msa_ceqi_w (v4i32, imm_n16_15);
45807     v2i64 __builtin_msa_ceqi_d (v2i64, imm_n16_15);
45808
45809     i32 __builtin_msa_cfcmsa (imm0_31);
45810
45811     v16i8 __builtin_msa_cle_s_b (v16i8, v16i8);
45812     v8i16 __builtin_msa_cle_s_h (v8i16, v8i16);
45813     v4i32 __builtin_msa_cle_s_w (v4i32, v4i32);
45814     v2i64 __builtin_msa_cle_s_d (v2i64, v2i64);
45815
45816     v16i8 __builtin_msa_cle_u_b (v16u8, v16u8);
45817     v8i16 __builtin_msa_cle_u_h (v8u16, v8u16);
45818     v4i32 __builtin_msa_cle_u_w (v4u32, v4u32);
45819     v2i64 __builtin_msa_cle_u_d (v2u64, v2u64);
45820
45821     v16i8 __builtin_msa_clei_s_b (v16i8, imm_n16_15);
45822     v8i16 __builtin_msa_clei_s_h (v8i16, imm_n16_15);
45823     v4i32 __builtin_msa_clei_s_w (v4i32, imm_n16_15);
45824     v2i64 __builtin_msa_clei_s_d (v2i64, imm_n16_15);
45825
45826     v16i8 __builtin_msa_clei_u_b (v16u8, imm0_31);
45827     v8i16 __builtin_msa_clei_u_h (v8u16, imm0_31);
45828     v4i32 __builtin_msa_clei_u_w (v4u32, imm0_31);
45829     v2i64 __builtin_msa_clei_u_d (v2u64, imm0_31);
45830
45831     v16i8 __builtin_msa_clt_s_b (v16i8, v16i8);
45832     v8i16 __builtin_msa_clt_s_h (v8i16, v8i16);
45833     v4i32 __builtin_msa_clt_s_w (v4i32, v4i32);
45834     v2i64 __builtin_msa_clt_s_d (v2i64, v2i64);
45835
45836     v16i8 __builtin_msa_clt_u_b (v16u8, v16u8);
45837     v8i16 __builtin_msa_clt_u_h (v8u16, v8u16);
45838     v4i32 __builtin_msa_clt_u_w (v4u32, v4u32);
45839     v2i64 __builtin_msa_clt_u_d (v2u64, v2u64);
45840
45841     v16i8 __builtin_msa_clti_s_b (v16i8, imm_n16_15);
45842     v8i16 __builtin_msa_clti_s_h (v8i16, imm_n16_15);
45843     v4i32 __builtin_msa_clti_s_w (v4i32, imm_n16_15);
45844     v2i64 __builtin_msa_clti_s_d (v2i64, imm_n16_15);
45845
45846     v16i8 __builtin_msa_clti_u_b (v16u8, imm0_31);
45847     v8i16 __builtin_msa_clti_u_h (v8u16, imm0_31);
45848     v4i32 __builtin_msa_clti_u_w (v4u32, imm0_31);
45849     v2i64 __builtin_msa_clti_u_d (v2u64, imm0_31);
45850
45851     i32 __builtin_msa_copy_s_b (v16i8, imm0_15);
45852     i32 __builtin_msa_copy_s_h (v8i16, imm0_7);
45853     i32 __builtin_msa_copy_s_w (v4i32, imm0_3);
45854     i64 __builtin_msa_copy_s_d (v2i64, imm0_1);
45855
45856     u32 __builtin_msa_copy_u_b (v16i8, imm0_15);
45857     u32 __builtin_msa_copy_u_h (v8i16, imm0_7);
45858     u32 __builtin_msa_copy_u_w (v4i32, imm0_3);
45859     u64 __builtin_msa_copy_u_d (v2i64, imm0_1);
45860
45861     void __builtin_msa_ctcmsa (imm0_31, i32);
45862
45863     v16i8 __builtin_msa_div_s_b (v16i8, v16i8);
45864     v8i16 __builtin_msa_div_s_h (v8i16, v8i16);
45865     v4i32 __builtin_msa_div_s_w (v4i32, v4i32);
45866     v2i64 __builtin_msa_div_s_d (v2i64, v2i64);
45867
45868     v16u8 __builtin_msa_div_u_b (v16u8, v16u8);
45869     v8u16 __builtin_msa_div_u_h (v8u16, v8u16);
45870     v4u32 __builtin_msa_div_u_w (v4u32, v4u32);
45871     v2u64 __builtin_msa_div_u_d (v2u64, v2u64);
45872
45873     v8i16 __builtin_msa_dotp_s_h (v16i8, v16i8);
45874     v4i32 __builtin_msa_dotp_s_w (v8i16, v8i16);
45875     v2i64 __builtin_msa_dotp_s_d (v4i32, v4i32);
45876
45877     v8u16 __builtin_msa_dotp_u_h (v16u8, v16u8);
45878     v4u32 __builtin_msa_dotp_u_w (v8u16, v8u16);
45879     v2u64 __builtin_msa_dotp_u_d (v4u32, v4u32);
45880
45881     v8i16 __builtin_msa_dpadd_s_h (v8i16, v16i8, v16i8);
45882     v4i32 __builtin_msa_dpadd_s_w (v4i32, v8i16, v8i16);
45883     v2i64 __builtin_msa_dpadd_s_d (v2i64, v4i32, v4i32);
45884
45885     v8u16 __builtin_msa_dpadd_u_h (v8u16, v16u8, v16u8);
45886     v4u32 __builtin_msa_dpadd_u_w (v4u32, v8u16, v8u16);
45887     v2u64 __builtin_msa_dpadd_u_d (v2u64, v4u32, v4u32);
45888
45889     v8i16 __builtin_msa_dpsub_s_h (v8i16, v16i8, v16i8);
45890     v4i32 __builtin_msa_dpsub_s_w (v4i32, v8i16, v8i16);
45891     v2i64 __builtin_msa_dpsub_s_d (v2i64, v4i32, v4i32);
45892
45893     v8i16 __builtin_msa_dpsub_u_h (v8i16, v16u8, v16u8);
45894     v4i32 __builtin_msa_dpsub_u_w (v4i32, v8u16, v8u16);
45895     v2i64 __builtin_msa_dpsub_u_d (v2i64, v4u32, v4u32);
45896
45897     v4f32 __builtin_msa_fadd_w (v4f32, v4f32);
45898     v2f64 __builtin_msa_fadd_d (v2f64, v2f64);
45899
45900     v4i32 __builtin_msa_fcaf_w (v4f32, v4f32);
45901     v2i64 __builtin_msa_fcaf_d (v2f64, v2f64);
45902
45903     v4i32 __builtin_msa_fceq_w (v4f32, v4f32);
45904     v2i64 __builtin_msa_fceq_d (v2f64, v2f64);
45905
45906     v4i32 __builtin_msa_fclass_w (v4f32);
45907     v2i64 __builtin_msa_fclass_d (v2f64);
45908
45909     v4i32 __builtin_msa_fcle_w (v4f32, v4f32);
45910     v2i64 __builtin_msa_fcle_d (v2f64, v2f64);
45911
45912     v4i32 __builtin_msa_fclt_w (v4f32, v4f32);
45913     v2i64 __builtin_msa_fclt_d (v2f64, v2f64);
45914
45915     v4i32 __builtin_msa_fcne_w (v4f32, v4f32);
45916     v2i64 __builtin_msa_fcne_d (v2f64, v2f64);
45917
45918     v4i32 __builtin_msa_fcor_w (v4f32, v4f32);
45919     v2i64 __builtin_msa_fcor_d (v2f64, v2f64);
45920
45921     v4i32 __builtin_msa_fcueq_w (v4f32, v4f32);
45922     v2i64 __builtin_msa_fcueq_d (v2f64, v2f64);
45923
45924     v4i32 __builtin_msa_fcule_w (v4f32, v4f32);
45925     v2i64 __builtin_msa_fcule_d (v2f64, v2f64);
45926
45927     v4i32 __builtin_msa_fcult_w (v4f32, v4f32);
45928     v2i64 __builtin_msa_fcult_d (v2f64, v2f64);
45929
45930     v4i32 __builtin_msa_fcun_w (v4f32, v4f32);
45931     v2i64 __builtin_msa_fcun_d (v2f64, v2f64);
45932
45933     v4i32 __builtin_msa_fcune_w (v4f32, v4f32);
45934     v2i64 __builtin_msa_fcune_d (v2f64, v2f64);
45935
45936     v4f32 __builtin_msa_fdiv_w (v4f32, v4f32);
45937     v2f64 __builtin_msa_fdiv_d (v2f64, v2f64);
45938
45939     v8i16 __builtin_msa_fexdo_h (v4f32, v4f32);
45940     v4f32 __builtin_msa_fexdo_w (v2f64, v2f64);
45941
45942     v4f32 __builtin_msa_fexp2_w (v4f32, v4i32);
45943     v2f64 __builtin_msa_fexp2_d (v2f64, v2i64);
45944
45945     v4f32 __builtin_msa_fexupl_w (v8i16);
45946     v2f64 __builtin_msa_fexupl_d (v4f32);
45947
45948     v4f32 __builtin_msa_fexupr_w (v8i16);
45949     v2f64 __builtin_msa_fexupr_d (v4f32);
45950
45951     v4f32 __builtin_msa_ffint_s_w (v4i32);
45952     v2f64 __builtin_msa_ffint_s_d (v2i64);
45953
45954     v4f32 __builtin_msa_ffint_u_w (v4u32);
45955     v2f64 __builtin_msa_ffint_u_d (v2u64);
45956
45957     v4f32 __builtin_msa_ffql_w (v8i16);
45958     v2f64 __builtin_msa_ffql_d (v4i32);
45959
45960     v4f32 __builtin_msa_ffqr_w (v8i16);
45961     v2f64 __builtin_msa_ffqr_d (v4i32);
45962
45963     v16i8 __builtin_msa_fill_b (i32);
45964     v8i16 __builtin_msa_fill_h (i32);
45965     v4i32 __builtin_msa_fill_w (i32);
45966     v2i64 __builtin_msa_fill_d (i64);
45967
45968     v4f32 __builtin_msa_flog2_w (v4f32);
45969     v2f64 __builtin_msa_flog2_d (v2f64);
45970
45971     v4f32 __builtin_msa_fmadd_w (v4f32, v4f32, v4f32);
45972     v2f64 __builtin_msa_fmadd_d (v2f64, v2f64, v2f64);
45973
45974     v4f32 __builtin_msa_fmax_w (v4f32, v4f32);
45975     v2f64 __builtin_msa_fmax_d (v2f64, v2f64);
45976
45977     v4f32 __builtin_msa_fmax_a_w (v4f32, v4f32);
45978     v2f64 __builtin_msa_fmax_a_d (v2f64, v2f64);
45979
45980     v4f32 __builtin_msa_fmin_w (v4f32, v4f32);
45981     v2f64 __builtin_msa_fmin_d (v2f64, v2f64);
45982
45983     v4f32 __builtin_msa_fmin_a_w (v4f32, v4f32);
45984     v2f64 __builtin_msa_fmin_a_d (v2f64, v2f64);
45985
45986     v4f32 __builtin_msa_fmsub_w (v4f32, v4f32, v4f32);
45987     v2f64 __builtin_msa_fmsub_d (v2f64, v2f64, v2f64);
45988
45989     v4f32 __builtin_msa_fmul_w (v4f32, v4f32);
45990     v2f64 __builtin_msa_fmul_d (v2f64, v2f64);
45991
45992     v4f32 __builtin_msa_frint_w (v4f32);
45993     v2f64 __builtin_msa_frint_d (v2f64);
45994
45995     v4f32 __builtin_msa_frcp_w (v4f32);
45996     v2f64 __builtin_msa_frcp_d (v2f64);
45997
45998     v4f32 __builtin_msa_frsqrt_w (v4f32);
45999     v2f64 __builtin_msa_frsqrt_d (v2f64);
46000
46001     v4i32 __builtin_msa_fsaf_w (v4f32, v4f32);
46002     v2i64 __builtin_msa_fsaf_d (v2f64, v2f64);
46003
46004     v4i32 __builtin_msa_fseq_w (v4f32, v4f32);
46005     v2i64 __builtin_msa_fseq_d (v2f64, v2f64);
46006
46007     v4i32 __builtin_msa_fsle_w (v4f32, v4f32);
46008     v2i64 __builtin_msa_fsle_d (v2f64, v2f64);
46009
46010     v4i32 __builtin_msa_fslt_w (v4f32, v4f32);
46011     v2i64 __builtin_msa_fslt_d (v2f64, v2f64);
46012
46013     v4i32 __builtin_msa_fsne_w (v4f32, v4f32);
46014     v2i64 __builtin_msa_fsne_d (v2f64, v2f64);
46015
46016     v4i32 __builtin_msa_fsor_w (v4f32, v4f32);
46017     v2i64 __builtin_msa_fsor_d (v2f64, v2f64);
46018
46019     v4f32 __builtin_msa_fsqrt_w (v4f32);
46020     v2f64 __builtin_msa_fsqrt_d (v2f64);
46021
46022     v4f32 __builtin_msa_fsub_w (v4f32, v4f32);
46023     v2f64 __builtin_msa_fsub_d (v2f64, v2f64);
46024
46025     v4i32 __builtin_msa_fsueq_w (v4f32, v4f32);
46026     v2i64 __builtin_msa_fsueq_d (v2f64, v2f64);
46027
46028     v4i32 __builtin_msa_fsule_w (v4f32, v4f32);
46029     v2i64 __builtin_msa_fsule_d (v2f64, v2f64);
46030
46031     v4i32 __builtin_msa_fsult_w (v4f32, v4f32);
46032     v2i64 __builtin_msa_fsult_d (v2f64, v2f64);
46033
46034     v4i32 __builtin_msa_fsun_w (v4f32, v4f32);
46035     v2i64 __builtin_msa_fsun_d (v2f64, v2f64);
46036
46037     v4i32 __builtin_msa_fsune_w (v4f32, v4f32);
46038     v2i64 __builtin_msa_fsune_d (v2f64, v2f64);
46039
46040     v4i32 __builtin_msa_ftint_s_w (v4f32);
46041     v2i64 __builtin_msa_ftint_s_d (v2f64);
46042
46043     v4u32 __builtin_msa_ftint_u_w (v4f32);
46044     v2u64 __builtin_msa_ftint_u_d (v2f64);
46045
46046     v8i16 __builtin_msa_ftq_h (v4f32, v4f32);
46047     v4i32 __builtin_msa_ftq_w (v2f64, v2f64);
46048
46049     v4i32 __builtin_msa_ftrunc_s_w (v4f32);
46050     v2i64 __builtin_msa_ftrunc_s_d (v2f64);
46051
46052     v4u32 __builtin_msa_ftrunc_u_w (v4f32);
46053     v2u64 __builtin_msa_ftrunc_u_d (v2f64);
46054
46055     v8i16 __builtin_msa_hadd_s_h (v16i8, v16i8);
46056     v4i32 __builtin_msa_hadd_s_w (v8i16, v8i16);
46057     v2i64 __builtin_msa_hadd_s_d (v4i32, v4i32);
46058
46059     v8u16 __builtin_msa_hadd_u_h (v16u8, v16u8);
46060     v4u32 __builtin_msa_hadd_u_w (v8u16, v8u16);
46061     v2u64 __builtin_msa_hadd_u_d (v4u32, v4u32);
46062
46063     v8i16 __builtin_msa_hsub_s_h (v16i8, v16i8);
46064     v4i32 __builtin_msa_hsub_s_w (v8i16, v8i16);
46065     v2i64 __builtin_msa_hsub_s_d (v4i32, v4i32);
46066
46067     v8i16 __builtin_msa_hsub_u_h (v16u8, v16u8);
46068     v4i32 __builtin_msa_hsub_u_w (v8u16, v8u16);
46069     v2i64 __builtin_msa_hsub_u_d (v4u32, v4u32);
46070
46071     v16i8 __builtin_msa_ilvev_b (v16i8, v16i8);
46072     v8i16 __builtin_msa_ilvev_h (v8i16, v8i16);
46073     v4i32 __builtin_msa_ilvev_w (v4i32, v4i32);
46074     v2i64 __builtin_msa_ilvev_d (v2i64, v2i64);
46075
46076     v16i8 __builtin_msa_ilvl_b (v16i8, v16i8);
46077     v8i16 __builtin_msa_ilvl_h (v8i16, v8i16);
46078     v4i32 __builtin_msa_ilvl_w (v4i32, v4i32);
46079     v2i64 __builtin_msa_ilvl_d (v2i64, v2i64);
46080
46081     v16i8 __builtin_msa_ilvod_b (v16i8, v16i8);
46082     v8i16 __builtin_msa_ilvod_h (v8i16, v8i16);
46083     v4i32 __builtin_msa_ilvod_w (v4i32, v4i32);
46084     v2i64 __builtin_msa_ilvod_d (v2i64, v2i64);
46085
46086     v16i8 __builtin_msa_ilvr_b (v16i8, v16i8);
46087     v8i16 __builtin_msa_ilvr_h (v8i16, v8i16);
46088     v4i32 __builtin_msa_ilvr_w (v4i32, v4i32);
46089     v2i64 __builtin_msa_ilvr_d (v2i64, v2i64);
46090
46091     v16i8 __builtin_msa_insert_b (v16i8, imm0_15, i32);
46092     v8i16 __builtin_msa_insert_h (v8i16, imm0_7, i32);
46093     v4i32 __builtin_msa_insert_w (v4i32, imm0_3, i32);
46094     v2i64 __builtin_msa_insert_d (v2i64, imm0_1, i64);
46095
46096     v16i8 __builtin_msa_insve_b (v16i8, imm0_15, v16i8);
46097     v8i16 __builtin_msa_insve_h (v8i16, imm0_7, v8i16);
46098     v4i32 __builtin_msa_insve_w (v4i32, imm0_3, v4i32);
46099     v2i64 __builtin_msa_insve_d (v2i64, imm0_1, v2i64);
46100
46101     v16i8 __builtin_msa_ld_b (const void *, imm_n512_511);
46102     v8i16 __builtin_msa_ld_h (const void *, imm_n1024_1022);
46103     v4i32 __builtin_msa_ld_w (const void *, imm_n2048_2044);
46104     v2i64 __builtin_msa_ld_d (const void *, imm_n4096_4088);
46105
46106     v16i8 __builtin_msa_ldi_b (imm_n512_511);
46107     v8i16 __builtin_msa_ldi_h (imm_n512_511);
46108     v4i32 __builtin_msa_ldi_w (imm_n512_511);
46109     v2i64 __builtin_msa_ldi_d (imm_n512_511);
46110
46111     v8i16 __builtin_msa_madd_q_h (v8i16, v8i16, v8i16);
46112     v4i32 __builtin_msa_madd_q_w (v4i32, v4i32, v4i32);
46113
46114     v8i16 __builtin_msa_maddr_q_h (v8i16, v8i16, v8i16);
46115     v4i32 __builtin_msa_maddr_q_w (v4i32, v4i32, v4i32);
46116
46117     v16i8 __builtin_msa_maddv_b (v16i8, v16i8, v16i8);
46118     v8i16 __builtin_msa_maddv_h (v8i16, v8i16, v8i16);
46119     v4i32 __builtin_msa_maddv_w (v4i32, v4i32, v4i32);
46120     v2i64 __builtin_msa_maddv_d (v2i64, v2i64, v2i64);
46121
46122     v16i8 __builtin_msa_max_a_b (v16i8, v16i8);
46123     v8i16 __builtin_msa_max_a_h (v8i16, v8i16);
46124     v4i32 __builtin_msa_max_a_w (v4i32, v4i32);
46125     v2i64 __builtin_msa_max_a_d (v2i64, v2i64);
46126
46127     v16i8 __builtin_msa_max_s_b (v16i8, v16i8);
46128     v8i16 __builtin_msa_max_s_h (v8i16, v8i16);
46129     v4i32 __builtin_msa_max_s_w (v4i32, v4i32);
46130     v2i64 __builtin_msa_max_s_d (v2i64, v2i64);
46131
46132     v16u8 __builtin_msa_max_u_b (v16u8, v16u8);
46133     v8u16 __builtin_msa_max_u_h (v8u16, v8u16);
46134     v4u32 __builtin_msa_max_u_w (v4u32, v4u32);
46135     v2u64 __builtin_msa_max_u_d (v2u64, v2u64);
46136
46137     v16i8 __builtin_msa_maxi_s_b (v16i8, imm_n16_15);
46138     v8i16 __builtin_msa_maxi_s_h (v8i16, imm_n16_15);
46139     v4i32 __builtin_msa_maxi_s_w (v4i32, imm_n16_15);
46140     v2i64 __builtin_msa_maxi_s_d (v2i64, imm_n16_15);
46141
46142     v16u8 __builtin_msa_maxi_u_b (v16u8, imm0_31);
46143     v8u16 __builtin_msa_maxi_u_h (v8u16, imm0_31);
46144     v4u32 __builtin_msa_maxi_u_w (v4u32, imm0_31);
46145     v2u64 __builtin_msa_maxi_u_d (v2u64, imm0_31);
46146
46147     v16i8 __builtin_msa_min_a_b (v16i8, v16i8);
46148     v8i16 __builtin_msa_min_a_h (v8i16, v8i16);
46149     v4i32 __builtin_msa_min_a_w (v4i32, v4i32);
46150     v2i64 __builtin_msa_min_a_d (v2i64, v2i64);
46151
46152     v16i8 __builtin_msa_min_s_b (v16i8, v16i8);
46153     v8i16 __builtin_msa_min_s_h (v8i16, v8i16);
46154     v4i32 __builtin_msa_min_s_w (v4i32, v4i32);
46155     v2i64 __builtin_msa_min_s_d (v2i64, v2i64);
46156
46157     v16u8 __builtin_msa_min_u_b (v16u8, v16u8);
46158     v8u16 __builtin_msa_min_u_h (v8u16, v8u16);
46159     v4u32 __builtin_msa_min_u_w (v4u32, v4u32);
46160     v2u64 __builtin_msa_min_u_d (v2u64, v2u64);
46161
46162     v16i8 __builtin_msa_mini_s_b (v16i8, imm_n16_15);
46163     v8i16 __builtin_msa_mini_s_h (v8i16, imm_n16_15);
46164     v4i32 __builtin_msa_mini_s_w (v4i32, imm_n16_15);
46165     v2i64 __builtin_msa_mini_s_d (v2i64, imm_n16_15);
46166
46167     v16u8 __builtin_msa_mini_u_b (v16u8, imm0_31);
46168     v8u16 __builtin_msa_mini_u_h (v8u16, imm0_31);
46169     v4u32 __builtin_msa_mini_u_w (v4u32, imm0_31);
46170     v2u64 __builtin_msa_mini_u_d (v2u64, imm0_31);
46171
46172     v16i8 __builtin_msa_mod_s_b (v16i8, v16i8);
46173     v8i16 __builtin_msa_mod_s_h (v8i16, v8i16);
46174     v4i32 __builtin_msa_mod_s_w (v4i32, v4i32);
46175     v2i64 __builtin_msa_mod_s_d (v2i64, v2i64);
46176
46177     v16u8 __builtin_msa_mod_u_b (v16u8, v16u8);
46178     v8u16 __builtin_msa_mod_u_h (v8u16, v8u16);
46179     v4u32 __builtin_msa_mod_u_w (v4u32, v4u32);
46180     v2u64 __builtin_msa_mod_u_d (v2u64, v2u64);
46181
46182     v16i8 __builtin_msa_move_v (v16i8);
46183
46184     v8i16 __builtin_msa_msub_q_h (v8i16, v8i16, v8i16);
46185     v4i32 __builtin_msa_msub_q_w (v4i32, v4i32, v4i32);
46186
46187     v8i16 __builtin_msa_msubr_q_h (v8i16, v8i16, v8i16);
46188     v4i32 __builtin_msa_msubr_q_w (v4i32, v4i32, v4i32);
46189
46190     v16i8 __builtin_msa_msubv_b (v16i8, v16i8, v16i8);
46191     v8i16 __builtin_msa_msubv_h (v8i16, v8i16, v8i16);
46192     v4i32 __builtin_msa_msubv_w (v4i32, v4i32, v4i32);
46193     v2i64 __builtin_msa_msubv_d (v2i64, v2i64, v2i64);
46194
46195     v8i16 __builtin_msa_mul_q_h (v8i16, v8i16);
46196     v4i32 __builtin_msa_mul_q_w (v4i32, v4i32);
46197
46198     v8i16 __builtin_msa_mulr_q_h (v8i16, v8i16);
46199     v4i32 __builtin_msa_mulr_q_w (v4i32, v4i32);
46200
46201     v16i8 __builtin_msa_mulv_b (v16i8, v16i8);
46202     v8i16 __builtin_msa_mulv_h (v8i16, v8i16);
46203     v4i32 __builtin_msa_mulv_w (v4i32, v4i32);
46204     v2i64 __builtin_msa_mulv_d (v2i64, v2i64);
46205
46206     v16i8 __builtin_msa_nloc_b (v16i8);
46207     v8i16 __builtin_msa_nloc_h (v8i16);
46208     v4i32 __builtin_msa_nloc_w (v4i32);
46209     v2i64 __builtin_msa_nloc_d (v2i64);
46210
46211     v16i8 __builtin_msa_nlzc_b (v16i8);
46212     v8i16 __builtin_msa_nlzc_h (v8i16);
46213     v4i32 __builtin_msa_nlzc_w (v4i32);
46214     v2i64 __builtin_msa_nlzc_d (v2i64);
46215
46216     v16u8 __builtin_msa_nor_v (v16u8, v16u8);
46217
46218     v16u8 __builtin_msa_nori_b (v16u8, imm0_255);
46219
46220     v16u8 __builtin_msa_or_v (v16u8, v16u8);
46221
46222     v16u8 __builtin_msa_ori_b (v16u8, imm0_255);
46223
46224     v16i8 __builtin_msa_pckev_b (v16i8, v16i8);
46225     v8i16 __builtin_msa_pckev_h (v8i16, v8i16);
46226     v4i32 __builtin_msa_pckev_w (v4i32, v4i32);
46227     v2i64 __builtin_msa_pckev_d (v2i64, v2i64);
46228
46229     v16i8 __builtin_msa_pckod_b (v16i8, v16i8);
46230     v8i16 __builtin_msa_pckod_h (v8i16, v8i16);
46231     v4i32 __builtin_msa_pckod_w (v4i32, v4i32);
46232     v2i64 __builtin_msa_pckod_d (v2i64, v2i64);
46233
46234     v16i8 __builtin_msa_pcnt_b (v16i8);
46235     v8i16 __builtin_msa_pcnt_h (v8i16);
46236     v4i32 __builtin_msa_pcnt_w (v4i32);
46237     v2i64 __builtin_msa_pcnt_d (v2i64);
46238
46239     v16i8 __builtin_msa_sat_s_b (v16i8, imm0_7);
46240     v8i16 __builtin_msa_sat_s_h (v8i16, imm0_15);
46241     v4i32 __builtin_msa_sat_s_w (v4i32, imm0_31);
46242     v2i64 __builtin_msa_sat_s_d (v2i64, imm0_63);
46243
46244     v16u8 __builtin_msa_sat_u_b (v16u8, imm0_7);
46245     v8u16 __builtin_msa_sat_u_h (v8u16, imm0_15);
46246     v4u32 __builtin_msa_sat_u_w (v4u32, imm0_31);
46247     v2u64 __builtin_msa_sat_u_d (v2u64, imm0_63);
46248
46249     v16i8 __builtin_msa_shf_b (v16i8, imm0_255);
46250     v8i16 __builtin_msa_shf_h (v8i16, imm0_255);
46251     v4i32 __builtin_msa_shf_w (v4i32, imm0_255);
46252
46253     v16i8 __builtin_msa_sld_b (v16i8, v16i8, i32);
46254     v8i16 __builtin_msa_sld_h (v8i16, v8i16, i32);
46255     v4i32 __builtin_msa_sld_w (v4i32, v4i32, i32);
46256     v2i64 __builtin_msa_sld_d (v2i64, v2i64, i32);
46257
46258     v16i8 __builtin_msa_sldi_b (v16i8, v16i8, imm0_15);
46259     v8i16 __builtin_msa_sldi_h (v8i16, v8i16, imm0_7);
46260     v4i32 __builtin_msa_sldi_w (v4i32, v4i32, imm0_3);
46261     v2i64 __builtin_msa_sldi_d (v2i64, v2i64, imm0_1);
46262
46263     v16i8 __builtin_msa_sll_b (v16i8, v16i8);
46264     v8i16 __builtin_msa_sll_h (v8i16, v8i16);
46265     v4i32 __builtin_msa_sll_w (v4i32, v4i32);
46266     v2i64 __builtin_msa_sll_d (v2i64, v2i64);
46267
46268     v16i8 __builtin_msa_slli_b (v16i8, imm0_7);
46269     v8i16 __builtin_msa_slli_h (v8i16, imm0_15);
46270     v4i32 __builtin_msa_slli_w (v4i32, imm0_31);
46271     v2i64 __builtin_msa_slli_d (v2i64, imm0_63);
46272
46273     v16i8 __builtin_msa_splat_b (v16i8, i32);
46274     v8i16 __builtin_msa_splat_h (v8i16, i32);
46275     v4i32 __builtin_msa_splat_w (v4i32, i32);
46276     v2i64 __builtin_msa_splat_d (v2i64, i32);
46277
46278     v16i8 __builtin_msa_splati_b (v16i8, imm0_15);
46279     v8i16 __builtin_msa_splati_h (v8i16, imm0_7);
46280     v4i32 __builtin_msa_splati_w (v4i32, imm0_3);
46281     v2i64 __builtin_msa_splati_d (v2i64, imm0_1);
46282
46283     v16i8 __builtin_msa_sra_b (v16i8, v16i8);
46284     v8i16 __builtin_msa_sra_h (v8i16, v8i16);
46285     v4i32 __builtin_msa_sra_w (v4i32, v4i32);
46286     v2i64 __builtin_msa_sra_d (v2i64, v2i64);
46287
46288     v16i8 __builtin_msa_srai_b (v16i8, imm0_7);
46289     v8i16 __builtin_msa_srai_h (v8i16, imm0_15);
46290     v4i32 __builtin_msa_srai_w (v4i32, imm0_31);
46291     v2i64 __builtin_msa_srai_d (v2i64, imm0_63);
46292
46293     v16i8 __builtin_msa_srar_b (v16i8, v16i8);
46294     v8i16 __builtin_msa_srar_h (v8i16, v8i16);
46295     v4i32 __builtin_msa_srar_w (v4i32, v4i32);
46296     v2i64 __builtin_msa_srar_d (v2i64, v2i64);
46297
46298     v16i8 __builtin_msa_srari_b (v16i8, imm0_7);
46299     v8i16 __builtin_msa_srari_h (v8i16, imm0_15);
46300     v4i32 __builtin_msa_srari_w (v4i32, imm0_31);
46301     v2i64 __builtin_msa_srari_d (v2i64, imm0_63);
46302
46303     v16i8 __builtin_msa_srl_b (v16i8, v16i8);
46304     v8i16 __builtin_msa_srl_h (v8i16, v8i16);
46305     v4i32 __builtin_msa_srl_w (v4i32, v4i32);
46306     v2i64 __builtin_msa_srl_d (v2i64, v2i64);
46307
46308     v16i8 __builtin_msa_srli_b (v16i8, imm0_7);
46309     v8i16 __builtin_msa_srli_h (v8i16, imm0_15);
46310     v4i32 __builtin_msa_srli_w (v4i32, imm0_31);
46311     v2i64 __builtin_msa_srli_d (v2i64, imm0_63);
46312
46313     v16i8 __builtin_msa_srlr_b (v16i8, v16i8);
46314     v8i16 __builtin_msa_srlr_h (v8i16, v8i16);
46315     v4i32 __builtin_msa_srlr_w (v4i32, v4i32);
46316     v2i64 __builtin_msa_srlr_d (v2i64, v2i64);
46317
46318     v16i8 __builtin_msa_srlri_b (v16i8, imm0_7);
46319     v8i16 __builtin_msa_srlri_h (v8i16, imm0_15);
46320     v4i32 __builtin_msa_srlri_w (v4i32, imm0_31);
46321     v2i64 __builtin_msa_srlri_d (v2i64, imm0_63);
46322
46323     void __builtin_msa_st_b (v16i8, void *, imm_n512_511);
46324     void __builtin_msa_st_h (v8i16, void *, imm_n1024_1022);
46325     void __builtin_msa_st_w (v4i32, void *, imm_n2048_2044);
46326     void __builtin_msa_st_d (v2i64, void *, imm_n4096_4088);
46327
46328     v16i8 __builtin_msa_subs_s_b (v16i8, v16i8);
46329     v8i16 __builtin_msa_subs_s_h (v8i16, v8i16);
46330     v4i32 __builtin_msa_subs_s_w (v4i32, v4i32);
46331     v2i64 __builtin_msa_subs_s_d (v2i64, v2i64);
46332
46333     v16u8 __builtin_msa_subs_u_b (v16u8, v16u8);
46334     v8u16 __builtin_msa_subs_u_h (v8u16, v8u16);
46335     v4u32 __builtin_msa_subs_u_w (v4u32, v4u32);
46336     v2u64 __builtin_msa_subs_u_d (v2u64, v2u64);
46337
46338     v16u8 __builtin_msa_subsus_u_b (v16u8, v16i8);
46339     v8u16 __builtin_msa_subsus_u_h (v8u16, v8i16);
46340     v4u32 __builtin_msa_subsus_u_w (v4u32, v4i32);
46341     v2u64 __builtin_msa_subsus_u_d (v2u64, v2i64);
46342
46343     v16i8 __builtin_msa_subsuu_s_b (v16u8, v16u8);
46344     v8i16 __builtin_msa_subsuu_s_h (v8u16, v8u16);
46345     v4i32 __builtin_msa_subsuu_s_w (v4u32, v4u32);
46346     v2i64 __builtin_msa_subsuu_s_d (v2u64, v2u64);
46347
46348     v16i8 __builtin_msa_subv_b (v16i8, v16i8);
46349     v8i16 __builtin_msa_subv_h (v8i16, v8i16);
46350     v4i32 __builtin_msa_subv_w (v4i32, v4i32);
46351     v2i64 __builtin_msa_subv_d (v2i64, v2i64);
46352
46353     v16i8 __builtin_msa_subvi_b (v16i8, imm0_31);
46354     v8i16 __builtin_msa_subvi_h (v8i16, imm0_31);
46355     v4i32 __builtin_msa_subvi_w (v4i32, imm0_31);
46356     v2i64 __builtin_msa_subvi_d (v2i64, imm0_31);
46357
46358     v16i8 __builtin_msa_vshf_b (v16i8, v16i8, v16i8);
46359     v8i16 __builtin_msa_vshf_h (v8i16, v8i16, v8i16);
46360     v4i32 __builtin_msa_vshf_w (v4i32, v4i32, v4i32);
46361     v2i64 __builtin_msa_vshf_d (v2i64, v2i64, v2i64);
46362
46363     v16u8 __builtin_msa_xor_v (v16u8, v16u8);
46364
46365     v16u8 __builtin_msa_xori_b (v16u8, imm0_255);
46366
46367
46368File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: MSP430 Built-in Functions,  Prev: MIPS SIMD Architecture (MSA) Support,  Up: Target Builtins
46369
463706.60.18 Other MIPS Built-in Functions
46371-------------------------------------
46372
46373GCC provides other MIPS-specific built-in functions:
46374
46375'void __builtin_mips_cache (int OP, const volatile void *ADDR)'
46376     Insert a 'cache' instruction with operands OP and ADDR.  GCC
46377     defines the preprocessor macro '___GCC_HAVE_BUILTIN_MIPS_CACHE'
46378     when this function is available.
46379
46380'unsigned int __builtin_mips_get_fcsr (void)'
46381'void __builtin_mips_set_fcsr (unsigned int VALUE)'
46382     Get and set the contents of the floating-point control and status
46383     register (FPU control register 31).  These functions are only
46384     available in hard-float code but can be called in both MIPS16 and
46385     non-MIPS16 contexts.
46386
46387     '__builtin_mips_set_fcsr' can be used to change any bit of the
46388     register except the condition codes, which GCC assumes are
46389     preserved.
46390
46391
46392File: gcc.info,  Node: MSP430 Built-in Functions,  Next: NDS32 Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
46393
463946.60.19 MSP430 Built-in Functions
46395---------------------------------
46396
46397GCC provides a couple of special builtin functions to aid in the writing
46398of interrupt handlers in C.
46399
46400'__bic_SR_register_on_exit (int MASK)'
46401     This clears the indicated bits in the saved copy of the status
46402     register currently residing on the stack.  This only works inside
46403     interrupt handlers and the changes to the status register will only
46404     take affect once the handler returns.
46405
46406'__bis_SR_register_on_exit (int MASK)'
46407     This sets the indicated bits in the saved copy of the status
46408     register currently residing on the stack.  This only works inside
46409     interrupt handlers and the changes to the status register will only
46410     take affect once the handler returns.
46411
46412'__delay_cycles (long long CYCLES)'
46413     This inserts an instruction sequence that takes exactly CYCLES
46414     cycles (between 0 and about 17E9) to complete.  The inserted
46415     sequence may use jumps, loops, or no-ops, and does not interfere
46416     with any other instructions.  Note that CYCLES must be a
46417     compile-time constant integer - that is, you must pass a number,
46418     not a variable that may be optimized to a constant later.  The
46419     number of cycles delayed by this builtin is exact.
46420
46421
46422File: gcc.info,  Node: NDS32 Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MSP430 Built-in Functions,  Up: Target Builtins
46423
464246.60.20 NDS32 Built-in Functions
46425--------------------------------
46426
46427These built-in functions are available for the NDS32 target:
46428
46429 -- Built-in Function: void __builtin_nds32_isync (int *ADDR)
46430     Insert an ISYNC instruction into the instruction stream where ADDR
46431     is an instruction address for serialization.
46432
46433 -- Built-in Function: void __builtin_nds32_isb (void)
46434     Insert an ISB instruction into the instruction stream.
46435
46436 -- Built-in Function: int __builtin_nds32_mfsr (int SR)
46437     Return the content of a system register which is mapped by SR.
46438
46439 -- Built-in Function: int __builtin_nds32_mfusr (int USR)
46440     Return the content of a user space register which is mapped by USR.
46441
46442 -- Built-in Function: void __builtin_nds32_mtsr (int VALUE, int SR)
46443     Move the VALUE to a system register which is mapped by SR.
46444
46445 -- Built-in Function: void __builtin_nds32_mtusr (int VALUE, int USR)
46446     Move the VALUE to a user space register which is mapped by USR.
46447
46448 -- Built-in Function: void __builtin_nds32_setgie_en (void)
46449     Enable global interrupt.
46450
46451 -- Built-in Function: void __builtin_nds32_setgie_dis (void)
46452     Disable global interrupt.
46453
46454
46455File: gcc.info,  Node: picoChip Built-in Functions,  Next: Basic PowerPC Built-in Functions,  Prev: NDS32 Built-in Functions,  Up: Target Builtins
46456
464576.60.21 picoChip Built-in Functions
46458-----------------------------------
46459
46460GCC provides an interface to selected machine instructions from the
46461picoChip instruction set.
46462
46463'int __builtin_sbc (int VALUE)'
46464     Sign bit count.  Return the number of consecutive bits in VALUE
46465     that have the same value as the sign bit.  The result is the number
46466     of leading sign bits minus one, giving the number of redundant sign
46467     bits in VALUE.
46468
46469'int __builtin_byteswap (int VALUE)'
46470     Byte swap.  Return the result of swapping the upper and lower bytes
46471     of VALUE.
46472
46473'int __builtin_brev (int VALUE)'
46474     Bit reversal.  Return the result of reversing the bits in VALUE.
46475     Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
46476     on.
46477
46478'int __builtin_adds (int X, int Y)'
46479     Saturating addition.  Return the result of adding X and Y, storing
46480     the value 32767 if the result overflows.
46481
46482'int __builtin_subs (int X, int Y)'
46483     Saturating subtraction.  Return the result of subtracting Y from X,
46484     storing the value -32768 if the result overflows.
46485
46486'void __builtin_halt (void)'
46487     Halt.  The processor stops execution.  This built-in is useful for
46488     implementing assertions.
46489
46490
46491File: gcc.info,  Node: Basic PowerPC Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
46492
464936.60.22 Basic PowerPC Built-in Functions
46494----------------------------------------
46495
46496* Menu:
46497
46498* Basic PowerPC Built-in Functions Available on all Configurations::
46499* Basic PowerPC Built-in Functions Available on ISA 2.05::
46500* Basic PowerPC Built-in Functions Available on ISA 2.06::
46501* Basic PowerPC Built-in Functions Available on ISA 2.07::
46502* Basic PowerPC Built-in Functions Available on ISA 3.0::
46503
46504This section describes PowerPC built-in functions that do not require
46505the inclusion of any special header files to declare prototypes or
46506provide macro definitions.  The sections that follow describe additional
46507PowerPC built-in functions.
46508
46509
46510File: 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
46511
465126.60.22.1 Basic PowerPC Built-in Functions Available on all Configurations
46513..........................................................................
46514
46515 -- Built-in Function: void __builtin_cpu_init (void)
46516     This function is a 'nop' on the PowerPC platform and is included
46517     solely to maintain API compatibility with the x86 builtins.
46518
46519 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
46520     This function returns a value of '1' if the run-time CPU is of type
46521     CPUNAME and returns '0' otherwise
46522
46523     The '__builtin_cpu_is' function requires GLIBC 2.23 or newer which
46524     exports the hardware capability bits.  GCC defines the macro
46525     '__BUILTIN_CPU_SUPPORTS__' if the '__builtin_cpu_supports' built-in
46526     function is fully supported.
46527
46528     If GCC was configured to use a GLIBC before 2.23, the built-in
46529     function '__builtin_cpu_is' always returns a 0 and the compiler
46530     issues a warning.
46531
46532     The following CPU names can be detected:
46533
46534     'power10'
46535          IBM POWER10 Server CPU.
46536     'power9'
46537          IBM POWER9 Server CPU.
46538     'power8'
46539          IBM POWER8 Server CPU.
46540     'power7'
46541          IBM POWER7 Server CPU.
46542     'power6x'
46543          IBM POWER6 Server CPU (RAW mode).
46544     'power6'
46545          IBM POWER6 Server CPU (Architected mode).
46546     'power5+'
46547          IBM POWER5+ Server CPU.
46548     'power5'
46549          IBM POWER5 Server CPU.
46550     'ppc970'
46551          IBM 970 Server CPU (ie, Apple G5).
46552     'power4'
46553          IBM POWER4 Server CPU.
46554     'ppca2'
46555          IBM A2 64-bit Embedded CPU
46556     'ppc476'
46557          IBM PowerPC 476FP 32-bit Embedded CPU.
46558     'ppc464'
46559          IBM PowerPC 464 32-bit Embedded CPU.
46560     'ppc440'
46561          PowerPC 440 32-bit Embedded CPU.
46562     'ppc405'
46563          PowerPC 405 32-bit Embedded CPU.
46564     'ppc-cell-be'
46565          IBM PowerPC Cell Broadband Engine Architecture CPU.
46566
46567     Here is an example:
46568          #ifdef __BUILTIN_CPU_SUPPORTS__
46569            if (__builtin_cpu_is ("power8"))
46570              {
46571                 do_power8 (); // POWER8 specific implementation.
46572              }
46573            else
46574          #endif
46575              {
46576                 do_generic (); // Generic implementation.
46577              }
46578
46579 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
46580     This function returns a value of '1' if the run-time CPU supports
46581     the HWCAP feature FEATURE and returns '0' otherwise.
46582
46583     The '__builtin_cpu_supports' function requires GLIBC 2.23 or newer
46584     which exports the hardware capability bits.  GCC defines the macro
46585     '__BUILTIN_CPU_SUPPORTS__' if the '__builtin_cpu_supports' built-in
46586     function is fully supported.
46587
46588     If GCC was configured to use a GLIBC before 2.23, the built-in
46589     function '__builtin_cpu_suports' always returns a 0 and the
46590     compiler issues a warning.
46591
46592     The following features can be detected:
46593
46594     '4xxmac'
46595          4xx CPU has a Multiply Accumulator.
46596     'altivec'
46597          CPU has a SIMD/Vector Unit.
46598     'arch_2_05'
46599          CPU supports ISA 2.05 (eg, POWER6)
46600     'arch_2_06'
46601          CPU supports ISA 2.06 (eg, POWER7)
46602     'arch_2_07'
46603          CPU supports ISA 2.07 (eg, POWER8)
46604     'arch_3_00'
46605          CPU supports ISA 3.0 (eg, POWER9)
46606     'arch_3_1'
46607          CPU supports ISA 3.1 (eg, POWER10)
46608     'archpmu'
46609          CPU supports the set of compatible performance monitoring
46610          events.
46611     'booke'
46612          CPU supports the Embedded ISA category.
46613     'cellbe'
46614          CPU has a CELL broadband engine.
46615     'darn'
46616          CPU supports the 'darn' (deliver a random number) instruction.
46617     'dfp'
46618          CPU has a decimal floating point unit.
46619     'dscr'
46620          CPU supports the data stream control register.
46621     'ebb'
46622          CPU supports event base branching.
46623     'efpdouble'
46624          CPU has a SPE double precision floating point unit.
46625     'efpsingle'
46626          CPU has a SPE single precision floating point unit.
46627     'fpu'
46628          CPU has a floating point unit.
46629     'htm'
46630          CPU has hardware transaction memory instructions.
46631     'htm-nosc'
46632          Kernel aborts hardware transactions when a syscall is made.
46633     'htm-no-suspend'
46634          CPU supports hardware transaction memory but does not support
46635          the 'tsuspend.' instruction.
46636     'ic_snoop'
46637          CPU supports icache snooping capabilities.
46638     'ieee128'
46639          CPU supports 128-bit IEEE binary floating point instructions.
46640     'isel'
46641          CPU supports the integer select instruction.
46642     'mma'
46643          CPU supports the matrix-multiply assist instructions.
46644     'mmu'
46645          CPU has a memory management unit.
46646     'notb'
46647          CPU does not have a timebase (eg, 601 and 403gx).
46648     'pa6t'
46649          CPU supports the PA Semi 6T CORE ISA.
46650     'power4'
46651          CPU supports ISA 2.00 (eg, POWER4)
46652     'power5'
46653          CPU supports ISA 2.02 (eg, POWER5)
46654     'power5+'
46655          CPU supports ISA 2.03 (eg, POWER5+)
46656     'power6x'
46657          CPU supports ISA 2.05 (eg, POWER6) extended opcodes mffgpr and
46658          mftgpr.
46659     'ppc32'
46660          CPU supports 32-bit mode execution.
46661     'ppc601'
46662          CPU supports the old POWER ISA (eg, 601)
46663     'ppc64'
46664          CPU supports 64-bit mode execution.
46665     'ppcle'
46666          CPU supports a little-endian mode that uses address swizzling.
46667     'scv'
46668          Kernel supports system call vectored.
46669     'smt'
46670          CPU support simultaneous multi-threading.
46671     'spe'
46672          CPU has a signal processing extension unit.
46673     'tar'
46674          CPU supports the target address register.
46675     'true_le'
46676          CPU supports true little-endian mode.
46677     'ucache'
46678          CPU has unified I/D cache.
46679     'vcrypto'
46680          CPU supports the vector cryptography instructions.
46681     'vsx'
46682          CPU supports the vector-scalar extension.
46683
46684     Here is an example:
46685          #ifdef __BUILTIN_CPU_SUPPORTS__
46686            if (__builtin_cpu_supports ("fpu"))
46687              {
46688                 asm("fadd %0,%1,%2" : "=d"(dst) : "d"(src1), "d"(src2));
46689              }
46690            else
46691          #endif
46692              {
46693                 dst = __fadd (src1, src2); // Software FP addition function.
46694              }
46695
46696 The following built-in functions are also available on all PowerPC
46697processors:
46698     uint64_t __builtin_ppc_get_timebase ();
46699     unsigned long __builtin_ppc_mftb ();
46700     double __builtin_unpack_ibm128 (__ibm128, int);
46701     __ibm128 __builtin_pack_ibm128 (double, double);
46702     double __builtin_mffs (void);
46703     void __builtin_mtfsf (const int, double);
46704     void __builtin_mtfsb0 (const int);
46705     void __builtin_mtfsb1 (const int);
46706     void __builtin_set_fpscr_rn (int);
46707
46708 The '__builtin_ppc_get_timebase' and '__builtin_ppc_mftb' functions
46709generate instructions to read the Time Base Register.  The
46710'__builtin_ppc_get_timebase' function may generate multiple instructions
46711and always returns the 64 bits of the Time Base Register.  The
46712'__builtin_ppc_mftb' function always generates one instruction and
46713returns the Time Base Register value as an unsigned long, throwing away
46714the most significant word on 32-bit environments.  The '__builtin_mffs'
46715return the value of the FPSCR register.  Note, ISA 3.0 supports the
46716'__builtin_mffsl()' which permits software to read the control and
46717non-sticky status bits in the FSPCR without the higher latency
46718associated with accessing the sticky status bits.  The '__builtin_mtfsf'
46719takes a constant 8-bit integer field mask and a double precision
46720floating point argument and generates the 'mtfsf' (extended mnemonic)
46721instruction to write new values to selected fields of the FPSCR. The
46722'__builtin_mtfsb0' and '__builtin_mtfsb1' take the bit to change as an
46723argument.  The valid bit range is between 0 and 31.  The builtins map to
46724the 'mtfsb0' and 'mtfsb1' instructions which take the argument and add
4672532.  Hence these instructions only modify the FPSCR[32:63] bits by
46726changing the specified bit to a zero or one respectively.  The
46727'__builtin_set_fpscr_rn' builtin allows changing both of the floating
46728point rounding mode bits.  The argument is a 2-bit value.  The argument
46729can either be a 'const int' or stored in a variable.  The builtin uses
46730the ISA 3.0 instruction 'mffscrn' if available, otherwise it reads the
46731FPSCR, masks the current rounding mode bits out and OR's in the new
46732value.
46733
46734
46735File: 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
46736
467376.60.22.2 Basic PowerPC Built-in Functions Available on ISA 2.05
46738................................................................
46739
46740The basic built-in functions described in this section are available on
46741the PowerPC family of processors starting with ISA 2.05 or later.
46742Unless specific options are explicitly disabled on the command line,
46743specifying option '-mcpu=power6' has the effect of enabling the
46744'-mpowerpc64', '-mpowerpc-gpopt', '-mpowerpc-gfxopt', '-mmfcrf',
46745'-mpopcntb', '-mfprnd', '-mcmpb', '-mhard-dfp', and '-mrecip-precision'
46746options.  Specify the '-maltivec' option explicitly in combination with
46747the above options if desired.
46748
46749 The following functions require option '-mcmpb'.
46750     unsigned long long __builtin_cmpb (unsigned long long int, unsigned long long int);
46751     unsigned int __builtin_cmpb (unsigned int, unsigned int);
46752
46753 The '__builtin_cmpb' function performs a byte-wise compare on the
46754contents of its two arguments, returning the result of the byte-wise
46755comparison as the returned value.  For each byte comparison, the
46756corresponding byte of the return value holds 0xff if the input bytes are
46757equal and 0 if the input bytes are not equal.  If either of the
46758arguments to this built-in function is wider than 32 bits, the function
46759call expands into the form that expects 'unsigned long long int'
46760arguments which is only available on 64-bit targets.
46761
46762 The following built-in functions are available when hardware decimal
46763floating point ('-mhard-dfp') is available:
46764     void __builtin_set_fpscr_drn(int);
46765     _Decimal64 __builtin_ddedpd (int, _Decimal64);
46766     _Decimal128 __builtin_ddedpdq (int, _Decimal128);
46767     _Decimal64 __builtin_denbcd (int, _Decimal64);
46768     _Decimal128 __builtin_denbcdq (int, _Decimal128);
46769     _Decimal64 __builtin_diex (long long, _Decimal64);
46770     _Decimal128 _builtin_diexq (long long, _Decimal128);
46771     _Decimal64 __builtin_dscli (_Decimal64, int);
46772     _Decimal128 __builtin_dscliq (_Decimal128, int);
46773     _Decimal64 __builtin_dscri (_Decimal64, int);
46774     _Decimal128 __builtin_dscriq (_Decimal128, int);
46775     long long __builtin_dxex (_Decimal64);
46776     long long __builtin_dxexq (_Decimal128);
46777     _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
46778     unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
46779
46780     The __builtin_set_fpscr_drn builtin allows changing the three decimal
46781     floating point rounding mode bits.  The argument is a 3-bit value.  The
46782     argument can either be a const int or the value can be stored in
46783     a variable.
46784     The builtin uses the ISA 3.0 instruction mffscdrn if available.
46785     Otherwise the builtin reads the FPSCR, masks the current decimal rounding
46786     mode bits out and OR's in the new value.
46787
46788
46789 The following functions require '-mhard-float', '-mpowerpc-gfxopt', and
46790'-mpopcntb' options.
46791
46792     double __builtin_recipdiv (double, double);
46793     float __builtin_recipdivf (float, float);
46794     double __builtin_rsqrt (double);
46795     float __builtin_rsqrtf (float);
46796
46797 The 'vec_rsqrt', '__builtin_rsqrt', and '__builtin_rsqrtf' functions
46798generate multiple instructions to implement the reciprocal sqrt
46799functionality using reciprocal sqrt estimate instructions.
46800
46801 The '__builtin_recipdiv', and '__builtin_recipdivf' functions generate
46802multiple instructions to implement division using the reciprocal
46803estimate instructions.
46804
46805 The following functions require '-mhard-float' and '-mmultiple'
46806options.
46807
46808 The '__builtin_unpack_longdouble' function takes a 'long double'
46809argument and a compile time constant of 0 or 1.  If the constant is 0,
46810the first 'double' within the 'long double' is returned, otherwise the
46811second 'double' is returned.  The '__builtin_unpack_longdouble' function
46812is only available if 'long double' uses the IBM extended double
46813representation.
46814
46815 The '__builtin_pack_longdouble' function takes two 'double' arguments
46816and returns a 'long double' value that combines the two arguments.  The
46817'__builtin_pack_longdouble' function is only available if 'long double'
46818uses the IBM extended double representation.
46819
46820 The '__builtin_unpack_ibm128' function takes a '__ibm128' argument and
46821a compile time constant of 0 or 1.  If the constant is 0, the first
46822'double' within the '__ibm128' is returned, otherwise the second
46823'double' is returned.
46824
46825 The '__builtin_pack_ibm128' function takes two 'double' arguments and
46826returns a '__ibm128' value that combines the two arguments.
46827
46828 Additional built-in functions are available for the 64-bit PowerPC
46829family of processors, for efficient use of 128-bit floating point
46830('__float128') values.
46831
46832
46833File: 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
46834
468356.60.22.3 Basic PowerPC Built-in Functions Available on ISA 2.06
46836................................................................
46837
46838The basic built-in functions described in this section are available on
46839the PowerPC family of processors starting with ISA 2.05 or later.
46840Unless specific options are explicitly disabled on the command line,
46841specifying option '-mcpu=power7' has the effect of enabling all the same
46842options as for '-mcpu=power6' in addition to the '-maltivec',
46843'-mpopcntd', and '-mvsx' options.
46844
46845 The following basic built-in functions require '-mpopcntd':
46846     unsigned int __builtin_addg6s (unsigned int, unsigned int);
46847     long long __builtin_bpermd (long long, long long);
46848     unsigned int __builtin_cbcdtd (unsigned int);
46849     unsigned int __builtin_cdtbcd (unsigned int);
46850     long long __builtin_divde (long long, long long);
46851     unsigned long long __builtin_divdeu (unsigned long long, unsigned long long);
46852     int __builtin_divwe (int, int);
46853     unsigned int __builtin_divweu (unsigned int, unsigned int);
46854     vector __int128 __builtin_pack_vector_int128 (long long, long long);
46855     void __builtin_rs6000_speculation_barrier (void);
46856     long long __builtin_unpack_vector_int128 (vector __int128, signed char);
46857
46858 Of these, the '__builtin_divde' and '__builtin_divdeu' functions
46859require a 64-bit environment.
46860
46861 The following basic built-in functions, which are also supported on x86
46862targets, require '-mfloat128'.
46863     __float128 __builtin_fabsq (__float128);
46864     __float128 __builtin_copysignq (__float128, __float128);
46865     __float128 __builtin_infq (void);
46866     __float128 __builtin_huge_valq (void);
46867     __float128 __builtin_nanq (void);
46868     __float128 __builtin_nansq (void);
46869
46870     __float128 __builtin_sqrtf128 (__float128);
46871     __float128 __builtin_fmaf128 (__float128, __float128, __float128);
46872
46873
46874File: 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
46875
468766.60.22.4 Basic PowerPC Built-in Functions Available on ISA 2.07
46877................................................................
46878
46879The basic built-in functions described in this section are available on
46880the PowerPC family of processors starting with ISA 2.07 or later.
46881Unless specific options are explicitly disabled on the command line,
46882specifying option '-mcpu=power8' has the effect of enabling all the same
46883options as for '-mcpu=power7' in addition to the '-mpower8-fusion',
46884'-mpower8-vector', '-mcrypto', '-mhtm', '-mquad-memory', and
46885'-mquad-memory-atomic' options.
46886
46887 This section intentionally empty.
46888
46889
46890File: 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
46891
468926.60.22.5 Basic PowerPC Built-in Functions Available on ISA 3.0
46893...............................................................
46894
46895The basic built-in functions described in this section are available on
46896the PowerPC family of processors starting with ISA 3.0 or later.  Unless
46897specific options are explicitly disabled on the command line, specifying
46898option '-mcpu=power9' has the effect of enabling all the same options as
46899for '-mcpu=power8' in addition to the '-misel' option.
46900
46901 The following built-in functions are available on Linux 64-bit systems
46902that use the ISA 3.0 instruction set ('-mcpu=power9'):
46903
46904'__float128 __builtin_addf128_round_to_odd (__float128, __float128)'
46905     Perform a 128-bit IEEE floating point add using round to odd as the
46906     rounding mode.
46907
46908'__float128 __builtin_subf128_round_to_odd (__float128, __float128)'
46909     Perform a 128-bit IEEE floating point subtract using round to odd
46910     as the rounding mode.
46911
46912'__float128 __builtin_mulf128_round_to_odd (__float128, __float128)'
46913     Perform a 128-bit IEEE floating point multiply using round to odd
46914     as the rounding mode.
46915
46916'__float128 __builtin_divf128_round_to_odd (__float128, __float128)'
46917     Perform a 128-bit IEEE floating point divide using round to odd as
46918     the rounding mode.
46919
46920'__float128 __builtin_sqrtf128_round_to_odd (__float128)'
46921     Perform a 128-bit IEEE floating point square root using round to
46922     odd as the rounding mode.
46923
46924'__float128 __builtin_fmaf128_round_to_odd (__float128, __float128, __float128)'
46925     Perform a 128-bit IEEE floating point fused multiply and add
46926     operation using round to odd as the rounding mode.
46927
46928'double __builtin_truncf128_round_to_odd (__float128)'
46929     Convert a 128-bit IEEE floating point value to 'double' using round
46930     to odd as the rounding mode.
46931
46932 The following additional built-in functions are also available for the
46933PowerPC family of processors, starting with ISA 3.0 or later:
46934     long long __builtin_darn (void);
46935     long long __builtin_darn_raw (void);
46936     int __builtin_darn_32 (void);
46937
46938 The '__builtin_darn' and '__builtin_darn_raw' functions require a
4693964-bit environment supporting ISA 3.0 or later.  The '__builtin_darn'
46940function provides a 64-bit conditioned random number.  The
46941'__builtin_darn_raw' function provides a 64-bit raw random number.  The
46942'__builtin_darn_32' function provides a 32-bit conditioned random
46943number.
46944
46945 The following additional built-in functions are also available for the
46946PowerPC family of processors, starting with ISA 3.0 or later:
46947
46948     int __builtin_byte_in_set (unsigned char u, unsigned long long set);
46949     int __builtin_byte_in_range (unsigned char u, unsigned int range);
46950     int __builtin_byte_in_either_range (unsigned char u, unsigned int ranges);
46951
46952     int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal64 value);
46953     int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal128 value);
46954     int __builtin_dfp_dtstsfi_lt_dd (unsigned int comparison, _Decimal64 value);
46955     int __builtin_dfp_dtstsfi_lt_td (unsigned int comparison, _Decimal128 value);
46956
46957     int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal64 value);
46958     int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal128 value);
46959     int __builtin_dfp_dtstsfi_gt_dd (unsigned int comparison, _Decimal64 value);
46960     int __builtin_dfp_dtstsfi_gt_td (unsigned int comparison, _Decimal128 value);
46961
46962     int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal64 value);
46963     int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal128 value);
46964     int __builtin_dfp_dtstsfi_eq_dd (unsigned int comparison, _Decimal64 value);
46965     int __builtin_dfp_dtstsfi_eq_td (unsigned int comparison, _Decimal128 value);
46966
46967     int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal64 value);
46968     int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal128 value);
46969     int __builtin_dfp_dtstsfi_ov_dd (unsigned int comparison, _Decimal64 value);
46970     int __builtin_dfp_dtstsfi_ov_td (unsigned int comparison, _Decimal128 value);
46971
46972     double __builtin_mffsl(void);
46973
46974 The '__builtin_byte_in_set' function requires a 64-bit environment
46975supporting ISA 3.0 or later.  This function returns a non-zero value if
46976and only if its 'u' argument exactly equals one of the eight bytes
46977contained within its 64-bit 'set' argument.
46978
46979 The '__builtin_byte_in_range' and '__builtin_byte_in_either_range'
46980require an environment supporting ISA 3.0 or later.  For these two
46981functions, the 'range' argument is encoded as 4 bytes, organized as
46982'hi_1:lo_1:hi_2:lo_2'.  The '__builtin_byte_in_range' function returns a
46983non-zero value if and only if its 'u' argument is within the range
46984bounded between 'lo_2' and 'hi_2' inclusive.  The
46985'__builtin_byte_in_either_range' function returns non-zero if and only
46986if its 'u' argument is within either the range bounded between 'lo_1'
46987and 'hi_1' inclusive or the range bounded between 'lo_2' and 'hi_2'
46988inclusive.
46989
46990 The '__builtin_dfp_dtstsfi_lt' function returns a non-zero value if and
46991only if the number of signficant digits of its 'value' argument is less
46992than its 'comparison' argument.  The '__builtin_dfp_dtstsfi_lt_dd' and
46993'__builtin_dfp_dtstsfi_lt_td' functions behave similarly, but require
46994that the type of the 'value' argument be '__Decimal64' and
46995'__Decimal128' respectively.
46996
46997 The '__builtin_dfp_dtstsfi_gt' function returns a non-zero value if and
46998only if the number of signficant digits of its 'value' argument is
46999greater than its 'comparison' argument.  The
47000'__builtin_dfp_dtstsfi_gt_dd' and '__builtin_dfp_dtstsfi_gt_td'
47001functions behave similarly, but require that the type of the 'value'
47002argument be '__Decimal64' and '__Decimal128' respectively.
47003
47004 The '__builtin_dfp_dtstsfi_eq' function returns a non-zero value if and
47005only if the number of signficant digits of its 'value' argument equals
47006its 'comparison' argument.  The '__builtin_dfp_dtstsfi_eq_dd' and
47007'__builtin_dfp_dtstsfi_eq_td' functions behave similarly, but require
47008that the type of the 'value' argument be '__Decimal64' and
47009'__Decimal128' respectively.
47010
47011 The '__builtin_dfp_dtstsfi_ov' function returns a non-zero value if and
47012only if its 'value' argument has an undefined number of significant
47013digits, such as when 'value' is an encoding of 'NaN'.  The
47014'__builtin_dfp_dtstsfi_ov_dd' and '__builtin_dfp_dtstsfi_ov_td'
47015functions behave similarly, but require that the type of the 'value'
47016argument be '__Decimal64' and '__Decimal128' respectively.
47017
47018 The '__builtin_mffsl' uses the ISA 3.0 'mffsl' instruction to read the
47019FPSCR. The instruction is a lower latency version of the 'mffs'
47020instruction.  If the 'mffsl' instruction is not available, then the
47021builtin uses the older 'mffs' instruction to read the FPSCR.
47022
47023
47024File: 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
47025
470266.60.23 PowerPC AltiVec/VSX Built-in Functions
47027----------------------------------------------
47028
47029GCC provides an interface for the PowerPC family of processors to access
47030the AltiVec operations described in Motorola's AltiVec Programming
47031Interface Manual.  The interface is made available by including
47032'<altivec.h>' and using '-maltivec' and '-mabi=altivec'.  The interface
47033supports the following vector types.
47034
47035     vector unsigned char
47036     vector signed char
47037     vector bool char
47038
47039     vector unsigned short
47040     vector signed short
47041     vector bool short
47042     vector pixel
47043
47044     vector unsigned int
47045     vector signed int
47046     vector bool int
47047     vector float
47048
47049 GCC's implementation of the high-level language interface available
47050from C and C++ code differs from Motorola's documentation in several
47051ways.
47052
47053   * A vector constant is a list of constant expressions within curly
47054     braces.
47055
47056   * A vector initializer requires no cast if the vector constant is of
47057     the same type as the variable it is initializing.
47058
47059   * If 'signed' or 'unsigned' is omitted, the signedness of the vector
47060     type is the default signedness of the base type.  The default
47061     varies depending on the operating system, so a portable program
47062     should always specify the signedness.
47063
47064   * Compiling with '-maltivec' adds keywords '__vector', 'vector',
47065     '__pixel', 'pixel', '__bool' and 'bool'.  When compiling ISO C, the
47066     context-sensitive substitution of the keywords 'vector', 'pixel'
47067     and 'bool' is disabled.  To use them, you must include
47068     '<altivec.h>' instead.
47069
47070   * GCC allows using a 'typedef' name as the type specifier for a
47071     vector type, but only under the following circumstances:
47072
47073        * When using '__vector' instead of 'vector'; for example,
47074
47075               typedef signed short int16;
47076               __vector int16 data;
47077
47078        * When using 'vector' in keyword-and-predefine mode; for
47079          example,
47080
47081               typedef signed short int16;
47082               vector int16 data;
47083
47084          Note that keyword-and-predefine mode is enabled by disabling
47085          GNU extensions (e.g., by using '-std=c11') and including
47086          '<altivec.h>'.
47087
47088   * For C, overloaded functions are implemented with macros so the
47089     following does not work:
47090
47091            vec_add ((vector signed int){1, 2, 3, 4}, foo);
47092
47093     Since 'vec_add' is a macro, the vector constant in the example is
47094     treated as four separate arguments.  Wrap the entire argument in
47095     parentheses for this to work.
47096
47097 _Note:_ Only the '<altivec.h>' interface is supported.  Internally, GCC
47098uses built-in functions to achieve the functionality in the
47099aforementioned header file, but they are not supported and are subject
47100to change without notice.
47101
47102 GCC complies with the OpenPOWER 64-Bit ELF V2 ABI Specification, which
47103may be found at
47104<https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture>.
47105Appendix A of this document lists the vector API interfaces that must be
47106provided by compliant compilers.  Programmers should preferentially use
47107the interfaces described therein.  However, historically GCC has
47108provided additional interfaces for access to vector instructions.  These
47109are briefly described below.
47110
47111* Menu:
47112
47113* PowerPC AltiVec Built-in Functions on ISA 2.05::
47114* PowerPC AltiVec Built-in Functions Available on ISA 2.06::
47115* PowerPC AltiVec Built-in Functions Available on ISA 2.07::
47116* PowerPC AltiVec Built-in Functions Available on ISA 3.0::
47117
47118
47119File: 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
47120
471216.60.23.1 PowerPC AltiVec Built-in Functions on ISA 2.05
47122........................................................
47123
47124The following interfaces are supported for the generic and specific
47125AltiVec operations and the AltiVec predicates.  In cases where there is
47126a direct mapping between generic and specific operations, only the
47127generic names are shown here, although the specific operations can also
47128be used.
47129
47130 Arguments that are documented as 'const int' require literal integral
47131values within the range required for that operation.
47132
47133     vector signed char vec_abs (vector signed char);
47134     vector signed short vec_abs (vector signed short);
47135     vector signed int vec_abs (vector signed int);
47136     vector float vec_abs (vector float);
47137
47138     vector signed char vec_abss (vector signed char);
47139     vector signed short vec_abss (vector signed short);
47140     vector signed int vec_abss (vector signed int);
47141
47142     vector signed char vec_add (vector bool char, vector signed char);
47143     vector signed char vec_add (vector signed char, vector bool char);
47144     vector signed char vec_add (vector signed char, vector signed char);
47145     vector unsigned char vec_add (vector bool char, vector unsigned char);
47146     vector unsigned char vec_add (vector unsigned char, vector bool char);
47147     vector unsigned char vec_add (vector unsigned char, vector unsigned char);
47148     vector signed short vec_add (vector bool short, vector signed short);
47149     vector signed short vec_add (vector signed short, vector bool short);
47150     vector signed short vec_add (vector signed short, vector signed short);
47151     vector unsigned short vec_add (vector bool short, vector unsigned short);
47152     vector unsigned short vec_add (vector unsigned short, vector bool short);
47153     vector unsigned short vec_add (vector unsigned short, vector unsigned short);
47154     vector signed int vec_add (vector bool int, vector signed int);
47155     vector signed int vec_add (vector signed int, vector bool int);
47156     vector signed int vec_add (vector signed int, vector signed int);
47157     vector unsigned int vec_add (vector bool int, vector unsigned int);
47158     vector unsigned int vec_add (vector unsigned int, vector bool int);
47159     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
47160     vector float vec_add (vector float, vector float);
47161
47162     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
47163
47164     vector unsigned char vec_adds (vector bool char, vector unsigned char);
47165     vector unsigned char vec_adds (vector unsigned char, vector bool char);
47166     vector unsigned char vec_adds (vector unsigned char, vector unsigned char);
47167     vector signed char vec_adds (vector bool char, vector signed char);
47168     vector signed char vec_adds (vector signed char, vector bool char);
47169     vector signed char vec_adds (vector signed char, vector signed char);
47170     vector unsigned short vec_adds (vector bool short, vector unsigned short);
47171     vector unsigned short vec_adds (vector unsigned short, vector bool short);
47172     vector unsigned short vec_adds (vector unsigned short, vector unsigned short);
47173     vector signed short vec_adds (vector bool short, vector signed short);
47174     vector signed short vec_adds (vector signed short, vector bool short);
47175     vector signed short vec_adds (vector signed short, vector signed short);
47176     vector unsigned int vec_adds (vector bool int, vector unsigned int);
47177     vector unsigned int vec_adds (vector unsigned int, vector bool int);
47178     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
47179     vector signed int vec_adds (vector bool int, vector signed int);
47180     vector signed int vec_adds (vector signed int, vector bool int);
47181     vector signed int vec_adds (vector signed int, vector signed int);
47182
47183     int vec_all_eq (vector signed char, vector bool char);
47184     int vec_all_eq (vector signed char, vector signed char);
47185     int vec_all_eq (vector unsigned char, vector bool char);
47186     int vec_all_eq (vector unsigned char, vector unsigned char);
47187     int vec_all_eq (vector bool char, vector bool char);
47188     int vec_all_eq (vector bool char, vector unsigned char);
47189     int vec_all_eq (vector bool char, vector signed char);
47190     int vec_all_eq (vector signed short, vector bool short);
47191     int vec_all_eq (vector signed short, vector signed short);
47192     int vec_all_eq (vector unsigned short, vector bool short);
47193     int vec_all_eq (vector unsigned short, vector unsigned short);
47194     int vec_all_eq (vector bool short, vector bool short);
47195     int vec_all_eq (vector bool short, vector unsigned short);
47196     int vec_all_eq (vector bool short, vector signed short);
47197     int vec_all_eq (vector pixel, vector pixel);
47198     int vec_all_eq (vector signed int, vector bool int);
47199     int vec_all_eq (vector signed int, vector signed int);
47200     int vec_all_eq (vector unsigned int, vector bool int);
47201     int vec_all_eq (vector unsigned int, vector unsigned int);
47202     int vec_all_eq (vector bool int, vector bool int);
47203     int vec_all_eq (vector bool int, vector unsigned int);
47204     int vec_all_eq (vector bool int, vector signed int);
47205     int vec_all_eq (vector float, vector float);
47206
47207     int vec_all_ge (vector bool char, vector unsigned char);
47208     int vec_all_ge (vector unsigned char, vector bool char);
47209     int vec_all_ge (vector unsigned char, vector unsigned char);
47210     int vec_all_ge (vector bool char, vector signed char);
47211     int vec_all_ge (vector signed char, vector bool char);
47212     int vec_all_ge (vector signed char, vector signed char);
47213     int vec_all_ge (vector bool short, vector unsigned short);
47214     int vec_all_ge (vector unsigned short, vector bool short);
47215     int vec_all_ge (vector unsigned short, vector unsigned short);
47216     int vec_all_ge (vector signed short, vector signed short);
47217     int vec_all_ge (vector bool short, vector signed short);
47218     int vec_all_ge (vector signed short, vector bool short);
47219     int vec_all_ge (vector bool int, vector unsigned int);
47220     int vec_all_ge (vector unsigned int, vector bool int);
47221     int vec_all_ge (vector unsigned int, vector unsigned int);
47222     int vec_all_ge (vector bool int, vector signed int);
47223     int vec_all_ge (vector signed int, vector bool int);
47224     int vec_all_ge (vector signed int, vector signed int);
47225     int vec_all_ge (vector float, vector float);
47226
47227     int vec_all_gt (vector bool char, vector unsigned char);
47228     int vec_all_gt (vector unsigned char, vector bool char);
47229     int vec_all_gt (vector unsigned char, vector unsigned char);
47230     int vec_all_gt (vector bool char, vector signed char);
47231     int vec_all_gt (vector signed char, vector bool char);
47232     int vec_all_gt (vector signed char, vector signed char);
47233     int vec_all_gt (vector bool short, vector unsigned short);
47234     int vec_all_gt (vector unsigned short, vector bool short);
47235     int vec_all_gt (vector unsigned short, vector unsigned short);
47236     int vec_all_gt (vector bool short, vector signed short);
47237     int vec_all_gt (vector signed short, vector bool short);
47238     int vec_all_gt (vector signed short, vector signed short);
47239     int vec_all_gt (vector bool int, vector unsigned int);
47240     int vec_all_gt (vector unsigned int, vector bool int);
47241     int vec_all_gt (vector unsigned int, vector unsigned int);
47242     int vec_all_gt (vector bool int, vector signed int);
47243     int vec_all_gt (vector signed int, vector bool int);
47244     int vec_all_gt (vector signed int, vector signed int);
47245     int vec_all_gt (vector float, vector float);
47246
47247     int vec_all_in (vector float, vector float);
47248
47249     int vec_all_le (vector bool char, vector unsigned char);
47250     int vec_all_le (vector unsigned char, vector bool char);
47251     int vec_all_le (vector unsigned char, vector unsigned char);
47252     int vec_all_le (vector bool char, vector signed char);
47253     int vec_all_le (vector signed char, vector bool char);
47254     int vec_all_le (vector signed char, vector signed char);
47255     int vec_all_le (vector bool short, vector unsigned short);
47256     int vec_all_le (vector unsigned short, vector bool short);
47257     int vec_all_le (vector unsigned short, vector unsigned short);
47258     int vec_all_le (vector bool short, vector signed short);
47259     int vec_all_le (vector signed short, vector bool short);
47260     int vec_all_le (vector signed short, vector signed short);
47261     int vec_all_le (vector bool int, vector unsigned int);
47262     int vec_all_le (vector unsigned int, vector bool int);
47263     int vec_all_le (vector unsigned int, vector unsigned int);
47264     int vec_all_le (vector bool int, vector signed int);
47265     int vec_all_le (vector signed int, vector bool int);
47266     int vec_all_le (vector signed int, vector signed int);
47267     int vec_all_le (vector float, vector float);
47268
47269     int vec_all_lt (vector bool char, vector unsigned char);
47270     int vec_all_lt (vector unsigned char, vector bool char);
47271     int vec_all_lt (vector unsigned char, vector unsigned char);
47272     int vec_all_lt (vector bool char, vector signed char);
47273     int vec_all_lt (vector signed char, vector bool char);
47274     int vec_all_lt (vector signed char, vector signed char);
47275     int vec_all_lt (vector bool short, vector unsigned short);
47276     int vec_all_lt (vector unsigned short, vector bool short);
47277     int vec_all_lt (vector unsigned short, vector unsigned short);
47278     int vec_all_lt (vector bool short, vector signed short);
47279     int vec_all_lt (vector signed short, vector bool short);
47280     int vec_all_lt (vector signed short, vector signed short);
47281     int vec_all_lt (vector bool int, vector unsigned int);
47282     int vec_all_lt (vector unsigned int, vector bool int);
47283     int vec_all_lt (vector unsigned int, vector unsigned int);
47284     int vec_all_lt (vector bool int, vector signed int);
47285     int vec_all_lt (vector signed int, vector bool int);
47286     int vec_all_lt (vector signed int, vector signed int);
47287     int vec_all_lt (vector float, vector float);
47288
47289     int vec_all_nan (vector float);
47290
47291     int vec_all_ne (vector signed char, vector bool char);
47292     int vec_all_ne (vector signed char, vector signed char);
47293     int vec_all_ne (vector unsigned char, vector bool char);
47294     int vec_all_ne (vector unsigned char, vector unsigned char);
47295     int vec_all_ne (vector bool char, vector bool char);
47296     int vec_all_ne (vector bool char, vector unsigned char);
47297     int vec_all_ne (vector bool char, vector signed char);
47298     int vec_all_ne (vector signed short, vector bool short);
47299     int vec_all_ne (vector signed short, vector signed short);
47300     int vec_all_ne (vector unsigned short, vector bool short);
47301     int vec_all_ne (vector unsigned short, vector unsigned short);
47302     int vec_all_ne (vector bool short, vector bool short);
47303     int vec_all_ne (vector bool short, vector unsigned short);
47304     int vec_all_ne (vector bool short, vector signed short);
47305     int vec_all_ne (vector pixel, vector pixel);
47306     int vec_all_ne (vector signed int, vector bool int);
47307     int vec_all_ne (vector signed int, vector signed int);
47308     int vec_all_ne (vector unsigned int, vector bool int);
47309     int vec_all_ne (vector unsigned int, vector unsigned int);
47310     int vec_all_ne (vector bool int, vector bool int);
47311     int vec_all_ne (vector bool int, vector unsigned int);
47312     int vec_all_ne (vector bool int, vector signed int);
47313     int vec_all_ne (vector float, vector float);
47314
47315     int vec_all_nge (vector float, vector float);
47316
47317     int vec_all_ngt (vector float, vector float);
47318
47319     int vec_all_nle (vector float, vector float);
47320
47321     int vec_all_nlt (vector float, vector float);
47322
47323     int vec_all_numeric (vector float);
47324
47325     vector float vec_and (vector float, vector float);
47326     vector float vec_and (vector float, vector bool int);
47327     vector float vec_and (vector bool int, vector float);
47328     vector bool int vec_and (vector bool int, vector bool int);
47329     vector signed int vec_and (vector bool int, vector signed int);
47330     vector signed int vec_and (vector signed int, vector bool int);
47331     vector signed int vec_and (vector signed int, vector signed int);
47332     vector unsigned int vec_and (vector bool int, vector unsigned int);
47333     vector unsigned int vec_and (vector unsigned int, vector bool int);
47334     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
47335     vector bool short vec_and (vector bool short, vector bool short);
47336     vector signed short vec_and (vector bool short, vector signed short);
47337     vector signed short vec_and (vector signed short, vector bool short);
47338     vector signed short vec_and (vector signed short, vector signed short);
47339     vector unsigned short vec_and (vector bool short, vector unsigned short);
47340     vector unsigned short vec_and (vector unsigned short, vector bool short);
47341     vector unsigned short vec_and (vector unsigned short, vector unsigned short);
47342     vector signed char vec_and (vector bool char, vector signed char);
47343     vector bool char vec_and (vector bool char, vector bool char);
47344     vector signed char vec_and (vector signed char, vector bool char);
47345     vector signed char vec_and (vector signed char, vector signed char);
47346     vector unsigned char vec_and (vector bool char, vector unsigned char);
47347     vector unsigned char vec_and (vector unsigned char, vector bool char);
47348     vector unsigned char vec_and (vector unsigned char, vector unsigned char);
47349
47350     vector float vec_andc (vector float, vector float);
47351     vector float vec_andc (vector float, vector bool int);
47352     vector float vec_andc (vector bool int, vector float);
47353     vector bool int vec_andc (vector bool int, vector bool int);
47354     vector signed int vec_andc (vector bool int, vector signed int);
47355     vector signed int vec_andc (vector signed int, vector bool int);
47356     vector signed int vec_andc (vector signed int, vector signed int);
47357     vector unsigned int vec_andc (vector bool int, vector unsigned int);
47358     vector unsigned int vec_andc (vector unsigned int, vector bool int);
47359     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
47360     vector bool short vec_andc (vector bool short, vector bool short);
47361     vector signed short vec_andc (vector bool short, vector signed short);
47362     vector signed short vec_andc (vector signed short, vector bool short);
47363     vector signed short vec_andc (vector signed short, vector signed short);
47364     vector unsigned short vec_andc (vector bool short, vector unsigned short);
47365     vector unsigned short vec_andc (vector unsigned short, vector bool short);
47366     vector unsigned short vec_andc (vector unsigned short, vector unsigned short);
47367     vector signed char vec_andc (vector bool char, vector signed char);
47368     vector bool char vec_andc (vector bool char, vector bool char);
47369     vector signed char vec_andc (vector signed char, vector bool char);
47370     vector signed char vec_andc (vector signed char, vector signed char);
47371     vector unsigned char vec_andc (vector bool char, vector unsigned char);
47372     vector unsigned char vec_andc (vector unsigned char, vector bool char);
47373     vector unsigned char vec_andc (vector unsigned char, vector unsigned char);
47374
47375     int vec_any_eq (vector signed char, vector bool char);
47376     int vec_any_eq (vector signed char, vector signed char);
47377     int vec_any_eq (vector unsigned char, vector bool char);
47378     int vec_any_eq (vector unsigned char, vector unsigned char);
47379     int vec_any_eq (vector bool char, vector bool char);
47380     int vec_any_eq (vector bool char, vector unsigned char);
47381     int vec_any_eq (vector bool char, vector signed char);
47382     int vec_any_eq (vector signed short, vector bool short);
47383     int vec_any_eq (vector signed short, vector signed short);
47384     int vec_any_eq (vector unsigned short, vector bool short);
47385     int vec_any_eq (vector unsigned short, vector unsigned short);
47386     int vec_any_eq (vector bool short, vector bool short);
47387     int vec_any_eq (vector bool short, vector unsigned short);
47388     int vec_any_eq (vector bool short, vector signed short);
47389     int vec_any_eq (vector pixel, vector pixel);
47390     int vec_any_eq (vector signed int, vector bool int);
47391     int vec_any_eq (vector signed int, vector signed int);
47392     int vec_any_eq (vector unsigned int, vector bool int);
47393     int vec_any_eq (vector unsigned int, vector unsigned int);
47394     int vec_any_eq (vector bool int, vector bool int);
47395     int vec_any_eq (vector bool int, vector unsigned int);
47396     int vec_any_eq (vector bool int, vector signed int);
47397     int vec_any_eq (vector float, vector float);
47398
47399     int vec_any_ge (vector signed char, vector bool char);
47400     int vec_any_ge (vector unsigned char, vector bool char);
47401     int vec_any_ge (vector unsigned char, vector unsigned char);
47402     int vec_any_ge (vector signed char, vector signed char);
47403     int vec_any_ge (vector bool char, vector unsigned char);
47404     int vec_any_ge (vector bool char, vector signed char);
47405     int vec_any_ge (vector unsigned short, vector bool short);
47406     int vec_any_ge (vector unsigned short, vector unsigned short);
47407     int vec_any_ge (vector signed short, vector signed short);
47408     int vec_any_ge (vector signed short, vector bool short);
47409     int vec_any_ge (vector bool short, vector unsigned short);
47410     int vec_any_ge (vector bool short, vector signed short);
47411     int vec_any_ge (vector signed int, vector bool int);
47412     int vec_any_ge (vector unsigned int, vector bool int);
47413     int vec_any_ge (vector unsigned int, vector unsigned int);
47414     int vec_any_ge (vector signed int, vector signed int);
47415     int vec_any_ge (vector bool int, vector unsigned int);
47416     int vec_any_ge (vector bool int, vector signed int);
47417     int vec_any_ge (vector float, vector float);
47418
47419     int vec_any_gt (vector bool char, vector unsigned char);
47420     int vec_any_gt (vector unsigned char, vector bool char);
47421     int vec_any_gt (vector unsigned char, vector unsigned char);
47422     int vec_any_gt (vector bool char, vector signed char);
47423     int vec_any_gt (vector signed char, vector bool char);
47424     int vec_any_gt (vector signed char, vector signed char);
47425     int vec_any_gt (vector bool short, vector unsigned short);
47426     int vec_any_gt (vector unsigned short, vector bool short);
47427     int vec_any_gt (vector unsigned short, vector unsigned short);
47428     int vec_any_gt (vector bool short, vector signed short);
47429     int vec_any_gt (vector signed short, vector bool short);
47430     int vec_any_gt (vector signed short, vector signed short);
47431     int vec_any_gt (vector bool int, vector unsigned int);
47432     int vec_any_gt (vector unsigned int, vector bool int);
47433     int vec_any_gt (vector unsigned int, vector unsigned int);
47434     int vec_any_gt (vector bool int, vector signed int);
47435     int vec_any_gt (vector signed int, vector bool int);
47436     int vec_any_gt (vector signed int, vector signed int);
47437     int vec_any_gt (vector float, vector float);
47438
47439     int vec_any_le (vector bool char, vector unsigned char);
47440     int vec_any_le (vector unsigned char, vector bool char);
47441     int vec_any_le (vector unsigned char, vector unsigned char);
47442     int vec_any_le (vector bool char, vector signed char);
47443     int vec_any_le (vector signed char, vector bool char);
47444     int vec_any_le (vector signed char, vector signed char);
47445     int vec_any_le (vector bool short, vector unsigned short);
47446     int vec_any_le (vector unsigned short, vector bool short);
47447     int vec_any_le (vector unsigned short, vector unsigned short);
47448     int vec_any_le (vector bool short, vector signed short);
47449     int vec_any_le (vector signed short, vector bool short);
47450     int vec_any_le (vector signed short, vector signed short);
47451     int vec_any_le (vector bool int, vector unsigned int);
47452     int vec_any_le (vector unsigned int, vector bool int);
47453     int vec_any_le (vector unsigned int, vector unsigned int);
47454     int vec_any_le (vector bool int, vector signed int);
47455     int vec_any_le (vector signed int, vector bool int);
47456     int vec_any_le (vector signed int, vector signed int);
47457     int vec_any_le (vector float, vector float);
47458
47459     int vec_any_lt (vector bool char, vector unsigned char);
47460     int vec_any_lt (vector unsigned char, vector bool char);
47461     int vec_any_lt (vector unsigned char, vector unsigned char);
47462     int vec_any_lt (vector bool char, vector signed char);
47463     int vec_any_lt (vector signed char, vector bool char);
47464     int vec_any_lt (vector signed char, vector signed char);
47465     int vec_any_lt (vector bool short, vector unsigned short);
47466     int vec_any_lt (vector unsigned short, vector bool short);
47467     int vec_any_lt (vector unsigned short, vector unsigned short);
47468     int vec_any_lt (vector bool short, vector signed short);
47469     int vec_any_lt (vector signed short, vector bool short);
47470     int vec_any_lt (vector signed short, vector signed short);
47471     int vec_any_lt (vector bool int, vector unsigned int);
47472     int vec_any_lt (vector unsigned int, vector bool int);
47473     int vec_any_lt (vector unsigned int, vector unsigned int);
47474     int vec_any_lt (vector bool int, vector signed int);
47475     int vec_any_lt (vector signed int, vector bool int);
47476     int vec_any_lt (vector signed int, vector signed int);
47477     int vec_any_lt (vector float, vector float);
47478
47479     int vec_any_nan (vector float);
47480
47481     int vec_any_ne (vector signed char, vector bool char);
47482     int vec_any_ne (vector signed char, vector signed char);
47483     int vec_any_ne (vector unsigned char, vector bool char);
47484     int vec_any_ne (vector unsigned char, vector unsigned char);
47485     int vec_any_ne (vector bool char, vector bool char);
47486     int vec_any_ne (vector bool char, vector unsigned char);
47487     int vec_any_ne (vector bool char, vector signed char);
47488     int vec_any_ne (vector signed short, vector bool short);
47489     int vec_any_ne (vector signed short, vector signed short);
47490     int vec_any_ne (vector unsigned short, vector bool short);
47491     int vec_any_ne (vector unsigned short, vector unsigned short);
47492     int vec_any_ne (vector bool short, vector bool short);
47493     int vec_any_ne (vector bool short, vector unsigned short);
47494     int vec_any_ne (vector bool short, vector signed short);
47495     int vec_any_ne (vector pixel, vector pixel);
47496     int vec_any_ne (vector signed int, vector bool int);
47497     int vec_any_ne (vector signed int, vector signed int);
47498     int vec_any_ne (vector unsigned int, vector bool int);
47499     int vec_any_ne (vector unsigned int, vector unsigned int);
47500     int vec_any_ne (vector bool int, vector bool int);
47501     int vec_any_ne (vector bool int, vector unsigned int);
47502     int vec_any_ne (vector bool int, vector signed int);
47503     int vec_any_ne (vector float, vector float);
47504
47505     int vec_any_nge (vector float, vector float);
47506
47507     int vec_any_ngt (vector float, vector float);
47508
47509     int vec_any_nle (vector float, vector float);
47510
47511     int vec_any_nlt (vector float, vector float);
47512
47513     int vec_any_numeric (vector float);
47514
47515     int vec_any_out (vector float, vector float);
47516
47517     vector unsigned char vec_avg (vector unsigned char, vector unsigned char);
47518     vector signed char vec_avg (vector signed char, vector signed char);
47519     vector unsigned short vec_avg (vector unsigned short, vector unsigned short);
47520     vector signed short vec_avg (vector signed short, vector signed short);
47521     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
47522     vector signed int vec_avg (vector signed int, vector signed int);
47523
47524     vector float vec_ceil (vector float);
47525
47526     vector signed int vec_cmpb (vector float, vector float);
47527
47528     vector bool char vec_cmpeq (vector bool char, vector bool char);
47529     vector bool short vec_cmpeq (vector bool short, vector bool short);
47530     vector bool int vec_cmpeq (vector bool int, vector bool int);
47531     vector bool char vec_cmpeq (vector signed char, vector signed char);
47532     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
47533     vector bool short vec_cmpeq (vector signed short, vector signed short);
47534     vector bool short vec_cmpeq (vector unsigned short, vector unsigned short);
47535     vector bool int vec_cmpeq (vector signed int, vector signed int);
47536     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
47537     vector bool int vec_cmpeq (vector float, vector float);
47538
47539     vector bool int vec_cmpge (vector float, vector float);
47540
47541     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
47542     vector bool char vec_cmpgt (vector signed char, vector signed char);
47543     vector bool short vec_cmpgt (vector unsigned short, vector unsigned short);
47544     vector bool short vec_cmpgt (vector signed short, vector signed short);
47545     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
47546     vector bool int vec_cmpgt (vector signed int, vector signed int);
47547     vector bool int vec_cmpgt (vector float, vector float);
47548
47549     vector bool int vec_cmple (vector float, vector float);
47550
47551     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
47552     vector bool char vec_cmplt (vector signed char, vector signed char);
47553     vector bool short vec_cmplt (vector unsigned short, vector unsigned short);
47554     vector bool short vec_cmplt (vector signed short, vector signed short);
47555     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
47556     vector bool int vec_cmplt (vector signed int, vector signed int);
47557     vector bool int vec_cmplt (vector float, vector float);
47558
47559     vector float vec_cpsgn (vector float, vector float);
47560
47561     vector float vec_ctf (vector unsigned int, const int);
47562     vector float vec_ctf (vector signed int, const int);
47563
47564     vector signed int vec_cts (vector float, const int);
47565
47566     vector unsigned int vec_ctu (vector float, const int);
47567
47568     void vec_dss (const int);
47569
47570     void vec_dssall (void);
47571
47572     void vec_dst (const vector unsigned char *, int, const int);
47573     void vec_dst (const vector signed char *, int, const int);
47574     void vec_dst (const vector bool char *, int, const int);
47575     void vec_dst (const vector unsigned short *, int, const int);
47576     void vec_dst (const vector signed short *, int, const int);
47577     void vec_dst (const vector bool short *, int, const int);
47578     void vec_dst (const vector pixel *, int, const int);
47579     void vec_dst (const vector unsigned int *, int, const int);
47580     void vec_dst (const vector signed int *, int, const int);
47581     void vec_dst (const vector bool int *, int, const int);
47582     void vec_dst (const vector float *, int, const int);
47583     void vec_dst (const unsigned char *, int, const int);
47584     void vec_dst (const signed char *, int, const int);
47585     void vec_dst (const unsigned short *, int, const int);
47586     void vec_dst (const short *, int, const int);
47587     void vec_dst (const unsigned int *, int, const int);
47588     void vec_dst (const int *, int, const int);
47589     void vec_dst (const float *, int, const int);
47590
47591     void vec_dstst (const vector unsigned char *, int, const int);
47592     void vec_dstst (const vector signed char *, int, const int);
47593     void vec_dstst (const vector bool char *, int, const int);
47594     void vec_dstst (const vector unsigned short *, int, const int);
47595     void vec_dstst (const vector signed short *, int, const int);
47596     void vec_dstst (const vector bool short *, int, const int);
47597     void vec_dstst (const vector pixel *, int, const int);
47598     void vec_dstst (const vector unsigned int *, int, const int);
47599     void vec_dstst (const vector signed int *, int, const int);
47600     void vec_dstst (const vector bool int *, int, const int);
47601     void vec_dstst (const vector float *, int, const int);
47602     void vec_dstst (const unsigned char *, int, const int);
47603     void vec_dstst (const signed char *, int, const int);
47604     void vec_dstst (const unsigned short *, int, const int);
47605     void vec_dstst (const short *, int, const int);
47606     void vec_dstst (const unsigned int *, int, const int);
47607     void vec_dstst (const int *, int, const int);
47608     void vec_dstst (const unsigned long *, int, const int);
47609     void vec_dstst (const long *, int, const int);
47610     void vec_dstst (const float *, int, const int);
47611
47612     void vec_dststt (const vector unsigned char *, int, const int);
47613     void vec_dststt (const vector signed char *, int, const int);
47614     void vec_dststt (const vector bool char *, int, const int);
47615     void vec_dststt (const vector unsigned short *, int, const int);
47616     void vec_dststt (const vector signed short *, int, const int);
47617     void vec_dststt (const vector bool short *, int, const int);
47618     void vec_dststt (const vector pixel *, int, const int);
47619     void vec_dststt (const vector unsigned int *, int, const int);
47620     void vec_dststt (const vector signed int *, int, const int);
47621     void vec_dststt (const vector bool int *, int, const int);
47622     void vec_dststt (const vector float *, int, const int);
47623     void vec_dststt (const unsigned char *, int, const int);
47624     void vec_dststt (const signed char *, int, const int);
47625     void vec_dststt (const unsigned short *, int, const int);
47626     void vec_dststt (const short *, int, const int);
47627     void vec_dststt (const unsigned int *, int, const int);
47628     void vec_dststt (const int *, int, const int);
47629     void vec_dststt (const float *, int, const int);
47630
47631     void vec_dstt (const vector unsigned char *, int, const int);
47632     void vec_dstt (const vector signed char *, int, const int);
47633     void vec_dstt (const vector bool char *, int, const int);
47634     void vec_dstt (const vector unsigned short *, int, const int);
47635     void vec_dstt (const vector signed short *, int, const int);
47636     void vec_dstt (const vector bool short *, int, const int);
47637     void vec_dstt (const vector pixel *, int, const int);
47638     void vec_dstt (const vector unsigned int *, int, const int);
47639     void vec_dstt (const vector signed int *, int, const int);
47640     void vec_dstt (const vector bool int *, int, const int);
47641     void vec_dstt (const vector float *, int, const int);
47642     void vec_dstt (const unsigned char *, int, const int);
47643     void vec_dstt (const signed char *, int, const int);
47644     void vec_dstt (const unsigned short *, int, const int);
47645     void vec_dstt (const short *, int, const int);
47646     void vec_dstt (const unsigned int *, int, const int);
47647     void vec_dstt (const int *, int, const int);
47648     void vec_dstt (const float *, int, const int);
47649
47650     vector float vec_expte (vector float);
47651
47652     vector float vec_floor (vector float);
47653
47654     vector float vec_ld (int, const vector float *);
47655     vector float vec_ld (int, const float *);
47656     vector bool int vec_ld (int, const vector bool int *);
47657     vector signed int vec_ld (int, const vector signed int *);
47658     vector signed int vec_ld (int, const int *);
47659     vector unsigned int vec_ld (int, const vector unsigned int *);
47660     vector unsigned int vec_ld (int, const unsigned int *);
47661     vector bool short vec_ld (int, const vector bool short *);
47662     vector pixel vec_ld (int, const vector pixel *);
47663     vector signed short vec_ld (int, const vector signed short *);
47664     vector signed short vec_ld (int, const short *);
47665     vector unsigned short vec_ld (int, const vector unsigned short *);
47666     vector unsigned short vec_ld (int, const unsigned short *);
47667     vector bool char vec_ld (int, const vector bool char *);
47668     vector signed char vec_ld (int, const vector signed char *);
47669     vector signed char vec_ld (int, const signed char *);
47670     vector unsigned char vec_ld (int, const vector unsigned char *);
47671     vector unsigned char vec_ld (int, const unsigned char *);
47672
47673     vector signed char vec_lde (int, const signed char *);
47674     vector unsigned char vec_lde (int, const unsigned char *);
47675     vector signed short vec_lde (int, const short *);
47676     vector unsigned short vec_lde (int, const unsigned short *);
47677     vector float vec_lde (int, const float *);
47678     vector signed int vec_lde (int, const int *);
47679     vector unsigned int vec_lde (int, const unsigned int *);
47680
47681     vector float vec_ldl (int, const vector float *);
47682     vector float vec_ldl (int, const float *);
47683     vector bool int vec_ldl (int, const vector bool int *);
47684     vector signed int vec_ldl (int, const vector signed int *);
47685     vector signed int vec_ldl (int, const int *);
47686     vector unsigned int vec_ldl (int, const vector unsigned int *);
47687     vector unsigned int vec_ldl (int, const unsigned int *);
47688     vector bool short vec_ldl (int, const vector bool short *);
47689     vector pixel vec_ldl (int, const vector pixel *);
47690     vector signed short vec_ldl (int, const vector signed short *);
47691     vector signed short vec_ldl (int, const short *);
47692     vector unsigned short vec_ldl (int, const vector unsigned short *);
47693     vector unsigned short vec_ldl (int, const unsigned short *);
47694     vector bool char vec_ldl (int, const vector bool char *);
47695     vector signed char vec_ldl (int, const vector signed char *);
47696     vector signed char vec_ldl (int, const signed char *);
47697     vector unsigned char vec_ldl (int, const vector unsigned char *);
47698     vector unsigned char vec_ldl (int, const unsigned char *);
47699
47700     vector float vec_loge (vector float);
47701
47702     vector signed char vec_lvebx (int, char *);
47703     vector unsigned char vec_lvebx (int, unsigned char *);
47704
47705     vector signed short vec_lvehx (int, short *);
47706     vector unsigned short vec_lvehx (int, unsigned short *);
47707
47708     vector float vec_lvewx (int, float *);
47709     vector signed int vec_lvewx (int, int *);
47710     vector unsigned int vec_lvewx (int, unsigned int *);
47711
47712     vector unsigned char vec_lvsl (int, const unsigned char *);
47713     vector unsigned char vec_lvsl (int, const signed char *);
47714     vector unsigned char vec_lvsl (int, const unsigned short *);
47715     vector unsigned char vec_lvsl (int, const short *);
47716     vector unsigned char vec_lvsl (int, const unsigned int *);
47717     vector unsigned char vec_lvsl (int, const int *);
47718     vector unsigned char vec_lvsl (int, const float *);
47719
47720     vector unsigned char vec_lvsr (int, const unsigned char *);
47721     vector unsigned char vec_lvsr (int, const signed char *);
47722     vector unsigned char vec_lvsr (int, const unsigned short *);
47723     vector unsigned char vec_lvsr (int, const short *);
47724     vector unsigned char vec_lvsr (int, const unsigned int *);
47725     vector unsigned char vec_lvsr (int, const int *);
47726     vector unsigned char vec_lvsr (int, const float *);
47727
47728     vector float vec_madd (vector float, vector float, vector float);
47729
47730     vector signed short vec_madds (vector signed short, vector signed short,
47731                                    vector signed short);
47732
47733     vector unsigned char vec_max (vector bool char, vector unsigned char);
47734     vector unsigned char vec_max (vector unsigned char, vector bool char);
47735     vector unsigned char vec_max (vector unsigned char, vector unsigned char);
47736     vector signed char vec_max (vector bool char, vector signed char);
47737     vector signed char vec_max (vector signed char, vector bool char);
47738     vector signed char vec_max (vector signed char, vector signed char);
47739     vector unsigned short vec_max (vector bool short, vector unsigned short);
47740     vector unsigned short vec_max (vector unsigned short, vector bool short);
47741     vector unsigned short vec_max (vector unsigned short, vector unsigned short);
47742     vector signed short vec_max (vector bool short, vector signed short);
47743     vector signed short vec_max (vector signed short, vector bool short);
47744     vector signed short vec_max (vector signed short, vector signed short);
47745     vector unsigned int vec_max (vector bool int, vector unsigned int);
47746     vector unsigned int vec_max (vector unsigned int, vector bool int);
47747     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
47748     vector signed int vec_max (vector bool int, vector signed int);
47749     vector signed int vec_max (vector signed int, vector bool int);
47750     vector signed int vec_max (vector signed int, vector signed int);
47751     vector float vec_max (vector float, vector float);
47752
47753     vector bool char vec_mergeh (vector bool char, vector bool char);
47754     vector signed char vec_mergeh (vector signed char, vector signed char);
47755     vector unsigned char vec_mergeh (vector unsigned char, vector unsigned char);
47756     vector bool short vec_mergeh (vector bool short, vector bool short);
47757     vector pixel vec_mergeh (vector pixel, vector pixel);
47758     vector signed short vec_mergeh (vector signed short, vector signed short);
47759     vector unsigned short vec_mergeh (vector unsigned short, vector unsigned short);
47760     vector float vec_mergeh (vector float, vector float);
47761     vector bool int vec_mergeh (vector bool int, vector bool int);
47762     vector signed int vec_mergeh (vector signed int, vector signed int);
47763     vector unsigned int vec_mergeh (vector unsigned int, vector unsigned int);
47764
47765     vector bool char vec_mergel (vector bool char, vector bool char);
47766     vector signed char vec_mergel (vector signed char, vector signed char);
47767     vector unsigned char vec_mergel (vector unsigned char, vector unsigned char);
47768     vector bool short vec_mergel (vector bool short, vector bool short);
47769     vector pixel vec_mergel (vector pixel, vector pixel);
47770     vector signed short vec_mergel (vector signed short, vector signed short);
47771     vector unsigned short vec_mergel (vector unsigned short, vector unsigned short);
47772     vector float vec_mergel (vector float, vector float);
47773     vector bool int vec_mergel (vector bool int, vector bool int);
47774     vector signed int vec_mergel (vector signed int, vector signed int);
47775     vector unsigned int vec_mergel (vector unsigned int, vector unsigned int);
47776
47777     vector unsigned short vec_mfvscr (void);
47778
47779     vector unsigned char vec_min (vector bool char, vector unsigned char);
47780     vector unsigned char vec_min (vector unsigned char, vector bool char);
47781     vector unsigned char vec_min (vector unsigned char, vector unsigned char);
47782     vector signed char vec_min (vector bool char, vector signed char);
47783     vector signed char vec_min (vector signed char, vector bool char);
47784     vector signed char vec_min (vector signed char, vector signed char);
47785     vector unsigned short vec_min (vector bool short, vector unsigned short);
47786     vector unsigned short vec_min (vector unsigned short, vector bool short);
47787     vector unsigned short vec_min (vector unsigned short, vector unsigned short);
47788     vector signed short vec_min (vector bool short, vector signed short);
47789     vector signed short vec_min (vector signed short, vector bool short);
47790     vector signed short vec_min (vector signed short, vector signed short);
47791     vector unsigned int vec_min (vector bool int, vector unsigned int);
47792     vector unsigned int vec_min (vector unsigned int, vector bool int);
47793     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
47794     vector signed int vec_min (vector bool int, vector signed int);
47795     vector signed int vec_min (vector signed int, vector bool int);
47796     vector signed int vec_min (vector signed int, vector signed int);
47797     vector float vec_min (vector float, vector float);
47798
47799     vector signed short vec_mladd (vector signed short, vector signed short,
47800                                    vector signed short);
47801     vector signed short vec_mladd (vector signed short, vector unsigned short,
47802                                    vector unsigned short);
47803     vector signed short vec_mladd (vector unsigned short, vector signed short,
47804                                    vector signed short);
47805     vector unsigned short vec_mladd (vector unsigned short, vector unsigned short,
47806                                      vector unsigned short);
47807
47808     vector signed short vec_mradds (vector signed short, vector signed short,
47809                                     vector signed short);
47810
47811     vector unsigned int vec_msum (vector unsigned char, vector unsigned char,
47812                                   vector unsigned int);
47813     vector signed int vec_msum (vector signed char, vector unsigned char,
47814                                 vector signed int);
47815     vector unsigned int vec_msum (vector unsigned short, vector unsigned short,
47816                                   vector unsigned int);
47817     vector signed int vec_msum (vector signed short, vector signed short,
47818                                 vector signed int);
47819
47820     vector unsigned int vec_msums (vector unsigned short, vector unsigned short,
47821                                    vector unsigned int);
47822     vector signed int vec_msums (vector signed short, vector signed short,
47823                                  vector signed int);
47824
47825     void vec_mtvscr (vector signed int);
47826     void vec_mtvscr (vector unsigned int);
47827     void vec_mtvscr (vector bool int);
47828     void vec_mtvscr (vector signed short);
47829     void vec_mtvscr (vector unsigned short);
47830     void vec_mtvscr (vector bool short);
47831     void vec_mtvscr (vector pixel);
47832     void vec_mtvscr (vector signed char);
47833     void vec_mtvscr (vector unsigned char);
47834     void vec_mtvscr (vector bool char);
47835
47836     vector float vec_mul (vector float, vector float);
47837
47838     vector unsigned short vec_mule (vector unsigned char, vector unsigned char);
47839     vector signed short vec_mule (vector signed char, vector signed char);
47840     vector unsigned int vec_mule (vector unsigned short, vector unsigned short);
47841     vector signed int vec_mule (vector signed short, vector signed short);
47842
47843     vector unsigned short vec_mulo (vector unsigned char, vector unsigned char);
47844     vector signed short vec_mulo (vector signed char, vector signed char);
47845     vector unsigned int vec_mulo (vector unsigned short, vector unsigned short);
47846     vector signed int vec_mulo (vector signed short, vector signed short);
47847
47848     vector signed char vec_nabs (vector signed char);
47849     vector signed short vec_nabs (vector signed short);
47850     vector signed int vec_nabs (vector signed int);
47851     vector float vec_nabs (vector float);
47852
47853     vector float vec_nmsub (vector float, vector float, vector float);
47854
47855     vector float vec_nor (vector float, vector float);
47856     vector signed int vec_nor (vector signed int, vector signed int);
47857     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
47858     vector bool int vec_nor (vector bool int, vector bool int);
47859     vector signed short vec_nor (vector signed short, vector signed short);
47860     vector unsigned short vec_nor (vector unsigned short, vector unsigned short);
47861     vector bool short vec_nor (vector bool short, vector bool short);
47862     vector signed char vec_nor (vector signed char, vector signed char);
47863     vector unsigned char vec_nor (vector unsigned char, vector unsigned char);
47864     vector bool char vec_nor (vector bool char, vector bool char);
47865
47866     vector float vec_or (vector float, vector float);
47867     vector float vec_or (vector float, vector bool int);
47868     vector float vec_or (vector bool int, vector float);
47869     vector bool int vec_or (vector bool int, vector bool int);
47870     vector signed int vec_or (vector bool int, vector signed int);
47871     vector signed int vec_or (vector signed int, vector bool int);
47872     vector signed int vec_or (vector signed int, vector signed int);
47873     vector unsigned int vec_or (vector bool int, vector unsigned int);
47874     vector unsigned int vec_or (vector unsigned int, vector bool int);
47875     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
47876     vector bool short vec_or (vector bool short, vector bool short);
47877     vector signed short vec_or (vector bool short, vector signed short);
47878     vector signed short vec_or (vector signed short, vector bool short);
47879     vector signed short vec_or (vector signed short, vector signed short);
47880     vector unsigned short vec_or (vector bool short, vector unsigned short);
47881     vector unsigned short vec_or (vector unsigned short, vector bool short);
47882     vector unsigned short vec_or (vector unsigned short, vector unsigned short);
47883     vector signed char vec_or (vector bool char, vector signed char);
47884     vector bool char vec_or (vector bool char, vector bool char);
47885     vector signed char vec_or (vector signed char, vector bool char);
47886     vector signed char vec_or (vector signed char, vector signed char);
47887     vector unsigned char vec_or (vector bool char, vector unsigned char);
47888     vector unsigned char vec_or (vector unsigned char, vector bool char);
47889     vector unsigned char vec_or (vector unsigned char, vector unsigned char);
47890
47891     vector signed char vec_pack (vector signed short, vector signed short);
47892     vector unsigned char vec_pack (vector unsigned short, vector unsigned short);
47893     vector bool char vec_pack (vector bool short, vector bool short);
47894     vector signed short vec_pack (vector signed int, vector signed int);
47895     vector unsigned short vec_pack (vector unsigned int, vector unsigned int);
47896     vector bool short vec_pack (vector bool int, vector bool int);
47897
47898     vector pixel vec_packpx (vector unsigned int, vector unsigned int);
47899
47900     vector unsigned char vec_packs (vector unsigned short, vector unsigned short);
47901     vector signed char vec_packs (vector signed short, vector signed short);
47902     vector unsigned short vec_packs (vector unsigned int, vector unsigned int);
47903     vector signed short vec_packs (vector signed int, vector signed int);
47904
47905     vector unsigned char vec_packsu (vector unsigned short, vector unsigned short);
47906     vector unsigned char vec_packsu (vector signed short, vector signed short);
47907     vector unsigned short vec_packsu (vector unsigned int, vector unsigned int);
47908     vector unsigned short vec_packsu (vector signed int, vector signed int);
47909
47910     vector float vec_perm (vector float, vector float, vector unsigned char);
47911     vector signed int vec_perm (vector signed int, vector signed int, vector unsigned char);
47912     vector unsigned int vec_perm (vector unsigned int, vector unsigned int,
47913                                   vector unsigned char);
47914     vector bool int vec_perm (vector bool int, vector bool int, vector unsigned char);
47915     vector signed short vec_perm (vector signed short, vector signed short,
47916                                   vector unsigned char);
47917     vector unsigned short vec_perm (vector unsigned short, vector unsigned short,
47918                                     vector unsigned char);
47919     vector bool short vec_perm (vector bool short, vector bool short, vector unsigned char);
47920     vector pixel vec_perm (vector pixel, vector pixel, vector unsigned char);
47921     vector signed char vec_perm (vector signed char, vector signed char,
47922                                  vector unsigned char);
47923     vector unsigned char vec_perm (vector unsigned char, vector unsigned char,
47924                                    vector unsigned char);
47925     vector bool char vec_perm (vector bool char, vector bool char, vector unsigned char);
47926
47927     vector float vec_re (vector float);
47928
47929     vector bool char vec_reve (vector bool char);
47930     vector signed char vec_reve (vector signed char);
47931     vector unsigned char vec_reve (vector unsigned char);
47932     vector bool int vec_reve (vector bool int);
47933     vector signed int vec_reve (vector signed int);
47934     vector unsigned int vec_reve (vector unsigned int);
47935     vector bool short vec_reve (vector bool short);
47936     vector signed short vec_reve (vector signed short);
47937     vector unsigned short vec_reve (vector unsigned short);
47938
47939     vector signed char vec_rl (vector signed char, vector unsigned char);
47940     vector unsigned char vec_rl (vector unsigned char, vector unsigned char);
47941     vector signed short vec_rl (vector signed short, vector unsigned short);
47942     vector unsigned short vec_rl (vector unsigned short, vector unsigned short);
47943     vector signed int vec_rl (vector signed int, vector unsigned int);
47944     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
47945
47946     vector float vec_round (vector float);
47947
47948     vector float vec_rsqrt (vector float);
47949
47950     vector float vec_rsqrte (vector float);
47951
47952     vector float vec_sel (vector float, vector float, vector bool int);
47953     vector float vec_sel (vector float, vector float, vector unsigned int);
47954     vector signed int vec_sel (vector signed int, vector signed int, vector bool int);
47955     vector signed int vec_sel (vector signed int, vector signed int, vector unsigned int);
47956     vector unsigned int vec_sel (vector unsigned int, vector unsigned int, vector bool int);
47957     vector unsigned int vec_sel (vector unsigned int, vector unsigned int,
47958                                  vector unsigned int);
47959     vector bool int vec_sel (vector bool int, vector bool int, vector bool int);
47960     vector bool int vec_sel (vector bool int, vector bool int, vector unsigned int);
47961     vector signed short vec_sel (vector signed short, vector signed short,
47962                                  vector bool short);
47963     vector signed short vec_sel (vector signed short, vector signed short,
47964                                  vector unsigned short);
47965     vector unsigned short vec_sel (vector unsigned short, vector unsigned short,
47966                                    vector bool short);
47967     vector unsigned short vec_sel (vector unsigned short, vector unsigned short,
47968                                    vector unsigned short);
47969     vector bool short vec_sel (vector bool short, vector bool short, vector bool short);
47970     vector bool short vec_sel (vector bool short, vector bool short, vector unsigned short);
47971     vector signed char vec_sel (vector signed char, vector signed char, vector bool char);
47972     vector signed char vec_sel (vector signed char, vector signed char,
47973                                 vector unsigned char);
47974     vector unsigned char vec_sel (vector unsigned char, vector unsigned char,
47975                                   vector bool char);
47976     vector unsigned char vec_sel (vector unsigned char, vector unsigned char,
47977                                   vector unsigned char);
47978     vector bool char vec_sel (vector bool char, vector bool char, vector bool char);
47979     vector bool char vec_sel (vector bool char, vector bool char, vector unsigned char);
47980
47981     vector signed char vec_sl (vector signed char, vector unsigned char);
47982     vector unsigned char vec_sl (vector unsigned char, vector unsigned char);
47983     vector signed short vec_sl (vector signed short, vector unsigned short);
47984     vector unsigned short vec_sl (vector unsigned short, vector unsigned short);
47985     vector signed int vec_sl (vector signed int, vector unsigned int);
47986     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
47987
47988     vector float vec_sld (vector float, vector float, const int);
47989     vector signed int vec_sld (vector signed int, vector signed int, const int);
47990     vector unsigned int vec_sld (vector unsigned int, vector unsigned int, const int);
47991     vector bool int vec_sld (vector bool int, vector bool int, const int);
47992     vector signed short vec_sld (vector signed short, vector signed short, const int);
47993     vector unsigned short vec_sld (vector unsigned short, vector unsigned short, const int);
47994     vector bool short vec_sld (vector bool short, vector bool short, const int);
47995     vector pixel vec_sld (vector pixel, vector pixel, const int);
47996     vector signed char vec_sld (vector signed char, vector signed char, const int);
47997     vector unsigned char vec_sld (vector unsigned char, vector unsigned char, const int);
47998     vector bool char vec_sld (vector bool char, vector bool char, const int);
47999
48000     vector signed int vec_sll (vector signed int, vector unsigned int);
48001     vector signed int vec_sll (vector signed int, vector unsigned short);
48002     vector signed int vec_sll (vector signed int, vector unsigned char);
48003     vector unsigned int vec_sll (vector unsigned int, vector unsigned int);
48004     vector unsigned int vec_sll (vector unsigned int, vector unsigned short);
48005     vector unsigned int vec_sll (vector unsigned int, vector unsigned char);
48006     vector bool int vec_sll (vector bool int, vector unsigned int);
48007     vector bool int vec_sll (vector bool int, vector unsigned short);
48008     vector bool int vec_sll (vector bool int, vector unsigned char);
48009     vector signed short vec_sll (vector signed short, vector unsigned int);
48010     vector signed short vec_sll (vector signed short, vector unsigned short);
48011     vector signed short vec_sll (vector signed short, vector unsigned char);
48012     vector unsigned short vec_sll (vector unsigned short, vector unsigned int);
48013     vector unsigned short vec_sll (vector unsigned short, vector unsigned short);
48014     vector unsigned short vec_sll (vector unsigned short, vector unsigned char);
48015     vector bool short vec_sll (vector bool short, vector unsigned int);
48016     vector bool short vec_sll (vector bool short, vector unsigned short);
48017     vector bool short vec_sll (vector bool short, vector unsigned char);
48018     vector pixel vec_sll (vector pixel, vector unsigned int);
48019     vector pixel vec_sll (vector pixel, vector unsigned short);
48020     vector pixel vec_sll (vector pixel, vector unsigned char);
48021     vector signed char vec_sll (vector signed char, vector unsigned int);
48022     vector signed char vec_sll (vector signed char, vector unsigned short);
48023     vector signed char vec_sll (vector signed char, vector unsigned char);
48024     vector unsigned char vec_sll (vector unsigned char, vector unsigned int);
48025     vector unsigned char vec_sll (vector unsigned char, vector unsigned short);
48026     vector unsigned char vec_sll (vector unsigned char, vector unsigned char);
48027     vector bool char vec_sll (vector bool char, vector unsigned int);
48028     vector bool char vec_sll (vector bool char, vector unsigned short);
48029     vector bool char vec_sll (vector bool char, vector unsigned char);
48030
48031     vector float vec_slo (vector float, vector signed char);
48032     vector float vec_slo (vector float, vector unsigned char);
48033     vector signed int vec_slo (vector signed int, vector signed char);
48034     vector signed int vec_slo (vector signed int, vector unsigned char);
48035     vector unsigned int vec_slo (vector unsigned int, vector signed char);
48036     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
48037     vector signed short vec_slo (vector signed short, vector signed char);
48038     vector signed short vec_slo (vector signed short, vector unsigned char);
48039     vector unsigned short vec_slo (vector unsigned short, vector signed char);
48040     vector unsigned short vec_slo (vector unsigned short, vector unsigned char);
48041     vector pixel vec_slo (vector pixel, vector signed char);
48042     vector pixel vec_slo (vector pixel, vector unsigned char);
48043     vector signed char vec_slo (vector signed char, vector signed char);
48044     vector signed char vec_slo (vector signed char, vector unsigned char);
48045     vector unsigned char vec_slo (vector unsigned char, vector signed char);
48046     vector unsigned char vec_slo (vector unsigned char, vector unsigned char);
48047
48048     vector signed char vec_splat (vector signed char, const int);
48049     vector unsigned char vec_splat (vector unsigned char, const int);
48050     vector bool char vec_splat (vector bool char, const int);
48051     vector signed short vec_splat (vector signed short, const int);
48052     vector unsigned short vec_splat (vector unsigned short, const int);
48053     vector bool short vec_splat (vector bool short, const int);
48054     vector pixel vec_splat (vector pixel, const int);
48055     vector float vec_splat (vector float, const int);
48056     vector signed int vec_splat (vector signed int, const int);
48057     vector unsigned int vec_splat (vector unsigned int, const int);
48058     vector bool int vec_splat (vector bool int, const int);
48059
48060     vector signed short vec_splat_s16 (const int);
48061
48062     vector signed int vec_splat_s32 (const int);
48063
48064     vector signed char vec_splat_s8 (const int);
48065
48066     vector unsigned short vec_splat_u16 (const int);
48067
48068     vector unsigned int vec_splat_u32 (const int);
48069
48070     vector unsigned char vec_splat_u8 (const int);
48071
48072     vector signed char vec_splats (signed char);
48073     vector unsigned char vec_splats (unsigned char);
48074     vector signed short vec_splats (signed short);
48075     vector unsigned short vec_splats (unsigned short);
48076     vector signed int vec_splats (signed int);
48077     vector unsigned int vec_splats (unsigned int);
48078     vector float vec_splats (float);
48079
48080     vector signed char vec_sr (vector signed char, vector unsigned char);
48081     vector unsigned char vec_sr (vector unsigned char, vector unsigned char);
48082     vector signed short vec_sr (vector signed short, vector unsigned short);
48083     vector unsigned short vec_sr (vector unsigned short, vector unsigned short);
48084     vector signed int vec_sr (vector signed int, vector unsigned int);
48085     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
48086
48087     vector signed char vec_sra (vector signed char, vector unsigned char);
48088     vector unsigned char vec_sra (vector unsigned char, vector unsigned char);
48089     vector signed short vec_sra (vector signed short, vector unsigned short);
48090     vector unsigned short vec_sra (vector unsigned short, vector unsigned short);
48091     vector signed int vec_sra (vector signed int, vector unsigned int);
48092     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
48093
48094     vector signed int vec_srl (vector signed int, vector unsigned int);
48095     vector signed int vec_srl (vector signed int, vector unsigned short);
48096     vector signed int vec_srl (vector signed int, vector unsigned char);
48097     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
48098     vector unsigned int vec_srl (vector unsigned int, vector unsigned short);
48099     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
48100     vector bool int vec_srl (vector bool int, vector unsigned int);
48101     vector bool int vec_srl (vector bool int, vector unsigned short);
48102     vector bool int vec_srl (vector bool int, vector unsigned char);
48103     vector signed short vec_srl (vector signed short, vector unsigned int);
48104     vector signed short vec_srl (vector signed short, vector unsigned short);
48105     vector signed short vec_srl (vector signed short, vector unsigned char);
48106     vector unsigned short vec_srl (vector unsigned short, vector unsigned int);
48107     vector unsigned short vec_srl (vector unsigned short, vector unsigned short);
48108     vector unsigned short vec_srl (vector unsigned short, vector unsigned char);
48109     vector bool short vec_srl (vector bool short, vector unsigned int);
48110     vector bool short vec_srl (vector bool short, vector unsigned short);
48111     vector bool short vec_srl (vector bool short, vector unsigned char);
48112     vector pixel vec_srl (vector pixel, vector unsigned int);
48113     vector pixel vec_srl (vector pixel, vector unsigned short);
48114     vector pixel vec_srl (vector pixel, vector unsigned char);
48115     vector signed char vec_srl (vector signed char, vector unsigned int);
48116     vector signed char vec_srl (vector signed char, vector unsigned short);
48117     vector signed char vec_srl (vector signed char, vector unsigned char);
48118     vector unsigned char vec_srl (vector unsigned char, vector unsigned int);
48119     vector unsigned char vec_srl (vector unsigned char, vector unsigned short);
48120     vector unsigned char vec_srl (vector unsigned char, vector unsigned char);
48121     vector bool char vec_srl (vector bool char, vector unsigned int);
48122     vector bool char vec_srl (vector bool char, vector unsigned short);
48123     vector bool char vec_srl (vector bool char, vector unsigned char);
48124
48125     vector float vec_sro (vector float, vector signed char);
48126     vector float vec_sro (vector float, vector unsigned char);
48127     vector signed int vec_sro (vector signed int, vector signed char);
48128     vector signed int vec_sro (vector signed int, vector unsigned char);
48129     vector unsigned int vec_sro (vector unsigned int, vector signed char);
48130     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
48131     vector signed short vec_sro (vector signed short, vector signed char);
48132     vector signed short vec_sro (vector signed short, vector unsigned char);
48133     vector unsigned short vec_sro (vector unsigned short, vector signed char);
48134     vector unsigned short vec_sro (vector unsigned short, vector unsigned char);
48135     vector pixel vec_sro (vector pixel, vector signed char);
48136     vector pixel vec_sro (vector pixel, vector unsigned char);
48137     vector signed char vec_sro (vector signed char, vector signed char);
48138     vector signed char vec_sro (vector signed char, vector unsigned char);
48139     vector unsigned char vec_sro (vector unsigned char, vector signed char);
48140     vector unsigned char vec_sro (vector unsigned char, vector unsigned char);
48141
48142     void vec_st (vector float, int, vector float *);
48143     void vec_st (vector float, int, float *);
48144     void vec_st (vector signed int, int, vector signed int *);
48145     void vec_st (vector signed int, int, int *);
48146     void vec_st (vector unsigned int, int, vector unsigned int *);
48147     void vec_st (vector unsigned int, int, unsigned int *);
48148     void vec_st (vector bool int, int, vector bool int *);
48149     void vec_st (vector bool int, int, unsigned int *);
48150     void vec_st (vector bool int, int, int *);
48151     void vec_st (vector signed short, int, vector signed short *);
48152     void vec_st (vector signed short, int, short *);
48153     void vec_st (vector unsigned short, int, vector unsigned short *);
48154     void vec_st (vector unsigned short, int, unsigned short *);
48155     void vec_st (vector bool short, int, vector bool short *);
48156     void vec_st (vector bool short, int, unsigned short *);
48157     void vec_st (vector pixel, int, vector pixel *);
48158     void vec_st (vector bool short, int, short *);
48159     void vec_st (vector signed char, int, vector signed char *);
48160     void vec_st (vector signed char, int, signed char *);
48161     void vec_st (vector unsigned char, int, vector unsigned char *);
48162     void vec_st (vector unsigned char, int, unsigned char *);
48163     void vec_st (vector bool char, int, vector bool char *);
48164     void vec_st (vector bool char, int, unsigned char *);
48165     void vec_st (vector bool char, int, signed char *);
48166
48167     void vec_ste (vector signed char, int, signed char *);
48168     void vec_ste (vector unsigned char, int, unsigned char *);
48169     void vec_ste (vector bool char, int, signed char *);
48170     void vec_ste (vector bool char, int, unsigned char *);
48171     void vec_ste (vector signed short, int, short *);
48172     void vec_ste (vector unsigned short, int, unsigned short *);
48173     void vec_ste (vector bool short, int, short *);
48174     void vec_ste (vector bool short, int, unsigned short *);
48175     void vec_ste (vector pixel, int, short *);
48176     void vec_ste (vector pixel, int, unsigned short *);
48177     void vec_ste (vector float, int, float *);
48178     void vec_ste (vector signed int, int, int *);
48179     void vec_ste (vector unsigned int, int, unsigned int *);
48180     void vec_ste (vector bool int, int, int *);
48181     void vec_ste (vector bool int, int, unsigned int *);
48182
48183     void vec_stl (vector float, int, vector float *);
48184     void vec_stl (vector float, int, float *);
48185     void vec_stl (vector signed int, int, vector signed int *);
48186     void vec_stl (vector signed int, int, int *);
48187     void vec_stl (vector unsigned int, int, vector unsigned int *);
48188     void vec_stl (vector unsigned int, int, unsigned int *);
48189     void vec_stl (vector bool int, int, vector bool int *);
48190     void vec_stl (vector bool int, int, unsigned int *);
48191     void vec_stl (vector bool int, int, int *);
48192     void vec_stl (vector signed short, int, vector signed short *);
48193     void vec_stl (vector signed short, int, short *);
48194     void vec_stl (vector unsigned short, int, vector unsigned short *);
48195     void vec_stl (vector unsigned short, int, unsigned short *);
48196     void vec_stl (vector bool short, int, vector bool short *);
48197     void vec_stl (vector bool short, int, unsigned short *);
48198     void vec_stl (vector bool short, int, short *);
48199     void vec_stl (vector pixel, int, vector pixel *);
48200     void vec_stl (vector signed char, int, vector signed char *);
48201     void vec_stl (vector signed char, int, signed char *);
48202     void vec_stl (vector unsigned char, int, vector unsigned char *);
48203     void vec_stl (vector unsigned char, int, unsigned char *);
48204     void vec_stl (vector bool char, int, vector bool char *);
48205     void vec_stl (vector bool char, int, unsigned char *);
48206     void vec_stl (vector bool char, int, signed char *);
48207
48208     void vec_stvebx (vector signed char, int, signed char *);
48209     void vec_stvebx (vector unsigned char, int, unsigned char *);
48210     void vec_stvebx (vector bool char, int, signed char *);
48211     void vec_stvebx (vector bool char, int, unsigned char *);
48212
48213     void vec_stvehx (vector signed short, int, short *);
48214     void vec_stvehx (vector unsigned short, int, unsigned short *);
48215     void vec_stvehx (vector bool short, int, short *);
48216     void vec_stvehx (vector bool short, int, unsigned short *);
48217
48218     void vec_stvewx (vector float, int, float *);
48219     void vec_stvewx (vector signed int, int, int *);
48220     void vec_stvewx (vector unsigned int, int, unsigned int *);
48221     void vec_stvewx (vector bool int, int, int *);
48222     void vec_stvewx (vector bool int, int, unsigned int *);
48223
48224     vector signed char vec_sub (vector bool char, vector signed char);
48225     vector signed char vec_sub (vector signed char, vector bool char);
48226     vector signed char vec_sub (vector signed char, vector signed char);
48227     vector unsigned char vec_sub (vector bool char, vector unsigned char);
48228     vector unsigned char vec_sub (vector unsigned char, vector bool char);
48229     vector unsigned char vec_sub (vector unsigned char, vector unsigned char);
48230     vector signed short vec_sub (vector bool short, vector signed short);
48231     vector signed short vec_sub (vector signed short, vector bool short);
48232     vector signed short vec_sub (vector signed short, vector signed short);
48233     vector unsigned short vec_sub (vector bool short, vector unsigned short);
48234     vector unsigned short vec_sub (vector unsigned short, vector bool short);
48235     vector unsigned short vec_sub (vector unsigned short, vector unsigned short);
48236     vector signed int vec_sub (vector bool int, vector signed int);
48237     vector signed int vec_sub (vector signed int, vector bool int);
48238     vector signed int vec_sub (vector signed int, vector signed int);
48239     vector unsigned int vec_sub (vector bool int, vector unsigned int);
48240     vector unsigned int vec_sub (vector unsigned int, vector bool int);
48241     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
48242     vector float vec_sub (vector float, vector float);
48243
48244     vector signed int vec_subc (vector signed int, vector signed int);
48245     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
48246
48247     vector signed int vec_sube (vector signed int, vector signed int,
48248                                 vector signed int);
48249     vector unsigned int vec_sube (vector unsigned int, vector unsigned int,
48250                                   vector unsigned int);
48251
48252     vector signed int vec_subec (vector signed int, vector signed int,
48253                                  vector signed int);
48254     vector unsigned int vec_subec (vector unsigned int, vector unsigned int,
48255                                    vector unsigned int);
48256
48257     vector unsigned char vec_subs (vector bool char, vector unsigned char);
48258     vector unsigned char vec_subs (vector unsigned char, vector bool char);
48259     vector unsigned char vec_subs (vector unsigned char, vector unsigned char);
48260     vector signed char vec_subs (vector bool char, vector signed char);
48261     vector signed char vec_subs (vector signed char, vector bool char);
48262     vector signed char vec_subs (vector signed char, vector signed char);
48263     vector unsigned short vec_subs (vector bool short, vector unsigned short);
48264     vector unsigned short vec_subs (vector unsigned short, vector bool short);
48265     vector unsigned short vec_subs (vector unsigned short, vector unsigned short);
48266     vector signed short vec_subs (vector bool short, vector signed short);
48267     vector signed short vec_subs (vector signed short, vector bool short);
48268     vector signed short vec_subs (vector signed short, vector signed short);
48269     vector unsigned int vec_subs (vector bool int, vector unsigned int);
48270     vector unsigned int vec_subs (vector unsigned int, vector bool int);
48271     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
48272     vector signed int vec_subs (vector bool int, vector signed int);
48273     vector signed int vec_subs (vector signed int, vector bool int);
48274     vector signed int vec_subs (vector signed int, vector signed int);
48275
48276     vector signed int vec_sum2s (vector signed int, vector signed int);
48277
48278     vector unsigned int vec_sum4s (vector unsigned char, vector unsigned int);
48279     vector signed int vec_sum4s (vector signed char, vector signed int);
48280     vector signed int vec_sum4s (vector signed short, vector signed int);
48281
48282     vector signed int vec_sums (vector signed int, vector signed int);
48283
48284     vector float vec_trunc (vector float);
48285
48286     vector signed short vec_unpackh (vector signed char);
48287     vector bool short vec_unpackh (vector bool char);
48288     vector signed int vec_unpackh (vector signed short);
48289     vector bool int vec_unpackh (vector bool short);
48290     vector unsigned int vec_unpackh (vector pixel);
48291
48292     vector signed short vec_unpackl (vector signed char);
48293     vector bool short vec_unpackl (vector bool char);
48294     vector unsigned int vec_unpackl (vector pixel);
48295     vector signed int vec_unpackl (vector signed short);
48296     vector bool int vec_unpackl (vector bool short);
48297
48298     vector float vec_vaddfp (vector float, vector float);
48299
48300     vector signed char vec_vaddsbs (vector bool char, vector signed char);
48301     vector signed char vec_vaddsbs (vector signed char, vector bool char);
48302     vector signed char vec_vaddsbs (vector signed char, vector signed char);
48303
48304     vector signed short vec_vaddshs (vector bool short, vector signed short);
48305     vector signed short vec_vaddshs (vector signed short, vector bool short);
48306     vector signed short vec_vaddshs (vector signed short, vector signed short);
48307
48308     vector signed int vec_vaddsws (vector bool int, vector signed int);
48309     vector signed int vec_vaddsws (vector signed int, vector bool int);
48310     vector signed int vec_vaddsws (vector signed int, vector signed int);
48311
48312     vector signed char vec_vaddubm (vector bool char, vector signed char);
48313     vector signed char vec_vaddubm (vector signed char, vector bool char);
48314     vector signed char vec_vaddubm (vector signed char, vector signed char);
48315     vector unsigned char vec_vaddubm (vector bool char, vector unsigned char);
48316     vector unsigned char vec_vaddubm (vector unsigned char, vector bool char);
48317     vector unsigned char vec_vaddubm (vector unsigned char, vector unsigned char);
48318
48319     vector unsigned char vec_vaddubs (vector bool char, vector unsigned char);
48320     vector unsigned char vec_vaddubs (vector unsigned char, vector bool char);
48321     vector unsigned char vec_vaddubs (vector unsigned char, vector unsigned char);
48322
48323     vector signed short vec_vadduhm (vector bool short, vector signed short);
48324     vector signed short vec_vadduhm (vector signed short, vector bool short);
48325     vector signed short vec_vadduhm (vector signed short, vector signed short);
48326     vector unsigned short vec_vadduhm (vector bool short, vector unsigned short);
48327     vector unsigned short vec_vadduhm (vector unsigned short, vector bool short);
48328     vector unsigned short vec_vadduhm (vector unsigned short, vector unsigned short);
48329
48330     vector unsigned short vec_vadduhs (vector bool short, vector unsigned short);
48331     vector unsigned short vec_vadduhs (vector unsigned short, vector bool short);
48332     vector unsigned short vec_vadduhs (vector unsigned short, vector unsigned short);
48333
48334     vector signed int vec_vadduwm (vector bool int, vector signed int);
48335     vector signed int vec_vadduwm (vector signed int, vector bool int);
48336     vector signed int vec_vadduwm (vector signed int, vector signed int);
48337     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
48338     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
48339     vector unsigned int vec_vadduwm (vector unsigned int, vector unsigned int);
48340
48341     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
48342     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
48343     vector unsigned int vec_vadduws (vector unsigned int, vector unsigned int);
48344
48345     vector signed char vec_vavgsb (vector signed char, vector signed char);
48346
48347     vector signed short vec_vavgsh (vector signed short, vector signed short);
48348
48349     vector signed int vec_vavgsw (vector signed int, vector signed int);
48350
48351     vector unsigned char vec_vavgub (vector unsigned char, vector unsigned char);
48352
48353     vector unsigned short vec_vavguh (vector unsigned short, vector unsigned short);
48354
48355     vector unsigned int vec_vavguw (vector unsigned int, vector unsigned int);
48356
48357     vector float vec_vcfsx (vector signed int, const int);
48358
48359     vector float vec_vcfux (vector unsigned int, const int);
48360
48361     vector bool int vec_vcmpeqfp (vector float, vector float);
48362
48363     vector bool char vec_vcmpequb (vector signed char, vector signed char);
48364     vector bool char vec_vcmpequb (vector unsigned char, vector unsigned char);
48365
48366     vector bool short vec_vcmpequh (vector signed short, vector signed short);
48367     vector bool short vec_vcmpequh (vector unsigned short, vector unsigned short);
48368
48369     vector bool int vec_vcmpequw (vector signed int, vector signed int);
48370     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
48371
48372     vector bool int vec_vcmpgtfp (vector float, vector float);
48373
48374     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
48375
48376     vector bool short vec_vcmpgtsh (vector signed short, vector signed short);
48377
48378     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
48379
48380     vector bool char vec_vcmpgtub (vector unsigned char, vector unsigned char);
48381
48382     vector bool short vec_vcmpgtuh (vector unsigned short, vector unsigned short);
48383
48384     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
48385
48386     vector float vec_vmaxfp (vector float, vector float);
48387
48388     vector signed char vec_vmaxsb (vector bool char, vector signed char);
48389     vector signed char vec_vmaxsb (vector signed char, vector bool char);
48390     vector signed char vec_vmaxsb (vector signed char, vector signed char);
48391
48392     vector signed short vec_vmaxsh (vector bool short, vector signed short);
48393     vector signed short vec_vmaxsh (vector signed short, vector bool short);
48394     vector signed short vec_vmaxsh (vector signed short, vector signed short);
48395
48396     vector signed int vec_vmaxsw (vector bool int, vector signed int);
48397     vector signed int vec_vmaxsw (vector signed int, vector bool int);
48398     vector signed int vec_vmaxsw (vector signed int, vector signed int);
48399
48400     vector unsigned char vec_vmaxub (vector bool char, vector unsigned char);
48401     vector unsigned char vec_vmaxub (vector unsigned char, vector bool char);
48402     vector unsigned char vec_vmaxub (vector unsigned char, vector unsigned char);
48403
48404     vector unsigned short vec_vmaxuh (vector bool short, vector unsigned short);
48405     vector unsigned short vec_vmaxuh (vector unsigned short, vector bool short);
48406     vector unsigned short vec_vmaxuh (vector unsigned short, vector unsigned short);
48407
48408     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
48409     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
48410     vector unsigned int vec_vmaxuw (vector unsigned int, vector unsigned int);
48411
48412     vector float vec_vminfp (vector float, vector float);
48413
48414     vector signed char vec_vminsb (vector bool char, vector signed char);
48415     vector signed char vec_vminsb (vector signed char, vector bool char);
48416     vector signed char vec_vminsb (vector signed char, vector signed char);
48417
48418     vector signed short vec_vminsh (vector bool short, vector signed short);
48419     vector signed short vec_vminsh (vector signed short, vector bool short);
48420     vector signed short vec_vminsh (vector signed short, vector signed short);
48421
48422     vector signed int vec_vminsw (vector bool int, vector signed int);
48423     vector signed int vec_vminsw (vector signed int, vector bool int);
48424     vector signed int vec_vminsw (vector signed int, vector signed int);
48425
48426     vector unsigned char vec_vminub (vector bool char, vector unsigned char);
48427     vector unsigned char vec_vminub (vector unsigned char, vector bool char);
48428     vector unsigned char vec_vminub (vector unsigned char, vector unsigned char);
48429
48430     vector unsigned short vec_vminuh (vector bool short, vector unsigned short);
48431     vector unsigned short vec_vminuh (vector unsigned short, vector bool short);
48432     vector unsigned short vec_vminuh (vector unsigned short, vector unsigned short);
48433
48434     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
48435     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
48436     vector unsigned int vec_vminuw (vector unsigned int, vector unsigned int);
48437
48438     vector bool char vec_vmrghb (vector bool char, vector bool char);
48439     vector signed char vec_vmrghb (vector signed char, vector signed char);
48440     vector unsigned char vec_vmrghb (vector unsigned char, vector unsigned char);
48441
48442     vector bool short vec_vmrghh (vector bool short, vector bool short);
48443     vector signed short vec_vmrghh (vector signed short, vector signed short);
48444     vector unsigned short vec_vmrghh (vector unsigned short, vector unsigned short);
48445     vector pixel vec_vmrghh (vector pixel, vector pixel);
48446
48447     vector float vec_vmrghw (vector float, vector float);
48448     vector bool int vec_vmrghw (vector bool int, vector bool int);
48449     vector signed int vec_vmrghw (vector signed int, vector signed int);
48450     vector unsigned int vec_vmrghw (vector unsigned int, vector unsigned int);
48451
48452     vector bool char vec_vmrglb (vector bool char, vector bool char);
48453     vector signed char vec_vmrglb (vector signed char, vector signed char);
48454     vector unsigned char vec_vmrglb (vector unsigned char, vector unsigned char);
48455
48456     vector bool short vec_vmrglh (vector bool short, vector bool short);
48457     vector signed short vec_vmrglh (vector signed short, vector signed short);
48458     vector unsigned short vec_vmrglh (vector unsigned short, vector unsigned short);
48459     vector pixel vec_vmrglh (vector pixel, vector pixel);
48460
48461     vector float vec_vmrglw (vector float, vector float);
48462     vector signed int vec_vmrglw (vector signed int, vector signed int);
48463     vector unsigned int vec_vmrglw (vector unsigned int, vector unsigned int);
48464     vector bool int vec_vmrglw (vector bool int, vector bool int);
48465
48466     vector signed int vec_vmsummbm (vector signed char, vector unsigned char,
48467                                     vector signed int);
48468
48469     vector signed int vec_vmsumshm (vector signed short, vector signed short,
48470                                     vector signed int);
48471
48472     vector signed int vec_vmsumshs (vector signed short, vector signed short,
48473                                     vector signed int);
48474
48475     vector unsigned int vec_vmsumubm (vector unsigned char, vector unsigned char,
48476                                       vector unsigned int);
48477
48478     vector unsigned int vec_vmsumuhm (vector unsigned short, vector unsigned short,
48479                                       vector unsigned int);
48480
48481     vector unsigned int vec_vmsumuhs (vector unsigned short, vector unsigned short,
48482                                       vector unsigned int);
48483
48484     vector signed short vec_vmulesb (vector signed char, vector signed char);
48485
48486     vector signed int vec_vmulesh (vector signed short, vector signed short);
48487
48488     vector unsigned short vec_vmuleub (vector unsigned char, vector unsigned char);
48489
48490     vector unsigned int vec_vmuleuh (vector unsigned short, vector unsigned short);
48491
48492     vector signed short vec_vmulosb (vector signed char, vector signed char);
48493
48494     vector signed int vec_vmulosh (vector signed short, vector signed short);
48495
48496     vector unsigned short vec_vmuloub (vector unsigned char, vector unsigned char);
48497
48498     vector unsigned int vec_vmulouh (vector unsigned short, vector unsigned short);
48499
48500     vector signed char vec_vpkshss (vector signed short, vector signed short);
48501
48502     vector unsigned char vec_vpkshus (vector signed short, vector signed short);
48503
48504     vector signed short vec_vpkswss (vector signed int, vector signed int);
48505
48506     vector unsigned short vec_vpkswus (vector signed int, vector signed int);
48507
48508     vector bool char vec_vpkuhum (vector bool short, vector bool short);
48509     vector signed char vec_vpkuhum (vector signed short, vector signed short);
48510     vector unsigned char vec_vpkuhum (vector unsigned short, vector unsigned short);
48511
48512     vector unsigned char vec_vpkuhus (vector unsigned short, vector unsigned short);
48513
48514     vector bool short vec_vpkuwum (vector bool int, vector bool int);
48515     vector signed short vec_vpkuwum (vector signed int, vector signed int);
48516     vector unsigned short vec_vpkuwum (vector unsigned int, vector unsigned int);
48517
48518     vector unsigned short vec_vpkuwus (vector unsigned int, vector unsigned int);
48519
48520     vector signed char vec_vrlb (vector signed char, vector unsigned char);
48521     vector unsigned char vec_vrlb (vector unsigned char, vector unsigned char);
48522
48523     vector signed short vec_vrlh (vector signed short, vector unsigned short);
48524     vector unsigned short vec_vrlh (vector unsigned short, vector unsigned short);
48525
48526     vector signed int vec_vrlw (vector signed int, vector unsigned int);
48527     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
48528
48529     vector signed char vec_vslb (vector signed char, vector unsigned char);
48530     vector unsigned char vec_vslb (vector unsigned char, vector unsigned char);
48531
48532     vector signed short vec_vslh (vector signed short, vector unsigned short);
48533     vector unsigned short vec_vslh (vector unsigned short, vector unsigned short);
48534
48535     vector signed int vec_vslw (vector signed int, vector unsigned int);
48536     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
48537
48538     vector signed char vec_vspltb (vector signed char, const int);
48539     vector unsigned char vec_vspltb (vector unsigned char, const int);
48540     vector bool char vec_vspltb (vector bool char, const int);
48541
48542     vector bool short vec_vsplth (vector bool short, const int);
48543     vector signed short vec_vsplth (vector signed short, const int);
48544     vector unsigned short vec_vsplth (vector unsigned short, const int);
48545     vector pixel vec_vsplth (vector pixel, const int);
48546
48547     vector float vec_vspltw (vector float, const int);
48548     vector signed int vec_vspltw (vector signed int, const int);
48549     vector unsigned int vec_vspltw (vector unsigned int, const int);
48550     vector bool int vec_vspltw (vector bool int, const int);
48551
48552     vector signed char vec_vsrab (vector signed char, vector unsigned char);
48553     vector unsigned char vec_vsrab (vector unsigned char, vector unsigned char);
48554
48555     vector signed short vec_vsrah (vector signed short, vector unsigned short);
48556     vector unsigned short vec_vsrah (vector unsigned short, vector unsigned short);
48557
48558     vector signed int vec_vsraw (vector signed int, vector unsigned int);
48559     vector unsigned int vec_vsraw (vector unsigned int, vector unsigned int);
48560
48561     vector signed char vec_vsrb (vector signed char, vector unsigned char);
48562     vector unsigned char vec_vsrb (vector unsigned char, vector unsigned char);
48563
48564     vector signed short vec_vsrh (vector signed short, vector unsigned short);
48565     vector unsigned short vec_vsrh (vector unsigned short, vector unsigned short);
48566
48567     vector signed int vec_vsrw (vector signed int, vector unsigned int);
48568     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
48569
48570     vector float vec_vsubfp (vector float, vector float);
48571
48572     vector signed char vec_vsubsbs (vector bool char, vector signed char);
48573     vector signed char vec_vsubsbs (vector signed char, vector bool char);
48574     vector signed char vec_vsubsbs (vector signed char, vector signed char);
48575
48576     vector signed short vec_vsubshs (vector bool short, vector signed short);
48577     vector signed short vec_vsubshs (vector signed short, vector bool short);
48578     vector signed short vec_vsubshs (vector signed short, vector signed short);
48579
48580     vector signed int vec_vsubsws (vector bool int, vector signed int);
48581     vector signed int vec_vsubsws (vector signed int, vector bool int);
48582     vector signed int vec_vsubsws (vector signed int, vector signed int);
48583
48584     vector signed char vec_vsububm (vector bool char, vector signed char);
48585     vector signed char vec_vsububm (vector signed char, vector bool char);
48586     vector signed char vec_vsububm (vector signed char, vector signed char);
48587     vector unsigned char vec_vsububm (vector bool char, vector unsigned char);
48588     vector unsigned char vec_vsububm (vector unsigned char, vector bool char);
48589     vector unsigned char vec_vsububm (vector unsigned char, vector unsigned char);
48590
48591     vector unsigned char vec_vsububs (vector bool char, vector unsigned char);
48592     vector unsigned char vec_vsububs (vector unsigned char, vector bool char);
48593     vector unsigned char vec_vsububs (vector unsigned char, vector unsigned char);
48594
48595     vector signed short vec_vsubuhm (vector bool short, vector signed short);
48596     vector signed short vec_vsubuhm (vector signed short, vector bool short);
48597     vector signed short vec_vsubuhm (vector signed short, vector signed short);
48598     vector unsigned short vec_vsubuhm (vector bool short, vector unsigned short);
48599     vector unsigned short vec_vsubuhm (vector unsigned short, vector bool short);
48600     vector unsigned short vec_vsubuhm (vector unsigned short, vector unsigned short);
48601
48602     vector unsigned short vec_vsubuhs (vector bool short, vector unsigned short);
48603     vector unsigned short vec_vsubuhs (vector unsigned short, vector bool short);
48604     vector unsigned short vec_vsubuhs (vector unsigned short, vector unsigned short);
48605
48606     vector signed int vec_vsubuwm (vector bool int, vector signed int);
48607     vector signed int vec_vsubuwm (vector signed int, vector bool int);
48608     vector signed int vec_vsubuwm (vector signed int, vector signed int);
48609     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
48610     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
48611     vector unsigned int vec_vsubuwm (vector unsigned int, vector unsigned int);
48612
48613     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
48614     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
48615     vector unsigned int vec_vsubuws (vector unsigned int, vector unsigned int);
48616
48617     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
48618
48619     vector signed int vec_vsum4shs (vector signed short, vector signed int);
48620
48621     vector unsigned int vec_vsum4ubs (vector unsigned char, vector unsigned int);
48622
48623     vector unsigned int vec_vupkhpx (vector pixel);
48624
48625     vector bool short vec_vupkhsb (vector bool char);
48626     vector signed short vec_vupkhsb (vector signed char);
48627
48628     vector bool int vec_vupkhsh (vector bool short);
48629     vector signed int vec_vupkhsh (vector signed short);
48630
48631     vector unsigned int vec_vupklpx (vector pixel);
48632
48633     vector bool short vec_vupklsb (vector bool char);
48634     vector signed short vec_vupklsb (vector signed char);
48635
48636     vector bool int vec_vupklsh (vector bool short);
48637     vector signed int vec_vupklsh (vector signed short);
48638
48639     vector float vec_xor (vector float, vector float);
48640     vector float vec_xor (vector float, vector bool int);
48641     vector float vec_xor (vector bool int, vector float);
48642     vector bool int vec_xor (vector bool int, vector bool int);
48643     vector signed int vec_xor (vector bool int, vector signed int);
48644     vector signed int vec_xor (vector signed int, vector bool int);
48645     vector signed int vec_xor (vector signed int, vector signed int);
48646     vector unsigned int vec_xor (vector bool int, vector unsigned int);
48647     vector unsigned int vec_xor (vector unsigned int, vector bool int);
48648     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
48649     vector bool short vec_xor (vector bool short, vector bool short);
48650     vector signed short vec_xor (vector bool short, vector signed short);
48651     vector signed short vec_xor (vector signed short, vector bool short);
48652     vector signed short vec_xor (vector signed short, vector signed short);
48653     vector unsigned short vec_xor (vector bool short, vector unsigned short);
48654     vector unsigned short vec_xor (vector unsigned short, vector bool short);
48655     vector unsigned short vec_xor (vector unsigned short, vector unsigned short);
48656     vector signed char vec_xor (vector bool char, vector signed char);
48657     vector bool char vec_xor (vector bool char, vector bool char);
48658     vector signed char vec_xor (vector signed char, vector bool char);
48659     vector signed char vec_xor (vector signed char, vector signed char);
48660     vector unsigned char vec_xor (vector bool char, vector unsigned char);
48661     vector unsigned char vec_xor (vector unsigned char, vector bool char);
48662     vector unsigned char vec_xor (vector unsigned char, vector unsigned char);
48663
48664
48665File: 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
48666
486676.60.23.2 PowerPC AltiVec Built-in Functions Available on ISA 2.06
48668..................................................................
48669
48670The AltiVec built-in functions described in this section are available
48671on the PowerPC family of processors starting with ISA 2.06 or later.
48672These are normally enabled by adding '-mvsx' to the command line.
48673
48674 When '-mvsx' is used, the following additional vector types are
48675implemented.
48676
48677     vector unsigned __int128
48678     vector signed __int128
48679     vector unsigned long long int
48680     vector signed long long int
48681     vector double
48682
48683 The long long types are only implemented for 64-bit code generation.
48684
48685
48686     vector bool long long vec_and (vector bool long long int, vector bool long long);
48687
48688     vector double vec_ctf (vector unsigned long, const int);
48689     vector double vec_ctf (vector signed long, const int);
48690
48691     vector signed long vec_cts (vector double, const int);
48692
48693     vector unsigned long vec_ctu (vector double, const int);
48694
48695     void vec_dst (const unsigned long *, int, const int);
48696     void vec_dst (const long *, int, const int);
48697
48698     void vec_dststt (const unsigned long *, int, const int);
48699     void vec_dststt (const long *, int, const int);
48700
48701     void vec_dstt (const unsigned long *, int, const int);
48702     void vec_dstt (const long *, int, const int);
48703
48704     vector unsigned char vec_lvsl (int, const unsigned long *);
48705     vector unsigned char vec_lvsl (int, const long *);
48706
48707     vector unsigned char vec_lvsr (int, const unsigned long *);
48708     vector unsigned char vec_lvsr (int, const long *);
48709
48710     vector double vec_mul (vector double, vector double);
48711     vector long vec_mul (vector long, vector long);
48712     vector unsigned long vec_mul (vector unsigned long, vector unsigned long);
48713
48714     vector unsigned long long vec_mule (vector unsigned int, vector unsigned int);
48715     vector signed long long vec_mule (vector signed int, vector signed int);
48716
48717     vector unsigned long long vec_mulo (vector unsigned int, vector unsigned int);
48718     vector signed long long vec_mulo (vector signed int, vector signed int);
48719
48720     vector double vec_nabs (vector double);
48721
48722     vector bool long long vec_reve (vector bool long long);
48723     vector signed long long vec_reve (vector signed long long);
48724     vector unsigned long long vec_reve (vector unsigned long long);
48725     vector double vec_sld (vector double, vector double, const int);
48726
48727     vector bool long long int vec_sld (vector bool long long int,
48728                                        vector bool long long int, const int);
48729     vector long long int vec_sld (vector long long int, vector  long long int, const int);
48730     vector unsigned long long int vec_sld (vector unsigned long long int,
48731                                            vector unsigned long long int, const int);
48732
48733     vector long long int vec_sll (vector long long int, vector unsigned char);
48734     vector unsigned long long int vec_sll (vector unsigned long long int,
48735                                            vector unsigned char);
48736
48737     vector signed long long vec_slo (vector signed long long, vector signed char);
48738     vector signed long long vec_slo (vector signed long long, vector unsigned char);
48739     vector unsigned long long vec_slo (vector unsigned long long, vector signed char);
48740     vector unsigned long long vec_slo (vector unsigned long long, vector unsigned char);
48741
48742     vector signed long vec_splat (vector signed long, const int);
48743     vector unsigned long vec_splat (vector unsigned long, const int);
48744
48745     vector long long int vec_srl (vector long long int, vector unsigned char);
48746     vector unsigned long long int vec_srl (vector unsigned long long int,
48747                                            vector unsigned char);
48748
48749     vector long long int vec_sro (vector long long int, vector char);
48750     vector long long int vec_sro (vector long long int, vector unsigned char);
48751     vector unsigned long long int vec_sro (vector unsigned long long int, vector char);
48752     vector unsigned long long int vec_sro (vector unsigned long long int,
48753                                            vector unsigned char);
48754
48755     vector signed __int128 vec_subc (vector signed __int128, vector signed __int128);
48756     vector unsigned __int128 vec_subc (vector unsigned __int128, vector unsigned __int128);
48757
48758     vector signed __int128 vec_sube (vector signed __int128, vector signed __int128,
48759                                      vector signed __int128);
48760     vector unsigned __int128 vec_sube (vector unsigned __int128, vector unsigned __int128,
48761                                        vector unsigned __int128);
48762
48763     vector signed __int128 vec_subec (vector signed __int128, vector signed __int128,
48764                                       vector signed __int128);
48765     vector unsigned __int128 vec_subec (vector unsigned __int128, vector unsigned __int128,
48766                                         vector unsigned __int128);
48767
48768     vector double vec_unpackh (vector float);
48769
48770     vector double vec_unpackl (vector float);
48771
48772     vector double vec_doublee (vector float);
48773     vector double vec_doublee (vector signed int);
48774     vector double vec_doublee (vector unsigned int);
48775
48776     vector double vec_doubleo (vector float);
48777     vector double vec_doubleo (vector signed int);
48778     vector double vec_doubleo (vector unsigned int);
48779
48780     vector double vec_doubleh (vector float);
48781     vector double vec_doubleh (vector signed int);
48782     vector double vec_doubleh (vector unsigned int);
48783
48784     vector double vec_doublel (vector float);
48785     vector double vec_doublel (vector signed int);
48786     vector double vec_doublel (vector unsigned int);
48787
48788     vector float vec_float (vector signed int);
48789     vector float vec_float (vector unsigned int);
48790
48791     vector float vec_float2 (vector signed long long, vector signed long long);
48792     vector float vec_float2 (vector unsigned long long, vector signed long long);
48793
48794     vector float vec_floate (vector double);
48795     vector float vec_floate (vector signed long long);
48796     vector float vec_floate (vector unsigned long long);
48797
48798     vector float vec_floato (vector double);
48799     vector float vec_floato (vector signed long long);
48800     vector float vec_floato (vector unsigned long long);
48801
48802     vector signed long long vec_signed (vector double);
48803     vector signed int vec_signed (vector float);
48804
48805     vector signed int vec_signede (vector double);
48806
48807     vector signed int vec_signedo (vector double);
48808
48809     vector signed char vec_sldw (vector signed char, vector signed char, const int);
48810     vector unsigned char vec_sldw (vector unsigned char, vector unsigned char, const int);
48811     vector signed short vec_sldw (vector signed short, vector signed short, const int);
48812     vector unsigned short vec_sldw (vector unsigned short,
48813                                     vector unsigned short, const int);
48814     vector signed int vec_sldw (vector signed int, vector signed int, const int);
48815     vector unsigned int vec_sldw (vector unsigned int, vector unsigned int, const int);
48816     vector signed long long vec_sldw (vector signed long long,
48817                                       vector signed long long, const int);
48818     vector unsigned long long vec_sldw (vector unsigned long long,
48819                                         vector unsigned long long, const int);
48820
48821     vector signed long long vec_unsigned (vector double);
48822     vector signed int vec_unsigned (vector float);
48823
48824     vector signed int vec_unsignede (vector double);
48825
48826     vector signed int vec_unsignedo (vector double);
48827
48828     vector double vec_abs (vector double);
48829     vector double vec_add (vector double, vector double);
48830     vector double vec_and (vector double, vector double);
48831     vector double vec_and (vector double, vector bool long);
48832     vector double vec_and (vector bool long, vector double);
48833     vector long vec_and (vector long, vector long);
48834     vector long vec_and (vector long, vector bool long);
48835     vector long vec_and (vector bool long, vector long);
48836     vector unsigned long vec_and (vector unsigned long, vector unsigned long);
48837     vector unsigned long vec_and (vector unsigned long, vector bool long);
48838     vector unsigned long vec_and (vector bool long, vector unsigned long);
48839     vector double vec_andc (vector double, vector double);
48840     vector double vec_andc (vector double, vector bool long);
48841     vector double vec_andc (vector bool long, vector double);
48842     vector long vec_andc (vector long, vector long);
48843     vector long vec_andc (vector long, vector bool long);
48844     vector long vec_andc (vector bool long, vector long);
48845     vector unsigned long vec_andc (vector unsigned long, vector unsigned long);
48846     vector unsigned long vec_andc (vector unsigned long, vector bool long);
48847     vector unsigned long vec_andc (vector bool long, vector unsigned long);
48848     vector double vec_ceil (vector double);
48849     vector bool long vec_cmpeq (vector double, vector double);
48850     vector bool long vec_cmpge (vector double, vector double);
48851     vector bool long vec_cmpgt (vector double, vector double);
48852     vector bool long vec_cmple (vector double, vector double);
48853     vector bool long vec_cmplt (vector double, vector double);
48854     vector double vec_cpsgn (vector double, vector double);
48855     vector float vec_div (vector float, vector float);
48856     vector double vec_div (vector double, vector double);
48857     vector long vec_div (vector long, vector long);
48858     vector unsigned long vec_div (vector unsigned long, vector unsigned long);
48859     vector double vec_floor (vector double);
48860     vector signed long long vec_ld (int, const vector signed long long *);
48861     vector signed long long vec_ld (int, const signed long long *);
48862     vector unsigned long long vec_ld (int, const vector unsigned long long *);
48863     vector unsigned long long vec_ld (int, const unsigned long long *);
48864     vector __int128 vec_ld (int, const vector __int128 *);
48865     vector unsigned __int128 vec_ld (int, const vector unsigned __int128 *);
48866     vector __int128 vec_ld (int, const __int128 *);
48867     vector unsigned __int128 vec_ld (int, const unsigned __int128 *);
48868     vector double vec_ld (int, const vector double *);
48869     vector double vec_ld (int, const double *);
48870     vector double vec_ldl (int, const vector double *);
48871     vector double vec_ldl (int, const double *);
48872     vector unsigned char vec_lvsl (int, const double *);
48873     vector unsigned char vec_lvsr (int, const double *);
48874     vector double vec_madd (vector double, vector double, vector double);
48875     vector double vec_max (vector double, vector double);
48876     vector signed long vec_mergeh (vector signed long, vector signed long);
48877     vector signed long vec_mergeh (vector signed long, vector bool long);
48878     vector signed long vec_mergeh (vector bool long, vector signed long);
48879     vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long);
48880     vector unsigned long vec_mergeh (vector unsigned long, vector bool long);
48881     vector unsigned long vec_mergeh (vector bool long, vector unsigned long);
48882     vector signed long vec_mergel (vector signed long, vector signed long);
48883     vector signed long vec_mergel (vector signed long, vector bool long);
48884     vector signed long vec_mergel (vector bool long, vector signed long);
48885     vector unsigned long vec_mergel (vector unsigned long, vector unsigned long);
48886     vector unsigned long vec_mergel (vector unsigned long, vector bool long);
48887     vector unsigned long vec_mergel (vector bool long, vector unsigned long);
48888     vector double vec_min (vector double, vector double);
48889     vector float vec_msub (vector float, vector float, vector float);
48890     vector double vec_msub (vector double, vector double, vector double);
48891     vector float vec_nearbyint (vector float);
48892     vector double vec_nearbyint (vector double);
48893     vector float vec_nmadd (vector float, vector float, vector float);
48894     vector double vec_nmadd (vector double, vector double, vector double);
48895     vector double vec_nmsub (vector double, vector double, vector double);
48896     vector double vec_nor (vector double, vector double);
48897     vector long vec_nor (vector long, vector long);
48898     vector long vec_nor (vector long, vector bool long);
48899     vector long vec_nor (vector bool long, vector long);
48900     vector unsigned long vec_nor (vector unsigned long, vector unsigned long);
48901     vector unsigned long vec_nor (vector unsigned long, vector bool long);
48902     vector unsigned long vec_nor (vector bool long, vector unsigned long);
48903     vector double vec_or (vector double, vector double);
48904     vector double vec_or (vector double, vector bool long);
48905     vector double vec_or (vector bool long, vector double);
48906     vector long vec_or (vector long, vector long);
48907     vector long vec_or (vector long, vector bool long);
48908     vector long vec_or (vector bool long, vector long);
48909     vector unsigned long vec_or (vector unsigned long, vector unsigned long);
48910     vector unsigned long vec_or (vector unsigned long, vector bool long);
48911     vector unsigned long vec_or (vector bool long, vector unsigned long);
48912     vector double vec_perm (vector double, vector double, vector unsigned char);
48913     vector long vec_perm (vector long, vector long, vector unsigned char);
48914     vector unsigned long vec_perm (vector unsigned long, vector unsigned long,
48915                                    vector unsigned char);
48916     vector bool char vec_permxor (vector bool char, vector bool char,
48917                                   vector bool char);
48918     vector unsigned char vec_permxor (vector signed char, vector signed char,
48919                                       vector signed char);
48920     vector unsigned char vec_permxor (vector unsigned char, vector unsigned char,
48921                                       vector unsigned char);
48922     vector double vec_rint (vector double);
48923     vector double vec_recip (vector double, vector double);
48924     vector double vec_rsqrt (vector double);
48925     vector double vec_rsqrte (vector double);
48926     vector double vec_sel (vector double, vector double, vector bool long);
48927     vector double vec_sel (vector double, vector double, vector unsigned long);
48928     vector long vec_sel (vector long, vector long, vector long);
48929     vector long vec_sel (vector long, vector long, vector unsigned long);
48930     vector long vec_sel (vector long, vector long, vector bool long);
48931     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
48932                                   vector long);
48933     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
48934                                   vector unsigned long);
48935     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
48936                                   vector bool long);
48937     vector double vec_splats (double);
48938     vector signed long vec_splats (signed long);
48939     vector unsigned long vec_splats (unsigned long);
48940     vector float vec_sqrt (vector float);
48941     vector double vec_sqrt (vector double);
48942     void vec_st (vector signed long long, int, vector signed long long *);
48943     void vec_st (vector signed long long, int, signed long long *);
48944     void vec_st (vector unsigned long long, int, vector unsigned long long *);
48945     void vec_st (vector unsigned long long, int, unsigned long long *);
48946     void vec_st (vector bool long long, int, vector bool long long *);
48947     void vec_st (vector bool long long, int, signed long long *);
48948     void vec_st (vector bool long long, int, unsigned long long *);
48949     void vec_st (vector double, int, vector double *);
48950     void vec_st (vector double, int, double *);
48951     vector double vec_sub (vector double, vector double);
48952     vector double vec_trunc (vector double);
48953     vector double vec_xl (int, vector double *);
48954     vector double vec_xl (int, double *);
48955     vector long long vec_xl (int, vector long long *);
48956     vector long long vec_xl (int, long long *);
48957     vector unsigned long long vec_xl (int, vector unsigned long long *);
48958     vector unsigned long long vec_xl (int, unsigned long long *);
48959     vector float vec_xl (int, vector float *);
48960     vector float vec_xl (int, float *);
48961     vector int vec_xl (int, vector int *);
48962     vector int vec_xl (int, int *);
48963     vector unsigned int vec_xl (int, vector unsigned int *);
48964     vector unsigned int vec_xl (int, unsigned int *);
48965     vector double vec_xor (vector double, vector double);
48966     vector double vec_xor (vector double, vector bool long);
48967     vector double vec_xor (vector bool long, vector double);
48968     vector long vec_xor (vector long, vector long);
48969     vector long vec_xor (vector long, vector bool long);
48970     vector long vec_xor (vector bool long, vector long);
48971     vector unsigned long vec_xor (vector unsigned long, vector unsigned long);
48972     vector unsigned long vec_xor (vector unsigned long, vector bool long);
48973     vector unsigned long vec_xor (vector bool long, vector unsigned long);
48974     void vec_xst (vector double, int, vector double *);
48975     void vec_xst (vector double, int, double *);
48976     void vec_xst (vector long long, int, vector long long *);
48977     void vec_xst (vector long long, int, long long *);
48978     void vec_xst (vector unsigned long long, int, vector unsigned long long *);
48979     void vec_xst (vector unsigned long long, int, unsigned long long *);
48980     void vec_xst (vector float, int, vector float *);
48981     void vec_xst (vector float, int, float *);
48982     void vec_xst (vector int, int, vector int *);
48983     void vec_xst (vector int, int, int *);
48984     void vec_xst (vector unsigned int, int, vector unsigned int *);
48985     void vec_xst (vector unsigned int, int, unsigned int *);
48986     int vec_all_eq (vector double, vector double);
48987     int vec_all_ge (vector double, vector double);
48988     int vec_all_gt (vector double, vector double);
48989     int vec_all_le (vector double, vector double);
48990     int vec_all_lt (vector double, vector double);
48991     int vec_all_nan (vector double);
48992     int vec_all_ne (vector double, vector double);
48993     int vec_all_nge (vector double, vector double);
48994     int vec_all_ngt (vector double, vector double);
48995     int vec_all_nle (vector double, vector double);
48996     int vec_all_nlt (vector double, vector double);
48997     int vec_all_numeric (vector double);
48998     int vec_any_eq (vector double, vector double);
48999     int vec_any_ge (vector double, vector double);
49000     int vec_any_gt (vector double, vector double);
49001     int vec_any_le (vector double, vector double);
49002     int vec_any_lt (vector double, vector double);
49003     int vec_any_nan (vector double);
49004     int vec_any_ne (vector double, vector double);
49005     int vec_any_nge (vector double, vector double);
49006     int vec_any_ngt (vector double, vector double);
49007     int vec_any_nle (vector double, vector double);
49008     int vec_any_nlt (vector double, vector double);
49009     int vec_any_numeric (vector double);
49010
49011     vector double vec_vsx_ld (int, const vector double *);
49012     vector double vec_vsx_ld (int, const double *);
49013     vector float vec_vsx_ld (int, const vector float *);
49014     vector float vec_vsx_ld (int, const float *);
49015     vector bool int vec_vsx_ld (int, const vector bool int *);
49016     vector signed int vec_vsx_ld (int, const vector signed int *);
49017     vector signed int vec_vsx_ld (int, const int *);
49018     vector signed int vec_vsx_ld (int, const long *);
49019     vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
49020     vector unsigned int vec_vsx_ld (int, const unsigned int *);
49021     vector unsigned int vec_vsx_ld (int, const unsigned long *);
49022     vector bool short vec_vsx_ld (int, const vector bool short *);
49023     vector pixel vec_vsx_ld (int, const vector pixel *);
49024     vector signed short vec_vsx_ld (int, const vector signed short *);
49025     vector signed short vec_vsx_ld (int, const short *);
49026     vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
49027     vector unsigned short vec_vsx_ld (int, const unsigned short *);
49028     vector bool char vec_vsx_ld (int, const vector bool char *);
49029     vector signed char vec_vsx_ld (int, const vector signed char *);
49030     vector signed char vec_vsx_ld (int, const signed char *);
49031     vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
49032     vector unsigned char vec_vsx_ld (int, const unsigned char *);
49033
49034     void vec_vsx_st (vector double, int, vector double *);
49035     void vec_vsx_st (vector double, int, double *);
49036     void vec_vsx_st (vector float, int, vector float *);
49037     void vec_vsx_st (vector float, int, float *);
49038     void vec_vsx_st (vector signed int, int, vector signed int *);
49039     void vec_vsx_st (vector signed int, int, int *);
49040     void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
49041     void vec_vsx_st (vector unsigned int, int, unsigned int *);
49042     void vec_vsx_st (vector bool int, int, vector bool int *);
49043     void vec_vsx_st (vector bool int, int, unsigned int *);
49044     void vec_vsx_st (vector bool int, int, int *);
49045     void vec_vsx_st (vector signed short, int, vector signed short *);
49046     void vec_vsx_st (vector signed short, int, short *);
49047     void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
49048     void vec_vsx_st (vector unsigned short, int, unsigned short *);
49049     void vec_vsx_st (vector bool short, int, vector bool short *);
49050     void vec_vsx_st (vector bool short, int, unsigned short *);
49051     void vec_vsx_st (vector pixel, int, vector pixel *);
49052     void vec_vsx_st (vector pixel, int, unsigned short *);
49053     void vec_vsx_st (vector pixel, int, short *);
49054     void vec_vsx_st (vector bool short, int, short *);
49055     void vec_vsx_st (vector signed char, int, vector signed char *);
49056     void vec_vsx_st (vector signed char, int, signed char *);
49057     void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
49058     void vec_vsx_st (vector unsigned char, int, unsigned char *);
49059     void vec_vsx_st (vector bool char, int, vector bool char *);
49060     void vec_vsx_st (vector bool char, int, unsigned char *);
49061     void vec_vsx_st (vector bool char, int, signed char *);
49062
49063     vector double vec_xxpermdi (vector double, vector double, const int);
49064     vector float vec_xxpermdi (vector float, vector float, const int);
49065     vector long long vec_xxpermdi (vector long long, vector long long, const int);
49066     vector unsigned long long vec_xxpermdi (vector unsigned long long,
49067                                             vector unsigned long long, const int);
49068     vector int vec_xxpermdi (vector int, vector int, const int);
49069     vector unsigned int vec_xxpermdi (vector unsigned int,
49070                                       vector unsigned int, const int);
49071     vector short vec_xxpermdi (vector short, vector short, const int);
49072     vector unsigned short vec_xxpermdi (vector unsigned short,
49073                                         vector unsigned short, const int);
49074     vector signed char vec_xxpermdi (vector signed char, vector signed char,
49075                                      const int);
49076     vector unsigned char vec_xxpermdi (vector unsigned char,
49077                                        vector unsigned char, const int);
49078
49079     vector double vec_xxsldi (vector double, vector double, int);
49080     vector float vec_xxsldi (vector float, vector float, int);
49081     vector long long vec_xxsldi (vector long long, vector long long, int);
49082     vector unsigned long long vec_xxsldi (vector unsigned long long,
49083                                           vector unsigned long long, int);
49084     vector int vec_xxsldi (vector int, vector int, int);
49085     vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
49086     vector short vec_xxsldi (vector short, vector short, int);
49087     vector unsigned short vec_xxsldi (vector unsigned short,
49088                                       vector unsigned short, int);
49089     vector signed char vec_xxsldi (vector signed char, vector signed char, int);
49090     vector unsigned char vec_xxsldi (vector unsigned char,
49091                                      vector unsigned char, int);
49092
49093 Note that the 'vec_ld' and 'vec_st' built-in functions always generate
49094the AltiVec 'LVX' and 'STVX' instructions even if the VSX instruction
49095set is available.  The 'vec_vsx_ld' and 'vec_vsx_st' built-in functions
49096always generate the VSX 'LXVD2X', 'LXVW4X', 'STXVD2X', and 'STXVW4X'
49097instructions.
49098
49099
49100File: 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
49101
491026.60.23.3 PowerPC AltiVec Built-in Functions Available on ISA 2.07
49103..................................................................
49104
49105If the ISA 2.07 additions to the vector/scalar (power8-vector)
49106instruction set are available, the following additional functions are
49107available for both 32-bit and 64-bit targets.  For 64-bit targets, you
49108can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG
49109instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of
49110VECTOR UNSIGNED LONG LONG.
49111
49112     vector signed char vec_neg (vector signed char);
49113     vector signed short vec_neg (vector signed short);
49114     vector signed int vec_neg (vector signed int);
49115     vector signed long long vec_neg (vector signed long long);
49116     vector float  char vec_neg (vector float);
49117     vector double vec_neg (vector double);
49118
49119     vector signed int vec_signed2 (vector double, vector double);
49120
49121     vector signed int vec_unsigned2 (vector double, vector double);
49122
49123     vector long long vec_abs (vector long long);
49124
49125     vector long long vec_add (vector long long, vector long long);
49126     vector unsigned long long vec_add (vector unsigned long long,
49127                                        vector unsigned long long);
49128
49129     int vec_all_eq (vector long long, vector long long);
49130     int vec_all_eq (vector unsigned long long, vector unsigned long long);
49131     int vec_all_ge (vector long long, vector long long);
49132     int vec_all_ge (vector unsigned long long, vector unsigned long long);
49133     int vec_all_gt (vector long long, vector long long);
49134     int vec_all_gt (vector unsigned long long, vector unsigned long long);
49135     int vec_all_le (vector long long, vector long long);
49136     int vec_all_le (vector unsigned long long, vector unsigned long long);
49137     int vec_all_lt (vector long long, vector long long);
49138     int vec_all_lt (vector unsigned long long, vector unsigned long long);
49139     int vec_all_ne (vector long long, vector long long);
49140     int vec_all_ne (vector unsigned long long, vector unsigned long long);
49141
49142     int vec_any_eq (vector long long, vector long long);
49143     int vec_any_eq (vector unsigned long long, vector unsigned long long);
49144     int vec_any_ge (vector long long, vector long long);
49145     int vec_any_ge (vector unsigned long long, vector unsigned long long);
49146     int vec_any_gt (vector long long, vector long long);
49147     int vec_any_gt (vector unsigned long long, vector unsigned long long);
49148     int vec_any_le (vector long long, vector long long);
49149     int vec_any_le (vector unsigned long long, vector unsigned long long);
49150     int vec_any_lt (vector long long, vector long long);
49151     int vec_any_lt (vector unsigned long long, vector unsigned long long);
49152     int vec_any_ne (vector long long, vector long long);
49153     int vec_any_ne (vector unsigned long long, vector unsigned long long);
49154
49155     vector bool long long vec_cmpeq (vector bool long long, vector bool long long);
49156
49157     vector long long vec_eqv (vector long long, vector long long);
49158     vector long long vec_eqv (vector bool long long, vector long long);
49159     vector long long vec_eqv (vector long long, vector bool long long);
49160     vector unsigned long long vec_eqv (vector unsigned long long, vector unsigned long long);
49161     vector unsigned long long vec_eqv (vector bool long long, vector unsigned long long);
49162     vector unsigned long long vec_eqv (vector unsigned long long,
49163                                        vector bool long long);
49164     vector int vec_eqv (vector int, vector int);
49165     vector int vec_eqv (vector bool int, vector int);
49166     vector int vec_eqv (vector int, vector bool int);
49167     vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
49168     vector unsigned int vec_eqv (vector bool unsigned int, vector unsigned int);
49169     vector unsigned int vec_eqv (vector unsigned int, vector bool unsigned int);
49170     vector short vec_eqv (vector short, vector short);
49171     vector short vec_eqv (vector bool short, vector short);
49172     vector short vec_eqv (vector short, vector bool short);
49173     vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
49174     vector unsigned short vec_eqv (vector bool unsigned short, vector unsigned short);
49175     vector unsigned short vec_eqv (vector unsigned short, vector bool unsigned short);
49176     vector signed char vec_eqv (vector signed char, vector signed char);
49177     vector signed char vec_eqv (vector bool signed char, vector signed char);
49178     vector signed char vec_eqv (vector signed char, vector bool signed char);
49179     vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
49180     vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
49181     vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
49182
49183     vector long long vec_max (vector long long, vector long long);
49184     vector unsigned long long vec_max (vector unsigned long long,
49185                                        vector unsigned long long);
49186
49187     vector signed int vec_mergee (vector signed int, vector signed int);
49188     vector unsigned int vec_mergee (vector unsigned int, vector unsigned int);
49189     vector bool int vec_mergee (vector bool int, vector bool int);
49190
49191     vector signed int vec_mergeo (vector signed int, vector signed int);
49192     vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int);
49193     vector bool int vec_mergeo (vector bool int, vector bool int);
49194
49195     vector long long vec_min (vector long long, vector long long);
49196     vector unsigned long long vec_min (vector unsigned long long,
49197                                        vector unsigned long long);
49198
49199     vector signed long long vec_nabs (vector signed long long);
49200
49201     vector long long vec_nand (vector long long, vector long long);
49202     vector long long vec_nand (vector bool long long, vector long long);
49203     vector long long vec_nand (vector long long, vector bool long long);
49204     vector unsigned long long vec_nand (vector unsigned long long,
49205                                         vector unsigned long long);
49206     vector unsigned long long vec_nand (vector bool long long, vector unsigned long long);
49207     vector unsigned long long vec_nand (vector unsigned long long, vector bool long long);
49208     vector int vec_nand (vector int, vector int);
49209     vector int vec_nand (vector bool int, vector int);
49210     vector int vec_nand (vector int, vector bool int);
49211     vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
49212     vector unsigned int vec_nand (vector bool unsigned int, vector unsigned int);
49213     vector unsigned int vec_nand (vector unsigned int, vector bool unsigned int);
49214     vector short vec_nand (vector short, vector short);
49215     vector short vec_nand (vector bool short, vector short);
49216     vector short vec_nand (vector short, vector bool short);
49217     vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
49218     vector unsigned short vec_nand (vector bool unsigned short, vector unsigned short);
49219     vector unsigned short vec_nand (vector unsigned short, vector bool unsigned short);
49220     vector signed char vec_nand (vector signed char, vector signed char);
49221     vector signed char vec_nand (vector bool signed char, vector signed char);
49222     vector signed char vec_nand (vector signed char, vector bool signed char);
49223     vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
49224     vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
49225     vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
49226
49227     vector long long vec_orc (vector long long, vector long long);
49228     vector long long vec_orc (vector bool long long, vector long long);
49229     vector long long vec_orc (vector long long, vector bool long long);
49230     vector unsigned long long vec_orc (vector unsigned long long,
49231                                        vector unsigned long long);
49232     vector unsigned long long vec_orc (vector bool long long, vector unsigned long long);
49233     vector unsigned long long vec_orc (vector unsigned long long, vector bool long long);
49234     vector int vec_orc (vector int, vector int);
49235     vector int vec_orc (vector bool int, vector int);
49236     vector int vec_orc (vector int, vector bool int);
49237     vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
49238     vector unsigned int vec_orc (vector bool unsigned int, vector unsigned int);
49239     vector unsigned int vec_orc (vector unsigned int, vector bool unsigned int);
49240     vector short vec_orc (vector short, vector short);
49241     vector short vec_orc (vector bool short, vector short);
49242     vector short vec_orc (vector short, vector bool short);
49243     vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
49244     vector unsigned short vec_orc (vector bool unsigned short, vector unsigned short);
49245     vector unsigned short vec_orc (vector unsigned short, vector bool unsigned short);
49246     vector signed char vec_orc (vector signed char, vector signed char);
49247     vector signed char vec_orc (vector bool signed char, vector signed char);
49248     vector signed char vec_orc (vector signed char, vector bool signed char);
49249     vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
49250     vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
49251     vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
49252
49253     vector int vec_pack (vector long long, vector long long);
49254     vector unsigned int vec_pack (vector unsigned long long, vector unsigned long long);
49255     vector bool int vec_pack (vector bool long long, vector bool long long);
49256     vector float vec_pack (vector double, vector double);
49257
49258     vector int vec_packs (vector long long, vector long long);
49259     vector unsigned int vec_packs (vector unsigned long long, vector unsigned long long);
49260
49261     vector unsigned char vec_packsu (vector signed short, vector signed short)
49262     vector unsigned char vec_packsu (vector unsigned short, vector unsigned short)
49263     vector unsigned short int vec_packsu (vector signed int, vector signed int);
49264     vector unsigned short int vec_packsu (vector unsigned int, vector unsigned int);
49265     vector unsigned int vec_packsu (vector long long, vector long long);
49266     vector unsigned int vec_packsu (vector unsigned long long, vector unsigned long long);
49267     vector unsigned int vec_packsu (vector signed long long, vector signed long long);
49268
49269     vector unsigned char vec_popcnt (vector signed char);
49270     vector unsigned char vec_popcnt (vector unsigned char);
49271     vector unsigned short vec_popcnt (vector signed short);
49272     vector unsigned short vec_popcnt (vector unsigned short);
49273     vector unsigned int vec_popcnt (vector signed int);
49274     vector unsigned int vec_popcnt (vector unsigned int);
49275     vector unsigned long long vec_popcnt (vector signed long long);
49276     vector unsigned long long vec_popcnt (vector unsigned long long);
49277
49278     vector long long vec_rl (vector long long, vector unsigned long long);
49279     vector long long vec_rl (vector unsigned long long, vector unsigned long long);
49280
49281     vector long long vec_sl (vector long long, vector unsigned long long);
49282     vector long long vec_sl (vector unsigned long long, vector unsigned long long);
49283
49284     vector long long vec_sr (vector long long, vector unsigned long long);
49285     vector unsigned long long char vec_sr (vector unsigned long long,
49286                                            vector unsigned long long);
49287
49288     vector long long vec_sra (vector long long, vector unsigned long long);
49289     vector unsigned long long vec_sra (vector unsigned long long,
49290                                        vector unsigned long long);
49291
49292     vector long long vec_sub (vector long long, vector long long);
49293     vector unsigned long long vec_sub (vector unsigned long long,
49294                                        vector unsigned long long);
49295
49296     vector long long vec_unpackh (vector int);
49297     vector unsigned long long vec_unpackh (vector unsigned int);
49298
49299     vector long long vec_unpackl (vector int);
49300     vector unsigned long long vec_unpackl (vector unsigned int);
49301
49302     vector long long vec_vaddudm (vector long long, vector long long);
49303     vector long long vec_vaddudm (vector bool long long, vector long long);
49304     vector long long vec_vaddudm (vector long long, vector bool long long);
49305     vector unsigned long long vec_vaddudm (vector unsigned long long,
49306                                            vector unsigned long long);
49307     vector unsigned long long vec_vaddudm (vector bool unsigned long long,
49308                                            vector unsigned long long);
49309     vector unsigned long long vec_vaddudm (vector unsigned long long,
49310                                            vector bool unsigned long long);
49311
49312     vector long long vec_vbpermq (vector signed char, vector signed char);
49313     vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
49314
49315     vector unsigned char vec_bperm (vector unsigned char, vector unsigned char);
49316     vector unsigned char vec_bperm (vector unsigned long long, vector unsigned char);
49317     vector unsigned long long vec_bperm (vector unsigned __int128, vector unsigned char);
49318
49319     vector long long vec_cntlz (vector long long);
49320     vector unsigned long long vec_cntlz (vector unsigned long long);
49321     vector int vec_cntlz (vector int);
49322     vector unsigned int vec_cntlz (vector int);
49323     vector short vec_cntlz (vector short);
49324     vector unsigned short vec_cntlz (vector unsigned short);
49325     vector signed char vec_cntlz (vector signed char);
49326     vector unsigned char vec_cntlz (vector unsigned char);
49327
49328     vector long long vec_vclz (vector long long);
49329     vector unsigned long long vec_vclz (vector unsigned long long);
49330     vector int vec_vclz (vector int);
49331     vector unsigned int vec_vclz (vector int);
49332     vector short vec_vclz (vector short);
49333     vector unsigned short vec_vclz (vector unsigned short);
49334     vector signed char vec_vclz (vector signed char);
49335     vector unsigned char vec_vclz (vector unsigned char);
49336
49337     vector signed char vec_vclzb (vector signed char);
49338     vector unsigned char vec_vclzb (vector unsigned char);
49339
49340     vector long long vec_vclzd (vector long long);
49341     vector unsigned long long vec_vclzd (vector unsigned long long);
49342
49343     vector short vec_vclzh (vector short);
49344     vector unsigned short vec_vclzh (vector unsigned short);
49345
49346     vector int vec_vclzw (vector int);
49347     vector unsigned int vec_vclzw (vector int);
49348
49349     vector signed char vec_vgbbd (vector signed char);
49350     vector unsigned char vec_vgbbd (vector unsigned char);
49351
49352     vector long long vec_vmaxsd (vector long long, vector long long);
49353
49354     vector unsigned long long vec_vmaxud (vector unsigned long long,
49355                                           unsigned vector long long);
49356
49357     vector long long vec_vminsd (vector long long, vector long long);
49358
49359     vector unsigned long long vec_vminud (vector long long, vector long long);
49360
49361     vector int vec_vpksdss (vector long long, vector long long);
49362     vector unsigned int vec_vpksdss (vector long long, vector long long);
49363
49364     vector unsigned int vec_vpkudus (vector unsigned long long,
49365                                      vector unsigned long long);
49366
49367     vector int vec_vpkudum (vector long long, vector long long);
49368     vector unsigned int vec_vpkudum (vector unsigned long long,
49369                                      vector unsigned long long);
49370     vector bool int vec_vpkudum (vector bool long long, vector bool long long);
49371
49372     vector long long vec_vpopcnt (vector long long);
49373     vector unsigned long long vec_vpopcnt (vector unsigned long long);
49374     vector int vec_vpopcnt (vector int);
49375     vector unsigned int vec_vpopcnt (vector int);
49376     vector short vec_vpopcnt (vector short);
49377     vector unsigned short vec_vpopcnt (vector unsigned short);
49378     vector signed char vec_vpopcnt (vector signed char);
49379     vector unsigned char vec_vpopcnt (vector unsigned char);
49380
49381     vector signed char vec_vpopcntb (vector signed char);
49382     vector unsigned char vec_vpopcntb (vector unsigned char);
49383
49384     vector long long vec_vpopcntd (vector long long);
49385     vector unsigned long long vec_vpopcntd (vector unsigned long long);
49386
49387     vector short vec_vpopcnth (vector short);
49388     vector unsigned short vec_vpopcnth (vector unsigned short);
49389
49390     vector int vec_vpopcntw (vector int);
49391     vector unsigned int vec_vpopcntw (vector int);
49392
49393     vector long long vec_vrld (vector long long, vector unsigned long long);
49394     vector unsigned long long vec_vrld (vector unsigned long long,
49395                                         vector unsigned long long);
49396
49397     vector long long vec_vsld (vector long long, vector unsigned long long);
49398     vector long long vec_vsld (vector unsigned long long,
49399                                vector unsigned long long);
49400
49401     vector long long vec_vsrad (vector long long, vector unsigned long long);
49402     vector unsigned long long vec_vsrad (vector unsigned long long,
49403                                          vector unsigned long long);
49404
49405     vector long long vec_vsrd (vector long long, vector unsigned long long);
49406     vector unsigned long long char vec_vsrd (vector unsigned long long,
49407                                              vector unsigned long long);
49408
49409     vector long long vec_vsubudm (vector long long, vector long long);
49410     vector long long vec_vsubudm (vector bool long long, vector long long);
49411     vector long long vec_vsubudm (vector long long, vector bool long long);
49412     vector unsigned long long vec_vsubudm (vector unsigned long long,
49413                                            vector unsigned long long);
49414     vector unsigned long long vec_vsubudm (vector bool long long,
49415                                            vector unsigned long long);
49416     vector unsigned long long vec_vsubudm (vector unsigned long long,
49417                                            vector bool long long);
49418
49419     vector long long vec_vupkhsw (vector int);
49420     vector unsigned long long vec_vupkhsw (vector unsigned int);
49421
49422     vector long long vec_vupklsw (vector int);
49423     vector unsigned long long vec_vupklsw (vector int);
49424
49425 If the ISA 2.07 additions to the vector/scalar (power8-vector)
49426instruction set are available, the following additional functions are
49427available for 64-bit targets.  New vector types (VECTOR __INT128 and
49428VECTOR __UINT128) are available to hold the __INT128 and __UINT128 types
49429to use these builtins.
49430
49431 The normal vector extract, and set operations work on VECTOR __INT128
49432and VECTOR __UINT128 types, but the index value must be 0.
49433
49434     vector __int128 vec_vaddcuq (vector __int128, vector __int128);
49435     vector __uint128 vec_vaddcuq (vector __uint128, vector __uint128);
49436
49437     vector __int128 vec_vadduqm (vector __int128, vector __int128);
49438     vector __uint128 vec_vadduqm (vector __uint128, vector __uint128);
49439
49440     vector __int128 vec_vaddecuq (vector __int128, vector __int128,
49441                                     vector __int128);
49442     vector __uint128 vec_vaddecuq (vector __uint128, vector __uint128,
49443                                      vector __uint128);
49444
49445     vector __int128 vec_vaddeuqm (vector __int128, vector __int128,
49446                                     vector __int128);
49447     vector __uint128 vec_vaddeuqm (vector __uint128, vector __uint128,
49448                                      vector __uint128);
49449
49450     vector __int128 vec_vsubecuq (vector __int128, vector __int128,
49451                                     vector __int128);
49452     vector __uint128 vec_vsubecuq (vector __uint128, vector __uint128,
49453                                      vector __uint128);
49454
49455     vector __int128 vec_vsubeuqm (vector __int128, vector __int128,
49456                                     vector __int128);
49457     vector __uint128 vec_vsubeuqm (vector __uint128, vector __uint128,
49458                                      vector __uint128);
49459
49460     vector __int128 vec_vsubcuq (vector __int128, vector __int128);
49461     vector __uint128 vec_vsubcuq (vector __uint128, vector __uint128);
49462
49463     __int128 vec_vsubuqm (__int128, __int128);
49464     __uint128 vec_vsubuqm (__uint128, __uint128);
49465
49466     vector __int128 __builtin_bcdadd (vector __int128, vector __int128, const int);
49467     int __builtin_bcdadd_lt (vector __int128, vector __int128, const int);
49468     int __builtin_bcdadd_eq (vector __int128, vector __int128, const int);
49469     int __builtin_bcdadd_gt (vector __int128, vector __int128, const int);
49470     int __builtin_bcdadd_ov (vector __int128, vector __int128, const int);
49471     vector __int128 __builtin_bcdsub (vector __int128, vector __int128, const int);
49472     int __builtin_bcdsub_lt (vector __int128, vector __int128, const int);
49473     int __builtin_bcdsub_eq (vector __int128, vector __int128, const int);
49474     int __builtin_bcdsub_gt (vector __int128, vector __int128, const int);
49475     int __builtin_bcdsub_ov (vector __int128, vector __int128, const int);
49476
49477
49478File: 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
49479
494806.60.23.4 PowerPC AltiVec Built-in Functions Available on ISA 3.0
49481.................................................................
49482
49483The following additional built-in functions are also available for the
49484PowerPC family of processors, starting with ISA 3.0 ('-mcpu=power9') or
49485later:
49486     unsigned int scalar_extract_exp (double source);
49487     unsigned long long int scalar_extract_exp (__ieee128 source);
49488
49489     unsigned long long int scalar_extract_sig (double source);
49490     unsigned __int128 scalar_extract_sig (__ieee128 source);
49491
49492     double scalar_insert_exp (unsigned long long int significand,
49493                               unsigned long long int exponent);
49494     double scalar_insert_exp (double significand, unsigned long long int exponent);
49495
49496     ieee_128 scalar_insert_exp (unsigned __int128 significand,
49497                                 unsigned long long int exponent);
49498     ieee_128 scalar_insert_exp (ieee_128 significand, unsigned long long int exponent);
49499
49500     int scalar_cmp_exp_gt (double arg1, double arg2);
49501     int scalar_cmp_exp_lt (double arg1, double arg2);
49502     int scalar_cmp_exp_eq (double arg1, double arg2);
49503     int scalar_cmp_exp_unordered (double arg1, double arg2);
49504
49505     bool scalar_test_data_class (float source, const int condition);
49506     bool scalar_test_data_class (double source, const int condition);
49507     bool scalar_test_data_class (__ieee128 source, const int condition);
49508
49509     bool scalar_test_neg (float source);
49510     bool scalar_test_neg (double source);
49511     bool scalar_test_neg (__ieee128 source);
49512
49513     vector _uint128_t vec_msum (vector unsigned long long,
49514     			    vector unsigned long long,
49515     			    vector _uint128_t);
49516     vector _int128_t vec_msum (vector signed long long,
49517     			   vector signed long long,
49518     			   vector _int128_t);
49519
49520 The 'scalar_extract_exp' and 'scalar_extract_sig' functions require a
4952164-bit environment supporting ISA 3.0 or later.  The
49522'scalar_extract_exp' and 'scalar_extract_sig' built-in functions return
49523the significand and the biased exponent value respectively of their
49524'source' arguments.  When supplied with a 64-bit 'source' argument, the
49525result returned by 'scalar_extract_sig' has the '0x0010000000000000' bit
49526set if the function's 'source' argument is in normalized form.
49527Otherwise, this bit is set to 0.  When supplied with a 128-bit 'source'
49528argument, the '0x00010000000000000000000000000000' bit of the result is
49529treated similarly.  Note that the sign of the significand is not
49530represented in the result returned from the 'scalar_extract_sig'
49531function.  Use the 'scalar_test_neg' function to test the sign of its
49532'double' argument.  The 'vec_msum' functions perform a vector
49533multiply-sum, returning the result of arg1*arg2+arg3.  ISA 3.0 adds
49534support for vec_msum returning a vector int128 result.
49535
49536 The 'scalar_insert_exp' functions require a 64-bit environment
49537supporting ISA 3.0 or later.  When supplied with a 64-bit first
49538argument, the 'scalar_insert_exp' built-in function returns a
49539double-precision floating point value that is constructed by assembling
49540the values of its 'significand' and 'exponent' arguments.  The sign of
49541the result is copied from the most significant bit of the 'significand'
49542argument.  The significand and exponent components of the result are
49543composed of the least significant 11 bits of the 'exponent' argument and
49544the least significant 52 bits of the 'significand' argument
49545respectively.
49546
49547 When supplied with a 128-bit first argument, the 'scalar_insert_exp'
49548built-in function returns a quad-precision ieee floating point value.
49549The sign bit of the result is copied from the most significant bit of
49550the 'significand' argument.  The significand and exponent components of
49551the result are composed of the least significant 15 bits of the
49552'exponent' argument and the least significant 112 bits of the
49553'significand' argument respectively.
49554
49555 The 'scalar_cmp_exp_gt', 'scalar_cmp_exp_lt', 'scalar_cmp_exp_eq', and
49556'scalar_cmp_exp_unordered' built-in functions return a non-zero value if
49557'arg1' is greater than, less than, equal to, or not comparable to 'arg2'
49558respectively.  The arguments are not comparable if one or the other
49559equals NaN (not a number).
49560
49561 The 'scalar_test_data_class' built-in function returns 1 if any of the
49562condition tests enabled by the value of the 'condition' variable are
49563true, and 0 otherwise.  The 'condition' argument must be a compile-time
49564constant integer with value not exceeding 127.  The 'condition' argument
49565is encoded as a bitmask with each bit enabling the testing of a
49566different condition, as characterized by the following:
49567     0x40    Test for NaN
49568     0x20    Test for +Infinity
49569     0x10    Test for -Infinity
49570     0x08    Test for +Zero
49571     0x04    Test for -Zero
49572     0x02    Test for +Denormal
49573     0x01    Test for -Denormal
49574
49575 The 'scalar_test_neg' built-in function returns 1 if its 'source'
49576argument holds a negative value, 0 otherwise.
49577
49578 The following built-in functions are also available for the PowerPC
49579family of processors, starting with ISA 3.0 or later ('-mcpu=power9').
49580These string functions are described separately in order to group the
49581descriptions closer to the function prototypes:
49582     int vec_all_nez (vector signed char, vector signed char);
49583     int vec_all_nez (vector unsigned char, vector unsigned char);
49584     int vec_all_nez (vector signed short, vector signed short);
49585     int vec_all_nez (vector unsigned short, vector unsigned short);
49586     int vec_all_nez (vector signed int, vector signed int);
49587     int vec_all_nez (vector unsigned int, vector unsigned int);
49588
49589     int vec_any_eqz (vector signed char, vector signed char);
49590     int vec_any_eqz (vector unsigned char, vector unsigned char);
49591     int vec_any_eqz (vector signed short, vector signed short);
49592     int vec_any_eqz (vector unsigned short, vector unsigned short);
49593     int vec_any_eqz (vector signed int, vector signed int);
49594     int vec_any_eqz (vector unsigned int, vector unsigned int);
49595
49596     vector bool char vec_cmpnez (vector signed char arg1, vector signed char arg2);
49597     vector bool char vec_cmpnez (vector unsigned char arg1, vector unsigned char arg2);
49598     vector bool short vec_cmpnez (vector signed short arg1, vector signed short arg2);
49599     vector bool short vec_cmpnez (vector unsigned short arg1, vector unsigned short arg2);
49600     vector bool int vec_cmpnez (vector signed int arg1, vector signed int arg2);
49601     vector bool int vec_cmpnez (vector unsigned int, vector unsigned int);
49602
49603     vector signed char vec_cnttz (vector signed char);
49604     vector unsigned char vec_cnttz (vector unsigned char);
49605     vector signed short vec_cnttz (vector signed short);
49606     vector unsigned short vec_cnttz (vector unsigned short);
49607     vector signed int vec_cnttz (vector signed int);
49608     vector unsigned int vec_cnttz (vector unsigned int);
49609     vector signed long long vec_cnttz (vector signed long long);
49610     vector unsigned long long vec_cnttz (vector unsigned long long);
49611
49612     signed int vec_cntlz_lsbb (vector signed char);
49613     signed int vec_cntlz_lsbb (vector unsigned char);
49614
49615     signed int vec_cnttz_lsbb (vector signed char);
49616     signed int vec_cnttz_lsbb (vector unsigned char);
49617
49618     unsigned int vec_first_match_index (vector signed char, vector signed char);
49619     unsigned int vec_first_match_index (vector unsigned char, vector unsigned char);
49620     unsigned int vec_first_match_index (vector signed int, vector signed int);
49621     unsigned int vec_first_match_index (vector unsigned int, vector unsigned int);
49622     unsigned int vec_first_match_index (vector signed short, vector signed short);
49623     unsigned int vec_first_match_index (vector unsigned short, vector unsigned short);
49624     unsigned int vec_first_match_or_eos_index (vector signed char, vector signed char);
49625     unsigned int vec_first_match_or_eos_index (vector unsigned char, vector unsigned char);
49626     unsigned int vec_first_match_or_eos_index (vector signed int, vector signed int);
49627     unsigned int vec_first_match_or_eos_index (vector unsigned int, vector unsigned int);
49628     unsigned int vec_first_match_or_eos_index (vector signed short, vector signed short);
49629     unsigned int vec_first_match_or_eos_index (vector unsigned short,
49630                                                vector unsigned short);
49631     unsigned int vec_first_mismatch_index (vector signed char, vector signed char);
49632     unsigned int vec_first_mismatch_index (vector unsigned char, vector unsigned char);
49633     unsigned int vec_first_mismatch_index (vector signed int, vector signed int);
49634     unsigned int vec_first_mismatch_index (vector unsigned int, vector unsigned int);
49635     unsigned int vec_first_mismatch_index (vector signed short, vector signed short);
49636     unsigned int vec_first_mismatch_index (vector unsigned short, vector unsigned short);
49637     unsigned int vec_first_mismatch_or_eos_index (vector signed char, vector signed char);
49638     unsigned int vec_first_mismatch_or_eos_index (vector unsigned char,
49639                                                   vector unsigned char);
49640     unsigned int vec_first_mismatch_or_eos_index (vector signed int, vector signed int);
49641     unsigned int vec_first_mismatch_or_eos_index (vector unsigned int, vector unsigned int);
49642     unsigned int vec_first_mismatch_or_eos_index (vector signed short, vector signed short);
49643     unsigned int vec_first_mismatch_or_eos_index (vector unsigned short,
49644                                                   vector unsigned short);
49645
49646     vector unsigned short vec_pack_to_short_fp32 (vector float, vector float);
49647
49648     vector signed char vec_xl_be (signed long long, signed char *);
49649     vector unsigned char vec_xl_be (signed long long, unsigned char *);
49650     vector signed int vec_xl_be (signed long long, signed int *);
49651     vector unsigned int vec_xl_be (signed long long, unsigned int *);
49652     vector signed __int128 vec_xl_be (signed long long, signed __int128 *);
49653     vector unsigned __int128 vec_xl_be (signed long long, unsigned __int128 *);
49654     vector signed long long vec_xl_be (signed long long, signed long long *);
49655     vector unsigned long long vec_xl_be (signed long long, unsigned long long *);
49656     vector signed short vec_xl_be (signed long long, signed short *);
49657     vector unsigned short vec_xl_be (signed long long, unsigned short *);
49658     vector double vec_xl_be (signed long long, double *);
49659     vector float vec_xl_be (signed long long, float *);
49660
49661     vector signed char vec_xl_len (signed char *addr, size_t len);
49662     vector unsigned char vec_xl_len (unsigned char *addr, size_t len);
49663     vector signed int vec_xl_len (signed int *addr, size_t len);
49664     vector unsigned int vec_xl_len (unsigned int *addr, size_t len);
49665     vector signed __int128 vec_xl_len (signed __int128 *addr, size_t len);
49666     vector unsigned __int128 vec_xl_len (unsigned __int128 *addr, size_t len);
49667     vector signed long long vec_xl_len (signed long long *addr, size_t len);
49668     vector unsigned long long vec_xl_len (unsigned long long *addr, size_t len);
49669     vector signed short vec_xl_len (signed short *addr, size_t len);
49670     vector unsigned short vec_xl_len (unsigned short *addr, size_t len);
49671     vector double vec_xl_len (double *addr, size_t len);
49672     vector float vec_xl_len (float *addr, size_t len);
49673
49674     vector unsigned char vec_xl_len_r (unsigned char *addr, size_t len);
49675
49676     void vec_xst_len (vector signed char data, signed char *addr, size_t len);
49677     void vec_xst_len (vector unsigned char data, unsigned char *addr, size_t len);
49678     void vec_xst_len (vector signed int data, signed int *addr, size_t len);
49679     void vec_xst_len (vector unsigned int data, unsigned int *addr, size_t len);
49680     void vec_xst_len (vector unsigned __int128 data, unsigned __int128 *addr, size_t len);
49681     void vec_xst_len (vector signed long long data, signed long long *addr, size_t len);
49682     void vec_xst_len (vector unsigned long long data, unsigned long long *addr, size_t len);
49683     void vec_xst_len (vector signed short data, signed short *addr, size_t len);
49684     void vec_xst_len (vector unsigned short data, unsigned short *addr, size_t len);
49685     void vec_xst_len (vector signed __int128 data, signed __int128 *addr, size_t len);
49686     void vec_xst_len (vector double data, double *addr, size_t len);
49687     void vec_xst_len (vector float data, float *addr, size_t len);
49688
49689     void vec_xst_len_r (vector unsigned char data, unsigned char *addr, size_t len);
49690
49691     signed char vec_xlx (unsigned int index, vector signed char data);
49692     unsigned char vec_xlx (unsigned int index, vector unsigned char data);
49693     signed short vec_xlx (unsigned int index, vector signed short data);
49694     unsigned short vec_xlx (unsigned int index, vector unsigned short data);
49695     signed int vec_xlx (unsigned int index, vector signed int data);
49696     unsigned int vec_xlx (unsigned int index, vector unsigned int data);
49697     float vec_xlx (unsigned int index, vector float data);
49698
49699     signed char vec_xrx (unsigned int index, vector signed char data);
49700     unsigned char vec_xrx (unsigned int index, vector unsigned char data);
49701     signed short vec_xrx (unsigned int index, vector signed short data);
49702     unsigned short vec_xrx (unsigned int index, vector unsigned short data);
49703     signed int vec_xrx (unsigned int index, vector signed int data);
49704     unsigned int vec_xrx (unsigned int index, vector unsigned int data);
49705     float vec_xrx (unsigned int index, vector float data);
49706
49707 The 'vec_all_nez', 'vec_any_eqz', and 'vec_cmpnez' perform pairwise
49708comparisons between the elements at the same positions within their two
49709vector arguments.  The 'vec_all_nez' function returns a non-zero value
49710if and only if all pairwise comparisons are not equal and no element of
49711either vector argument contains a zero.  The 'vec_any_eqz' function
49712returns a non-zero value if and only if at least one pairwise comparison
49713is equal or if at least one element of either vector argument contains a
49714zero.  The 'vec_cmpnez' function returns a vector of the same type as
49715its two arguments, within which each element consists of all ones to
49716denote that either the corresponding elements of the incoming arguments
49717are not equal or that at least one of the corresponding elements
49718contains zero.  Otherwise, the element of the returned vector contains
49719all zeros.
49720
49721 The 'vec_cntlz_lsbb' function returns the count of the number of
49722consecutive leading byte elements (starting from position 0 within the
49723supplied vector argument) for which the least-significant bit equals
49724zero.  The 'vec_cnttz_lsbb' function returns the count of the number of
49725consecutive trailing byte elements (starting from position 15 and
49726counting backwards within the supplied vector argument) for which the
49727least-significant bit equals zero.
49728
49729 The 'vec_xl_len' and 'vec_xst_len' functions require a 64-bit
49730environment supporting ISA 3.0 or later.  The 'vec_xl_len' function
49731loads a variable length vector from memory.  The 'vec_xst_len' function
49732stores a variable length vector to memory.  With both the 'vec_xl_len'
49733and 'vec_xst_len' functions, the 'addr' argument represents the memory
49734address to or from which data will be transferred, and the 'len'
49735argument represents the number of bytes to be transferred, as computed
49736by the C expression 'min((len & 0xff), 16)'.  If this expression's value
49737is not a multiple of the vector element's size, the behavior of this
49738function is undefined.  In the case that the underlying computer is
49739configured to run in big-endian mode, the data transfer moves bytes 0 to
49740'(len - 1)' of the corresponding vector.  In little-endian mode, the
49741data transfer moves bytes '(16 - len)' to '15' of the corresponding
49742vector.  For the load function, any bytes of the result vector that are
49743not loaded from memory are set to zero.  The value of the 'addr'
49744argument need not be aligned on a multiple of the vector's element size.
49745
49746 The 'vec_xlx' and 'vec_xrx' functions extract the single element
49747selected by the 'index' argument from the vector represented by the
49748'data' argument.  The 'index' argument always specifies a byte offset,
49749regardless of the size of the vector element.  With 'vec_xlx', 'index'
49750is the offset of the first byte of the element to be extracted.  With
49751'vec_xrx', 'index' represents the last byte of the element to be
49752extracted, measured from the right end of the vector.  In other words,
49753the last byte of the element to be extracted is found at position '(15 -
49754index)'.  There is no requirement that 'index' be a multiple of the
49755vector element size.  However, if the size of the vector element added
49756to 'index' is greater than 15, the content of the returned value is
49757undefined.
49758
49759 If the ISA 3.0 instruction set additions ('-mcpu=power9') are
49760available:
49761
49762     vector unsigned long long vec_bperm (vector unsigned long long, vector unsigned char);
49763
49764     vector bool char vec_cmpne (vector bool char, vector bool char);
49765     vector bool char vec_cmpne (vector signed char, vector signed char);
49766     vector bool char vec_cmpne (vector unsigned char, vector unsigned char);
49767     vector bool int vec_cmpne (vector bool int, vector bool int);
49768     vector bool int vec_cmpne (vector signed int, vector signed int);
49769     vector bool int vec_cmpne (vector unsigned int, vector unsigned int);
49770     vector bool long long vec_cmpne (vector bool long long, vector bool long long);
49771     vector bool long long vec_cmpne (vector signed long long, vector signed long long);
49772     vector bool long long vec_cmpne (vector unsigned long long, vector unsigned long long);
49773     vector bool short vec_cmpne (vector bool short, vector bool short);
49774     vector bool short vec_cmpne (vector signed short, vector signed short);
49775     vector bool short vec_cmpne (vector unsigned short, vector unsigned short);
49776     vector bool long long vec_cmpne (vector double, vector double);
49777     vector bool int vec_cmpne (vector float, vector float);
49778
49779     vector float vec_extract_fp32_from_shorth (vector unsigned short);
49780     vector float vec_extract_fp32_from_shortl (vector unsigned short);
49781
49782     vector long long vec_vctz (vector long long);
49783     vector unsigned long long vec_vctz (vector unsigned long long);
49784     vector int vec_vctz (vector int);
49785     vector unsigned int vec_vctz (vector int);
49786     vector short vec_vctz (vector short);
49787     vector unsigned short vec_vctz (vector unsigned short);
49788     vector signed char vec_vctz (vector signed char);
49789     vector unsigned char vec_vctz (vector unsigned char);
49790
49791     vector signed char vec_vctzb (vector signed char);
49792     vector unsigned char vec_vctzb (vector unsigned char);
49793
49794     vector long long vec_vctzd (vector long long);
49795     vector unsigned long long vec_vctzd (vector unsigned long long);
49796
49797     vector short vec_vctzh (vector short);
49798     vector unsigned short vec_vctzh (vector unsigned short);
49799
49800     vector int vec_vctzw (vector int);
49801     vector unsigned int vec_vctzw (vector int);
49802
49803     vector unsigned long long vec_extract4b (vector unsigned char, const int);
49804
49805     vector unsigned char vec_insert4b (vector signed int, vector unsigned char,
49806                                        const int);
49807     vector unsigned char vec_insert4b (vector unsigned int, vector unsigned char,
49808                                        const int);
49809
49810     vector unsigned int vec_parity_lsbb (vector signed int);
49811     vector unsigned int vec_parity_lsbb (vector unsigned int);
49812     vector unsigned __int128 vec_parity_lsbb (vector signed __int128);
49813     vector unsigned __int128 vec_parity_lsbb (vector unsigned __int128);
49814     vector unsigned long long vec_parity_lsbb (vector signed long long);
49815     vector unsigned long long vec_parity_lsbb (vector unsigned long long);
49816
49817     vector int vec_vprtyb (vector int);
49818     vector unsigned int vec_vprtyb (vector unsigned int);
49819     vector long long vec_vprtyb (vector long long);
49820     vector unsigned long long vec_vprtyb (vector unsigned long long);
49821
49822     vector int vec_vprtybw (vector int);
49823     vector unsigned int vec_vprtybw (vector unsigned int);
49824
49825     vector long long vec_vprtybd (vector long long);
49826     vector unsigned long long vec_vprtybd (vector unsigned long long);
49827
49828 On 64-bit targets, if the ISA 3.0 additions ('-mcpu=power9') are
49829available:
49830
49831     vector long vec_vprtyb (vector long);
49832     vector unsigned long vec_vprtyb (vector unsigned long);
49833     vector __int128 vec_vprtyb (vector __int128);
49834     vector __uint128 vec_vprtyb (vector __uint128);
49835
49836     vector long vec_vprtybd (vector long);
49837     vector unsigned long vec_vprtybd (vector unsigned long);
49838
49839     vector __int128 vec_vprtybq (vector __int128);
49840     vector __uint128 vec_vprtybd (vector __uint128);
49841
49842 The following built-in vector functions are available for the PowerPC
49843family of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
49844     __vector unsigned char
49845     vec_slv (__vector unsigned char src, __vector unsigned char shift_distance);
49846     __vector unsigned char
49847     vec_srv (__vector unsigned char src, __vector unsigned char shift_distance);
49848
49849 The 'vec_slv' and 'vec_srv' functions operate on all of the bytes of
49850their 'src' and 'shift_distance' arguments in parallel.  The behavior of
49851the 'vec_slv' is as if there existed a temporary array of 17 unsigned
49852characters 'slv_array' within which elements 0 through 15 are the same
49853as the entries in the 'src' array and element 16 equals 0.  The result
49854returned from the 'vec_slv' function is a '__vector' of 16 unsigned
49855characters within which element 'i' is computed using the C expression
49856'0xff & (*((unsigned short *)(slv_array + i)) << (0x07 &
49857shift_distance[i]))', with this resulting value coerced to the 'unsigned
49858char' type.  The behavior of the 'vec_srv' is as if there existed a
49859temporary array of 17 unsigned characters 'srv_array' within which
49860element 0 equals zero and elements 1 through 16 equal the elements 0
49861through 15 of the 'src' array.  The result returned from the 'vec_srv'
49862function is a '__vector' of 16 unsigned characters within which element
49863'i' is computed using the C expression '0xff & (*((unsigned short
49864*)(srv_array + i)) >> (0x07 & shift_distance[i]))', with this resulting
49865value coerced to the 'unsigned char' type.
49866
49867 The following built-in functions are available for the PowerPC family
49868of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
49869     __vector unsigned char
49870     vec_absd (__vector unsigned char arg1, __vector unsigned char arg2);
49871     __vector unsigned short
49872     vec_absd (__vector unsigned short arg1, __vector unsigned short arg2);
49873     __vector unsigned int
49874     vec_absd (__vector unsigned int arg1, __vector unsigned int arg2);
49875
49876     __vector unsigned char
49877     vec_absdb (__vector unsigned char arg1, __vector unsigned char arg2);
49878     __vector unsigned short
49879     vec_absdh (__vector unsigned short arg1, __vector unsigned short arg2);
49880     __vector unsigned int
49881     vec_absdw (__vector unsigned int arg1, __vector unsigned int arg2);
49882
49883 The 'vec_absd', 'vec_absdb', 'vec_absdh', and 'vec_absdw' built-in
49884functions each computes the absolute differences of the pairs of vector
49885elements supplied in its two vector arguments, placing the absolute
49886differences into the corresponding elements of the vector result.
49887
49888 The following built-in functions are available for the PowerPC family
49889of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
49890     __vector unsigned int vec_extract_exp (__vector float source);
49891     __vector unsigned long long int vec_extract_exp (__vector double source);
49892
49893     __vector unsigned int vec_extract_sig (__vector float source);
49894     __vector unsigned long long int vec_extract_sig (__vector double source);
49895
49896     __vector float vec_insert_exp (__vector unsigned int significands,
49897                                    __vector unsigned int exponents);
49898     __vector float vec_insert_exp (__vector unsigned float significands,
49899                                    __vector unsigned int exponents);
49900     __vector double vec_insert_exp (__vector unsigned long long int significands,
49901                                     __vector unsigned long long int exponents);
49902     __vector double vec_insert_exp (__vector unsigned double significands,
49903                                     __vector unsigned long long int exponents);
49904
49905     __vector bool int vec_test_data_class (__vector float source, const int condition);
49906     __vector bool long long int vec_test_data_class (__vector double source,
49907                                                      const int condition);
49908
49909 The 'vec_extract_sig' and 'vec_extract_exp' built-in functions return
49910vectors representing the significands and biased exponent values of
49911their 'source' arguments respectively.  Within the result vector
49912returned by 'vec_extract_sig', the '0x800000' bit of each vector element
49913returned when the function's 'source' argument is of type 'float' is set
49914to 1 if the corresponding floating point value is in normalized form.
49915Otherwise, this bit is set to 0.  When the 'source' argument is of type
49916'double', the '0x10000000000000' bit within each of the result vector's
49917elements is set according to the same rules.  Note that the sign of the
49918significand is not represented in the result returned from the
49919'vec_extract_sig' function.  To extract the sign bits, use the
49920'vec_cpsgn' function, which returns a new vector within which all of the
49921sign bits of its second argument vector are overwritten with the sign
49922bits copied from the coresponding elements of its first argument vector,
49923and all other (non-sign) bits of the second argument vector are copied
49924unchanged into the result vector.
49925
49926 The 'vec_insert_exp' built-in functions return a vector of single- or
49927double-precision floating point values constructed by assembling the
49928values of their 'significands' and 'exponents' arguments into the
49929corresponding elements of the returned vector.  The sign of each element
49930of the result is copied from the most significant bit of the
49931corresponding entry within the 'significands' argument.  Note that the
49932relevant bits of the 'significands' argument are the same, for both
49933integer and floating point types.  The significand and exponent
49934components of each element of the result are composed of the least
49935significant bits of the corresponding 'significands' element and the
49936least significant bits of the corresponding 'exponents' element.
49937
49938 The 'vec_test_data_class' built-in function returns a vector
49939representing the results of testing the 'source' vector for the
49940condition selected by the 'condition' argument.  The 'condition'
49941argument must be a compile-time constant integer with value not
49942exceeding 127.  The 'condition' argument is encoded as a bitmask with
49943each bit enabling the testing of a different condition, as characterized
49944by the following:
49945     0x40    Test for NaN
49946     0x20    Test for +Infinity
49947     0x10    Test for -Infinity
49948     0x08    Test for +Zero
49949     0x04    Test for -Zero
49950     0x02    Test for +Denormal
49951     0x01    Test for -Denormal
49952
49953 If any of the enabled test conditions is true, the corresponding entry
49954in the result vector is -1.  Otherwise (all of the enabled test
49955conditions are false), the corresponding entry of the result vector is
499560.
49957
49958 The following built-in functions are available for the PowerPC family
49959of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
49960     vector unsigned int vec_rlmi (vector unsigned int, vector unsigned int,
49961                                   vector unsigned int);
49962     vector unsigned long long vec_rlmi (vector unsigned long long,
49963                                         vector unsigned long long,
49964                                         vector unsigned long long);
49965     vector unsigned int vec_rlnm (vector unsigned int, vector unsigned int,
49966                                   vector unsigned int);
49967     vector unsigned long long vec_rlnm (vector unsigned long long,
49968                                         vector unsigned long long,
49969                                         vector unsigned long long);
49970     vector unsigned int vec_vrlnm (vector unsigned int, vector unsigned int);
49971     vector unsigned long long vec_vrlnm (vector unsigned long long,
49972                                          vector unsigned long long);
49973
49974 The result of 'vec_rlmi' is obtained by rotating each element of the
49975first argument vector left and inserting it under mask into the second
49976argument vector.  The third argument vector contains the mask beginning
49977in bits 11:15, the mask end in bits 19:23, and the shift count in bits
4997827:31, of each element.
49979
49980 The result of 'vec_rlnm' is obtained by rotating each element of the
49981first argument vector left and ANDing it with a mask specified by the
49982second and third argument vectors.  The second argument vector contains
49983the shift count for each element in the low-order byte.  The third
49984argument vector contains the mask end for each element in the low-order
49985byte, with the mask begin in the next higher byte.
49986
49987 The result of 'vec_vrlnm' is obtained by rotating each element of the
49988first argument vector left and ANDing it with a mask.  The second
49989argument vector contains the mask beginning in bits 11:15, the mask end
49990in bits 19:23, and the shift count in bits 27:31, of each element.
49991
49992 If the ISA 3.0 instruction set additions ('-mcpu=power9') are
49993available:
49994     vector signed bool char vec_revb (vector signed char);
49995     vector signed char vec_revb (vector signed char);
49996     vector unsigned char vec_revb (vector unsigned char);
49997     vector bool short vec_revb (vector bool short);
49998     vector short vec_revb (vector short);
49999     vector unsigned short vec_revb (vector unsigned short);
50000     vector bool int vec_revb (vector bool int);
50001     vector int vec_revb (vector int);
50002     vector unsigned int vec_revb (vector unsigned int);
50003     vector float vec_revb (vector float);
50004     vector bool long long vec_revb (vector bool long long);
50005     vector long long vec_revb (vector long long);
50006     vector unsigned long long vec_revb (vector unsigned long long);
50007     vector double vec_revb (vector double);
50008
50009 On 64-bit targets, if the ISA 3.0 additions ('-mcpu=power9') are
50010available:
50011     vector long vec_revb (vector long);
50012     vector unsigned long vec_revb (vector unsigned long);
50013     vector __int128 vec_revb (vector __int128);
50014     vector __uint128 vec_revb (vector __uint128);
50015
50016 The 'vec_revb' built-in function reverses the bytes on an element by
50017element basis.  A vector of 'vector unsigned char' or 'vector signed
50018char' reverses the bytes in the whole word.
50019
50020 If the cryptographic instructions are enabled ('-mcrypto' or
50021'-mcpu=power8'), the following builtins are enabled.
50022
50023     vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
50024
50025     vector unsigned char vec_sbox_be (vector unsigned char);
50026
50027     vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
50028                                                         vector unsigned long long);
50029
50030     vector unsigned char vec_cipher_be (vector unsigned char, vector unsigned char);
50031
50032     vector unsigned long long __builtin_crypto_vcipherlast
50033                                          (vector unsigned long long,
50034                                           vector unsigned long long);
50035
50036     vector unsigned char vec_cipherlast_be (vector unsigned char,
50037                                             vector unsigned char);
50038
50039     vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
50040                                                          vector unsigned long long);
50041
50042     vector unsigned char vec_ncipher_be (vector unsigned char,
50043                                          vector unsigned char);
50044
50045     vector unsigned long long __builtin_crypto_vncipherlast (vector unsigned long long,
50046                                                              vector unsigned long long);
50047
50048     vector unsigned char vec_ncipherlast_be (vector unsigned char,
50049                                              vector unsigned char);
50050
50051     vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
50052                                                     vector unsigned char,
50053                                                     vector unsigned char);
50054
50055     vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
50056                                                      vector unsigned short,
50057                                                      vector unsigned short);
50058
50059     vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
50060                                                    vector unsigned int,
50061                                                    vector unsigned int);
50062
50063     vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
50064                                                          vector unsigned long long,
50065                                                          vector unsigned long long);
50066
50067     vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
50068                                                    vector unsigned char);
50069
50070     vector unsigned short __builtin_crypto_vpmsumh (vector unsigned short,
50071                                                     vector unsigned short);
50072
50073     vector unsigned int __builtin_crypto_vpmsumw (vector unsigned int,
50074                                                   vector unsigned int);
50075
50076     vector unsigned long long __builtin_crypto_vpmsumd (vector unsigned long long,
50077                                                         vector unsigned long long);
50078
50079     vector unsigned long long __builtin_crypto_vshasigmad (vector unsigned long long,
50080                                                            int, int);
50081
50082     vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int, int, int);
50083
50084 The second argument to __BUILTIN_CRYPTO_VSHASIGMAD and
50085__BUILTIN_CRYPTO_VSHASIGMAW must be a constant integer that is 0 or 1.
50086The third argument to these built-in functions must be a constant
50087integer in the range of 0 to 15.
50088
50089 If the ISA 3.0 instruction set additions are enabled ('-mcpu=power9'),
50090the following additional functions are available for both 32-bit and
5009164-bit targets.
50092     vector short vec_xl (int, vector short *);
50093     vector short vec_xl (int, short *);
50094     vector unsigned short vec_xl (int, vector unsigned short *);
50095     vector unsigned short vec_xl (int, unsigned short *);
50096     vector char vec_xl (int, vector char *);
50097     vector char vec_xl (int, char *);
50098     vector unsigned char vec_xl (int, vector unsigned char *);
50099     vector unsigned char vec_xl (int, unsigned char *);
50100
50101     void vec_xst (vector short, int, vector short *);
50102     void vec_xst (vector short, int, short *);
50103     void vec_xst (vector unsigned short, int, vector unsigned short *);
50104     void vec_xst (vector unsigned short, int, unsigned short *);
50105     void vec_xst (vector char, int, vector char *);
50106     void vec_xst (vector char, int, char *);
50107     void vec_xst (vector unsigned char, int, vector unsigned char *);
50108     void vec_xst (vector unsigned char, int, unsigned char *);
50109
50110
50111File: 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
50112
501136.60.24 PowerPC Hardware Transactional Memory Built-in Functions
50114----------------------------------------------------------------
50115
50116GCC provides two interfaces for accessing the Hardware Transactional
50117Memory (HTM) instructions available on some of the PowerPC family of
50118processors (eg, POWER8).  The two interfaces come in a low level
50119interface, consisting of built-in functions specific to PowerPC and a
50120higher level interface consisting of inline functions that are common
50121between PowerPC and S/390.
50122
501236.60.24.1 PowerPC HTM Low Level Built-in Functions
50124..................................................
50125
50126The following low level built-in functions are available with '-mhtm' or
50127'-mcpu=CPU' where CPU is 'power8' or later.  They all generate the
50128machine instruction that is part of the name.
50129
50130 The HTM builtins (with the exception of '__builtin_tbegin') return the
50131full 4-bit condition register value set by their associated hardware
50132instruction.  The header file 'htmintrin.h' defines some macros that can
50133be used to decipher the return value.  The '__builtin_tbegin' builtin
50134returns a simple 'true' or 'false' value depending on whether a
50135transaction was successfully started or not.  The arguments of the
50136builtins match exactly the type and order of the associated hardware
50137instruction's operands, except for the '__builtin_tcheck' builtin, which
50138does not take any input arguments.  Refer to the ISA manual for a
50139description of each instruction's operands.
50140
50141     unsigned int __builtin_tbegin (unsigned int)
50142     unsigned int __builtin_tend (unsigned int)
50143
50144     unsigned int __builtin_tabort (unsigned int)
50145     unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
50146     unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
50147     unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
50148     unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
50149
50150     unsigned int __builtin_tcheck (void)
50151     unsigned int __builtin_treclaim (unsigned int)
50152     unsigned int __builtin_trechkpt (void)
50153     unsigned int __builtin_tsr (unsigned int)
50154
50155 In addition to the above HTM built-ins, we have added built-ins for
50156some common extended mnemonics of the HTM instructions:
50157
50158     unsigned int __builtin_tendall (void)
50159     unsigned int __builtin_tresume (void)
50160     unsigned int __builtin_tsuspend (void)
50161
50162 Note that the semantics of the above HTM builtins are required to mimic
50163the locking semantics used for critical sections.  Builtins that are
50164used to create a new transaction or restart a suspended transaction must
50165have lock acquisition like semantics while those builtins that end or
50166suspend a transaction must have lock release like semantics.
50167Specifically, this must mimic lock semantics as specified by C++11, for
50168example: Lock acquisition is as-if an execution of
50169__atomic_exchange_n(&globallock,1,__ATOMIC_ACQUIRE) that returns 0, and
50170lock release is as-if an execution of
50171__atomic_store(&globallock,0,__ATOMIC_RELEASE), with globallock being an
50172implicit implementation-defined lock used for all transactions.  The HTM
50173instructions associated with with the builtins inherently provide the
50174correct acquisition and release hardware barriers required.  However,
50175the compiler must also be prohibited from moving loads and stores across
50176the builtins in a way that would violate their semantics.  This has been
50177accomplished by adding memory barriers to the associated HTM
50178instructions (which is a conservative approach to provide acquire and
50179release semantics).  Earlier versions of the compiler did not treat the
50180HTM instructions as memory barriers.  A '__TM_FENCE__' macro has been
50181added, which can be used to determine whether the current compiler
50182treats HTM instructions as memory barriers or not.  This allows the user
50183to explicitly add memory barriers to their code when using an older
50184version of the compiler.
50185
50186 The following set of built-in functions are available to gain access to
50187the HTM specific special purpose registers.
50188
50189     unsigned long __builtin_get_texasr (void)
50190     unsigned long __builtin_get_texasru (void)
50191     unsigned long __builtin_get_tfhar (void)
50192     unsigned long __builtin_get_tfiar (void)
50193
50194     void __builtin_set_texasr (unsigned long);
50195     void __builtin_set_texasru (unsigned long);
50196     void __builtin_set_tfhar (unsigned long);
50197     void __builtin_set_tfiar (unsigned long);
50198
50199 Example usage of these low level built-in functions may look like:
50200
50201     #include <htmintrin.h>
50202
50203     int num_retries = 10;
50204
50205     while (1)
50206       {
50207         if (__builtin_tbegin (0))
50208           {
50209             /* Transaction State Initiated.  */
50210             if (is_locked (lock))
50211               __builtin_tabort (0);
50212             ... transaction code...
50213             __builtin_tend (0);
50214             break;
50215           }
50216         else
50217           {
50218             /* Transaction State Failed.  Use locks if the transaction
50219                failure is "persistent" or we've tried too many times.  */
50220             if (num_retries-- <= 0
50221                 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
50222               {
50223                 acquire_lock (lock);
50224                 ... non transactional fallback path...
50225                 release_lock (lock);
50226                 break;
50227               }
50228           }
50229       }
50230
50231 One final built-in function has been added that returns the value of
50232the 2-bit Transaction State field of the Machine Status Register (MSR)
50233as stored in 'CR0'.
50234
50235     unsigned long __builtin_ttest (void)
50236
50237 This built-in can be used to determine the current transaction state
50238using the following code example:
50239
50240     #include <htmintrin.h>
50241
50242     unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
50243
50244     if (tx_state == _HTM_TRANSACTIONAL)
50245       {
50246         /* Code to use in transactional state.  */
50247       }
50248     else if (tx_state == _HTM_NONTRANSACTIONAL)
50249       {
50250         /* Code to use in non-transactional state.  */
50251       }
50252     else if (tx_state == _HTM_SUSPENDED)
50253       {
50254         /* Code to use in transaction suspended state.  */
50255       }
50256
502576.60.24.2 PowerPC HTM High Level Inline Functions
50258.................................................
50259
50260The following high level HTM interface is made available by including
50261'<htmxlintrin.h>' and using '-mhtm' or '-mcpu=CPU' where CPU is 'power8'
50262or later.  This interface is common between PowerPC and S/390, allowing
50263users to write one HTM source implementation that can be compiled and
50264executed on either system.
50265
50266     long __TM_simple_begin (void)
50267     long __TM_begin (void* const TM_buff)
50268     long __TM_end (void)
50269     void __TM_abort (void)
50270     void __TM_named_abort (unsigned char const code)
50271     void __TM_resume (void)
50272     void __TM_suspend (void)
50273
50274     long __TM_is_user_abort (void* const TM_buff)
50275     long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
50276     long __TM_is_illegal (void* const TM_buff)
50277     long __TM_is_footprint_exceeded (void* const TM_buff)
50278     long __TM_nesting_depth (void* const TM_buff)
50279     long __TM_is_nested_too_deep(void* const TM_buff)
50280     long __TM_is_conflict(void* const TM_buff)
50281     long __TM_is_failure_persistent(void* const TM_buff)
50282     long __TM_failure_address(void* const TM_buff)
50283     long long __TM_failure_code(void* const TM_buff)
50284
50285 Using these common set of HTM inline functions, we can create a more
50286portable version of the HTM example in the previous section that will
50287work on either PowerPC or S/390:
50288
50289     #include <htmxlintrin.h>
50290
50291     int num_retries = 10;
50292     TM_buff_type TM_buff;
50293
50294     while (1)
50295       {
50296         if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED)
50297           {
50298             /* Transaction State Initiated.  */
50299             if (is_locked (lock))
50300               __TM_abort ();
50301             ... transaction code...
50302             __TM_end ();
50303             break;
50304           }
50305         else
50306           {
50307             /* Transaction State Failed.  Use locks if the transaction
50308                failure is "persistent" or we've tried too many times.  */
50309             if (num_retries-- <= 0
50310                 || __TM_is_failure_persistent (TM_buff))
50311               {
50312                 acquire_lock (lock);
50313                 ... non transactional fallback path...
50314                 release_lock (lock);
50315                 break;
50316               }
50317           }
50318       }
50319
50320
50321File: 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
50322
503236.60.25 PowerPC Atomic Memory Operation Functions
50324-------------------------------------------------
50325
50326ISA 3.0 of the PowerPC added new atomic memory operation (amo)
50327instructions.  GCC provides support for these instructions in 64-bit
50328environments.  All of the functions are declared in the include file
50329'amo.h'.
50330
50331 The functions supported are:
50332
50333     #include <amo.h>
50334
50335     uint32_t amo_lwat_add (uint32_t *, uint32_t);
50336     uint32_t amo_lwat_xor (uint32_t *, uint32_t);
50337     uint32_t amo_lwat_ior (uint32_t *, uint32_t);
50338     uint32_t amo_lwat_and (uint32_t *, uint32_t);
50339     uint32_t amo_lwat_umax (uint32_t *, uint32_t);
50340     uint32_t amo_lwat_umin (uint32_t *, uint32_t);
50341     uint32_t amo_lwat_swap (uint32_t *, uint32_t);
50342
50343     int32_t amo_lwat_sadd (int32_t *, int32_t);
50344     int32_t amo_lwat_smax (int32_t *, int32_t);
50345     int32_t amo_lwat_smin (int32_t *, int32_t);
50346     int32_t amo_lwat_sswap (int32_t *, int32_t);
50347
50348     uint64_t amo_ldat_add (uint64_t *, uint64_t);
50349     uint64_t amo_ldat_xor (uint64_t *, uint64_t);
50350     uint64_t amo_ldat_ior (uint64_t *, uint64_t);
50351     uint64_t amo_ldat_and (uint64_t *, uint64_t);
50352     uint64_t amo_ldat_umax (uint64_t *, uint64_t);
50353     uint64_t amo_ldat_umin (uint64_t *, uint64_t);
50354     uint64_t amo_ldat_swap (uint64_t *, uint64_t);
50355
50356     int64_t amo_ldat_sadd (int64_t *, int64_t);
50357     int64_t amo_ldat_smax (int64_t *, int64_t);
50358     int64_t amo_ldat_smin (int64_t *, int64_t);
50359     int64_t amo_ldat_sswap (int64_t *, int64_t);
50360
50361     void amo_stwat_add (uint32_t *, uint32_t);
50362     void amo_stwat_xor (uint32_t *, uint32_t);
50363     void amo_stwat_ior (uint32_t *, uint32_t);
50364     void amo_stwat_and (uint32_t *, uint32_t);
50365     void amo_stwat_umax (uint32_t *, uint32_t);
50366     void amo_stwat_umin (uint32_t *, uint32_t);
50367
50368     void amo_stwat_sadd (int32_t *, int32_t);
50369     void amo_stwat_smax (int32_t *, int32_t);
50370     void amo_stwat_smin (int32_t *, int32_t);
50371
50372     void amo_stdat_add (uint64_t *, uint64_t);
50373     void amo_stdat_xor (uint64_t *, uint64_t);
50374     void amo_stdat_ior (uint64_t *, uint64_t);
50375     void amo_stdat_and (uint64_t *, uint64_t);
50376     void amo_stdat_umax (uint64_t *, uint64_t);
50377     void amo_stdat_umin (uint64_t *, uint64_t);
50378
50379     void amo_stdat_sadd (int64_t *, int64_t);
50380     void amo_stdat_smax (int64_t *, int64_t);
50381     void amo_stdat_smin (int64_t *, int64_t);
50382
50383
50384File: gcc.info,  Node: PowerPC Matrix-Multiply Assist Built-in Functions,  Next: RISC-V Built-in Functions,  Prev: PowerPC Atomic Memory Operation Functions,  Up: Target Builtins
50385
503866.60.26 PowerPC Matrix-Multiply Assist Built-in Functions
50387---------------------------------------------------------
50388
50389ISA 3.1 of the PowerPC added new Matrix-Multiply Assist (MMA)
50390instructions.  GCC provides support for these instructions through the
50391following built-in functions which are enabled with the '-mmma' option.
50392The vec_t type below is defined to be a normal vector unsigned char
50393type.�� The uint2, uint4 and uint8 parameters are 2-bit, 4-bit and 8-bit
50394unsigned integer constants respectively.�� The compiler will verify that
50395they are constants and that their values are within range.��
50396
50397 The built-in functions supported are:
50398
50399     void __builtin_mma_xvi4ger8 (__vector_quad *, vec_t, vec_t);
50400     void __builtin_mma_xvi8ger4 (__vector_quad *, vec_t, vec_t);
50401     void __builtin_mma_xvi16ger2 (__vector_quad *, vec_t, vec_t);
50402     void __builtin_mma_xvi16ger2s (__vector_quad *, vec_t, vec_t);
50403     void __builtin_mma_xvf16ger2 (__vector_quad *, vec_t, vec_t);
50404     void __builtin_mma_xvbf16ger2 (__vector_quad *, vec_t, vec_t);
50405     void __builtin_mma_xvf32ger (__vector_quad *, vec_t, vec_t);
50406
50407     void __builtin_mma_xvi4ger8pp (__vector_quad *, vec_t, vec_t);
50408     void __builtin_mma_xvi8ger4pp (__vector_quad *, vec_t, vec_t);
50409     void __builtin_mma_xvi8ger4spp(__vector_quad *, vec_t, vec_t);
50410     void __builtin_mma_xvi16ger2pp (__vector_quad *, vec_t, vec_t);
50411     void __builtin_mma_xvi16ger2spp (__vector_quad *, vec_t, vec_t);
50412     void __builtin_mma_xvf16ger2pp (__vector_quad *, vec_t, vec_t);
50413     void __builtin_mma_xvf16ger2pn (__vector_quad *, vec_t, vec_t);
50414     void __builtin_mma_xvf16ger2np (__vector_quad *, vec_t, vec_t);
50415     void __builtin_mma_xvf16ger2nn (__vector_quad *, vec_t, vec_t);
50416     void __builtin_mma_xvbf16ger2pp (__vector_quad *, vec_t, vec_t);
50417     void __builtin_mma_xvbf16ger2pn (__vector_quad *, vec_t, vec_t);
50418     void __builtin_mma_xvbf16ger2np (__vector_quad *, vec_t, vec_t);
50419     void __builtin_mma_xvbf16ger2nn (__vector_quad *, vec_t, vec_t);
50420     void __builtin_mma_xvf32gerpp (__vector_quad *, vec_t, vec_t);
50421     void __builtin_mma_xvf32gerpn (__vector_quad *, vec_t, vec_t);
50422     void __builtin_mma_xvf32gernp (__vector_quad *, vec_t, vec_t);
50423     void __builtin_mma_xvf32gernn (__vector_quad *, vec_t, vec_t);
50424
50425     void __builtin_mma_pmxvi4ger8 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint8);
50426     void __builtin_mma_pmxvi4ger8pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint8);
50427
50428     void __builtin_mma_pmxvi8ger4 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint4);
50429     void __builtin_mma_pmxvi8ger4pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint4);
50430     void __builtin_mma_pmxvi8ger4spp(__vector_quad *, vec_t, vec_t, uint4, uint4, uint4);
50431
50432     void __builtin_mma_pmxvi16ger2 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50433     void __builtin_mma_pmxvi16ger2s (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50434     void __builtin_mma_pmxvf16ger2 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50435     void __builtin_mma_pmxvbf16ger2 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50436
50437     void __builtin_mma_pmxvi16ger2pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50438     void __builtin_mma_pmxvi16ger2spp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50439     void __builtin_mma_pmxvf16ger2pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50440     void __builtin_mma_pmxvf16ger2pn (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50441     void __builtin_mma_pmxvf16ger2np (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50442     void __builtin_mma_pmxvf16ger2nn (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50443     void __builtin_mma_pmxvbf16ger2pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50444     void __builtin_mma_pmxvbf16ger2pn (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50445     void __builtin_mma_pmxvbf16ger2np (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50446     void __builtin_mma_pmxvbf16ger2nn (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50447
50448     void __builtin_mma_pmxvf32ger (__vector_quad *, vec_t, vec_t, uint4, uint4);
50449     void __builtin_mma_pmxvf32gerpp (__vector_quad *, vec_t, vec_t, uint4, uint4);
50450     void __builtin_mma_pmxvf32gerpn (__vector_quad *, vec_t, vec_t, uint4, uint4);
50451     void __builtin_mma_pmxvf32gernp (__vector_quad *, vec_t, vec_t, uint4, uint4);
50452     void __builtin_mma_pmxvf32gernn (__vector_quad *, vec_t, vec_t, uint4, uint4);
50453
50454     void __builtin_mma_xvf64ger (__vector_quad *, __vector_pair, vec_t);
50455     void __builtin_mma_xvf64gerpp (__vector_quad *, __vector_pair, vec_t);
50456     void __builtin_mma_xvf64gerpn (__vector_quad *, __vector_pair, vec_t);
50457     void __builtin_mma_xvf64gernp (__vector_quad *, __vector_pair, vec_t);
50458     void __builtin_mma_xvf64gernn (__vector_quad *, __vector_pair, vec_t);
50459
50460     void __builtin_mma_pmxvf64ger (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
50461     void __builtin_mma_pmxvf64gerpp (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
50462     void __builtin_mma_pmxvf64gerpn (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
50463     void __builtin_mma_pmxvf64gernp (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
50464     void __builtin_mma_pmxvf64gernn (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
50465
50466     void __builtin_mma_xxmtacc (__vector_quad *);
50467     void __builtin_mma_xxmfacc (__vector_quad *);
50468     void __builtin_mma_xxsetaccz (__vector_quad *);
50469
50470     void __builtin_mma_build_acc (__vector_quad *, vec_t, vec_t, vec_t, vec_t);
50471     void __builtin_mma_disassemble_acc (void *, __vector_quad *);
50472
50473     void __builtin_vsx_build_pair (__vector_pair *, vec_t, vec_t);
50474     void __builtin_vsx_disassemble_pair (void *, __vector_pair *);
50475
50476     vec_t __builtin_vsx_xvcvspbf16 (vec_t);
50477     vec_t __builtin_vsx_xvcvbf16spn (vec_t);
50478
50479     __vector_pair __builtin_vsx_lxvp (size_t, __vector_pair *);
50480     void __builtin_vsx_stxvp (__vector_pair, size_t, __vector_pair *);
50481
50482
50483File: gcc.info,  Node: RISC-V Built-in Functions,  Next: RX Built-in Functions,  Prev: PowerPC Matrix-Multiply Assist Built-in Functions,  Up: Target Builtins
50484
504856.60.27 RISC-V Built-in Functions
50486---------------------------------
50487
50488These built-in functions are available for the RISC-V family of
50489processors.
50490
50491 -- Built-in Function: void * __builtin_thread_pointer (void)
50492     Returns the value that is currently set in the 'tp' register.
50493
50494
50495File: gcc.info,  Node: RX Built-in Functions,  Next: S/390 System z Built-in Functions,  Prev: RISC-V Built-in Functions,  Up: Target Builtins
50496
504976.60.28 RX Built-in Functions
50498-----------------------------
50499
50500GCC supports some of the RX instructions which cannot be expressed in
50501the C programming language via the use of built-in functions.  The
50502following functions are supported:
50503
50504 -- Built-in Function: void __builtin_rx_brk (void)
50505     Generates the 'brk' machine instruction.
50506
50507 -- Built-in Function: void __builtin_rx_clrpsw (int)
50508     Generates the 'clrpsw' machine instruction to clear the specified
50509     bit in the processor status word.
50510
50511 -- Built-in Function: void __builtin_rx_int (int)
50512     Generates the 'int' machine instruction to generate an interrupt
50513     with the specified value.
50514
50515 -- Built-in Function: void __builtin_rx_machi (int, int)
50516     Generates the 'machi' machine instruction to add the result of
50517     multiplying the top 16 bits of the two arguments into the
50518     accumulator.
50519
50520 -- Built-in Function: void __builtin_rx_maclo (int, int)
50521     Generates the 'maclo' machine instruction to add the result of
50522     multiplying the bottom 16 bits of the two arguments into the
50523     accumulator.
50524
50525 -- Built-in Function: void __builtin_rx_mulhi (int, int)
50526     Generates the 'mulhi' machine instruction to place the result of
50527     multiplying the top 16 bits of the two arguments into the
50528     accumulator.
50529
50530 -- Built-in Function: void __builtin_rx_mullo (int, int)
50531     Generates the 'mullo' machine instruction to place the result of
50532     multiplying the bottom 16 bits of the two arguments into the
50533     accumulator.
50534
50535 -- Built-in Function: int __builtin_rx_mvfachi (void)
50536     Generates the 'mvfachi' machine instruction to read the top 32 bits
50537     of the accumulator.
50538
50539 -- Built-in Function: int __builtin_rx_mvfacmi (void)
50540     Generates the 'mvfacmi' machine instruction to read the middle 32
50541     bits of the accumulator.
50542
50543 -- Built-in Function: int __builtin_rx_mvfc (int)
50544     Generates the 'mvfc' machine instruction which reads the control
50545     register specified in its argument and returns its value.
50546
50547 -- Built-in Function: void __builtin_rx_mvtachi (int)
50548     Generates the 'mvtachi' machine instruction to set the top 32 bits
50549     of the accumulator.
50550
50551 -- Built-in Function: void __builtin_rx_mvtaclo (int)
50552     Generates the 'mvtaclo' machine instruction to set the bottom 32
50553     bits of the accumulator.
50554
50555 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
50556     Generates the 'mvtc' machine instruction which sets control
50557     register number 'reg' to 'val'.
50558
50559 -- Built-in Function: void __builtin_rx_mvtipl (int)
50560     Generates the 'mvtipl' machine instruction set the interrupt
50561     priority level.
50562
50563 -- Built-in Function: void __builtin_rx_racw (int)
50564     Generates the 'racw' machine instruction to round the accumulator
50565     according to the specified mode.
50566
50567 -- Built-in Function: int __builtin_rx_revw (int)
50568     Generates the 'revw' machine instruction which swaps the bytes in
50569     the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
50570     and also bits 16-23 occupy bits 24-31 and vice versa.
50571
50572 -- Built-in Function: void __builtin_rx_rmpa (void)
50573     Generates the 'rmpa' machine instruction which initiates a repeated
50574     multiply and accumulate sequence.
50575
50576 -- Built-in Function: void __builtin_rx_round (float)
50577     Generates the 'round' machine instruction which returns the
50578     floating-point argument rounded according to the current rounding
50579     mode set in the floating-point status word register.
50580
50581 -- Built-in Function: int __builtin_rx_sat (int)
50582     Generates the 'sat' machine instruction which returns the saturated
50583     value of the argument.
50584
50585 -- Built-in Function: void __builtin_rx_setpsw (int)
50586     Generates the 'setpsw' machine instruction to set the specified bit
50587     in the processor status word.
50588
50589 -- Built-in Function: void __builtin_rx_wait (void)
50590     Generates the 'wait' machine instruction.
50591
50592
50593File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
50594
505956.60.29 S/390 System z Built-in Functions
50596-----------------------------------------
50597
50598 -- Built-in Function: int __builtin_tbegin (void*)
50599     Generates the 'tbegin' machine instruction starting a
50600     non-constrained hardware transaction.  If the parameter is non-NULL
50601     the memory area is used to store the transaction diagnostic buffer
50602     and will be passed as first operand to 'tbegin'.  This buffer can
50603     be defined using the 'struct __htm_tdb' C struct defined in
50604     'htmintrin.h' and must reside on a double-word boundary.  The
50605     second tbegin operand is set to '0xff0c'.  This enables
50606     save/restore of all GPRs and disables aborts for FPR and AR
50607     manipulations inside the transaction body.  The condition code set
50608     by the tbegin instruction is returned as integer value.  The tbegin
50609     instruction by definition overwrites the content of all FPRs.  The
50610     compiler will generate code which saves and restores the FPRs.  For
50611     soft-float code it is recommended to used the '*_nofloat' variant.
50612     In order to prevent a TDB from being written it is required to pass
50613     a constant zero value as parameter.  Passing a zero value through a
50614     variable is not sufficient.  Although modifications of access
50615     registers inside the transaction will not trigger an transaction
50616     abort it is not supported to actually modify them.  Access
50617     registers do not get saved when entering a transaction.  They will
50618     have undefined state when reaching the abort code.
50619
50620 Macros for the possible return codes of tbegin are defined in the
50621'htmintrin.h' header file:
50622
50623'_HTM_TBEGIN_STARTED'
50624     'tbegin' has been executed as part of normal processing.  The
50625     transaction body is supposed to be executed.
50626'_HTM_TBEGIN_INDETERMINATE'
50627     The transaction was aborted due to an indeterminate condition which
50628     might be persistent.
50629'_HTM_TBEGIN_TRANSIENT'
50630     The transaction aborted due to a transient failure.  The
50631     transaction should be re-executed in that case.
50632'_HTM_TBEGIN_PERSISTENT'
50633     The transaction aborted due to a persistent failure.  Re-execution
50634     under same circumstances will not be productive.
50635
50636 -- Macro: _HTM_FIRST_USER_ABORT_CODE
50637     The '_HTM_FIRST_USER_ABORT_CODE' defined in 'htmintrin.h' specifies
50638     the first abort code which can be used for '__builtin_tabort'.
50639     Values below this threshold are reserved for machine use.
50640
50641 -- Data type: struct __htm_tdb
50642     The 'struct __htm_tdb' defined in 'htmintrin.h' describes the
50643     structure of the transaction diagnostic block as specified in the
50644     Principles of Operation manual chapter 5-91.
50645
50646 -- Built-in Function: int __builtin_tbegin_nofloat (void*)
50647     Same as '__builtin_tbegin' but without FPR saves and restores.
50648     Using this variant in code making use of FPRs will leave the FPRs
50649     in undefined state when entering the transaction abort handler
50650     code.
50651
50652 -- Built-in Function: int __builtin_tbegin_retry (void*, int)
50653     In addition to '__builtin_tbegin' a loop for transient failures is
50654     generated.  If tbegin returns a condition code of 2 the transaction
50655     will be retried as often as specified in the second argument.  The
50656     perform processor assist instruction is used to tell the CPU about
50657     the number of fails so far.
50658
50659 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
50660     Same as '__builtin_tbegin_retry' but without FPR saves and
50661     restores.  Using this variant in code making use of FPRs will leave
50662     the FPRs in undefined state when entering the transaction abort
50663     handler code.
50664
50665 -- Built-in Function: void __builtin_tbeginc (void)
50666     Generates the 'tbeginc' machine instruction starting a constrained
50667     hardware transaction.  The second operand is set to '0xff08'.
50668
50669 -- Built-in Function: int __builtin_tend (void)
50670     Generates the 'tend' machine instruction finishing a transaction
50671     and making the changes visible to other threads.  The condition
50672     code generated by tend is returned as integer value.
50673
50674 -- Built-in Function: void __builtin_tabort (int)
50675     Generates the 'tabort' machine instruction with the specified abort
50676     code.  Abort codes from 0 through 255 are reserved and will result
50677     in an error message.
50678
50679 -- Built-in Function: void __builtin_tx_assist (int)
50680     Generates the 'ppa rX,rY,1' machine instruction.  Where the integer
50681     parameter is loaded into rX and a value of zero is loaded into rY.
50682     The integer parameter specifies the number of times the transaction
50683     repeatedly aborted.
50684
50685 -- Built-in Function: int __builtin_tx_nesting_depth (void)
50686     Generates the 'etnd' machine instruction.  The current nesting
50687     depth is returned as integer value.  For a nesting depth of 0 the
50688     code is not executed as part of an transaction.
50689
50690 -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
50691          uint64_t)
50692
50693     Generates the 'ntstg' machine instruction.  The second argument is
50694     written to the first arguments location.  The store operation will
50695     not be rolled-back in case of an transaction abort.
50696
50697
50698File: gcc.info,  Node: SH Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: S/390 System z Built-in Functions,  Up: Target Builtins
50699
507006.60.30 SH Built-in Functions
50701-----------------------------
50702
50703The following built-in functions are supported on the SH1, SH2, SH3 and
50704SH4 families of processors:
50705
50706 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
50707     Sets the 'GBR' register to the specified value PTR.  This is
50708     usually used by system code that manages threads and execution
50709     contexts.  The compiler normally does not generate code that
50710     modifies the contents of 'GBR' and thus the value is preserved
50711     across function calls.  Changing the 'GBR' value in user code must
50712     be done with caution, since the compiler might use 'GBR' in order
50713     to access thread local variables.
50714
50715 -- Built-in Function: void * __builtin_thread_pointer (void)
50716     Returns the value that is currently set in the 'GBR' register.
50717     Memory loads and stores that use the thread pointer as a base
50718     address are turned into 'GBR' based displacement loads and stores,
50719     if possible.  For example:
50720          struct my_tcb
50721          {
50722             int a, b, c, d, e;
50723          };
50724
50725          int get_tcb_value (void)
50726          {
50727            // Generate 'mov.l @(8,gbr),r0' instruction
50728            return ((my_tcb*)__builtin_thread_pointer ())->c;
50729          }
50730
50731
50732 -- Built-in Function: unsigned int __builtin_sh_get_fpscr (void)
50733     Returns the value that is currently set in the 'FPSCR' register.
50734
50735 -- Built-in Function: void __builtin_sh_set_fpscr (unsigned int VAL)
50736     Sets the 'FPSCR' register to the specified value VAL, while
50737     preserving the current values of the FR, SZ and PR bits.
50738
50739
50740File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: TI C6X Built-in Functions,  Prev: SH Built-in Functions,  Up: Target Builtins
50741
507426.60.31 SPARC VIS Built-in Functions
50743------------------------------------
50744
50745GCC supports SIMD operations on the SPARC using both the generic vector
50746extensions (*note Vector Extensions::) as well as built-in functions for
50747the SPARC Visual Instruction Set (VIS). When you use the '-mvis' switch,
50748the VIS extension is exposed as the following built-in functions:
50749
50750     typedef int v1si __attribute__ ((vector_size (4)));
50751     typedef int v2si __attribute__ ((vector_size (8)));
50752     typedef short v4hi __attribute__ ((vector_size (8)));
50753     typedef short v2hi __attribute__ ((vector_size (4)));
50754     typedef unsigned char v8qi __attribute__ ((vector_size (8)));
50755     typedef unsigned char v4qi __attribute__ ((vector_size (4)));
50756
50757     void __builtin_vis_write_gsr (int64_t);
50758     int64_t __builtin_vis_read_gsr (void);
50759
50760     void * __builtin_vis_alignaddr (void *, long);
50761     void * __builtin_vis_alignaddrl (void *, long);
50762     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
50763     v2si __builtin_vis_faligndatav2si (v2si, v2si);
50764     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
50765     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
50766
50767     v4hi __builtin_vis_fexpand (v4qi);
50768
50769     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
50770     v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
50771     v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
50772     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
50773     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
50774     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
50775     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
50776
50777     v4qi __builtin_vis_fpack16 (v4hi);
50778     v8qi __builtin_vis_fpack32 (v2si, v8qi);
50779     v2hi __builtin_vis_fpackfix (v2si);
50780     v8qi __builtin_vis_fpmerge (v4qi, v4qi);
50781
50782     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
50783
50784     long __builtin_vis_edge8 (void *, void *);
50785     long __builtin_vis_edge8l (void *, void *);
50786     long __builtin_vis_edge16 (void *, void *);
50787     long __builtin_vis_edge16l (void *, void *);
50788     long __builtin_vis_edge32 (void *, void *);
50789     long __builtin_vis_edge32l (void *, void *);
50790
50791     long __builtin_vis_fcmple16 (v4hi, v4hi);
50792     long __builtin_vis_fcmple32 (v2si, v2si);
50793     long __builtin_vis_fcmpne16 (v4hi, v4hi);
50794     long __builtin_vis_fcmpne32 (v2si, v2si);
50795     long __builtin_vis_fcmpgt16 (v4hi, v4hi);
50796     long __builtin_vis_fcmpgt32 (v2si, v2si);
50797     long __builtin_vis_fcmpeq16 (v4hi, v4hi);
50798     long __builtin_vis_fcmpeq32 (v2si, v2si);
50799
50800     v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
50801     v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
50802     v2si __builtin_vis_fpadd32 (v2si, v2si);
50803     v1si __builtin_vis_fpadd32s (v1si, v1si);
50804     v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
50805     v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
50806     v2si __builtin_vis_fpsub32 (v2si, v2si);
50807     v1si __builtin_vis_fpsub32s (v1si, v1si);
50808
50809     long __builtin_vis_array8 (long, long);
50810     long __builtin_vis_array16 (long, long);
50811     long __builtin_vis_array32 (long, long);
50812
50813 When you use the '-mvis2' switch, the VIS version 2.0 built-in
50814functions also become available:
50815
50816     long __builtin_vis_bmask (long, long);
50817     int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
50818     v2si __builtin_vis_bshufflev2si (v2si, v2si);
50819     v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
50820     v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
50821
50822     long __builtin_vis_edge8n (void *, void *);
50823     long __builtin_vis_edge8ln (void *, void *);
50824     long __builtin_vis_edge16n (void *, void *);
50825     long __builtin_vis_edge16ln (void *, void *);
50826     long __builtin_vis_edge32n (void *, void *);
50827     long __builtin_vis_edge32ln (void *, void *);
50828
50829 When you use the '-mvis3' switch, the VIS version 3.0 built-in
50830functions also become available:
50831
50832     void __builtin_vis_cmask8 (long);
50833     void __builtin_vis_cmask16 (long);
50834     void __builtin_vis_cmask32 (long);
50835
50836     v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
50837
50838     v4hi __builtin_vis_fsll16 (v4hi, v4hi);
50839     v4hi __builtin_vis_fslas16 (v4hi, v4hi);
50840     v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
50841     v4hi __builtin_vis_fsra16 (v4hi, v4hi);
50842     v2si __builtin_vis_fsll16 (v2si, v2si);
50843     v2si __builtin_vis_fslas16 (v2si, v2si);
50844     v2si __builtin_vis_fsrl16 (v2si, v2si);
50845     v2si __builtin_vis_fsra16 (v2si, v2si);
50846
50847     long __builtin_vis_pdistn (v8qi, v8qi);
50848
50849     v4hi __builtin_vis_fmean16 (v4hi, v4hi);
50850
50851     int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
50852     int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
50853
50854     v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
50855     v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
50856     v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
50857     v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
50858     v2si __builtin_vis_fpadds32 (v2si, v2si);
50859     v1si __builtin_vis_fpadds32s (v1si, v1si);
50860     v2si __builtin_vis_fpsubs32 (v2si, v2si);
50861     v1si __builtin_vis_fpsubs32s (v1si, v1si);
50862
50863     long __builtin_vis_fucmple8 (v8qi, v8qi);
50864     long __builtin_vis_fucmpne8 (v8qi, v8qi);
50865     long __builtin_vis_fucmpgt8 (v8qi, v8qi);
50866     long __builtin_vis_fucmpeq8 (v8qi, v8qi);
50867
50868     float __builtin_vis_fhadds (float, float);
50869     double __builtin_vis_fhaddd (double, double);
50870     float __builtin_vis_fhsubs (float, float);
50871     double __builtin_vis_fhsubd (double, double);
50872     float __builtin_vis_fnhadds (float, float);
50873     double __builtin_vis_fnhaddd (double, double);
50874
50875     int64_t __builtin_vis_umulxhi (int64_t, int64_t);
50876     int64_t __builtin_vis_xmulx (int64_t, int64_t);
50877     int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
50878
50879 When you use the '-mvis4' switch, the VIS version 4.0 built-in
50880functions also become available:
50881
50882     v8qi __builtin_vis_fpadd8 (v8qi, v8qi);
50883     v8qi __builtin_vis_fpadds8 (v8qi, v8qi);
50884     v8qi __builtin_vis_fpaddus8 (v8qi, v8qi);
50885     v4hi __builtin_vis_fpaddus16 (v4hi, v4hi);
50886
50887     v8qi __builtin_vis_fpsub8 (v8qi, v8qi);
50888     v8qi __builtin_vis_fpsubs8 (v8qi, v8qi);
50889     v8qi __builtin_vis_fpsubus8 (v8qi, v8qi);
50890     v4hi __builtin_vis_fpsubus16 (v4hi, v4hi);
50891
50892     long __builtin_vis_fpcmple8 (v8qi, v8qi);
50893     long __builtin_vis_fpcmpgt8 (v8qi, v8qi);
50894     long __builtin_vis_fpcmpule16 (v4hi, v4hi);
50895     long __builtin_vis_fpcmpugt16 (v4hi, v4hi);
50896     long __builtin_vis_fpcmpule32 (v2si, v2si);
50897     long __builtin_vis_fpcmpugt32 (v2si, v2si);
50898
50899     v8qi __builtin_vis_fpmax8 (v8qi, v8qi);
50900     v4hi __builtin_vis_fpmax16 (v4hi, v4hi);
50901     v2si __builtin_vis_fpmax32 (v2si, v2si);
50902
50903     v8qi __builtin_vis_fpmaxu8 (v8qi, v8qi);
50904     v4hi __builtin_vis_fpmaxu16 (v4hi, v4hi);
50905     v2si __builtin_vis_fpmaxu32 (v2si, v2si);
50906
50907
50908     v8qi __builtin_vis_fpmin8 (v8qi, v8qi);
50909     v4hi __builtin_vis_fpmin16 (v4hi, v4hi);
50910     v2si __builtin_vis_fpmin32 (v2si, v2si);
50911
50912     v8qi __builtin_vis_fpminu8 (v8qi, v8qi);
50913     v4hi __builtin_vis_fpminu16 (v4hi, v4hi);
50914     v2si __builtin_vis_fpminu32 (v2si, v2si);
50915
50916 When you use the '-mvis4b' switch, the VIS version 4.0B built-in
50917functions also become available:
50918
50919     v8qi __builtin_vis_dictunpack8 (double, int);
50920     v4hi __builtin_vis_dictunpack16 (double, int);
50921     v2si __builtin_vis_dictunpack32 (double, int);
50922
50923     long __builtin_vis_fpcmple8shl (v8qi, v8qi, int);
50924     long __builtin_vis_fpcmpgt8shl (v8qi, v8qi, int);
50925     long __builtin_vis_fpcmpeq8shl (v8qi, v8qi, int);
50926     long __builtin_vis_fpcmpne8shl (v8qi, v8qi, int);
50927
50928     long __builtin_vis_fpcmple16shl (v4hi, v4hi, int);
50929     long __builtin_vis_fpcmpgt16shl (v4hi, v4hi, int);
50930     long __builtin_vis_fpcmpeq16shl (v4hi, v4hi, int);
50931     long __builtin_vis_fpcmpne16shl (v4hi, v4hi, int);
50932
50933     long __builtin_vis_fpcmple32shl (v2si, v2si, int);
50934     long __builtin_vis_fpcmpgt32shl (v2si, v2si, int);
50935     long __builtin_vis_fpcmpeq32shl (v2si, v2si, int);
50936     long __builtin_vis_fpcmpne32shl (v2si, v2si, int);
50937
50938     long __builtin_vis_fpcmpule8shl (v8qi, v8qi, int);
50939     long __builtin_vis_fpcmpugt8shl (v8qi, v8qi, int);
50940     long __builtin_vis_fpcmpule16shl (v4hi, v4hi, int);
50941     long __builtin_vis_fpcmpugt16shl (v4hi, v4hi, int);
50942     long __builtin_vis_fpcmpule32shl (v2si, v2si, int);
50943     long __builtin_vis_fpcmpugt32shl (v2si, v2si, int);
50944
50945     long __builtin_vis_fpcmpde8shl (v8qi, v8qi, int);
50946     long __builtin_vis_fpcmpde16shl (v4hi, v4hi, int);
50947     long __builtin_vis_fpcmpde32shl (v2si, v2si, int);
50948
50949     long __builtin_vis_fpcmpur8shl (v8qi, v8qi, int);
50950     long __builtin_vis_fpcmpur16shl (v4hi, v4hi, int);
50951     long __builtin_vis_fpcmpur32shl (v2si, v2si, int);
50952
50953
50954File: gcc.info,  Node: TI C6X Built-in Functions,  Next: TILE-Gx Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
50955
509566.60.32 TI C6X Built-in Functions
50957---------------------------------
50958
50959GCC provides intrinsics to access certain instructions of the TI C6X
50960processors.  These intrinsics, listed below, are available after
50961inclusion of the 'c6x_intrinsics.h' header file.  They map directly to
50962C6X instructions.
50963
50964
50965     int _sadd (int, int)
50966     int _ssub (int, int)
50967     int _sadd2 (int, int)
50968     int _ssub2 (int, int)
50969     long long _mpy2 (int, int)
50970     long long _smpy2 (int, int)
50971     int _add4 (int, int)
50972     int _sub4 (int, int)
50973     int _saddu4 (int, int)
50974
50975     int _smpy (int, int)
50976     int _smpyh (int, int)
50977     int _smpyhl (int, int)
50978     int _smpylh (int, int)
50979
50980     int _sshl (int, int)
50981     int _subc (int, int)
50982
50983     int _avg2 (int, int)
50984     int _avgu4 (int, int)
50985
50986     int _clrr (int, int)
50987     int _extr (int, int)
50988     int _extru (int, int)
50989     int _abs (int)
50990     int _abs2 (int)
50991
50992
50993
50994File: gcc.info,  Node: TILE-Gx Built-in Functions,  Next: TILEPro Built-in Functions,  Prev: TI C6X Built-in Functions,  Up: Target Builtins
50995
509966.60.33 TILE-Gx Built-in Functions
50997----------------------------------
50998
50999GCC provides intrinsics to access every instruction of the TILE-Gx
51000processor.  The intrinsics are of the form:
51001
51002
51003     unsigned long long __insn_OP (...)
51004
51005
51006 Where OP is the name of the instruction.  Refer to the ISA manual for
51007the complete list of instructions.
51008
51009 GCC also provides intrinsics to directly access the network registers.
51010The intrinsics are:
51011
51012
51013     unsigned long long __tile_idn0_receive (void)
51014     unsigned long long __tile_idn1_receive (void)
51015     unsigned long long __tile_udn0_receive (void)
51016     unsigned long long __tile_udn1_receive (void)
51017     unsigned long long __tile_udn2_receive (void)
51018     unsigned long long __tile_udn3_receive (void)
51019     void __tile_idn_send (unsigned long long)
51020     void __tile_udn_send (unsigned long long)
51021
51022
51023 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
51024that no network operations before it are reordered with those after it.
51025
51026
51027File: gcc.info,  Node: TILEPro Built-in Functions,  Next: x86 Built-in Functions,  Prev: TILE-Gx Built-in Functions,  Up: Target Builtins
51028
510296.60.34 TILEPro Built-in Functions
51030----------------------------------
51031
51032GCC provides intrinsics to access every instruction of the TILEPro
51033processor.  The intrinsics are of the form:
51034
51035
51036     unsigned __insn_OP (...)
51037
51038
51039where OP is the name of the instruction.  Refer to the ISA manual for
51040the complete list of instructions.
51041
51042 GCC also provides intrinsics to directly access the network registers.
51043The intrinsics are:
51044
51045
51046     unsigned __tile_idn0_receive (void)
51047     unsigned __tile_idn1_receive (void)
51048     unsigned __tile_sn_receive (void)
51049     unsigned __tile_udn0_receive (void)
51050     unsigned __tile_udn1_receive (void)
51051     unsigned __tile_udn2_receive (void)
51052     unsigned __tile_udn3_receive (void)
51053     void __tile_idn_send (unsigned)
51054     void __tile_sn_send (unsigned)
51055     void __tile_udn_send (unsigned)
51056
51057
51058 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
51059that no network operations before it are reordered with those after it.
51060
51061
51062File: gcc.info,  Node: x86 Built-in Functions,  Next: x86 transactional memory intrinsics,  Prev: TILEPro Built-in Functions,  Up: Target Builtins
51063
510646.60.35 x86 Built-in Functions
51065------------------------------
51066
51067These built-in functions are available for the x86-32 and x86-64 family
51068of computers, depending on the command-line switches used.
51069
51070 If you specify command-line switches such as '-msse', the compiler
51071could use the extended instruction sets even if the built-ins are not
51072used explicitly in the program.  For this reason, applications that
51073perform run-time CPU detection must compile separate files for each
51074supported architecture, using the appropriate flags.  In particular, the
51075file containing the CPU detection code should be compiled without these
51076options.
51077
51078 The following machine modes are available for use with MMX built-in
51079functions (*note Vector Extensions::): 'V2SI' for a vector of two 32-bit
51080integers, 'V4HI' for a vector of four 16-bit integers, and 'V8QI' for a
51081vector of eight 8-bit integers.  Some of the built-in functions operate
51082on MMX registers as a whole 64-bit entity, these use 'V1DI' as their
51083mode.
51084
51085 If 3DNow! extensions are enabled, 'V2SF' is used as a mode for a vector
51086of two 32-bit floating-point values.
51087
51088 If SSE extensions are enabled, 'V4SF' is used for a vector of four
5108932-bit floating-point values.  Some instructions use a vector of four
5109032-bit integers, these use 'V4SI'.  Finally, some instructions operate
51091on an entire vector register, interpreting it as a 128-bit integer,
51092these use mode 'TI'.
51093
51094 The x86-32 and x86-64 family of processors use additional built-in
51095functions for efficient use of 'TF' ('__float128') 128-bit floating
51096point and 'TC' 128-bit complex floating-point values.
51097
51098 The following floating-point built-in functions are always available.
51099All of them implement the function that is part of the name.
51100
51101     __float128 __builtin_fabsq (__float128)
51102     __float128 __builtin_copysignq (__float128, __float128)
51103
51104 The following built-in functions are always available.
51105
51106'__float128 __builtin_infq (void)'
51107     Similar to '__builtin_inf', except the return type is '__float128'.
51108
51109'__float128 __builtin_huge_valq (void)'
51110     Similar to '__builtin_huge_val', except the return type is
51111     '__float128'.
51112
51113'__float128 __builtin_nanq (void)'
51114     Similar to '__builtin_nan', except the return type is '__float128'.
51115
51116'__float128 __builtin_nansq (void)'
51117     Similar to '__builtin_nans', except the return type is
51118     '__float128'.
51119
51120 The following built-in function is always available.
51121
51122'void __builtin_ia32_pause (void)'
51123     Generates the 'pause' machine instruction with a compiler memory
51124     barrier.
51125
51126 The following built-in functions are always available and can be used
51127to check the target platform type.
51128
51129 -- Built-in Function: void __builtin_cpu_init (void)
51130     This function runs the CPU detection code to check the type of CPU
51131     and the features supported.  This built-in function needs to be
51132     invoked along with the built-in functions to check CPU type and
51133     features, '__builtin_cpu_is' and '__builtin_cpu_supports', only
51134     when used in a function that is executed before any constructors
51135     are called.  The CPU detection code is automatically executed in a
51136     very high priority constructor.
51137
51138     For example, this function has to be used in 'ifunc' resolvers that
51139     check for CPU type using the built-in functions '__builtin_cpu_is'
51140     and '__builtin_cpu_supports', or in constructors on targets that
51141     don't support constructor priority.
51142
51143          static void (*resolve_memcpy (void)) (void)
51144          {
51145            // ifunc resolvers fire before constructors, explicitly call the init
51146            // function.
51147            __builtin_cpu_init ();
51148            if (__builtin_cpu_supports ("ssse3"))
51149              return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
51150            else
51151              return default_memcpy;
51152          }
51153
51154          void *memcpy (void *, const void *, size_t)
51155               __attribute__ ((ifunc ("resolve_memcpy")));
51156
51157 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
51158     This function returns a positive integer if the run-time CPU is of
51159     type CPUNAME and returns '0' otherwise.  The following CPU names
51160     can be detected:
51161
51162     'amd'
51163          AMD CPU.
51164
51165     'intel'
51166          Intel CPU.
51167
51168     'atom'
51169          Intel Atom CPU.
51170
51171     'slm'
51172          Intel Silvermont CPU.
51173
51174     'core2'
51175          Intel Core 2 CPU.
51176
51177     'corei7'
51178          Intel Core i7 CPU.
51179
51180     'nehalem'
51181          Intel Core i7 Nehalem CPU.
51182
51183     'westmere'
51184          Intel Core i7 Westmere CPU.
51185
51186     'sandybridge'
51187          Intel Core i7 Sandy Bridge CPU.
51188
51189     'ivybridge'
51190          Intel Core i7 Ivy Bridge CPU.
51191
51192     'haswell'
51193          Intel Core i7 Haswell CPU.
51194
51195     'broadwell'
51196          Intel Core i7 Broadwell CPU.
51197
51198     'skylake'
51199          Intel Core i7 Skylake CPU.
51200
51201     'skylake-avx512'
51202          Intel Core i7 Skylake AVX512 CPU.
51203
51204     'cannonlake'
51205          Intel Core i7 Cannon Lake CPU.
51206
51207     'icelake-client'
51208          Intel Core i7 Ice Lake Client CPU.
51209
51210     'icelake-server'
51211          Intel Core i7 Ice Lake Server CPU.
51212
51213     'cascadelake'
51214          Intel Core i7 Cascadelake CPU.
51215
51216     'tigerlake'
51217          Intel Core i7 Tigerlake CPU.
51218
51219     'cooperlake'
51220          Intel Core i7 Cooperlake CPU.
51221
51222     'bonnell'
51223          Intel Atom Bonnell CPU.
51224
51225     'silvermont'
51226          Intel Atom Silvermont CPU.
51227
51228     'goldmont'
51229          Intel Atom Goldmont CPU.
51230
51231     'goldmont-plus'
51232          Intel Atom Goldmont Plus CPU.
51233
51234     'tremont'
51235          Intel Atom Tremont CPU.
51236
51237     'knl'
51238          Intel Knights Landing CPU.
51239
51240     'knm'
51241          Intel Knights Mill CPU.
51242
51243     'amdfam10h'
51244          AMD Family 10h CPU.
51245
51246     'barcelona'
51247          AMD Family 10h Barcelona CPU.
51248
51249     'shanghai'
51250          AMD Family 10h Shanghai CPU.
51251
51252     'istanbul'
51253          AMD Family 10h Istanbul CPU.
51254
51255     'btver1'
51256          AMD Family 14h CPU.
51257
51258     'amdfam15h'
51259          AMD Family 15h CPU.
51260
51261     'bdver1'
51262          AMD Family 15h Bulldozer version 1.
51263
51264     'bdver2'
51265          AMD Family 15h Bulldozer version 2.
51266
51267     'bdver3'
51268          AMD Family 15h Bulldozer version 3.
51269
51270     'bdver4'
51271          AMD Family 15h Bulldozer version 4.
51272
51273     'btver2'
51274          AMD Family 16h CPU.
51275
51276     'amdfam17h'
51277          AMD Family 17h CPU.
51278
51279     'znver1'
51280          AMD Family 17h Zen version 1.
51281
51282     'znver2'
51283          AMD Family 17h Zen version 2.
51284
51285     'amdfam19h'
51286          AMD Family 19h CPU.
51287
51288     'znver3'
51289          AMD Family 19h Zen version 3.
51290
51291     Here is an example:
51292          if (__builtin_cpu_is ("corei7"))
51293            {
51294               do_corei7 (); // Core i7 specific implementation.
51295            }
51296          else
51297            {
51298               do_generic (); // Generic implementation.
51299            }
51300
51301 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
51302     This function returns a positive integer if the run-time CPU
51303     supports FEATURE and returns '0' otherwise.  The following features
51304     can be detected:
51305
51306     'cmov'
51307          CMOV instruction.
51308     'mmx'
51309          MMX instructions.
51310     'popcnt'
51311          POPCNT instruction.
51312     'sse'
51313          SSE instructions.
51314     'sse2'
51315          SSE2 instructions.
51316     'sse3'
51317          SSE3 instructions.
51318     'ssse3'
51319          SSSE3 instructions.
51320     'sse4.1'
51321          SSE4.1 instructions.
51322     'sse4.2'
51323          SSE4.2 instructions.
51324     'avx'
51325          AVX instructions.
51326     'avx2'
51327          AVX2 instructions.
51328     'sse4a'
51329          SSE4A instructions.
51330     'fma4'
51331          FMA4 instructions.
51332     'xop'
51333          XOP instructions.
51334     'fma'
51335          FMA instructions.
51336     'avx512f'
51337          AVX512F instructions.
51338     'bmi'
51339          BMI instructions.
51340     'bmi2'
51341          BMI2 instructions.
51342     'aes'
51343          AES instructions.
51344     'pclmul'
51345          PCLMUL instructions.
51346     'avx512vl'
51347          AVX512VL instructions.
51348     'avx512bw'
51349          AVX512BW instructions.
51350     'avx512dq'
51351          AVX512DQ instructions.
51352     'avx512cd'
51353          AVX512CD instructions.
51354     'avx512er'
51355          AVX512ER instructions.
51356     'avx512pf'
51357          AVX512PF instructions.
51358     'avx512vbmi'
51359          AVX512VBMI instructions.
51360     'avx512ifma'
51361          AVX512IFMA instructions.
51362     'avx5124vnniw'
51363          AVX5124VNNIW instructions.
51364     'avx5124fmaps'
51365          AVX5124FMAPS instructions.
51366     'avx512vpopcntdq'
51367          AVX512VPOPCNTDQ instructions.
51368     'avx512vbmi2'
51369          AVX512VBMI2 instructions.
51370     'gfni'
51371          GFNI instructions.
51372     'vpclmulqdq'
51373          VPCLMULQDQ instructions.
51374     'avx512vnni'
51375          AVX512VNNI instructions.
51376     'avx512bitalg'
51377          AVX512BITALG instructions.
51378
51379     Here is an example:
51380          if (__builtin_cpu_supports ("popcnt"))
51381            {
51382               asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
51383            }
51384          else
51385            {
51386               count = generic_countbits (n); //generic implementation.
51387            }
51388
51389 The following built-in functions are made available by '-mmmx'.  All of
51390them generate the machine instruction that is part of the name.
51391
51392     v8qi __builtin_ia32_paddb (v8qi, v8qi)
51393     v4hi __builtin_ia32_paddw (v4hi, v4hi)
51394     v2si __builtin_ia32_paddd (v2si, v2si)
51395     v8qi __builtin_ia32_psubb (v8qi, v8qi)
51396     v4hi __builtin_ia32_psubw (v4hi, v4hi)
51397     v2si __builtin_ia32_psubd (v2si, v2si)
51398     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
51399     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
51400     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
51401     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
51402     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
51403     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
51404     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
51405     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
51406     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
51407     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
51408     di __builtin_ia32_pand (di, di)
51409     di __builtin_ia32_pandn (di,di)
51410     di __builtin_ia32_por (di, di)
51411     di __builtin_ia32_pxor (di, di)
51412     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
51413     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
51414     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
51415     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
51416     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
51417     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
51418     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
51419     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
51420     v2si __builtin_ia32_punpckhdq (v2si, v2si)
51421     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
51422     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
51423     v2si __builtin_ia32_punpckldq (v2si, v2si)
51424     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
51425     v4hi __builtin_ia32_packssdw (v2si, v2si)
51426     v8qi __builtin_ia32_packuswb (v4hi, v4hi)
51427
51428     v4hi __builtin_ia32_psllw (v4hi, v4hi)
51429     v2si __builtin_ia32_pslld (v2si, v2si)
51430     v1di __builtin_ia32_psllq (v1di, v1di)
51431     v4hi __builtin_ia32_psrlw (v4hi, v4hi)
51432     v2si __builtin_ia32_psrld (v2si, v2si)
51433     v1di __builtin_ia32_psrlq (v1di, v1di)
51434     v4hi __builtin_ia32_psraw (v4hi, v4hi)
51435     v2si __builtin_ia32_psrad (v2si, v2si)
51436     v4hi __builtin_ia32_psllwi (v4hi, int)
51437     v2si __builtin_ia32_pslldi (v2si, int)
51438     v1di __builtin_ia32_psllqi (v1di, int)
51439     v4hi __builtin_ia32_psrlwi (v4hi, int)
51440     v2si __builtin_ia32_psrldi (v2si, int)
51441     v1di __builtin_ia32_psrlqi (v1di, int)
51442     v4hi __builtin_ia32_psrawi (v4hi, int)
51443     v2si __builtin_ia32_psradi (v2si, int)
51444
51445
51446 The following built-in functions are made available either with
51447'-msse', or with '-m3dnowa'.  All of them generate the machine
51448instruction that is part of the name.
51449
51450     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
51451     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
51452     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
51453     v1di __builtin_ia32_psadbw (v8qi, v8qi)
51454     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
51455     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
51456     v8qi __builtin_ia32_pminub (v8qi, v8qi)
51457     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
51458     int __builtin_ia32_pmovmskb (v8qi)
51459     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
51460     void __builtin_ia32_movntq (di *, di)
51461     void __builtin_ia32_sfence (void)
51462
51463 The following built-in functions are available when '-msse' is used.
51464All of them generate the machine instruction that is part of the name.
51465
51466     int __builtin_ia32_comieq (v4sf, v4sf)
51467     int __builtin_ia32_comineq (v4sf, v4sf)
51468     int __builtin_ia32_comilt (v4sf, v4sf)
51469     int __builtin_ia32_comile (v4sf, v4sf)
51470     int __builtin_ia32_comigt (v4sf, v4sf)
51471     int __builtin_ia32_comige (v4sf, v4sf)
51472     int __builtin_ia32_ucomieq (v4sf, v4sf)
51473     int __builtin_ia32_ucomineq (v4sf, v4sf)
51474     int __builtin_ia32_ucomilt (v4sf, v4sf)
51475     int __builtin_ia32_ucomile (v4sf, v4sf)
51476     int __builtin_ia32_ucomigt (v4sf, v4sf)
51477     int __builtin_ia32_ucomige (v4sf, v4sf)
51478     v4sf __builtin_ia32_addps (v4sf, v4sf)
51479     v4sf __builtin_ia32_subps (v4sf, v4sf)
51480     v4sf __builtin_ia32_mulps (v4sf, v4sf)
51481     v4sf __builtin_ia32_divps (v4sf, v4sf)
51482     v4sf __builtin_ia32_addss (v4sf, v4sf)
51483     v4sf __builtin_ia32_subss (v4sf, v4sf)
51484     v4sf __builtin_ia32_mulss (v4sf, v4sf)
51485     v4sf __builtin_ia32_divss (v4sf, v4sf)
51486     v4sf __builtin_ia32_cmpeqps (v4sf, v4sf)
51487     v4sf __builtin_ia32_cmpltps (v4sf, v4sf)
51488     v4sf __builtin_ia32_cmpleps (v4sf, v4sf)
51489     v4sf __builtin_ia32_cmpgtps (v4sf, v4sf)
51490     v4sf __builtin_ia32_cmpgeps (v4sf, v4sf)
51491     v4sf __builtin_ia32_cmpunordps (v4sf, v4sf)
51492     v4sf __builtin_ia32_cmpneqps (v4sf, v4sf)
51493     v4sf __builtin_ia32_cmpnltps (v4sf, v4sf)
51494     v4sf __builtin_ia32_cmpnleps (v4sf, v4sf)
51495     v4sf __builtin_ia32_cmpngtps (v4sf, v4sf)
51496     v4sf __builtin_ia32_cmpngeps (v4sf, v4sf)
51497     v4sf __builtin_ia32_cmpordps (v4sf, v4sf)
51498     v4sf __builtin_ia32_cmpeqss (v4sf, v4sf)
51499     v4sf __builtin_ia32_cmpltss (v4sf, v4sf)
51500     v4sf __builtin_ia32_cmpless (v4sf, v4sf)
51501     v4sf __builtin_ia32_cmpunordss (v4sf, v4sf)
51502     v4sf __builtin_ia32_cmpneqss (v4sf, v4sf)
51503     v4sf __builtin_ia32_cmpnltss (v4sf, v4sf)
51504     v4sf __builtin_ia32_cmpnless (v4sf, v4sf)
51505     v4sf __builtin_ia32_cmpordss (v4sf, v4sf)
51506     v4sf __builtin_ia32_maxps (v4sf, v4sf)
51507     v4sf __builtin_ia32_maxss (v4sf, v4sf)
51508     v4sf __builtin_ia32_minps (v4sf, v4sf)
51509     v4sf __builtin_ia32_minss (v4sf, v4sf)
51510     v4sf __builtin_ia32_andps (v4sf, v4sf)
51511     v4sf __builtin_ia32_andnps (v4sf, v4sf)
51512     v4sf __builtin_ia32_orps (v4sf, v4sf)
51513     v4sf __builtin_ia32_xorps (v4sf, v4sf)
51514     v4sf __builtin_ia32_movss (v4sf, v4sf)
51515     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
51516     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
51517     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
51518     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
51519     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
51520     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
51521     v2si __builtin_ia32_cvtps2pi (v4sf)
51522     int __builtin_ia32_cvtss2si (v4sf)
51523     v2si __builtin_ia32_cvttps2pi (v4sf)
51524     int __builtin_ia32_cvttss2si (v4sf)
51525     v4sf __builtin_ia32_rcpps (v4sf)
51526     v4sf __builtin_ia32_rsqrtps (v4sf)
51527     v4sf __builtin_ia32_sqrtps (v4sf)
51528     v4sf __builtin_ia32_rcpss (v4sf)
51529     v4sf __builtin_ia32_rsqrtss (v4sf)
51530     v4sf __builtin_ia32_sqrtss (v4sf)
51531     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
51532     void __builtin_ia32_movntps (float *, v4sf)
51533     int __builtin_ia32_movmskps (v4sf)
51534
51535 The following built-in functions are available when '-msse' is used.
51536
51537'v4sf __builtin_ia32_loadups (float *)'
51538     Generates the 'movups' machine instruction as a load from memory.
51539'void __builtin_ia32_storeups (float *, v4sf)'
51540     Generates the 'movups' machine instruction as a store to memory.
51541'v4sf __builtin_ia32_loadss (float *)'
51542     Generates the 'movss' machine instruction as a load from memory.
51543'v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
51544     Generates the 'movhps' machine instruction as a load from memory.
51545'v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
51546     Generates the 'movlps' machine instruction as a load from memory
51547'void __builtin_ia32_storehps (v2sf *, v4sf)'
51548     Generates the 'movhps' machine instruction as a store to memory.
51549'void __builtin_ia32_storelps (v2sf *, v4sf)'
51550     Generates the 'movlps' machine instruction as a store to memory.
51551
51552 The following built-in functions are available when '-msse2' is used.
51553All of them generate the machine instruction that is part of the name.
51554
51555     int __builtin_ia32_comisdeq (v2df, v2df)
51556     int __builtin_ia32_comisdlt (v2df, v2df)
51557     int __builtin_ia32_comisdle (v2df, v2df)
51558     int __builtin_ia32_comisdgt (v2df, v2df)
51559     int __builtin_ia32_comisdge (v2df, v2df)
51560     int __builtin_ia32_comisdneq (v2df, v2df)
51561     int __builtin_ia32_ucomisdeq (v2df, v2df)
51562     int __builtin_ia32_ucomisdlt (v2df, v2df)
51563     int __builtin_ia32_ucomisdle (v2df, v2df)
51564     int __builtin_ia32_ucomisdgt (v2df, v2df)
51565     int __builtin_ia32_ucomisdge (v2df, v2df)
51566     int __builtin_ia32_ucomisdneq (v2df, v2df)
51567     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
51568     v2df __builtin_ia32_cmpltpd (v2df, v2df)
51569     v2df __builtin_ia32_cmplepd (v2df, v2df)
51570     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
51571     v2df __builtin_ia32_cmpgepd (v2df, v2df)
51572     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
51573     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
51574     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
51575     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
51576     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
51577     v2df __builtin_ia32_cmpngepd (v2df, v2df)
51578     v2df __builtin_ia32_cmpordpd (v2df, v2df)
51579     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
51580     v2df __builtin_ia32_cmpltsd (v2df, v2df)
51581     v2df __builtin_ia32_cmplesd (v2df, v2df)
51582     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
51583     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
51584     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
51585     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
51586     v2df __builtin_ia32_cmpordsd (v2df, v2df)
51587     v2di __builtin_ia32_paddq (v2di, v2di)
51588     v2di __builtin_ia32_psubq (v2di, v2di)
51589     v2df __builtin_ia32_addpd (v2df, v2df)
51590     v2df __builtin_ia32_subpd (v2df, v2df)
51591     v2df __builtin_ia32_mulpd (v2df, v2df)
51592     v2df __builtin_ia32_divpd (v2df, v2df)
51593     v2df __builtin_ia32_addsd (v2df, v2df)
51594     v2df __builtin_ia32_subsd (v2df, v2df)
51595     v2df __builtin_ia32_mulsd (v2df, v2df)
51596     v2df __builtin_ia32_divsd (v2df, v2df)
51597     v2df __builtin_ia32_minpd (v2df, v2df)
51598     v2df __builtin_ia32_maxpd (v2df, v2df)
51599     v2df __builtin_ia32_minsd (v2df, v2df)
51600     v2df __builtin_ia32_maxsd (v2df, v2df)
51601     v2df __builtin_ia32_andpd (v2df, v2df)
51602     v2df __builtin_ia32_andnpd (v2df, v2df)
51603     v2df __builtin_ia32_orpd (v2df, v2df)
51604     v2df __builtin_ia32_xorpd (v2df, v2df)
51605     v2df __builtin_ia32_movsd (v2df, v2df)
51606     v2df __builtin_ia32_unpckhpd (v2df, v2df)
51607     v2df __builtin_ia32_unpcklpd (v2df, v2df)
51608     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
51609     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
51610     v4si __builtin_ia32_paddd128 (v4si, v4si)
51611     v2di __builtin_ia32_paddq128 (v2di, v2di)
51612     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
51613     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
51614     v4si __builtin_ia32_psubd128 (v4si, v4si)
51615     v2di __builtin_ia32_psubq128 (v2di, v2di)
51616     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
51617     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
51618     v2di __builtin_ia32_pand128 (v2di, v2di)
51619     v2di __builtin_ia32_pandn128 (v2di, v2di)
51620     v2di __builtin_ia32_por128 (v2di, v2di)
51621     v2di __builtin_ia32_pxor128 (v2di, v2di)
51622     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
51623     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
51624     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
51625     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
51626     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
51627     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
51628     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
51629     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
51630     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
51631     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
51632     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
51633     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
51634     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
51635     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
51636     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
51637     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
51638     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
51639     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
51640     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
51641     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
51642     v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
51643     v8hi __builtin_ia32_packssdw128 (v4si, v4si)
51644     v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
51645     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
51646     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
51647     v2df __builtin_ia32_loadupd (double *)
51648     void __builtin_ia32_storeupd (double *, v2df)
51649     v2df __builtin_ia32_loadhpd (v2df, double const *)
51650     v2df __builtin_ia32_loadlpd (v2df, double const *)
51651     int __builtin_ia32_movmskpd (v2df)
51652     int __builtin_ia32_pmovmskb128 (v16qi)
51653     void __builtin_ia32_movnti (int *, int)
51654     void __builtin_ia32_movnti64 (long long int *, long long int)
51655     void __builtin_ia32_movntpd (double *, v2df)
51656     void __builtin_ia32_movntdq (v2df *, v2df)
51657     v4si __builtin_ia32_pshufd (v4si, int)
51658     v8hi __builtin_ia32_pshuflw (v8hi, int)
51659     v8hi __builtin_ia32_pshufhw (v8hi, int)
51660     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
51661     v2df __builtin_ia32_sqrtpd (v2df)
51662     v2df __builtin_ia32_sqrtsd (v2df)
51663     v2df __builtin_ia32_shufpd (v2df, v2df, int)
51664     v2df __builtin_ia32_cvtdq2pd (v4si)
51665     v4sf __builtin_ia32_cvtdq2ps (v4si)
51666     v4si __builtin_ia32_cvtpd2dq (v2df)
51667     v2si __builtin_ia32_cvtpd2pi (v2df)
51668     v4sf __builtin_ia32_cvtpd2ps (v2df)
51669     v4si __builtin_ia32_cvttpd2dq (v2df)
51670     v2si __builtin_ia32_cvttpd2pi (v2df)
51671     v2df __builtin_ia32_cvtpi2pd (v2si)
51672     int __builtin_ia32_cvtsd2si (v2df)
51673     int __builtin_ia32_cvttsd2si (v2df)
51674     long long __builtin_ia32_cvtsd2si64 (v2df)
51675     long long __builtin_ia32_cvttsd2si64 (v2df)
51676     v4si __builtin_ia32_cvtps2dq (v4sf)
51677     v2df __builtin_ia32_cvtps2pd (v4sf)
51678     v4si __builtin_ia32_cvttps2dq (v4sf)
51679     v2df __builtin_ia32_cvtsi2sd (v2df, int)
51680     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
51681     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
51682     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
51683     void __builtin_ia32_clflush (const void *)
51684     void __builtin_ia32_lfence (void)
51685     void __builtin_ia32_mfence (void)
51686     v16qi __builtin_ia32_loaddqu (const char *)
51687     void __builtin_ia32_storedqu (char *, v16qi)
51688     v1di __builtin_ia32_pmuludq (v2si, v2si)
51689     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
51690     v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
51691     v4si __builtin_ia32_pslld128 (v4si, v4si)
51692     v2di __builtin_ia32_psllq128 (v2di, v2di)
51693     v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
51694     v4si __builtin_ia32_psrld128 (v4si, v4si)
51695     v2di __builtin_ia32_psrlq128 (v2di, v2di)
51696     v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
51697     v4si __builtin_ia32_psrad128 (v4si, v4si)
51698     v2di __builtin_ia32_pslldqi128 (v2di, int)
51699     v8hi __builtin_ia32_psllwi128 (v8hi, int)
51700     v4si __builtin_ia32_pslldi128 (v4si, int)
51701     v2di __builtin_ia32_psllqi128 (v2di, int)
51702     v2di __builtin_ia32_psrldqi128 (v2di, int)
51703     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
51704     v4si __builtin_ia32_psrldi128 (v4si, int)
51705     v2di __builtin_ia32_psrlqi128 (v2di, int)
51706     v8hi __builtin_ia32_psrawi128 (v8hi, int)
51707     v4si __builtin_ia32_psradi128 (v4si, int)
51708     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
51709     v2di __builtin_ia32_movq128 (v2di)
51710
51711 The following built-in functions are available when '-msse3' is used.
51712All of them generate the machine instruction that is part of the name.
51713
51714     v2df __builtin_ia32_addsubpd (v2df, v2df)
51715     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
51716     v2df __builtin_ia32_haddpd (v2df, v2df)
51717     v4sf __builtin_ia32_haddps (v4sf, v4sf)
51718     v2df __builtin_ia32_hsubpd (v2df, v2df)
51719     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
51720     v16qi __builtin_ia32_lddqu (char const *)
51721     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
51722     v4sf __builtin_ia32_movshdup (v4sf)
51723     v4sf __builtin_ia32_movsldup (v4sf)
51724     void __builtin_ia32_mwait (unsigned int, unsigned int)
51725
51726 The following built-in functions are available when '-mssse3' is used.
51727All of them generate the machine instruction that is part of the name.
51728
51729     v2si __builtin_ia32_phaddd (v2si, v2si)
51730     v4hi __builtin_ia32_phaddw (v4hi, v4hi)
51731     v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
51732     v2si __builtin_ia32_phsubd (v2si, v2si)
51733     v4hi __builtin_ia32_phsubw (v4hi, v4hi)
51734     v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
51735     v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
51736     v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
51737     v8qi __builtin_ia32_pshufb (v8qi, v8qi)
51738     v8qi __builtin_ia32_psignb (v8qi, v8qi)
51739     v2si __builtin_ia32_psignd (v2si, v2si)
51740     v4hi __builtin_ia32_psignw (v4hi, v4hi)
51741     v1di __builtin_ia32_palignr (v1di, v1di, int)
51742     v8qi __builtin_ia32_pabsb (v8qi)
51743     v2si __builtin_ia32_pabsd (v2si)
51744     v4hi __builtin_ia32_pabsw (v4hi)
51745
51746 The following built-in functions are available when '-mssse3' is used.
51747All of them generate the machine instruction that is part of the name.
51748
51749     v4si __builtin_ia32_phaddd128 (v4si, v4si)
51750     v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
51751     v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
51752     v4si __builtin_ia32_phsubd128 (v4si, v4si)
51753     v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
51754     v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
51755     v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
51756     v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
51757     v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
51758     v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
51759     v4si __builtin_ia32_psignd128 (v4si, v4si)
51760     v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
51761     v2di __builtin_ia32_palignr128 (v2di, v2di, int)
51762     v16qi __builtin_ia32_pabsb128 (v16qi)
51763     v4si __builtin_ia32_pabsd128 (v4si)
51764     v8hi __builtin_ia32_pabsw128 (v8hi)
51765
51766 The following built-in functions are available when '-msse4.1' is used.
51767All of them generate the machine instruction that is part of the name.
51768
51769     v2df __builtin_ia32_blendpd (v2df, v2df, const int)
51770     v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
51771     v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
51772     v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
51773     v2df __builtin_ia32_dppd (v2df, v2df, const int)
51774     v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
51775     v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
51776     v2di __builtin_ia32_movntdqa (v2di *);
51777     v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
51778     v8hi __builtin_ia32_packusdw128 (v4si, v4si)
51779     v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
51780     v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
51781     v2di __builtin_ia32_pcmpeqq (v2di, v2di)
51782     v8hi __builtin_ia32_phminposuw128 (v8hi)
51783     v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
51784     v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
51785     v4si __builtin_ia32_pmaxud128 (v4si, v4si)
51786     v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
51787     v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
51788     v4si __builtin_ia32_pminsd128 (v4si, v4si)
51789     v4si __builtin_ia32_pminud128 (v4si, v4si)
51790     v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
51791     v4si __builtin_ia32_pmovsxbd128 (v16qi)
51792     v2di __builtin_ia32_pmovsxbq128 (v16qi)
51793     v8hi __builtin_ia32_pmovsxbw128 (v16qi)
51794     v2di __builtin_ia32_pmovsxdq128 (v4si)
51795     v4si __builtin_ia32_pmovsxwd128 (v8hi)
51796     v2di __builtin_ia32_pmovsxwq128 (v8hi)
51797     v4si __builtin_ia32_pmovzxbd128 (v16qi)
51798     v2di __builtin_ia32_pmovzxbq128 (v16qi)
51799     v8hi __builtin_ia32_pmovzxbw128 (v16qi)
51800     v2di __builtin_ia32_pmovzxdq128 (v4si)
51801     v4si __builtin_ia32_pmovzxwd128 (v8hi)
51802     v2di __builtin_ia32_pmovzxwq128 (v8hi)
51803     v2di __builtin_ia32_pmuldq128 (v4si, v4si)
51804     v4si __builtin_ia32_pmulld128 (v4si, v4si)
51805     int __builtin_ia32_ptestc128 (v2di, v2di)
51806     int __builtin_ia32_ptestnzc128 (v2di, v2di)
51807     int __builtin_ia32_ptestz128 (v2di, v2di)
51808     v2df __builtin_ia32_roundpd (v2df, const int)
51809     v4sf __builtin_ia32_roundps (v4sf, const int)
51810     v2df __builtin_ia32_roundsd (v2df, v2df, const int)
51811     v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
51812
51813 The following built-in functions are available when '-msse4.1' is used.
51814
51815'v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
51816     Generates the 'insertps' machine instruction.
51817'int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
51818     Generates the 'pextrb' machine instruction.
51819'v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
51820     Generates the 'pinsrb' machine instruction.
51821'v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
51822     Generates the 'pinsrd' machine instruction.
51823'v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
51824     Generates the 'pinsrq' machine instruction in 64bit mode.
51825
51826 The following built-in functions are changed to generate new SSE4.1
51827instructions when '-msse4.1' is used.
51828
51829'float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
51830     Generates the 'extractps' machine instruction.
51831'int __builtin_ia32_vec_ext_v4si (v4si, const int)'
51832     Generates the 'pextrd' machine instruction.
51833'long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
51834     Generates the 'pextrq' machine instruction in 64bit mode.
51835
51836 The following built-in functions are available when '-msse4.2' is used.
51837All of them generate the machine instruction that is part of the name.
51838
51839     v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
51840     int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
51841     int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
51842     int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
51843     int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
51844     int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
51845     int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
51846     v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
51847     int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
51848     int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
51849     int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
51850     int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
51851     int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
51852     int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
51853     v2di __builtin_ia32_pcmpgtq (v2di, v2di)
51854
51855 The following built-in functions are available when '-msse4.2' is used.
51856
51857'unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
51858     Generates the 'crc32b' machine instruction.
51859'unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
51860     Generates the 'crc32w' machine instruction.
51861'unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
51862     Generates the 'crc32l' machine instruction.
51863'unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
51864     Generates the 'crc32q' machine instruction.
51865
51866 The following built-in functions are changed to generate new SSE4.2
51867instructions when '-msse4.2' is used.
51868
51869'int __builtin_popcount (unsigned int)'
51870     Generates the 'popcntl' machine instruction.
51871'int __builtin_popcountl (unsigned long)'
51872     Generates the 'popcntl' or 'popcntq' machine instruction, depending
51873     on the size of 'unsigned long'.
51874'int __builtin_popcountll (unsigned long long)'
51875     Generates the 'popcntq' machine instruction.
51876
51877 The following built-in functions are available when '-mavx' is used.
51878All of them generate the machine instruction that is part of the name.
51879
51880     v4df __builtin_ia32_addpd256 (v4df,v4df)
51881     v8sf __builtin_ia32_addps256 (v8sf,v8sf)
51882     v4df __builtin_ia32_addsubpd256 (v4df,v4df)
51883     v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
51884     v4df __builtin_ia32_andnpd256 (v4df,v4df)
51885     v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
51886     v4df __builtin_ia32_andpd256 (v4df,v4df)
51887     v8sf __builtin_ia32_andps256 (v8sf,v8sf)
51888     v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
51889     v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
51890     v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
51891     v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
51892     v2df __builtin_ia32_cmppd (v2df,v2df,int)
51893     v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
51894     v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
51895     v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
51896     v2df __builtin_ia32_cmpsd (v2df,v2df,int)
51897     v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
51898     v4df __builtin_ia32_cvtdq2pd256 (v4si)
51899     v8sf __builtin_ia32_cvtdq2ps256 (v8si)
51900     v4si __builtin_ia32_cvtpd2dq256 (v4df)
51901     v4sf __builtin_ia32_cvtpd2ps256 (v4df)
51902     v8si __builtin_ia32_cvtps2dq256 (v8sf)
51903     v4df __builtin_ia32_cvtps2pd256 (v4sf)
51904     v4si __builtin_ia32_cvttpd2dq256 (v4df)
51905     v8si __builtin_ia32_cvttps2dq256 (v8sf)
51906     v4df __builtin_ia32_divpd256 (v4df,v4df)
51907     v8sf __builtin_ia32_divps256 (v8sf,v8sf)
51908     v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
51909     v4df __builtin_ia32_haddpd256 (v4df,v4df)
51910     v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
51911     v4df __builtin_ia32_hsubpd256 (v4df,v4df)
51912     v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
51913     v32qi __builtin_ia32_lddqu256 (pcchar)
51914     v32qi __builtin_ia32_loaddqu256 (pcchar)
51915     v4df __builtin_ia32_loadupd256 (pcdouble)
51916     v8sf __builtin_ia32_loadups256 (pcfloat)
51917     v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
51918     v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
51919     v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
51920     v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
51921     void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
51922     void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
51923     void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
51924     void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
51925     v4df __builtin_ia32_maxpd256 (v4df,v4df)
51926     v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
51927     v4df __builtin_ia32_minpd256 (v4df,v4df)
51928     v8sf __builtin_ia32_minps256 (v8sf,v8sf)
51929     v4df __builtin_ia32_movddup256 (v4df)
51930     int __builtin_ia32_movmskpd256 (v4df)
51931     int __builtin_ia32_movmskps256 (v8sf)
51932     v8sf __builtin_ia32_movshdup256 (v8sf)
51933     v8sf __builtin_ia32_movsldup256 (v8sf)
51934     v4df __builtin_ia32_mulpd256 (v4df,v4df)
51935     v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
51936     v4df __builtin_ia32_orpd256 (v4df,v4df)
51937     v8sf __builtin_ia32_orps256 (v8sf,v8sf)
51938     v2df __builtin_ia32_pd_pd256 (v4df)
51939     v4df __builtin_ia32_pd256_pd (v2df)
51940     v4sf __builtin_ia32_ps_ps256 (v8sf)
51941     v8sf __builtin_ia32_ps256_ps (v4sf)
51942     int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
51943     int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
51944     int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
51945     v8sf __builtin_ia32_rcpps256 (v8sf)
51946     v4df __builtin_ia32_roundpd256 (v4df,int)
51947     v8sf __builtin_ia32_roundps256 (v8sf,int)
51948     v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
51949     v8sf __builtin_ia32_rsqrtps256 (v8sf)
51950     v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
51951     v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
51952     v4si __builtin_ia32_si_si256 (v8si)
51953     v8si __builtin_ia32_si256_si (v4si)
51954     v4df __builtin_ia32_sqrtpd256 (v4df)
51955     v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
51956     v8sf __builtin_ia32_sqrtps256 (v8sf)
51957     void __builtin_ia32_storedqu256 (pchar,v32qi)
51958     void __builtin_ia32_storeupd256 (pdouble,v4df)
51959     void __builtin_ia32_storeups256 (pfloat,v8sf)
51960     v4df __builtin_ia32_subpd256 (v4df,v4df)
51961     v8sf __builtin_ia32_subps256 (v8sf,v8sf)
51962     v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
51963     v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
51964     v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
51965     v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
51966     v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
51967     v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
51968     v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
51969     v4sf __builtin_ia32_vbroadcastss (pcfloat)
51970     v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
51971     v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
51972     v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
51973     v4si __builtin_ia32_vextractf128_si256 (v8si,int)
51974     v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
51975     v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
51976     v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
51977     v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
51978     v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
51979     v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
51980     v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
51981     v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
51982     v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
51983     v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
51984     v2df __builtin_ia32_vpermilpd (v2df,int)
51985     v4df __builtin_ia32_vpermilpd256 (v4df,int)
51986     v4sf __builtin_ia32_vpermilps (v4sf,int)
51987     v8sf __builtin_ia32_vpermilps256 (v8sf,int)
51988     v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
51989     v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
51990     v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
51991     v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
51992     int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
51993     int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
51994     int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
51995     int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
51996     int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
51997     int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
51998     int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
51999     int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
52000     int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
52001     int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
52002     int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
52003     int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
52004     void __builtin_ia32_vzeroall (void)
52005     void __builtin_ia32_vzeroupper (void)
52006     v4df __builtin_ia32_xorpd256 (v4df,v4df)
52007     v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
52008
52009 The following built-in functions are available when '-mavx2' is used.
52010All of them generate the machine instruction that is part of the name.
52011
52012     v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int)
52013     v32qi __builtin_ia32_pabsb256 (v32qi)
52014     v16hi __builtin_ia32_pabsw256 (v16hi)
52015     v8si __builtin_ia32_pabsd256 (v8si)
52016     v16hi __builtin_ia32_packssdw256 (v8si,v8si)
52017     v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
52018     v16hi __builtin_ia32_packusdw256 (v8si,v8si)
52019     v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
52020     v32qi __builtin_ia32_paddb256 (v32qi,v32qi)
52021     v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
52022     v8si __builtin_ia32_paddd256 (v8si,v8si)
52023     v4di __builtin_ia32_paddq256 (v4di,v4di)
52024     v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
52025     v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
52026     v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
52027     v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
52028     v4di __builtin_ia32_palignr256 (v4di,v4di,int)
52029     v4di __builtin_ia32_andsi256 (v4di,v4di)
52030     v4di __builtin_ia32_andnotsi256 (v4di,v4di)
52031     v32qi __builtin_ia32_pavgb256 (v32qi,v32qi)
52032     v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
52033     v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
52034     v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
52035     v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
52036     v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
52037     v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
52038     v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
52039     v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
52040     v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
52041     v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
52042     v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
52043     v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
52044     v8si __builtin_ia32_phaddd256 (v8si,v8si)
52045     v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
52046     v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
52047     v8si __builtin_ia32_phsubd256 (v8si,v8si)
52048     v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
52049     v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
52050     v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
52051     v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
52052     v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
52053     v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
52054     v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
52055     v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
52056     v8si __builtin_ia32_pmaxud256 (v8si,v8si)
52057     v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
52058     v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
52059     v8si __builtin_ia32_pminsd256 (v8si,v8si)
52060     v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
52061     v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
52062     v8si __builtin_ia32_pminud256 (v8si,v8si)
52063     int __builtin_ia32_pmovmskb256 (v32qi)
52064     v16hi __builtin_ia32_pmovsxbw256 (v16qi)
52065     v8si __builtin_ia32_pmovsxbd256 (v16qi)
52066     v4di __builtin_ia32_pmovsxbq256 (v16qi)
52067     v8si __builtin_ia32_pmovsxwd256 (v8hi)
52068     v4di __builtin_ia32_pmovsxwq256 (v8hi)
52069     v4di __builtin_ia32_pmovsxdq256 (v4si)
52070     v16hi __builtin_ia32_pmovzxbw256 (v16qi)
52071     v8si __builtin_ia32_pmovzxbd256 (v16qi)
52072     v4di __builtin_ia32_pmovzxbq256 (v16qi)
52073     v8si __builtin_ia32_pmovzxwd256 (v8hi)
52074     v4di __builtin_ia32_pmovzxwq256 (v8hi)
52075     v4di __builtin_ia32_pmovzxdq256 (v4si)
52076     v4di __builtin_ia32_pmuldq256 (v8si,v8si)
52077     v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
52078     v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
52079     v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
52080     v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
52081     v8si __builtin_ia32_pmulld256 (v8si,v8si)
52082     v4di __builtin_ia32_pmuludq256 (v8si,v8si)
52083     v4di __builtin_ia32_por256 (v4di,v4di)
52084     v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
52085     v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
52086     v8si __builtin_ia32_pshufd256 (v8si,int)
52087     v16hi __builtin_ia32_pshufhw256 (v16hi,int)
52088     v16hi __builtin_ia32_pshuflw256 (v16hi,int)
52089     v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
52090     v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
52091     v8si __builtin_ia32_psignd256 (v8si,v8si)
52092     v4di __builtin_ia32_pslldqi256 (v4di,int)
52093     v16hi __builtin_ia32_psllwi256 (16hi,int)
52094     v16hi __builtin_ia32_psllw256(v16hi,v8hi)
52095     v8si __builtin_ia32_pslldi256 (v8si,int)
52096     v8si __builtin_ia32_pslld256(v8si,v4si)
52097     v4di __builtin_ia32_psllqi256 (v4di,int)
52098     v4di __builtin_ia32_psllq256(v4di,v2di)
52099     v16hi __builtin_ia32_psrawi256 (v16hi,int)
52100     v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
52101     v8si __builtin_ia32_psradi256 (v8si,int)
52102     v8si __builtin_ia32_psrad256 (v8si,v4si)
52103     v4di __builtin_ia32_psrldqi256 (v4di, int)
52104     v16hi __builtin_ia32_psrlwi256 (v16hi,int)
52105     v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
52106     v8si __builtin_ia32_psrldi256 (v8si,int)
52107     v8si __builtin_ia32_psrld256 (v8si,v4si)
52108     v4di __builtin_ia32_psrlqi256 (v4di,int)
52109     v4di __builtin_ia32_psrlq256(v4di,v2di)
52110     v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
52111     v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
52112     v8si __builtin_ia32_psubd256 (v8si,v8si)
52113     v4di __builtin_ia32_psubq256 (v4di,v4di)
52114     v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
52115     v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
52116     v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
52117     v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
52118     v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
52119     v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
52120     v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
52121     v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
52122     v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
52123     v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
52124     v8si __builtin_ia32_punpckldq256 (v8si,v8si)
52125     v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
52126     v4di __builtin_ia32_pxor256 (v4di,v4di)
52127     v4di __builtin_ia32_movntdqa256 (pv4di)
52128     v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
52129     v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
52130     v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
52131     v4di __builtin_ia32_vbroadcastsi256 (v2di)
52132     v4si __builtin_ia32_pblendd128 (v4si,v4si)
52133     v8si __builtin_ia32_pblendd256 (v8si,v8si)
52134     v32qi __builtin_ia32_pbroadcastb256 (v16qi)
52135     v16hi __builtin_ia32_pbroadcastw256 (v8hi)
52136     v8si __builtin_ia32_pbroadcastd256 (v4si)
52137     v4di __builtin_ia32_pbroadcastq256 (v2di)
52138     v16qi __builtin_ia32_pbroadcastb128 (v16qi)
52139     v8hi __builtin_ia32_pbroadcastw128 (v8hi)
52140     v4si __builtin_ia32_pbroadcastd128 (v4si)
52141     v2di __builtin_ia32_pbroadcastq128 (v2di)
52142     v8si __builtin_ia32_permvarsi256 (v8si,v8si)
52143     v4df __builtin_ia32_permdf256 (v4df,int)
52144     v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
52145     v4di __builtin_ia32_permdi256 (v4di,int)
52146     v4di __builtin_ia32_permti256 (v4di,v4di,int)
52147     v4di __builtin_ia32_extract128i256 (v4di,int)
52148     v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
52149     v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
52150     v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
52151     v4si __builtin_ia32_maskloadd (pcv4si,v4si)
52152     v2di __builtin_ia32_maskloadq (pcv2di,v2di)
52153     void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
52154     void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
52155     void __builtin_ia32_maskstored (pv4si,v4si,v4si)
52156     void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
52157     v8si __builtin_ia32_psllv8si (v8si,v8si)
52158     v4si __builtin_ia32_psllv4si (v4si,v4si)
52159     v4di __builtin_ia32_psllv4di (v4di,v4di)
52160     v2di __builtin_ia32_psllv2di (v2di,v2di)
52161     v8si __builtin_ia32_psrav8si (v8si,v8si)
52162     v4si __builtin_ia32_psrav4si (v4si,v4si)
52163     v8si __builtin_ia32_psrlv8si (v8si,v8si)
52164     v4si __builtin_ia32_psrlv4si (v4si,v4si)
52165     v4di __builtin_ia32_psrlv4di (v4di,v4di)
52166     v2di __builtin_ia32_psrlv2di (v2di,v2di)
52167     v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
52168     v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
52169     v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
52170     v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
52171     v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
52172     v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
52173     v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
52174     v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
52175     v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
52176     v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
52177     v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
52178     v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
52179     v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
52180     v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
52181     v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
52182     v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)
52183
52184 The following built-in functions are available when '-maes' is used.
52185All of them generate the machine instruction that is part of the name.
52186
52187     v2di __builtin_ia32_aesenc128 (v2di, v2di)
52188     v2di __builtin_ia32_aesenclast128 (v2di, v2di)
52189     v2di __builtin_ia32_aesdec128 (v2di, v2di)
52190     v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
52191     v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
52192     v2di __builtin_ia32_aesimc128 (v2di)
52193
52194 The following built-in function is available when '-mpclmul' is used.
52195
52196'v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
52197     Generates the 'pclmulqdq' machine instruction.
52198
52199 The following built-in function is available when '-mfsgsbase' is used.
52200All of them generate the machine instruction that is part of the name.
52201
52202     unsigned int __builtin_ia32_rdfsbase32 (void)
52203     unsigned long long __builtin_ia32_rdfsbase64 (void)
52204     unsigned int __builtin_ia32_rdgsbase32 (void)
52205     unsigned long long __builtin_ia32_rdgsbase64 (void)
52206     void _writefsbase_u32 (unsigned int)
52207     void _writefsbase_u64 (unsigned long long)
52208     void _writegsbase_u32 (unsigned int)
52209     void _writegsbase_u64 (unsigned long long)
52210
52211 The following built-in function is available when '-mrdrnd' is used.
52212All of them generate the machine instruction that is part of the name.
52213
52214     unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
52215     unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
52216     unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
52217
52218 The following built-in function is available when '-mptwrite' is used.
52219All of them generate the machine instruction that is part of the name.
52220
52221     void __builtin_ia32_ptwrite32 (unsigned)
52222     void __builtin_ia32_ptwrite64 (unsigned long long)
52223
52224 The following built-in functions are available when '-msse4a' is used.
52225All of them generate the machine instruction that is part of the name.
52226
52227     void __builtin_ia32_movntsd (double *, v2df)
52228     void __builtin_ia32_movntss (float *, v4sf)
52229     v2di __builtin_ia32_extrq  (v2di, v16qi)
52230     v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
52231     v2di __builtin_ia32_insertq (v2di, v2di)
52232     v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
52233
52234 The following built-in functions are available when '-mxop' is used.
52235     v2df __builtin_ia32_vfrczpd (v2df)
52236     v4sf __builtin_ia32_vfrczps (v4sf)
52237     v2df __builtin_ia32_vfrczsd (v2df)
52238     v4sf __builtin_ia32_vfrczss (v4sf)
52239     v4df __builtin_ia32_vfrczpd256 (v4df)
52240     v8sf __builtin_ia32_vfrczps256 (v8sf)
52241     v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
52242     v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
52243     v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
52244     v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
52245     v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
52246     v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
52247     v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
52248     v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
52249     v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
52250     v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
52251     v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
52252     v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
52253     v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
52254     v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
52255     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
52256     v4si __builtin_ia32_vpcomeqd (v4si, v4si)
52257     v2di __builtin_ia32_vpcomeqq (v2di, v2di)
52258     v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
52259     v4si __builtin_ia32_vpcomequd (v4si, v4si)
52260     v2di __builtin_ia32_vpcomequq (v2di, v2di)
52261     v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
52262     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
52263     v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
52264     v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
52265     v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
52266     v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
52267     v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
52268     v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
52269     v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
52270     v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
52271     v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
52272     v4si __builtin_ia32_vpcomged (v4si, v4si)
52273     v2di __builtin_ia32_vpcomgeq (v2di, v2di)
52274     v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
52275     v4si __builtin_ia32_vpcomgeud (v4si, v4si)
52276     v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
52277     v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
52278     v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
52279     v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
52280     v4si __builtin_ia32_vpcomgtd (v4si, v4si)
52281     v2di __builtin_ia32_vpcomgtq (v2di, v2di)
52282     v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
52283     v4si __builtin_ia32_vpcomgtud (v4si, v4si)
52284     v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
52285     v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
52286     v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
52287     v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
52288     v4si __builtin_ia32_vpcomled (v4si, v4si)
52289     v2di __builtin_ia32_vpcomleq (v2di, v2di)
52290     v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
52291     v4si __builtin_ia32_vpcomleud (v4si, v4si)
52292     v2di __builtin_ia32_vpcomleuq (v2di, v2di)
52293     v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
52294     v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
52295     v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
52296     v4si __builtin_ia32_vpcomltd (v4si, v4si)
52297     v2di __builtin_ia32_vpcomltq (v2di, v2di)
52298     v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
52299     v4si __builtin_ia32_vpcomltud (v4si, v4si)
52300     v2di __builtin_ia32_vpcomltuq (v2di, v2di)
52301     v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
52302     v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
52303     v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
52304     v4si __builtin_ia32_vpcomned (v4si, v4si)
52305     v2di __builtin_ia32_vpcomneq (v2di, v2di)
52306     v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
52307     v4si __builtin_ia32_vpcomneud (v4si, v4si)
52308     v2di __builtin_ia32_vpcomneuq (v2di, v2di)
52309     v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
52310     v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
52311     v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
52312     v4si __builtin_ia32_vpcomtrued (v4si, v4si)
52313     v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
52314     v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
52315     v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
52316     v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
52317     v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
52318     v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
52319     v4si __builtin_ia32_vphaddbd (v16qi)
52320     v2di __builtin_ia32_vphaddbq (v16qi)
52321     v8hi __builtin_ia32_vphaddbw (v16qi)
52322     v2di __builtin_ia32_vphadddq (v4si)
52323     v4si __builtin_ia32_vphaddubd (v16qi)
52324     v2di __builtin_ia32_vphaddubq (v16qi)
52325     v8hi __builtin_ia32_vphaddubw (v16qi)
52326     v2di __builtin_ia32_vphaddudq (v4si)
52327     v4si __builtin_ia32_vphadduwd (v8hi)
52328     v2di __builtin_ia32_vphadduwq (v8hi)
52329     v4si __builtin_ia32_vphaddwd (v8hi)
52330     v2di __builtin_ia32_vphaddwq (v8hi)
52331     v8hi __builtin_ia32_vphsubbw (v16qi)
52332     v2di __builtin_ia32_vphsubdq (v4si)
52333     v4si __builtin_ia32_vphsubwd (v8hi)
52334     v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
52335     v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
52336     v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
52337     v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
52338     v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
52339     v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
52340     v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
52341     v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
52342     v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
52343     v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
52344     v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
52345     v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
52346     v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
52347     v16qi __builtin_ia32_vprotb (v16qi, v16qi)
52348     v4si __builtin_ia32_vprotd (v4si, v4si)
52349     v2di __builtin_ia32_vprotq (v2di, v2di)
52350     v8hi __builtin_ia32_vprotw (v8hi, v8hi)
52351     v16qi __builtin_ia32_vpshab (v16qi, v16qi)
52352     v4si __builtin_ia32_vpshad (v4si, v4si)
52353     v2di __builtin_ia32_vpshaq (v2di, v2di)
52354     v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
52355     v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
52356     v4si __builtin_ia32_vpshld (v4si, v4si)
52357     v2di __builtin_ia32_vpshlq (v2di, v2di)
52358     v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
52359
52360 The following built-in functions are available when '-mfma4' is used.
52361All of them generate the machine instruction that is part of the name.
52362
52363     v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df)
52364     v4sf __builtin_ia32_vfmaddps (v4sf, v4sf, v4sf)
52365     v2df __builtin_ia32_vfmaddsd (v2df, v2df, v2df)
52366     v4sf __builtin_ia32_vfmaddss (v4sf, v4sf, v4sf)
52367     v2df __builtin_ia32_vfmsubpd (v2df, v2df, v2df)
52368     v4sf __builtin_ia32_vfmsubps (v4sf, v4sf, v4sf)
52369     v2df __builtin_ia32_vfmsubsd (v2df, v2df, v2df)
52370     v4sf __builtin_ia32_vfmsubss (v4sf, v4sf, v4sf)
52371     v2df __builtin_ia32_vfnmaddpd (v2df, v2df, v2df)
52372     v4sf __builtin_ia32_vfnmaddps (v4sf, v4sf, v4sf)
52373     v2df __builtin_ia32_vfnmaddsd (v2df, v2df, v2df)
52374     v4sf __builtin_ia32_vfnmaddss (v4sf, v4sf, v4sf)
52375     v2df __builtin_ia32_vfnmsubpd (v2df, v2df, v2df)
52376     v4sf __builtin_ia32_vfnmsubps (v4sf, v4sf, v4sf)
52377     v2df __builtin_ia32_vfnmsubsd (v2df, v2df, v2df)
52378     v4sf __builtin_ia32_vfnmsubss (v4sf, v4sf, v4sf)
52379     v2df __builtin_ia32_vfmaddsubpd  (v2df, v2df, v2df)
52380     v4sf __builtin_ia32_vfmaddsubps  (v4sf, v4sf, v4sf)
52381     v2df __builtin_ia32_vfmsubaddpd  (v2df, v2df, v2df)
52382     v4sf __builtin_ia32_vfmsubaddps  (v4sf, v4sf, v4sf)
52383     v4df __builtin_ia32_vfmaddpd256 (v4df, v4df, v4df)
52384     v8sf __builtin_ia32_vfmaddps256 (v8sf, v8sf, v8sf)
52385     v4df __builtin_ia32_vfmsubpd256 (v4df, v4df, v4df)
52386     v8sf __builtin_ia32_vfmsubps256 (v8sf, v8sf, v8sf)
52387     v4df __builtin_ia32_vfnmaddpd256 (v4df, v4df, v4df)
52388     v8sf __builtin_ia32_vfnmaddps256 (v8sf, v8sf, v8sf)
52389     v4df __builtin_ia32_vfnmsubpd256 (v4df, v4df, v4df)
52390     v8sf __builtin_ia32_vfnmsubps256 (v8sf, v8sf, v8sf)
52391     v4df __builtin_ia32_vfmaddsubpd256 (v4df, v4df, v4df)
52392     v8sf __builtin_ia32_vfmaddsubps256 (v8sf, v8sf, v8sf)
52393     v4df __builtin_ia32_vfmsubaddpd256 (v4df, v4df, v4df)
52394     v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf)
52395
52396
52397 The following built-in functions are available when '-mlwp' is used.
52398
52399     void __builtin_ia32_llwpcb16 (void *);
52400     void __builtin_ia32_llwpcb32 (void *);
52401     void __builtin_ia32_llwpcb64 (void *);
52402     void * __builtin_ia32_llwpcb16 (void);
52403     void * __builtin_ia32_llwpcb32 (void);
52404     void * __builtin_ia32_llwpcb64 (void);
52405     void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
52406     void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
52407     void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
52408     unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
52409     unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
52410     unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
52411
52412 The following built-in functions are available when '-mbmi' is used.
52413All of them generate the machine instruction that is part of the name.
52414     unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
52415     unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
52416
52417 The following built-in functions are available when '-mbmi2' is used.
52418All of them generate the machine instruction that is part of the name.
52419     unsigned int _bzhi_u32 (unsigned int, unsigned int)
52420     unsigned int _pdep_u32 (unsigned int, unsigned int)
52421     unsigned int _pext_u32 (unsigned int, unsigned int)
52422     unsigned long long _bzhi_u64 (unsigned long long, unsigned long long)
52423     unsigned long long _pdep_u64 (unsigned long long, unsigned long long)
52424     unsigned long long _pext_u64 (unsigned long long, unsigned long long)
52425
52426 The following built-in functions are available when '-mlzcnt' is used.
52427All of them generate the machine instruction that is part of the name.
52428     unsigned short __builtin_ia32_lzcnt_u16(unsigned short);
52429     unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
52430     unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
52431
52432 The following built-in functions are available when '-mfxsr' is used.
52433All of them generate the machine instruction that is part of the name.
52434     void __builtin_ia32_fxsave (void *)
52435     void __builtin_ia32_fxrstor (void *)
52436     void __builtin_ia32_fxsave64 (void *)
52437     void __builtin_ia32_fxrstor64 (void *)
52438
52439 The following built-in functions are available when '-mxsave' is used.
52440All of them generate the machine instruction that is part of the name.
52441     void __builtin_ia32_xsave (void *, long long)
52442     void __builtin_ia32_xrstor (void *, long long)
52443     void __builtin_ia32_xsave64 (void *, long long)
52444     void __builtin_ia32_xrstor64 (void *, long long)
52445
52446 The following built-in functions are available when '-mxsaveopt' is
52447used.  All of them generate the machine instruction that is part of the
52448name.
52449     void __builtin_ia32_xsaveopt (void *, long long)
52450     void __builtin_ia32_xsaveopt64 (void *, long long)
52451
52452 The following built-in functions are available when '-mtbm' is used.
52453Both of them generate the immediate form of the bextr machine
52454instruction.
52455     unsigned int __builtin_ia32_bextri_u32 (unsigned int,
52456                                             const unsigned int);
52457     unsigned long long __builtin_ia32_bextri_u64 (unsigned long long,
52458                                                   const unsigned long long);
52459
52460 The following built-in functions are available when '-m3dnow' is used.
52461All of them generate the machine instruction that is part of the name.
52462
52463     void __builtin_ia32_femms (void)
52464     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
52465     v2si __builtin_ia32_pf2id (v2sf)
52466     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
52467     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
52468     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
52469     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
52470     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
52471     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
52472     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
52473     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
52474     v2sf __builtin_ia32_pfrcp (v2sf)
52475     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
52476     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
52477     v2sf __builtin_ia32_pfrsqrt (v2sf)
52478     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
52479     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
52480     v2sf __builtin_ia32_pi2fd (v2si)
52481     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
52482
52483 The following built-in functions are available when '-m3dnowa' is used.
52484All of them generate the machine instruction that is part of the name.
52485
52486     v2si __builtin_ia32_pf2iw (v2sf)
52487     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
52488     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
52489     v2sf __builtin_ia32_pi2fw (v2si)
52490     v2sf __builtin_ia32_pswapdsf (v2sf)
52491     v2si __builtin_ia32_pswapdsi (v2si)
52492
52493 The following built-in functions are available when '-mrtm' is used
52494They are used for restricted transactional memory.  These are the
52495internal low level functions.  Normally the functions in *note x86
52496transactional memory intrinsics:: should be used instead.
52497
52498     int __builtin_ia32_xbegin ()
52499     void __builtin_ia32_xend ()
52500     void __builtin_ia32_xabort (status)
52501     int __builtin_ia32_xtest ()
52502
52503 The following built-in functions are available when '-mmwaitx' is used.
52504All of them generate the machine instruction that is part of the name.
52505     void __builtin_ia32_monitorx (void *, unsigned int, unsigned int)
52506     void __builtin_ia32_mwaitx (unsigned int, unsigned int, unsigned int)
52507
52508 The following built-in functions are available when '-mclzero' is used.
52509All of them generate the machine instruction that is part of the name.
52510     void __builtin_i32_clzero (void *)
52511
52512 The following built-in functions are available when '-mpku' is used.
52513They generate reads and writes to PKRU.
52514     void __builtin_ia32_wrpkru (unsigned int)
52515     unsigned int __builtin_ia32_rdpkru ()
52516
52517 The following built-in functions are available when '-mcet' or
52518'-mshstk' option is used.  They support shadow stack machine
52519instructions from Intel Control-flow Enforcement Technology (CET). Each
52520built-in function generates the machine instruction that is part of the
52521function's name.  These are the internal low-level functions.  Normally
52522the functions in *note x86 control-flow protection intrinsics:: should
52523be used instead.
52524
52525     unsigned int __builtin_ia32_rdsspd (void)
52526     unsigned long long __builtin_ia32_rdsspq (void)
52527     void __builtin_ia32_incsspd (unsigned int)
52528     void __builtin_ia32_incsspq (unsigned long long)
52529     void __builtin_ia32_saveprevssp(void);
52530     void __builtin_ia32_rstorssp(void *);
52531     void __builtin_ia32_wrssd(unsigned int, void *);
52532     void __builtin_ia32_wrssq(unsigned long long, void *);
52533     void __builtin_ia32_wrussd(unsigned int, void *);
52534     void __builtin_ia32_wrussq(unsigned long long, void *);
52535     void __builtin_ia32_setssbsy(void);
52536     void __builtin_ia32_clrssbsy(void *);
52537
52538
52539File: gcc.info,  Node: x86 transactional memory intrinsics,  Next: x86 control-flow protection intrinsics,  Prev: x86 Built-in Functions,  Up: Target Builtins
52540
525416.60.36 x86 Transactional Memory Intrinsics
52542-------------------------------------------
52543
52544These hardware transactional memory intrinsics for x86 allow you to use
52545memory transactions with RTM (Restricted Transactional Memory).  This
52546support is enabled with the '-mrtm' option.  For using HLE (Hardware
52547Lock Elision) see *note x86 specific memory model extensions for
52548transactional memory:: instead.
52549
52550 A memory transaction commits all changes to memory in an atomic way, as
52551visible to other threads.  If the transaction fails it is rolled back
52552and all side effects discarded.
52553
52554 Generally there is no guarantee that a memory transaction ever succeeds
52555and suitable fallback code always needs to be supplied.
52556
52557 -- RTM Function: unsigned _xbegin ()
52558     Start a RTM (Restricted Transactional Memory) transaction.  Returns
52559     '_XBEGIN_STARTED' when the transaction started successfully (note
52560     this is not 0, so the constant has to be explicitly tested).
52561
52562     If the transaction aborts, all side effects are undone and an abort
52563     code encoded as a bit mask is returned.  The following macros are
52564     defined:
52565
52566     '_XABORT_EXPLICIT'
52567          Transaction was explicitly aborted with '_xabort'.  The
52568          parameter passed to '_xabort' is available with
52569          '_XABORT_CODE(status)'.
52570     '_XABORT_RETRY'
52571          Transaction retry is possible.
52572     '_XABORT_CONFLICT'
52573          Transaction abort due to a memory conflict with another
52574          thread.
52575     '_XABORT_CAPACITY'
52576          Transaction abort due to the transaction using too much
52577          memory.
52578     '_XABORT_DEBUG'
52579          Transaction abort due to a debug trap.
52580     '_XABORT_NESTED'
52581          Transaction abort in an inner nested transaction.
52582
52583     There is no guarantee any transaction ever succeeds, so there
52584     always needs to be a valid fallback path.
52585
52586 -- RTM Function: void _xend ()
52587     Commit the current transaction.  When no transaction is active this
52588     faults.  All memory side effects of the transaction become visible
52589     to other threads in an atomic manner.
52590
52591 -- RTM Function: int _xtest ()
52592     Return a nonzero value if a transaction is currently active,
52593     otherwise 0.
52594
52595 -- RTM Function: void _xabort (status)
52596     Abort the current transaction.  When no transaction is active this
52597     is a no-op.  The STATUS is an 8-bit constant; its value is encoded
52598     in the return value from '_xbegin'.
52599
52600 Here is an example showing handling for '_XABORT_RETRY' and a fallback
52601path for other failures:
52602
52603     #include <immintrin.h>
52604
52605     int n_tries, max_tries;
52606     unsigned status = _XABORT_EXPLICIT;
52607     ...
52608
52609     for (n_tries = 0; n_tries < max_tries; n_tries++)
52610       {
52611         status = _xbegin ();
52612         if (status == _XBEGIN_STARTED || !(status & _XABORT_RETRY))
52613           break;
52614       }
52615     if (status == _XBEGIN_STARTED)
52616       {
52617         ... transaction code...
52618         _xend ();
52619       }
52620     else
52621       {
52622         ... non-transactional fallback path...
52623       }
52624
52625Note that, in most cases, the transactional and non-transactional code
52626must synchronize together to ensure consistency.
52627
52628
52629File: gcc.info,  Node: x86 control-flow protection intrinsics,  Prev: x86 transactional memory intrinsics,  Up: Target Builtins
52630
526316.60.37 x86 Control-Flow Protection Intrinsics
52632----------------------------------------------
52633
52634 -- CET Function: ret_type _get_ssp (void)
52635     Get the current value of shadow stack pointer if shadow stack
52636     support from Intel CET is enabled in the hardware or '0' otherwise.
52637     The 'ret_type' is 'unsigned long long' for 64-bit targets and
52638     'unsigned int' for 32-bit targets.
52639
52640 -- CET Function: void _inc_ssp (unsigned int)
52641     Increment the current shadow stack pointer by the size specified by
52642     the function argument.  The argument is masked to a byte value for
52643     security reasons, so to increment by more than 255 bytes you must
52644     call the function multiple times.
52645
52646 The shadow stack unwind code looks like:
52647
52648     #include <immintrin.h>
52649
52650     /* Unwind the shadow stack for EH.  */
52651     #define _Unwind_Frames_Extra(x)       \
52652       do                                  \
52653         {                                \
52654           _Unwind_Word ssp = _get_ssp (); \
52655           if (ssp != 0)                   \
52656             {                            \
52657               _Unwind_Word tmp = (x);     \
52658               while (tmp > 255)           \
52659                 {                        \
52660                   _inc_ssp (tmp);         \
52661                   tmp -= 255;             \
52662                 }                        \
52663               _inc_ssp (tmp);             \
52664             }                            \
52665         }                                \
52666         while (0)
52667
52668This code runs unconditionally on all 64-bit processors.  For 32-bit
52669processors the code runs on those that support multi-byte NOP
52670instructions.
52671
52672
52673File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
52674
526756.61 Format Checks Specific to Particular Target Machines
52676=========================================================
52677
52678For some target machines, GCC supports additional options to the format
52679attribute (*note Declaring Attributes of Functions: Function
52680Attributes.).
52681
52682* Menu:
52683
52684* Solaris Format Checks::
52685* Darwin Format Checks::
52686
52687
52688File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
52689
526906.61.1 Solaris Format Checks
52691----------------------------
52692
52693Solaris targets support the 'cmn_err' (or '__cmn_err__') format check.
52694'cmn_err' accepts a subset of the standard 'printf' conversions, and the
52695two-argument '%b' conversion for displaying bit-fields.  See the Solaris
52696man page for 'cmn_err' for more information.
52697
52698
52699File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
52700
527016.61.2 Darwin Format Checks
52702---------------------------
52703
52704In addition to the full set of format archetypes (attribute format style
52705arguments such as 'printf', 'scanf', 'strftime', and 'strfmon'), Darwin
52706targets also support the 'CFString' (or '__CFString__') archetype in the
52707'format' attribute.  Declarations with this archetype are parsed for
52708correct syntax and argument types.  However, parsing of the format
52709string itself and validating arguments against it in calls to such
52710functions is currently not performed.
52711
52712 Additionally, 'CFStringRefs' (defined by the 'CoreFoundation' headers)
52713may also be used as format arguments.  Note that the relevant headers
52714are only likely to be available on Darwin (OSX) installations.  On such
52715installations, the XCode and system documentation provide descriptions
52716of 'CFString', 'CFStringRefs' and associated functions.
52717
52718
52719File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
52720
527216.62 Pragmas Accepted by GCC
52722============================
52723
52724GCC supports several types of pragmas, primarily in order to compile
52725code originally written for other compilers.  Note that in general we do
52726not recommend the use of pragmas; *Note Function Attributes::, for
52727further explanation.
52728
52729 The GNU C preprocessor recognizes several pragmas in addition to the
52730compiler pragmas documented here.  Refer to the CPP manual for more
52731information.
52732
52733* Menu:
52734
52735* AArch64 Pragmas::
52736* ARM Pragmas::
52737* M32C Pragmas::
52738* MeP Pragmas::
52739* PRU Pragmas::
52740* RS/6000 and PowerPC Pragmas::
52741* S/390 Pragmas::
52742* Darwin Pragmas::
52743* Solaris Pragmas::
52744* Symbol-Renaming Pragmas::
52745* Structure-Layout Pragmas::
52746* Weak Pragmas::
52747* Diagnostic Pragmas::
52748* Visibility Pragmas::
52749* Push/Pop Macro Pragmas::
52750* Function Specific Option Pragmas::
52751* Loop-Specific Pragmas::
52752
52753
52754File: gcc.info,  Node: AArch64 Pragmas,  Next: ARM Pragmas,  Up: Pragmas
52755
527566.62.1 AArch64 Pragmas
52757----------------------
52758
52759The pragmas defined by the AArch64 target correspond to the AArch64
52760target function attributes.  They can be specified as below:
52761     #pragma GCC target("string")
52762
52763 where 'STRING' can be any string accepted as an AArch64 target
52764attribute.  *Note AArch64 Function Attributes::, for more details on the
52765permissible values of 'string'.
52766
52767
52768File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Prev: AArch64 Pragmas,  Up: Pragmas
52769
527706.62.2 ARM Pragmas
52771------------------
52772
52773The ARM target defines pragmas for controlling the default addition of
52774'long_call' and 'short_call' attributes to functions.  *Note Function
52775Attributes::, for information about the effects of these attributes.
52776
52777'long_calls'
52778     Set all subsequent functions to have the 'long_call' attribute.
52779
52780'no_long_calls'
52781     Set all subsequent functions to have the 'short_call' attribute.
52782
52783'long_calls_off'
52784     Do not affect the 'long_call' or 'short_call' attributes of
52785     subsequent functions.
52786
52787
52788File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
52789
527906.62.3 M32C Pragmas
52791-------------------
52792
52793'GCC memregs NUMBER'
52794     Overrides the command-line option '-memregs=' for the current file.
52795     Use with care!  This pragma must be before any function in the
52796     file, and mixing different memregs values in different objects may
52797     make them incompatible.  This pragma is useful when a
52798     performance-critical function uses a memreg for temporary values,
52799     as it may allow you to reduce the number of memregs used.
52800
52801'ADDRESS NAME ADDRESS'
52802     For any declared symbols matching NAME, this does three things to
52803     that symbol: it forces the symbol to be located at the given
52804     address (a number), it forces the symbol to be volatile, and it
52805     changes the symbol's scope to be static.  This pragma exists for
52806     compatibility with other compilers, but note that the common
52807     '1234H' numeric syntax is not supported (use '0x1234' instead).
52808     Example:
52809
52810          #pragma ADDRESS port3 0x103
52811          char port3;
52812
52813
52814File: gcc.info,  Node: MeP Pragmas,  Next: PRU Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
52815
528166.62.4 MeP Pragmas
52817------------------
52818
52819'custom io_volatile (on|off)'
52820     Overrides the command-line option '-mio-volatile' for the current
52821     file.  Note that for compatibility with future GCC releases, this
52822     option should only be used once before any 'io' variables in each
52823     file.
52824
52825'GCC coprocessor available REGISTERS'
52826     Specifies which coprocessor registers are available to the register
52827     allocator.  REGISTERS may be a single register, register range
52828     separated by ellipses, or comma-separated list of those.  Example:
52829
52830          #pragma GCC coprocessor available $c0...$c10, $c28
52831
52832'GCC coprocessor call_saved REGISTERS'
52833     Specifies which coprocessor registers are to be saved and restored
52834     by any function using them.  REGISTERS may be a single register,
52835     register range separated by ellipses, or comma-separated list of
52836     those.  Example:
52837
52838          #pragma GCC coprocessor call_saved $c4...$c6, $c31
52839
52840'GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
52841     Creates and defines a register class.  These register classes can
52842     be used by inline 'asm' constructs.  REGISTERS may be a single
52843     register, register range separated by ellipses, or comma-separated
52844     list of those.  Example:
52845
52846          #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
52847
52848          asm ("cpfoo %0" : "=B" (x));
52849
52850'GCC disinterrupt NAME , NAME ...'
52851     For the named functions, the compiler adds code to disable
52852     interrupts for the duration of those functions.  If any functions
52853     so named are not encountered in the source, a warning is emitted
52854     that the pragma is not used.  Examples:
52855
52856          #pragma disinterrupt foo
52857          #pragma disinterrupt bar, grill
52858          int foo () { ... }
52859
52860'GCC call NAME , NAME ...'
52861     For the named functions, the compiler always uses a
52862     register-indirect call model when calling the named functions.
52863     Examples:
52864
52865          extern int foo ();
52866          #pragma call foo
52867
52868
52869File: gcc.info,  Node: PRU Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
52870
528716.62.5 PRU Pragmas
52872------------------
52873
52874'ctable_entry INDEX CONSTANT_ADDRESS'
52875     Specifies that the PRU CTABLE entry given by INDEX has the value
52876     CONSTANT_ADDRESS.  This enables GCC to emit LBCO/SBCO instructions
52877     when the load/store address is known and can be addressed with some
52878     CTABLE entry.  For example:
52879
52880          /* will compile to "sbco Rx, 2, 0x10, 4" */
52881          #pragma ctable_entry 2 0x4802a000
52882          *(unsigned int *)0x4802a010 = val;
52883
52884
52885File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: S/390 Pragmas,  Prev: PRU Pragmas,  Up: Pragmas
52886
528876.62.6 RS/6000 and PowerPC Pragmas
52888----------------------------------
52889
52890The RS/6000 and PowerPC targets define one pragma for controlling
52891whether or not the 'longcall' attribute is added to function
52892declarations by default.  This pragma overrides the '-mlongcall' option,
52893but not the 'longcall' and 'shortcall' attributes.  *Note RS/6000 and
52894PowerPC Options::, for more information about when long calls are and
52895are not necessary.
52896
52897'longcall (1)'
52898     Apply the 'longcall' attribute to all subsequent function
52899     declarations.
52900
52901'longcall (0)'
52902     Do not apply the 'longcall' attribute to subsequent function
52903     declarations.
52904
52905
52906File: gcc.info,  Node: S/390 Pragmas,  Next: Darwin Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
52907
529086.62.7 S/390 Pragmas
52909--------------------
52910
52911The pragmas defined by the S/390 target correspond to the S/390 target
52912function attributes and some the additional options:
52913
52914'zvector'
52915'no-zvector'
52916
52917 Note that options of the pragma, unlike options of the target
52918attribute, do change the value of preprocessor macros like '__VEC__'.
52919They can be specified as below:
52920
52921     #pragma GCC target("string[,string]...")
52922     #pragma GCC target("string"[,"string"]...)
52923
52924
52925File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: S/390 Pragmas,  Up: Pragmas
52926
529276.62.8 Darwin Pragmas
52928---------------------
52929
52930The following pragmas are available for all architectures running the
52931Darwin operating system.  These are useful for compatibility with other
52932Mac OS compilers.
52933
52934'mark TOKENS...'
52935     This pragma is accepted, but has no effect.
52936
52937'options align=ALIGNMENT'
52938     This pragma sets the alignment of fields in structures.  The values
52939     of ALIGNMENT may be 'mac68k', to emulate m68k alignment, or
52940     'power', to emulate PowerPC alignment.  Uses of this pragma nest
52941     properly; to restore the previous setting, use 'reset' for the
52942     ALIGNMENT.
52943
52944'segment TOKENS...'
52945     This pragma is accepted, but has no effect.
52946
52947'unused (VAR [, VAR]...)'
52948     This pragma declares variables to be possibly unused.  GCC does not
52949     produce warnings for the listed variables.  The effect is similar
52950     to that of the 'unused' attribute, except that this pragma may
52951     appear anywhere within the variables' scopes.
52952
52953
52954File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
52955
529566.62.9 Solaris Pragmas
52957----------------------
52958
52959The Solaris target supports '#pragma redefine_extname' (*note
52960Symbol-Renaming Pragmas::).  It also supports additional '#pragma'
52961directives for compatibility with the system compiler.
52962
52963'align ALIGNMENT (VARIABLE [, VARIABLE]...)'
52964
52965     Increase the minimum alignment of each VARIABLE to ALIGNMENT.  This
52966     is the same as GCC's 'aligned' attribute *note Variable
52967     Attributes::).  Macro expansion occurs on the arguments to this
52968     pragma when compiling C and Objective-C.  It does not currently
52969     occur when compiling C++, but this is a bug which may be fixed in a
52970     future release.
52971
52972'fini (FUNCTION [, FUNCTION]...)'
52973
52974     This pragma causes each listed FUNCTION to be called after main, or
52975     during shared module unloading, by adding a call to the '.fini'
52976     section.
52977
52978'init (FUNCTION [, FUNCTION]...)'
52979
52980     This pragma causes each listed FUNCTION to be called during
52981     initialization (before 'main') or during shared module loading, by
52982     adding a call to the '.init' section.
52983
52984
52985File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Layout Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
52986
529876.62.10 Symbol-Renaming Pragmas
52988-------------------------------
52989
52990GCC supports a '#pragma' directive that changes the name used in
52991assembly for a given declaration.  While this pragma is supported on all
52992platforms, it is intended primarily to provide compatibility with the
52993Solaris system headers.  This effect can also be achieved using the asm
52994labels extension (*note Asm Labels::).
52995
52996'redefine_extname OLDNAME NEWNAME'
52997
52998     This pragma gives the C function OLDNAME the assembly symbol
52999     NEWNAME.  The preprocessor macro '__PRAGMA_REDEFINE_EXTNAME' is
53000     defined if this pragma is available (currently on all platforms).
53001
53002 This pragma and the 'asm' labels extension interact in a complicated
53003manner.  Here are some corner cases you may want to be aware of:
53004
53005  1. This pragma silently applies only to declarations with external
53006     linkage.  The 'asm' label feature does not have this restriction.
53007
53008  2. In C++, this pragma silently applies only to declarations with "C"
53009     linkage.  Again, 'asm' labels do not have this restriction.
53010
53011  3. If either of the ways of changing the assembly name of a
53012     declaration are applied to a declaration whose assembly name has
53013     already been determined (either by a previous use of one of these
53014     features, or because the compiler needed the assembly name in order
53015     to generate code), and the new name is different, a warning issues
53016     and the name does not change.
53017
53018  4. The OLDNAME used by '#pragma redefine_extname' is always the
53019     C-language name.
53020
53021
53022File: gcc.info,  Node: Structure-Layout Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
53023
530246.62.11 Structure-Layout Pragmas
53025--------------------------------
53026
53027For compatibility with Microsoft Windows compilers, GCC supports a set
53028of '#pragma' directives that change the maximum alignment of members of
53029structures (other than zero-width bit-fields), unions, and classes
53030subsequently defined.  The N value below always is required to be a
53031small power of two and specifies the new alignment in bytes.
53032
53033  1. '#pragma pack(N)' simply sets the new alignment.
53034  2. '#pragma pack()' sets the alignment to the one that was in effect
53035     when compilation started (see also command-line option
53036     '-fpack-struct[=N]' *note Code Gen Options::).
53037  3. '#pragma pack(push[,N])' pushes the current alignment setting on an
53038     internal stack and then optionally sets the new alignment.
53039  4. '#pragma pack(pop)' restores the alignment setting to the one saved
53040     at the top of the internal stack (and removes that stack entry).
53041     Note that '#pragma pack([N])' does not influence this internal
53042     stack; thus it is possible to have '#pragma pack(push)' followed by
53043     multiple '#pragma pack(N)' instances and finalized by a single
53044     '#pragma pack(pop)'.
53045
53046 Some targets, e.g. x86 and PowerPC, support the '#pragma ms_struct'
53047directive which lays out structures and unions subsequently defined as
53048the documented '__attribute__ ((ms_struct))'.
53049
53050  1. '#pragma ms_struct on' turns on the Microsoft layout.
53051  2. '#pragma ms_struct off' turns off the Microsoft layout.
53052  3. '#pragma ms_struct reset' goes back to the default layout.
53053
53054 Most targets also support the '#pragma scalar_storage_order' directive
53055which lays out structures and unions subsequently defined as the
53056documented '__attribute__ ((scalar_storage_order))'.
53057
53058  1. '#pragma scalar_storage_order big-endian' sets the storage order of
53059     the scalar fields to big-endian.
53060  2. '#pragma scalar_storage_order little-endian' sets the storage order
53061     of the scalar fields to little-endian.
53062  3. '#pragma scalar_storage_order default' goes back to the endianness
53063     that was in effect when compilation started (see also command-line
53064     option '-fsso-struct=ENDIANNESS' *note C Dialect Options::).
53065
53066
53067File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Layout Pragmas,  Up: Pragmas
53068
530696.62.12 Weak Pragmas
53070--------------------
53071
53072For compatibility with SVR4, GCC supports a set of '#pragma' directives
53073for declaring symbols to be weak, and defining weak aliases.
53074
53075'#pragma weak SYMBOL'
53076     This pragma declares SYMBOL to be weak, as if the declaration had
53077     the attribute of the same name.  The pragma may appear before or
53078     after the declaration of SYMBOL.  It is not an error for SYMBOL to
53079     never be defined at all.
53080
53081'#pragma weak SYMBOL1 = SYMBOL2'
53082     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
53083     an error if SYMBOL2 is not defined in the current translation unit.
53084
53085
53086File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
53087
530886.62.13 Diagnostic Pragmas
53089--------------------------
53090
53091GCC allows the user to selectively enable or disable certain types of
53092diagnostics, and change the kind of the diagnostic.  For example, a
53093project's policy might require that all sources compile with '-Werror'
53094but certain files might have exceptions allowing specific types of
53095warnings.  Or, a project might selectively enable diagnostics and treat
53096them as errors depending on which preprocessor macros are defined.
53097
53098'#pragma GCC diagnostic KIND OPTION'
53099
53100     Modifies the disposition of a diagnostic.  Note that not all
53101     diagnostics are modifiable; at the moment only warnings (normally
53102     controlled by '-W...') can be controlled, and not all of them.  Use
53103     '-fdiagnostics-show-option' to determine which diagnostics are
53104     controllable and which option controls them.
53105
53106     KIND is 'error' to treat this diagnostic as an error, 'warning' to
53107     treat it like a warning (even if '-Werror' is in effect), or
53108     'ignored' if the diagnostic is to be ignored.  OPTION is a double
53109     quoted string that matches the command-line option.
53110
53111          #pragma GCC diagnostic warning "-Wformat"
53112          #pragma GCC diagnostic error "-Wformat"
53113          #pragma GCC diagnostic ignored "-Wformat"
53114
53115     Note that these pragmas override any command-line options.  GCC
53116     keeps track of the location of each pragma, and issues diagnostics
53117     according to the state as of that point in the source file.  Thus,
53118     pragmas occurring after a line do not affect diagnostics caused by
53119     that line.
53120
53121'#pragma GCC diagnostic push'
53122'#pragma GCC diagnostic pop'
53123
53124     Causes GCC to remember the state of the diagnostics as of each
53125     'push', and restore to that point at each 'pop'.  If a 'pop' has no
53126     matching 'push', the command-line options are restored.
53127
53128          #pragma GCC diagnostic error "-Wuninitialized"
53129            foo(a);                       /* error is given for this one */
53130          #pragma GCC diagnostic push
53131          #pragma GCC diagnostic ignored "-Wuninitialized"
53132            foo(b);                       /* no diagnostic for this one */
53133          #pragma GCC diagnostic pop
53134            foo(c);                       /* error is given for this one */
53135          #pragma GCC diagnostic pop
53136            foo(d);                       /* depends on command-line options */
53137
53138 GCC also offers a simple mechanism for printing messages during
53139compilation.
53140
53141'#pragma message STRING'
53142
53143     Prints STRING as a compiler message on compilation.  The message is
53144     informational only, and is neither a compilation warning nor an
53145     error.  Newlines can be included in the string by using the '\n'
53146     escape sequence.
53147
53148          #pragma message "Compiling " __FILE__ "..."
53149
53150     STRING may be parenthesized, and is printed with location
53151     information.  For example,
53152
53153          #define DO_PRAGMA(x) _Pragma (#x)
53154          #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
53155
53156          TODO(Remember to fix this)
53157
53158     prints '/tmp/file.c:4: note: #pragma message: TODO - Remember to
53159     fix this'.
53160
53161'#pragma GCC error MESSAGE'
53162     Generates an error message.  This pragma _is_ considered to
53163     indicate an error in the compilation, and it will be treated as
53164     such.
53165
53166     Newlines can be included in the string by using the '\n' escape
53167     sequence.  They will be displayed as newlines even if the
53168     '-fmessage-length' option is set to zero.
53169
53170     The error is only generated if the pragma is present in the code
53171     after pre-processing has been completed.  It does not matter
53172     however if the code containing the pragma is unreachable:
53173
53174          #if 0
53175          #pragma GCC error "this error is not seen"
53176          #endif
53177          void foo (void)
53178          {
53179            return;
53180          #pragma GCC error "this error is seen"
53181          }
53182
53183'#pragma GCC warning MESSAGE'
53184     This is just like 'pragma GCC error' except that a warning message
53185     is issued instead of an error message.  Unless '-Werror' is in
53186     effect, in which case this pragma will generate an error as well.
53187
53188
53189File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
53190
531916.62.14 Visibility Pragmas
53192--------------------------
53193
53194'#pragma GCC visibility push(VISIBILITY)'
53195'#pragma GCC visibility pop'
53196
53197     This pragma allows the user to set the visibility for multiple
53198     declarations without having to give each a visibility attribute
53199     (*note Function Attributes::).
53200
53201     In C++, '#pragma GCC visibility' affects only namespace-scope
53202     declarations.  Class members and template specializations are not
53203     affected; if you want to override the visibility for a particular
53204     member or instantiation, you must use an attribute.
53205
53206
53207File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
53208
532096.62.15 Push/Pop Macro Pragmas
53210------------------------------
53211
53212For compatibility with Microsoft Windows compilers, GCC supports
53213'#pragma push_macro("MACRO_NAME")' and '#pragma
53214pop_macro("MACRO_NAME")'.
53215
53216'#pragma push_macro("MACRO_NAME")'
53217     This pragma saves the value of the macro named as MACRO_NAME to the
53218     top of the stack for this macro.
53219
53220'#pragma pop_macro("MACRO_NAME")'
53221     This pragma sets the value of the macro named as MACRO_NAME to the
53222     value on top of the stack for this macro.  If the stack for
53223     MACRO_NAME is empty, the value of the macro remains unchanged.
53224
53225 For example:
53226
53227     #define X  1
53228     #pragma push_macro("X")
53229     #undef X
53230     #define X -1
53231     #pragma pop_macro("X")
53232     int x [X];
53233
53234In this example, the definition of X as 1 is saved by '#pragma
53235push_macro' and restored by '#pragma pop_macro'.
53236
53237
53238File: gcc.info,  Node: Function Specific Option Pragmas,  Next: Loop-Specific Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
53239
532406.62.16 Function Specific Option Pragmas
53241----------------------------------------
53242
53243'#pragma GCC target (STRING, ...)'
53244
53245     This pragma allows you to set target-specific options for functions
53246     defined later in the source file.  One or more strings can be
53247     specified.  Each function that is defined after this point is
53248     treated as if it had been declared with one 'target('STRING')'
53249     attribute for each STRING argument.  The parentheses around the
53250     strings in the pragma are optional.  *Note Function Attributes::,
53251     for more information about the 'target' attribute and the attribute
53252     syntax.
53253
53254     The '#pragma GCC target' pragma is presently implemented for x86,
53255     ARM, AArch64, PowerPC, S/390, and Nios II targets only.
53256
53257'#pragma GCC optimize (STRING, ...)'
53258
53259     This pragma allows you to set global optimization options for
53260     functions defined later in the source file.  One or more strings
53261     can be specified.  Each function that is defined after this point
53262     is treated as if it had been declared with one 'optimize('STRING')'
53263     attribute for each STRING argument.  The parentheses around the
53264     strings in the pragma are optional.  *Note Function Attributes::,
53265     for more information about the 'optimize' attribute and the
53266     attribute syntax.
53267
53268'#pragma GCC push_options'
53269'#pragma GCC pop_options'
53270
53271     These pragmas maintain a stack of the current target and
53272     optimization options.  It is intended for include files where you
53273     temporarily want to switch to using a different '#pragma GCC
53274     target' or '#pragma GCC optimize' and then to pop back to the
53275     previous options.
53276
53277'#pragma GCC reset_options'
53278
53279     This pragma clears the current '#pragma GCC target' and '#pragma
53280     GCC optimize' to use the default switches as specified on the
53281     command line.
53282
53283
53284File: gcc.info,  Node: Loop-Specific Pragmas,  Prev: Function Specific Option Pragmas,  Up: Pragmas
53285
532866.62.17 Loop-Specific Pragmas
53287-----------------------------
53288
53289'#pragma GCC ivdep'
53290
53291     With this pragma, the programmer asserts that there are no
53292     loop-carried dependencies which would prevent consecutive
53293     iterations of the following loop from executing concurrently with
53294     SIMD (single instruction multiple data) instructions.
53295
53296     For example, the compiler can only unconditionally vectorize the
53297     following loop with the pragma:
53298
53299          void foo (int n, int *a, int *b, int *c)
53300          {
53301            int i, j;
53302          #pragma GCC ivdep
53303            for (i = 0; i < n; ++i)
53304              a[i] = b[i] + c[i];
53305          }
53306
53307     In this example, using the 'restrict' qualifier had the same
53308     effect.  In the following example, that would not be possible.
53309     Assume k < -m or k >= m.  Only with the pragma, the compiler knows
53310     that it can unconditionally vectorize the following loop:
53311
53312          void ignore_vec_dep (int *a, int k, int c, int m)
53313          {
53314          #pragma GCC ivdep
53315            for (int i = 0; i < m; i++)
53316              a[i] = a[i + k] * c;
53317          }
53318
53319'#pragma GCC unroll N'
53320
53321     You can use this pragma to control how many times a loop should be
53322     unrolled.  It must be placed immediately before a 'for', 'while' or
53323     'do' loop or a '#pragma GCC ivdep', and applies only to the loop
53324     that follows.  N is an integer constant expression specifying the
53325     unrolling factor.  The values of 0 and 1 block any unrolling of the
53326     loop.
53327
53328
53329File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
53330
533316.63 Unnamed Structure and Union Fields
53332=======================================
53333
53334As permitted by ISO C11 and for compatibility with other compilers, GCC
53335allows you to define a structure or union that contains, as fields,
53336structures and unions without names.  For example:
53337
53338     struct {
53339       int a;
53340       union {
53341         int b;
53342         float c;
53343       };
53344       int d;
53345     } foo;
53346
53347In this example, you are able to access members of the unnamed union
53348with code like 'foo.b'.  Note that only unnamed structs and unions are
53349allowed, you may not have, for example, an unnamed 'int'.
53350
53351 You must never create such structures that cause ambiguous field
53352definitions.  For example, in this structure:
53353
53354     struct {
53355       int a;
53356       struct {
53357         int a;
53358       };
53359     } foo;
53360
53361it is ambiguous which 'a' is being referred to with 'foo.a'.  The
53362compiler gives errors for such constructs.
53363
53364 Unless '-fms-extensions' is used, the unnamed field must be a structure
53365or union definition without a tag (for example, 'struct { int a; };').
53366If '-fms-extensions' is used, the field may also be a definition with a
53367tag such as 'struct foo { int a; };', a reference to a previously
53368defined structure or union such as 'struct foo;', or a reference to a
53369'typedef' name for a previously defined structure or union type.
53370
53371 The option '-fplan9-extensions' enables '-fms-extensions' as well as
53372two other extensions.  First, a pointer to a structure is automatically
53373converted to a pointer to an anonymous field for assignments and
53374function calls.  For example:
53375
53376     struct s1 { int a; };
53377     struct s2 { struct s1; };
53378     extern void f1 (struct s1 *);
53379     void f2 (struct s2 *p) { f1 (p); }
53380
53381In the call to 'f1' inside 'f2', the pointer 'p' is converted into a
53382pointer to the anonymous field.
53383
53384 Second, when the type of an anonymous field is a 'typedef' for a
53385'struct' or 'union', code may refer to the field using the name of the
53386'typedef'.
53387
53388     typedef struct { int a; } s1;
53389     struct s2 { s1; };
53390     s1 f1 (struct s2 *p) { return p->s1; }
53391
53392 These usages are only permitted when they are not ambiguous.
53393
53394
53395File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
53396
533976.64 Thread-Local Storage
53398=========================
53399
53400Thread-local storage (TLS) is a mechanism by which variables are
53401allocated such that there is one instance of the variable per extant
53402thread.  The runtime model GCC uses to implement this originates in the
53403IA-64 processor-specific ABI, but has since been migrated to other
53404processors as well.  It requires significant support from the linker
53405('ld'), dynamic linker ('ld.so'), and system libraries ('libc.so' and
53406'libpthread.so'), so it is not available everywhere.
53407
53408 At the user level, the extension is visible with a new storage class
53409keyword: '__thread'.  For example:
53410
53411     __thread int i;
53412     extern __thread struct state s;
53413     static __thread char *p;
53414
53415 The '__thread' specifier may be used alone, with the 'extern' or
53416'static' specifiers, but with no other storage class specifier.  When
53417used with 'extern' or 'static', '__thread' must appear immediately after
53418the other storage class specifier.
53419
53420 The '__thread' specifier may be applied to any global, file-scoped
53421static, function-scoped static, or static data member of a class.  It
53422may not be applied to block-scoped automatic or non-static data member.
53423
53424 When the address-of operator is applied to a thread-local variable, it
53425is evaluated at run time and returns the address of the current thread's
53426instance of that variable.  An address so obtained may be used by any
53427thread.  When a thread terminates, any pointers to thread-local
53428variables in that thread become invalid.
53429
53430 No static initialization may refer to the address of a thread-local
53431variable.
53432
53433 In C++, if an initializer is present for a thread-local variable, it
53434must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
53435standard.
53436
53437 See ELF Handling For Thread-Local Storage
53438(https://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
53439the four thread-local storage addressing models, and how the runtime is
53440expected to function.
53441
53442* Menu:
53443
53444* C99 Thread-Local Edits::
53445* C++98 Thread-Local Edits::
53446
53447
53448File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
53449
534506.64.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
53451-------------------------------------------------------
53452
53453The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
53454document the exact semantics of the language extension.
53455
53456   * '5.1.2 Execution environments'
53457
53458     Add new text after paragraph 1
53459
53460          Within either execution environment, a "thread" is a flow of
53461          control within a program.  It is implementation defined
53462          whether or not there may be more than one thread associated
53463          with a program.  It is implementation defined how threads
53464          beyond the first are created, the name and type of the
53465          function called at thread startup, and how threads may be
53466          terminated.  However, objects with thread storage duration
53467          shall be initialized before thread startup.
53468
53469   * '6.2.4 Storage durations of objects'
53470
53471     Add new text before paragraph 3
53472
53473          An object whose identifier is declared with the storage-class
53474          specifier '__thread' has "thread storage duration".  Its
53475          lifetime is the entire execution of the thread, and its stored
53476          value is initialized only once, prior to thread startup.
53477
53478   * '6.4.1 Keywords'
53479
53480     Add '__thread'.
53481
53482   * '6.7.1 Storage-class specifiers'
53483
53484     Add '__thread' to the list of storage class specifiers in paragraph
53485     1.
53486
53487     Change paragraph 2 to
53488
53489          With the exception of '__thread', at most one storage-class
53490          specifier may be given [...].  The '__thread' specifier may be
53491          used alone, or immediately following 'extern' or 'static'.
53492
53493     Add new text after paragraph 6
53494
53495          The declaration of an identifier for a variable that has block
53496          scope that specifies '__thread' shall also specify either
53497          'extern' or 'static'.
53498
53499          The '__thread' specifier shall be used only with variables.
53500
53501
53502File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
53503
535046.64.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
53505--------------------------------------------------------
53506
53507The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
53508that document the exact semantics of the language extension.
53509
53510   * [intro.execution]
53511
53512     New text after paragraph 4
53513
53514          A "thread" is a flow of control within the abstract machine.
53515          It is implementation defined whether or not there may be more
53516          than one thread.
53517
53518     New text after paragraph 7
53519
53520          It is unspecified whether additional action must be taken to
53521          ensure when and whether side effects are visible to other
53522          threads.
53523
53524   * [lex.key]
53525
53526     Add '__thread'.
53527
53528   * [basic.start.main]
53529
53530     Add after paragraph 5
53531
53532          The thread that begins execution at the 'main' function is
53533          called the "main thread".  It is implementation defined how
53534          functions beginning threads other than the main thread are
53535          designated or typed.  A function so designated, as well as the
53536          'main' function, is called a "thread startup function".  It is
53537          implementation defined what happens if a thread startup
53538          function returns.  It is implementation defined what happens
53539          to other threads when any thread calls 'exit'.
53540
53541   * [basic.start.init]
53542
53543     Add after paragraph 4
53544
53545          The storage for an object of thread storage duration shall be
53546          statically initialized before the first statement of the
53547          thread startup function.  An object of thread storage duration
53548          shall not require dynamic initialization.
53549
53550   * [basic.start.term]
53551
53552     Add after paragraph 3
53553
53554          The type of an object with thread storage duration shall not
53555          have a non-trivial destructor, nor shall it be an array type
53556          whose elements (directly or indirectly) have non-trivial
53557          destructors.
53558
53559   * [basic.stc]
53560
53561     Add "thread storage duration" to the list in paragraph 1.
53562
53563     Change paragraph 2
53564
53565          Thread, static, and automatic storage durations are associated
53566          with objects introduced by declarations [...].
53567
53568     Add '__thread' to the list of specifiers in paragraph 3.
53569
53570   * [basic.stc.thread]
53571
53572     New section before [basic.stc.static]
53573
53574          The keyword '__thread' applied to a non-local object gives the
53575          object thread storage duration.
53576
53577          A local variable or class data member declared both 'static'
53578          and '__thread' gives the variable or member thread storage
53579          duration.
53580
53581   * [basic.stc.static]
53582
53583     Change paragraph 1
53584
53585          All objects that have neither thread storage duration, dynamic
53586          storage duration nor are local [...].
53587
53588   * [dcl.stc]
53589
53590     Add '__thread' to the list in paragraph 1.
53591
53592     Change paragraph 1
53593
53594          With the exception of '__thread', at most one
53595          STORAGE-CLASS-SPECIFIER shall appear in a given
53596          DECL-SPECIFIER-SEQ.  The '__thread' specifier may be used
53597          alone, or immediately following the 'extern' or 'static'
53598          specifiers.  [...]
53599
53600     Add after paragraph 5
53601
53602          The '__thread' specifier can be applied only to the names of
53603          objects and to anonymous unions.
53604
53605   * [class.mem]
53606
53607     Add after paragraph 6
53608
53609          Non-'static' members shall not be '__thread'.
53610
53611
53612File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
53613
536146.65 Binary Constants using the '0b' Prefix
53615===========================================
53616
53617Integer constants can be written as binary constants, consisting of a
53618sequence of '0' and '1' digits, prefixed by '0b' or '0B'.  This is
53619particularly useful in environments that operate a lot on the bit level
53620(like microcontrollers).
53621
53622 The following statements are identical:
53623
53624     i =       42;
53625     i =     0x2a;
53626     i =      052;
53627     i = 0b101010;
53628
53629 The type of these constants follows the same rules as for octal or
53630hexadecimal integer constants, so suffixes like 'L' or 'UL' can be
53631applied.
53632
53633
53634File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
53635
536367 Extensions to the C++ Language
53637********************************
53638
53639The GNU compiler provides these extensions to the C++ language (and you
53640can also use most of the C language extensions in your C++ programs).
53641If you want to write code that checks whether these features are
53642available, you can test for the GNU compiler the same way as for C
53643programs: check for a predefined macro '__GNUC__'.  You can also use
53644'__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
53645(cpp)Common Predefined Macros.).
53646
53647* Menu:
53648
53649* C++ Volatiles::       What constitutes an access to a volatile object.
53650* Restricted Pointers:: C99 restricted pointers and references.
53651* Vague Linkage::       Where G++ puts inlines, vtables and such.
53652* C++ Interface::       You can use a single C++ header file for both
53653                        declarations and definitions.
53654* Template Instantiation:: Methods for ensuring that exactly one copy of
53655                        each needed template instantiation is emitted.
53656* Bound member functions:: You can extract a function pointer to the
53657                        method denoted by a '->*' or '.*' expression.
53658* C++ Attributes::      Variable, function, and type attributes for C++ only.
53659* Function Multiversioning::   Declaring multiple function versions.
53660* Type Traits::         Compiler support for type traits.
53661* C++ Concepts::        Improved support for generic programming.
53662* Deprecated Features:: Things will disappear from G++.
53663* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
53664
53665
53666File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
53667
536687.1 When is a Volatile C++ Object Accessed?
53669===========================================
53670
53671The C++ standard differs from the C standard in its treatment of
53672volatile objects.  It fails to specify what constitutes a volatile
53673access, except to say that C++ should behave in a similar manner to C
53674with respect to volatiles, where possible.  However, the different
53675lvalueness of expressions between C and C++ complicate the behavior.
53676G++ behaves the same as GCC for volatile access, *Note Volatiles: C
53677Extensions, for a description of GCC's behavior.
53678
53679 The C and C++ language specifications differ when an object is accessed
53680in a void context:
53681
53682     volatile int *src = SOMEVALUE;
53683     *src;
53684
53685 The C++ standard specifies that such expressions do not undergo lvalue
53686to rvalue conversion, and that the type of the dereferenced object may
53687be incomplete.  The C++ standard does not specify explicitly that it is
53688lvalue to rvalue conversion that is responsible for causing an access.
53689There is reason to believe that it is, because otherwise certain simple
53690expressions become undefined.  However, because it would surprise most
53691programmers, G++ treats dereferencing a pointer to volatile object of
53692complete type as GCC would do for an equivalent type in C.  When the
53693object has incomplete type, G++ issues a warning; if you wish to force
53694an error, you must force a conversion to rvalue with, for instance, a
53695static cast.
53696
53697 When using a reference to volatile, G++ does not treat equivalent
53698expressions as accesses to volatiles, but instead issues a warning that
53699no volatile is accessed.  The rationale for this is that otherwise it
53700becomes difficult to determine where volatile access occur, and not
53701possible to ignore the return value from functions returning volatile
53702references.  Again, if you wish to force a read, cast the reference to
53703an rvalue.
53704
53705 G++ implements the same behavior as GCC does when assigning to a
53706volatile object--there is no reread of the assigned-to object, the
53707assigned rvalue is reused.  Note that in C++ assignment expressions are
53708lvalues, and if used as an lvalue, the volatile object is referred to.
53709For instance, VREF refers to VOBJ, as expected, in the following
53710example:
53711
53712     volatile int vobj;
53713     volatile int &vref = vobj = SOMETHING;
53714
53715
53716File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
53717
537187.2 Restricting Pointer Aliasing
53719================================
53720
53721As with the C front end, G++ understands the C99 feature of restricted
53722pointers, specified with the '__restrict__', or '__restrict' type
53723qualifier.  Because you cannot compile C++ by specifying the '-std=c99'
53724language flag, 'restrict' is not a keyword in C++.
53725
53726 In addition to allowing restricted pointers, you can specify restricted
53727references, which indicate that the reference is not aliased in the
53728local context.
53729
53730     void fn (int *__restrict__ rptr, int &__restrict__ rref)
53731     {
53732       /* ... */
53733     }
53734
53735In the body of 'fn', RPTR points to an unaliased integer and RREF refers
53736to a (different) unaliased integer.
53737
53738 You may also specify whether a member function's THIS pointer is
53739unaliased by using '__restrict__' as a member function qualifier.
53740
53741     void T::fn () __restrict__
53742     {
53743       /* ... */
53744     }
53745
53746Within the body of 'T::fn', THIS has the effective definition 'T
53747*__restrict__ const this'.  Notice that the interpretation of a
53748'__restrict__' member function qualifier is different to that of 'const'
53749or 'volatile' qualifier, in that it is applied to the pointer rather
53750than the object.  This is consistent with other compilers that implement
53751restricted pointers.
53752
53753 As with all outermost parameter qualifiers, '__restrict__' is ignored
53754in function definition matching.  This means you only need to specify
53755'__restrict__' in a function definition, rather than in a function
53756prototype as well.
53757
53758
53759File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
53760
537617.3 Vague Linkage
53762=================
53763
53764There are several constructs in C++ that require space in the object
53765file but are not clearly tied to a single translation unit.  We say that
53766these constructs have "vague linkage".  Typically such constructs are
53767emitted wherever they are needed, though sometimes we can be more
53768clever.
53769
53770Inline Functions
53771     Inline functions are typically defined in a header file which can
53772     be included in many different compilations.  Hopefully they can
53773     usually be inlined, but sometimes an out-of-line copy is necessary,
53774     if the address of the function is taken or if inlining fails.  In
53775     general, we emit an out-of-line copy in all translation units where
53776     one is needed.  As an exception, we only emit inline virtual
53777     functions with the vtable, since it always requires a copy.
53778
53779     Local static variables and string constants used in an inline
53780     function are also considered to have vague linkage, since they must
53781     be shared between all inlined and out-of-line instances of the
53782     function.
53783
53784VTables
53785     C++ virtual functions are implemented in most compilers using a
53786     lookup table, known as a vtable.  The vtable contains pointers to
53787     the virtual functions provided by a class, and each object of the
53788     class contains a pointer to its vtable (or vtables, in some
53789     multiple-inheritance situations).  If the class declares any
53790     non-inline, non-pure virtual functions, the first one is chosen as
53791     the "key method" for the class, and the vtable is only emitted in
53792     the translation unit where the key method is defined.
53793
53794     _Note:_ If the chosen key method is later defined as inline, the
53795     vtable is still emitted in every translation unit that defines it.
53796     Make sure that any inline virtuals are declared inline in the class
53797     body, even if they are not defined there.
53798
53799'type_info' objects
53800     C++ requires information about types to be written out in order to
53801     implement 'dynamic_cast', 'typeid' and exception handling.  For
53802     polymorphic classes (classes with virtual functions), the
53803     'type_info' object is written out along with the vtable so that
53804     'dynamic_cast' can determine the dynamic type of a class object at
53805     run time.  For all other types, we write out the 'type_info' object
53806     when it is used: when applying 'typeid' to an expression, throwing
53807     an object, or referring to a type in a catch clause or exception
53808     specification.
53809
53810Template Instantiations
53811     Most everything in this section also applies to template
53812     instantiations, but there are other options as well.  *Note Where's
53813     the Template?: Template Instantiation.
53814
53815 When used with GNU ld version 2.8 or later on an ELF system such as
53816GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
53817these constructs will be discarded at link time.  This is known as
53818COMDAT support.
53819
53820 On targets that don't support COMDAT, but do support weak symbols, GCC
53821uses them.  This way one copy overrides all the others, but the unused
53822copies still take up space in the executable.
53823
53824 For targets that do not support either COMDAT or weak symbols, most
53825entities with vague linkage are emitted as local symbols to avoid
53826duplicate definition errors from the linker.  This does not happen for
53827local statics in inlines, however, as having multiple copies almost
53828certainly breaks things.
53829
53830 *Note Declarations and Definitions in One Header: C++ Interface, for
53831another way to control placement of these constructs.
53832
53833
53834File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
53835
538367.4 C++ Interface and Implementation Pragmas
53837============================================
53838
53839'#pragma interface' and '#pragma implementation' provide the user with a
53840way of explicitly directing the compiler to emit entities with vague
53841linkage (and debugging information) in a particular translation unit.
53842
53843 _Note:_ These '#pragma's have been superceded as of GCC 2.7.2 by COMDAT
53844support and the "key method" heuristic mentioned in *note Vague
53845Linkage::.  Using them can actually cause your program to grow due to
53846unnecessary out-of-line copies of inline functions.
53847
53848'#pragma interface'
53849'#pragma interface "SUBDIR/OBJECTS.h"'
53850     Use this directive in _header files_ that define object classes, to
53851     save space in most of the object files that use those classes.
53852     Normally, local copies of certain information (backup copies of
53853     inline member functions, debugging information, and the internal
53854     tables that implement virtual functions) must be kept in each
53855     object file that includes class definitions.  You can use this
53856     pragma to avoid such duplication.  When a header file containing
53857     '#pragma interface' is included in a compilation, this auxiliary
53858     information is not generated (unless the main input source file
53859     itself uses '#pragma implementation').  Instead, the object files
53860     contain references to be resolved at link time.
53861
53862     The second form of this directive is useful for the case where you
53863     have multiple headers with the same name in different directories.
53864     If you use this form, you must specify the same string to '#pragma
53865     implementation'.
53866
53867'#pragma implementation'
53868'#pragma implementation "OBJECTS.h"'
53869     Use this pragma in a _main input file_, when you want full output
53870     from included header files to be generated (and made globally
53871     visible).  The included header file, in turn, should use '#pragma
53872     interface'.  Backup copies of inline member functions, debugging
53873     information, and the internal tables used to implement virtual
53874     functions are all generated in implementation files.
53875
53876     If you use '#pragma implementation' with no argument, it applies to
53877     an include file with the same basename(1) as your source file.  For
53878     example, in 'allclass.cc', giving just '#pragma implementation' by
53879     itself is equivalent to '#pragma implementation "allclass.h"'.
53880
53881     Use the string argument if you want a single implementation file to
53882     include code from multiple header files.  (You must also use
53883     '#include' to include the header file; '#pragma implementation'
53884     only specifies how to use the file--it doesn't actually include
53885     it.)
53886
53887     There is no way to split up the contents of a single header file
53888     into multiple implementation files.
53889
53890 '#pragma implementation' and '#pragma interface' also have an effect on
53891function inlining.
53892
53893 If you define a class in a header file marked with '#pragma interface',
53894the effect on an inline function defined in that class is similar to an
53895explicit 'extern' declaration--the compiler emits no code at all to
53896define an independent version of the function.  Its definition is used
53897only for inlining with its callers.
53898
53899 Conversely, when you include the same header file in a main source file
53900that declares it as '#pragma implementation', the compiler emits code
53901for the function itself; this defines a version of the function that can
53902be found via pointers (or by callers compiled without inlining).  If all
53903calls to the function can be inlined, you can avoid emitting the
53904function by compiling with '-fno-implement-inlines'.  If any calls are
53905not inlined, you will get linker errors.
53906
53907   ---------- Footnotes ----------
53908
53909   (1) A file's "basename" is the name stripped of all leading path
53910information and of trailing suffixes, such as '.h' or '.C' or '.cc'.
53911
53912
53913File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
53914
539157.5 Where's the Template?
53916=========================
53917
53918C++ templates were the first language feature to require more
53919intelligence from the environment than was traditionally found on a UNIX
53920system.  Somehow the compiler and linker have to make sure that each
53921template instance occurs exactly once in the executable if it is needed,
53922and not at all otherwise.  There are two basic approaches to this
53923problem, which are referred to as the Borland model and the Cfront
53924model.
53925
53926Borland model
53927     Borland C++ solved the template instantiation problem by adding the
53928     code equivalent of common blocks to their linker; the compiler
53929     emits template instances in each translation unit that uses them,
53930     and the linker collapses them together.  The advantage of this
53931     model is that the linker only has to consider the object files
53932     themselves; there is no external complexity to worry about.  The
53933     disadvantage is that compilation time is increased because the
53934     template code is being compiled repeatedly.  Code written for this
53935     model tends to include definitions of all templates in the header
53936     file, since they must be seen to be instantiated.
53937
53938Cfront model
53939     The AT&T C++ translator, Cfront, solved the template instantiation
53940     problem by creating the notion of a template repository, an
53941     automatically maintained place where template instances are stored.
53942     A more modern version of the repository works as follows: As
53943     individual object files are built, the compiler places any template
53944     definitions and instantiations encountered in the repository.  At
53945     link time, the link wrapper adds in the objects in the repository
53946     and compiles any needed instances that were not previously emitted.
53947     The advantages of this model are more optimal compilation speed and
53948     the ability to use the system linker; to implement the Borland
53949     model a compiler vendor also needs to replace the linker.  The
53950     disadvantages are vastly increased complexity, and thus potential
53951     for error; for some code this can be just as transparent, but in
53952     practice it can been very difficult to build multiple programs in
53953     one directory and one program in multiple directories.  Code
53954     written for this model tends to separate definitions of non-inline
53955     member templates into a separate file, which should be compiled
53956     separately.
53957
53958 G++ implements the Borland model on targets where the linker supports
53959it, including ELF targets (such as GNU/Linux), Mac OS X and Microsoft
53960Windows.  Otherwise G++ implements neither automatic model.
53961
53962 You have the following options for dealing with template
53963instantiations:
53964
53965  1. Do nothing.  Code written for the Borland model works fine, but
53966     each translation unit contains instances of each of the templates
53967     it uses.  The duplicate instances will be discarded by the linker,
53968     but in a large program, this can lead to an unacceptable amount of
53969     code duplication in object files or shared libraries.
53970
53971     Duplicate instances of a template can be avoided by defining an
53972     explicit instantiation in one object file, and preventing the
53973     compiler from doing implicit instantiations in any other object
53974     files by using an explicit instantiation declaration, using the
53975     'extern template' syntax:
53976
53977          extern template int max (int, int);
53978
53979     This syntax is defined in the C++ 2011 standard, but has been
53980     supported by G++ and other compilers since well before 2011.
53981
53982     Explicit instantiations can be used for the largest or most
53983     frequently duplicated instances, without having to know exactly
53984     which other instances are used in the rest of the program.  You can
53985     scatter the explicit instantiations throughout your program,
53986     perhaps putting them in the translation units where the instances
53987     are used or the translation units that define the templates
53988     themselves; you can put all of the explicit instantiations you need
53989     into one big file; or you can create small files like
53990
53991          #include "Foo.h"
53992          #include "Foo.cc"
53993
53994          template class Foo<int>;
53995          template ostream& operator <<
53996                          (ostream&, const Foo<int>&);
53997
53998     for each of the instances you need, and create a template
53999     instantiation library from those.
54000
54001     This is the simplest option, but also offers flexibility and
54002     fine-grained control when necessary.  It is also the most portable
54003     alternative and programs using this approach will work with most
54004     modern compilers.
54005
54006  2. Compile your code with '-fno-implicit-templates' to disable the
54007     implicit generation of template instances, and explicitly
54008     instantiate all the ones you use.  This approach requires more
54009     knowledge of exactly which instances you need than do the others,
54010     but it's less mysterious and allows greater control if you want to
54011     ensure that only the intended instances are used.
54012
54013     If you are using Cfront-model code, you can probably get away with
54014     not using '-fno-implicit-templates' when compiling files that don't
54015     '#include' the member template definitions.
54016
54017     If you use one big file to do the instantiations, you may want to
54018     compile it without '-fno-implicit-templates' so you get all of the
54019     instances required by your explicit instantiations (but not by any
54020     other files) without having to specify them as well.
54021
54022     In addition to forward declaration of explicit instantiations (with
54023     'extern'), G++ has extended the template instantiation syntax to
54024     support instantiation of the compiler support data for a template
54025     class (i.e. the vtable) without instantiating any of its members
54026     (with 'inline'), and instantiation of only the static data members
54027     of a template class, without the support data or member functions
54028     (with 'static'):
54029
54030          inline template class Foo<int>;
54031          static template class Foo<int>;
54032
54033
54034File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
54035
540367.6 Extracting the Function Pointer from a Bound Pointer to Member Function
54037===========================================================================
54038
54039In C++, pointer to member functions (PMFs) are implemented using a wide
54040pointer of sorts to handle all the possible call mechanisms; the PMF
54041needs to store information about how to adjust the 'this' pointer, and
54042if the function pointed to is virtual, where to find the vtable, and
54043where in the vtable to look for the member function.  If you are using
54044PMFs in an inner loop, you should really reconsider that decision.  If
54045that is not an option, you can extract the pointer to the function that
54046would be called for a given object/PMF pair and call it directly inside
54047the inner loop, to save a bit of time.
54048
54049 Note that you still pay the penalty for the call through a function
54050pointer; on most modern architectures, such a call defeats the branch
54051prediction features of the CPU.  This is also true of normal virtual
54052function calls.
54053
54054 The syntax for this extension is
54055
54056     extern A a;
54057     extern int (A::*fp)();
54058     typedef int (*fptr)(A *);
54059
54060     fptr p = (fptr)(a.*fp);
54061
54062 For PMF constants (i.e. expressions of the form '&Klasse::Member'), no
54063object is needed to obtain the address of the function.  They can be
54064converted to function pointers directly:
54065
54066     fptr p1 = (fptr)(&A::foo);
54067
54068 You must specify '-Wno-pmf-conversions' to use this extension.
54069
54070
54071File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
54072
540737.7 C++-Specific Variable, Function, and Type Attributes
54074========================================================
54075
54076Some attributes only make sense for C++ programs.
54077
54078'abi_tag ("TAG", ...)'
54079     The 'abi_tag' attribute can be applied to a function, variable, or
54080     class declaration.  It modifies the mangled name of the entity to
54081     incorporate the tag name, in order to distinguish the function or
54082     class from an earlier version with a different ABI; perhaps the
54083     class has changed size, or the function has a different return type
54084     that is not encoded in the mangled name.
54085
54086     The attribute can also be applied to an inline namespace, but does
54087     not affect the mangled name of the namespace; in this case it is
54088     only used for '-Wabi-tag' warnings and automatic tagging of
54089     functions and variables.  Tagging inline namespaces is generally
54090     preferable to tagging individual declarations, but the latter is
54091     sometimes necessary, such as when only certain members of a class
54092     need to be tagged.
54093
54094     The argument can be a list of strings of arbitrary length.  The
54095     strings are sorted on output, so the order of the list is
54096     unimportant.
54097
54098     A redeclaration of an entity must not add new ABI tags, since doing
54099     so would change the mangled name.
54100
54101     The ABI tags apply to a name, so all instantiations and
54102     specializations of a template have the same tags.  The attribute
54103     will be ignored if applied to an explicit specialization or
54104     instantiation.
54105
54106     The '-Wabi-tag' flag enables a warning about a class which does not
54107     have all the ABI tags used by its subobjects and virtual functions;
54108     for users with code that needs to coexist with an earlier ABI,
54109     using this option can help to find all affected types that need to
54110     be tagged.
54111
54112     When a type involving an ABI tag is used as the type of a variable
54113     or return type of a function where that tag is not already present
54114     in the signature of the function, the tag is automatically applied
54115     to the variable or function.  '-Wabi-tag' also warns about this
54116     situation; this warning can be avoided by explicitly tagging the
54117     variable or function or moving it into a tagged inline namespace.
54118
54119'init_priority (PRIORITY)'
54120
54121     In Standard C++, objects defined at namespace scope are guaranteed
54122     to be initialized in an order in strict accordance with that of
54123     their definitions _in a given translation unit_.  No guarantee is
54124     made for initializations across translation units.  However, GNU
54125     C++ allows users to control the order of initialization of objects
54126     defined at namespace scope with the 'init_priority' attribute by
54127     specifying a relative PRIORITY, a constant integral expression
54128     currently bounded between 101 and 65535 inclusive.  Lower numbers
54129     indicate a higher priority.
54130
54131     In the following example, 'A' would normally be created before 'B',
54132     but the 'init_priority' attribute reverses that order:
54133
54134          Some_Class  A  __attribute__ ((init_priority (2000)));
54135          Some_Class  B  __attribute__ ((init_priority (543)));
54136
54137     Note that the particular values of PRIORITY do not matter; only
54138     their relative ordering.
54139
54140'warn_unused'
54141
54142     For C++ types with non-trivial constructors and/or destructors it
54143     is impossible for the compiler to determine whether a variable of
54144     this type is truly unused if it is not referenced.  This type
54145     attribute informs the compiler that variables of this type should
54146     be warned about if they appear to be unused, just like variables of
54147     fundamental types.
54148
54149     This attribute is appropriate for types which just represent a
54150     value, such as 'std::string'; it is not appropriate for types which
54151     control a resource, such as 'std::lock_guard'.
54152
54153     This attribute is also accepted in C, but it is unnecessary because
54154     C does not have constructors or destructors.
54155
54156
54157File: gcc.info,  Node: Function Multiversioning,  Next: Type Traits,  Prev: C++ Attributes,  Up: C++ Extensions
54158
541597.8 Function Multiversioning
54160============================
54161
54162With the GNU C++ front end, for x86 targets, you may specify multiple
54163versions of a function, where each function is specialized for a
54164specific target feature.  At runtime, the appropriate version of the
54165function is automatically executed depending on the characteristics of
54166the execution platform.  Here is an example.
54167
54168     __attribute__ ((target ("default")))
54169     int foo ()
54170     {
54171       // The default version of foo.
54172       return 0;
54173     }
54174
54175     __attribute__ ((target ("sse4.2")))
54176     int foo ()
54177     {
54178       // foo version for SSE4.2
54179       return 1;
54180     }
54181
54182     __attribute__ ((target ("arch=atom")))
54183     int foo ()
54184     {
54185       // foo version for the Intel ATOM processor
54186       return 2;
54187     }
54188
54189     __attribute__ ((target ("arch=amdfam10")))
54190     int foo ()
54191     {
54192       // foo version for the AMD Family 0x10 processors.
54193       return 3;
54194     }
54195
54196     int main ()
54197     {
54198       int (*p)() = &foo;
54199       assert ((*p) () == foo ());
54200       return 0;
54201     }
54202
54203 In the above example, four versions of function foo are created.  The
54204first version of foo with the target attribute "default" is the default
54205version.  This version gets executed when no other target specific
54206version qualifies for execution on a particular platform.  A new version
54207of foo is created by using the same function signature but with a
54208different target string.  Function foo is called or a pointer to it is
54209taken just like a regular function.  GCC takes care of doing the
54210dispatching to call the right version at runtime.  Refer to the GCC wiki
54211on Function Multiversioning
54212(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details.
54213
54214
54215File: gcc.info,  Node: Type Traits,  Next: C++ Concepts,  Prev: Function Multiversioning,  Up: C++ Extensions
54216
542177.9 Type Traits
54218===============
54219
54220The C++ front end implements syntactic extensions that allow
54221compile-time determination of various characteristics of a type (or of a
54222pair of types).
54223
54224'__has_nothrow_assign (type)'
54225     If 'type' is 'const'-qualified or is a reference type then the
54226     trait is 'false'.  Otherwise if '__has_trivial_assign (type)' is
54227     'true' then the trait is 'true', else if 'type' is a cv-qualified
54228     class or union type with copy assignment operators that are known
54229     not to throw an exception then the trait is 'true', else it is
54230     'false'.  Requires: 'type' shall be a complete type, (possibly
54231     cv-qualified) 'void', or an array of unknown bound.
54232
54233'__has_nothrow_copy (type)'
54234     If '__has_trivial_copy (type)' is 'true' then the trait is 'true',
54235     else if 'type' is a cv-qualified class or union type with copy
54236     constructors that are known not to throw an exception then the
54237     trait is 'true', else it is 'false'.  Requires: 'type' shall be a
54238     complete type, (possibly cv-qualified) 'void', or an array of
54239     unknown bound.
54240
54241'__has_nothrow_constructor (type)'
54242     If '__has_trivial_constructor (type)' is 'true' then the trait is
54243     'true', else if 'type' is a cv class or union type (or array
54244     thereof) with a default constructor that is known not to throw an
54245     exception then the trait is 'true', else it is 'false'.  Requires:
54246     'type' shall be a complete type, (possibly cv-qualified) 'void', or
54247     an array of unknown bound.
54248
54249'__has_trivial_assign (type)'
54250     If 'type' is 'const'- qualified or is a reference type then the
54251     trait is 'false'.  Otherwise if '__is_pod (type)' is 'true' then
54252     the trait is 'true', else if 'type' is a cv-qualified class or
54253     union type with a trivial copy assignment ([class.copy]) then the
54254     trait is 'true', else it is 'false'.  Requires: 'type' shall be a
54255     complete type, (possibly cv-qualified) 'void', or an array of
54256     unknown bound.
54257
54258'__has_trivial_copy (type)'
54259     If '__is_pod (type)' is 'true' or 'type' is a reference type then
54260     the trait is 'true', else if 'type' is a cv class or union type
54261     with a trivial copy constructor ([class.copy]) then the trait is
54262     'true', else it is 'false'.  Requires: 'type' shall be a complete
54263     type, (possibly cv-qualified) 'void', or an array of unknown bound.
54264
54265'__has_trivial_constructor (type)'
54266     If '__is_pod (type)' is 'true' then the trait is 'true', else if
54267     'type' is a cv-qualified class or union type (or array thereof)
54268     with a trivial default constructor ([class.ctor]) then the trait is
54269     'true', else it is 'false'.  Requires: 'type' shall be a complete
54270     type, (possibly cv-qualified) 'void', or an array of unknown bound.
54271
54272'__has_trivial_destructor (type)'
54273     If '__is_pod (type)' is 'true' or 'type' is a reference type then
54274     the trait is 'true', else if 'type' is a cv class or union type (or
54275     array thereof) with a trivial destructor ([class.dtor]) then the
54276     trait is 'true', else it is 'false'.  Requires: 'type' shall be a
54277     complete type, (possibly cv-qualified) 'void', or an array of
54278     unknown bound.
54279
54280'__has_virtual_destructor (type)'
54281     If 'type' is a class type with a virtual destructor ([class.dtor])
54282     then the trait is 'true', else it is 'false'.  Requires: 'type'
54283     shall be a complete type, (possibly cv-qualified) 'void', or an
54284     array of unknown bound.
54285
54286'__is_abstract (type)'
54287     If 'type' is an abstract class ([class.abstract]) then the trait is
54288     'true', else it is 'false'.  Requires: 'type' shall be a complete
54289     type, (possibly cv-qualified) 'void', or an array of unknown bound.
54290
54291'__is_base_of (base_type, derived_type)'
54292     If 'base_type' is a base class of 'derived_type' ([class.derived])
54293     then the trait is 'true', otherwise it is 'false'.  Top-level
54294     cv-qualifications of 'base_type' and 'derived_type' are ignored.
54295     For the purposes of this trait, a class type is considered is own
54296     base.  Requires: if '__is_class (base_type)' and '__is_class
54297     (derived_type)' are 'true' and 'base_type' and 'derived_type' are
54298     not the same type (disregarding cv-qualifiers), 'derived_type'
54299     shall be a complete type.  A diagnostic is produced if this
54300     requirement is not met.
54301
54302'__is_class (type)'
54303     If 'type' is a cv-qualified class type, and not a union type
54304     ([basic.compound]) the trait is 'true', else it is 'false'.
54305
54306'__is_empty (type)'
54307     If '__is_class (type)' is 'false' then the trait is 'false'.
54308     Otherwise 'type' is considered empty if and only if: 'type' has no
54309     non-static data members, or all non-static data members, if any,
54310     are bit-fields of length 0, and 'type' has no virtual members, and
54311     'type' has no virtual base classes, and 'type' has no base classes
54312     'base_type' for which '__is_empty (base_type)' is 'false'.
54313     Requires: 'type' shall be a complete type, (possibly cv-qualified)
54314     'void', or an array of unknown bound.
54315
54316'__is_enum (type)'
54317     If 'type' is a cv enumeration type ([basic.compound]) the trait is
54318     'true', else it is 'false'.
54319
54320'__is_literal_type (type)'
54321     If 'type' is a literal type ([basic.types]) the trait is 'true',
54322     else it is 'false'.  Requires: 'type' shall be a complete type,
54323     (possibly cv-qualified) 'void', or an array of unknown bound.
54324
54325'__is_pod (type)'
54326     If 'type' is a cv POD type ([basic.types]) then the trait is
54327     'true', else it is 'false'.  Requires: 'type' shall be a complete
54328     type, (possibly cv-qualified) 'void', or an array of unknown bound.
54329
54330'__is_polymorphic (type)'
54331     If 'type' is a polymorphic class ([class.virtual]) then the trait
54332     is 'true', else it is 'false'.  Requires: 'type' shall be a
54333     complete type, (possibly cv-qualified) 'void', or an array of
54334     unknown bound.
54335
54336'__is_standard_layout (type)'
54337     If 'type' is a standard-layout type ([basic.types]) the trait is
54338     'true', else it is 'false'.  Requires: 'type' shall be a complete
54339     type, (possibly cv-qualified) 'void', or an array of unknown bound.
54340
54341'__is_trivial (type)'
54342     If 'type' is a trivial type ([basic.types]) the trait is 'true',
54343     else it is 'false'.  Requires: 'type' shall be a complete type,
54344     (possibly cv-qualified) 'void', or an array of unknown bound.
54345
54346'__is_union (type)'
54347     If 'type' is a cv union type ([basic.compound]) the trait is
54348     'true', else it is 'false'.
54349
54350'__underlying_type (type)'
54351     The underlying type of 'type'.  Requires: 'type' shall be an
54352     enumeration type ([dcl.enum]).
54353
54354'__integer_pack (length)'
54355     When used as the pattern of a pack expansion within a template
54356     definition, expands to a template argument pack containing integers
54357     from '0' to 'length-1'.  This is provided for efficient
54358     implementation of 'std::make_integer_sequence'.
54359
54360
54361File: gcc.info,  Node: C++ Concepts,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
54362
543637.10 C++ Concepts
54364=================
54365
54366C++ concepts provide much-improved support for generic programming.  In
54367particular, they allow the specification of constraints on template
54368arguments.  The constraints are used to extend the usual overloading and
54369partial specialization capabilities of the language, allowing generic
54370data structures and algorithms to be "refined" based on their properties
54371rather than their type names.
54372
54373 The following keywords are reserved for concepts.
54374
54375'assumes'
54376     States an expression as an assumption, and if possible, verifies
54377     that the assumption is valid.  For example, 'assume(n > 0)'.
54378
54379'axiom'
54380     Introduces an axiom definition.  Axioms introduce requirements on
54381     values.
54382
54383'forall'
54384     Introduces a universally quantified object in an axiom.  For
54385     example, 'forall (int n) n + 0 == n').
54386
54387'concept'
54388     Introduces a concept definition.  Concepts are sets of syntactic
54389     and semantic requirements on types and their values.
54390
54391'requires'
54392     Introduces constraints on template arguments or requirements for a
54393     member function of a class template.
54394
54395 The front end also exposes a number of internal mechanism that can be
54396used to simplify the writing of type traits.  Note that some of these
54397traits are likely to be removed in the future.
54398
54399'__is_same (type1, type2)'
54400     A binary type trait: 'true' whenever the type arguments are the
54401     same.
54402
54403
54404File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: C++ Concepts,  Up: C++ Extensions
54405
544067.11 Deprecated Features
54407========================
54408
54409In the past, the GNU C++ compiler was extended to experiment with new
54410features, at a time when the C++ language was still evolving.  Now that
54411the C++ standard is complete, some of those features are superseded by
54412superior alternatives.  Using the old features might cause a warning in
54413some cases that the feature will be dropped in the future.  In other
54414cases, the feature might be gone already.
54415
54416 G++ allows a virtual function returning 'void *' to be overridden by
54417one returning a different pointer type.  This extension to the covariant
54418return type rules is now deprecated and will be removed from a future
54419version.
54420
54421 The use of default arguments in function pointers, function typedefs
54422and other places where they are not permitted by the standard is
54423deprecated and will be removed from a future version of G++.
54424
54425 G++ allows floating-point literals to appear in integral constant
54426expressions, e.g. ' enum E { e = int(2.2 * 3.7) } ' This extension is
54427deprecated and will be removed from a future version.
54428
54429 G++ allows static data members of const floating-point type to be
54430declared with an initializer in a class definition.  The standard only
54431allows initializers for static members of const integral types and const
54432enumeration types so this extension has been deprecated and will be
54433removed from a future version.
54434
54435 G++ allows attributes to follow a parenthesized direct initializer,
54436e.g. ' int f (0) __attribute__ ((something)); ' This extension has been
54437ignored since G++ 3.3 and is deprecated.
54438
54439 G++ allows anonymous structs and unions to have members that are not
54440public non-static data members (i.e. fields).  These extensions are
54441deprecated.
54442
54443
54444File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
54445
544467.12 Backwards Compatibility
54447============================
54448
54449Now that there is a definitive ISO standard C++, G++ has a specification
54450to adhere to.  The C++ language evolved over time, and features that
54451used to be acceptable in previous drafts of the standard, such as the
54452ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
54453to allow compilation of C++ written to such drafts, G++ contains some
54454backwards compatibilities.  _All such backwards compatibility features
54455are liable to disappear in future versions of G++._  They should be
54456considered deprecated.  *Note Deprecated Features::.
54457
54458'Implicit C language'
54459     Old C system header files did not contain an 'extern "C" {...}'
54460     scope to set the language.  On such systems, all system header
54461     files are implicitly scoped inside a C language scope.  Such
54462     headers must correctly prototype function argument types, there is
54463     no leeway for '()' to indicate an unspecified set of arguments.
54464
54465
54466File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
54467
544688 GNU Objective-C Features
54469**************************
54470
54471This document is meant to describe some of the GNU Objective-C features.
54472It is not intended to teach you Objective-C. There are several resources
54473on the Internet that present the language.
54474
54475* Menu:
54476
54477* GNU Objective-C runtime API::
54478* Executing code before main::
54479* Type encoding::
54480* Garbage Collection::
54481* Constant string objects::
54482* compatibility_alias::
54483* Exceptions::
54484* Synchronization::
54485* Fast enumeration::
54486* Messaging with the GNU Objective-C runtime::
54487
54488
54489File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
54490
544918.1 GNU Objective-C Runtime API
54492===============================
54493
54494This section is specific for the GNU Objective-C runtime.  If you are
54495using a different runtime, you can skip it.
54496
54497 The GNU Objective-C runtime provides an API that allows you to interact
54498with the Objective-C runtime system, querying the live runtime
54499structures and even manipulating them.  This allows you for example to
54500inspect and navigate classes, methods and protocols; to define new
54501classes or new methods, and even to modify existing classes or
54502protocols.
54503
54504 If you are using a "Foundation" library such as GNUstep-Base, this
54505library will provide you with a rich set of functionality to do most of
54506the inspection tasks, and you probably will only need direct access to
54507the GNU Objective-C runtime API to define new classes or methods.
54508
54509* Menu:
54510
54511* Modern GNU Objective-C runtime API::
54512* Traditional GNU Objective-C runtime API::
54513
54514
54515File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
54516
545178.1.1 Modern GNU Objective-C Runtime API
54518----------------------------------------
54519
54520The GNU Objective-C runtime provides an API which is similar to the one
54521provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
54522API is documented in the public header files of the GNU Objective-C
54523runtime:
54524
54525   * 'objc/objc.h': this is the basic Objective-C header file, defining
54526     the basic Objective-C types such as 'id', 'Class' and 'BOOL'.  You
54527     have to include this header to do almost anything with Objective-C.
54528
54529   * 'objc/runtime.h': this header declares most of the public runtime
54530     API functions allowing you to inspect and manipulate the
54531     Objective-C runtime data structures.  These functions are fairly
54532     standardized across Objective-C runtimes and are almost identical
54533     to the Apple/NeXT Objective-C runtime ones.  It does not declare
54534     functions in some specialized areas (constructing and forwarding
54535     message invocations, threading) which are in the other headers
54536     below.  You have to include 'objc/objc.h' and 'objc/runtime.h' to
54537     use any of the functions, such as 'class_getName()', declared in
54538     'objc/runtime.h'.
54539
54540   * 'objc/message.h': this header declares public functions used to
54541     construct, deconstruct and forward message invocations.  Because
54542     messaging is done in quite a different way on different runtimes,
54543     functions in this header are specific to the GNU Objective-C
54544     runtime implementation.
54545
54546   * 'objc/objc-exception.h': this header declares some public functions
54547     related to Objective-C exceptions.  For example functions in this
54548     header allow you to throw an Objective-C exception from plain C/C++
54549     code.
54550
54551   * 'objc/objc-sync.h': this header declares some public functions
54552     related to the Objective-C '@synchronized()' syntax, allowing you
54553     to emulate an Objective-C '@synchronized()' block in plain C/C++
54554     code.
54555
54556   * 'objc/thr.h': this header declares a public runtime API threading
54557     layer that is only provided by the GNU Objective-C runtime.  It
54558     declares functions such as 'objc_mutex_lock()', which provide a
54559     platform-independent set of threading functions.
54560
54561 The header files contain detailed documentation for each function in
54562the GNU Objective-C runtime API.
54563
54564
54565File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
54566
545678.1.2 Traditional GNU Objective-C Runtime API
54568---------------------------------------------
54569
54570The GNU Objective-C runtime used to provide a different API, which we
54571call the "traditional" GNU Objective-C runtime API. Functions belonging
54572to this API are easy to recognize because they use a different naming
54573convention, such as 'class_get_super_class()' (traditional API) instead
54574of 'class_getSuperclass()' (modern API). Software using this API
54575includes the file 'objc/objc-api.h' where it is declared.
54576
54577 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
54578available.
54579
54580
54581File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
54582
545838.2 '+load': Executing Code before 'main'
54584=========================================
54585
54586This section is specific for the GNU Objective-C runtime.  If you are
54587using a different runtime, you can skip it.
54588
54589 The GNU Objective-C runtime provides a way that allows you to execute
54590code before the execution of the program enters the 'main' function.
54591The code is executed on a per-class and a per-category basis, through a
54592special class method '+load'.
54593
54594 This facility is very useful if you want to initialize global variables
54595which can be accessed by the program directly, without sending a message
54596to the class first.  The usual way to initialize global variables, in
54597the '+initialize' method, might not be useful because '+initialize' is
54598only called when the first message is sent to a class object, which in
54599some cases could be too late.
54600
54601 Suppose for example you have a 'FileStream' class that declares
54602'Stdin', 'Stdout' and 'Stderr' as global variables, like below:
54603
54604
54605     FileStream *Stdin = nil;
54606     FileStream *Stdout = nil;
54607     FileStream *Stderr = nil;
54608
54609     @implementation FileStream
54610
54611     + (void)initialize
54612     {
54613         Stdin = [[FileStream new] initWithFd:0];
54614         Stdout = [[FileStream new] initWithFd:1];
54615         Stderr = [[FileStream new] initWithFd:2];
54616     }
54617
54618     /* Other methods here */
54619     @end
54620
54621
54622 In this example, the initialization of 'Stdin', 'Stdout' and 'Stderr'
54623in '+initialize' occurs too late.  The programmer can send a message to
54624one of these objects before the variables are actually initialized, thus
54625sending messages to the 'nil' object.  The '+initialize' method which
54626actually initializes the global variables is not invoked until the first
54627message is sent to the class object.  The solution would require these
54628variables to be initialized just before entering 'main'.
54629
54630 The correct solution of the above problem is to use the '+load' method
54631instead of '+initialize':
54632
54633
54634     @implementation FileStream
54635
54636     + (void)load
54637     {
54638         Stdin = [[FileStream new] initWithFd:0];
54639         Stdout = [[FileStream new] initWithFd:1];
54640         Stderr = [[FileStream new] initWithFd:2];
54641     }
54642
54643     /* Other methods here */
54644     @end
54645
54646
54647 The '+load' is a method that is not overridden by categories.  If a
54648class and a category of it both implement '+load', both methods are
54649invoked.  This allows some additional initializations to be performed in
54650a category.
54651
54652 This mechanism is not intended to be a replacement for '+initialize'.
54653You should be aware of its limitations when you decide to use it instead
54654of '+initialize'.
54655
54656* Menu:
54657
54658* What you can and what you cannot do in +load::
54659
54660
54661File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
54662
546638.2.1 What You Can and Cannot Do in '+load'
54664-------------------------------------------
54665
54666'+load' is to be used only as a last resort.  Because it is executed
54667very early, most of the Objective-C runtime machinery will not be ready
54668when '+load' is executed; hence '+load' works best for executing C code
54669that is independent on the Objective-C runtime.
54670
54671 The '+load' implementation in the GNU runtime guarantees you the
54672following things:
54673
54674   * you can write whatever C code you like;
54675
54676   * you can allocate and send messages to objects whose class is
54677     implemented in the same file;
54678
54679   * the '+load' implementation of all super classes of a class are
54680     executed before the '+load' of that class is executed;
54681
54682   * the '+load' implementation of a class is executed before the
54683     '+load' implementation of any category.
54684
54685 In particular, the following things, even if they can work in a
54686particular case, are not guaranteed:
54687
54688   * allocation of or sending messages to arbitrary objects;
54689
54690   * allocation of or sending messages to objects whose classes have a
54691     category implemented in the same file;
54692
54693   * sending messages to Objective-C constant strings ('@"this is a
54694     constant string"');
54695
54696 You should make no assumptions about receiving '+load' in sibling
54697classes when you write '+load' of a class.  The order in which sibling
54698classes receive '+load' is not guaranteed.
54699
54700 The order in which '+load' and '+initialize' are called could be
54701problematic if this matters.  If you don't allocate objects inside
54702'+load', it is guaranteed that '+load' is called before '+initialize'.
54703If you create an object inside '+load' the '+initialize' method of
54704object's class is invoked even if '+load' was not invoked.  Note if you
54705explicitly call '+load' on a class, '+initialize' will be called first.
54706To avoid possible problems try to implement only one of these methods.
54707
54708 The '+load' method is also invoked when a bundle is dynamically loaded
54709into your running program.  This happens automatically without any
54710intervening operation from you.  When you write bundles and you need to
54711write '+load' you can safely create and send messages to objects whose
54712classes already exist in the running program.  The same restrictions as
54713above apply to classes defined in bundle.
54714
54715
54716File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
54717
547188.3 Type Encoding
54719=================
54720
54721This is an advanced section.  Type encodings are used extensively by the
54722compiler and by the runtime, but you generally do not need to know about
54723them to use Objective-C.
54724
54725 The Objective-C compiler generates type encodings for all the types.
54726These type encodings are used at runtime to find out information about
54727selectors and methods and about objects and classes.
54728
54729 The types are encoded in the following way:
54730
54731'_Bool'            'B'
54732'char'             'c'
54733'unsigned char'    'C'
54734'short'            's'
54735'unsigned short'   'S'
54736'int'              'i'
54737'unsigned int'     'I'
54738'long'             'l'
54739'unsigned long'    'L'
54740'long long'        'q'
54741'unsigned long     'Q'
54742long'
54743'float'            'f'
54744'double'           'd'
54745'long double'      'D'
54746'void'             'v'
54747'id'               '@'
54748'Class'            '#'
54749'SEL'              ':'
54750'char*'            '*'
54751'enum'             an 'enum' is encoded exactly as the integer type
54752                   that the compiler uses for it, which depends on the
54753                   enumeration values.  Often the compiler users
54754                   'unsigned int', which is then encoded as 'I'.
54755unknown type       '?'
54756Complex types      'j' followed by the inner type.  For example
54757                   '_Complex double' is encoded as "jd".
54758bit-fields         'b' followed by the starting position of the
54759                   bit-field, the type of the bit-field and the size of
54760                   the bit-field (the bit-fields encoding was changed
54761                   from the NeXT's compiler encoding, see below)
54762
54763 The encoding of bit-fields has changed to allow bit-fields to be
54764properly handled by the runtime functions that compute sizes and
54765alignments of types that contain bit-fields.  The previous encoding
54766contained only the size of the bit-field.  Using only this information
54767it is not possible to reliably compute the size occupied by the
54768bit-field.  This is very important in the presence of the Boehm's
54769garbage collector because the objects are allocated using the typed
54770memory facility available in this collector.  The typed memory
54771allocation requires information about where the pointers are located
54772inside the object.
54773
54774 The position in the bit-field is the position, counting in bits, of the
54775bit closest to the beginning of the structure.
54776
54777 The non-atomic types are encoded as follows:
54778
54779pointers       '^' followed by the pointed type.
54780arrays         '[' followed by the number of elements in the array
54781               followed by the type of the elements followed by ']'
54782structures     '{' followed by the name of the structure (or '?' if the
54783               structure is unnamed), the '=' sign, the type of the
54784               members and by '}'
54785unions         '(' followed by the name of the structure (or '?' if the
54786               union is unnamed), the '=' sign, the type of the members
54787               followed by ')'
54788vectors        '![' followed by the vector_size (the number of bytes
54789               composing the vector) followed by a comma, followed by
54790               the alignment (in bytes) of the vector, followed by the
54791               type of the elements followed by ']'
54792
54793 Here are some types and their encodings, as they are generated by the
54794compiler on an i386 machine:
54795
54796
54797Objective-C type                            Compiler encoding
54798     int a[10];                             '[10i]'
54799     struct {                               '{?=i[3f]b128i3b131i2c}'
54800       int i;
54801       float f[3];
54802       int a:3;
54803       int b:2;
54804       char c;
54805     }
54806     int a __attribute__ ((vector_size (16)));'![16,16i]' (alignment
54807                                            depends on the machine)
54808
54809
54810 In addition to the types the compiler also encodes the type specifiers.
54811The table below describes the encoding of the current Objective-C type
54812specifiers:
54813
54814
54815Specifier          Encoding
54816'const'            'r'
54817'in'               'n'
54818'inout'            'N'
54819'out'              'o'
54820'bycopy'           'O'
54821'byref'            'R'
54822'oneway'           'V'
54823
54824
54825 The type specifiers are encoded just before the type.  Unlike types
54826however, the type specifiers are only encoded when they appear in method
54827argument types.
54828
54829 Note how 'const' interacts with pointers:
54830
54831
54832Objective-C type   Compiler encoding
54833     const int     'ri'
54834     const int*    '^ri'
54835     int *const    'r^i'
54836
54837
54838 'const int*' is a pointer to a 'const int', and so is encoded as '^ri'.
54839'int* const', instead, is a 'const' pointer to an 'int', and so is
54840encoded as 'r^i'.
54841
54842 Finally, there is a complication when encoding 'const char *' versus
54843'char * const'.  Because 'char *' is encoded as '*' and not as '^c',
54844there is no way to express the fact that 'r' applies to the pointer or
54845to the pointee.
54846
54847 Hence, it is assumed as a convention that 'r*' means 'const char *'
54848(since it is what is most often meant), and there is no way to encode
54849'char *const'.  'char *const' would simply be encoded as '*', and the
54850'const' is lost.
54851
54852* Menu:
54853
54854* Legacy type encoding::
54855* @encode::
54856* Method signatures::
54857
54858
54859File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
54860
548618.3.1 Legacy Type Encoding
54862--------------------------
54863
54864Unfortunately, historically GCC used to have a number of bugs in its
54865encoding code.  The NeXT runtime expects GCC to emit type encodings in
54866this historical format (compatible with GCC-3.3), so when using the NeXT
54867runtime, GCC will introduce on purpose a number of incorrect encodings:
54868
54869   * the read-only qualifier of the pointee gets emitted before the '^'.
54870     The read-only qualifier of the pointer itself gets ignored, unless
54871     it is a typedef.  Also, the 'r' is only emitted for the outermost
54872     type.
54873
54874   * 32-bit longs are encoded as 'l' or 'L', but not always.  For
54875     typedefs, the compiler uses 'i' or 'I' instead if encoding a struct
54876     field or a pointer.
54877
54878   * 'enum's are always encoded as 'i' (int) even if they are actually
54879     unsigned or long.
54880
54881 In addition to that, the NeXT runtime uses a different encoding for
54882bitfields.  It encodes them as 'b' followed by the size, without a bit
54883offset or the underlying field type.
54884
54885
54886File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
54887
548888.3.2 '@encode'
54889---------------
54890
54891GNU Objective-C supports the '@encode' syntax that allows you to create
54892a type encoding from a C/Objective-C type.  For example, '@encode(int)'
54893is compiled by the compiler into '"i"'.
54894
54895 '@encode' does not support type qualifiers other than 'const'.  For
54896example, '@encode(const char*)' is valid and is compiled into '"r*"',
54897while '@encode(bycopy char *)' is invalid and will cause a compilation
54898error.
54899
54900
54901File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
54902
549038.3.3 Method Signatures
54904-----------------------
54905
54906This section documents the encoding of method types, which is rarely
54907needed to use Objective-C. You should skip it at a first reading; the
54908runtime provides functions that will work on methods and can walk
54909through the list of parameters and interpret them for you.  These
54910functions are part of the public "API" and are the preferred way to
54911interact with method signatures from user code.
54912
54913 But if you need to debug a problem with method signatures and need to
54914know how they are implemented (i.e., the "ABI"), read on.
54915
54916 Methods have their "signature" encoded and made available to the
54917runtime.  The "signature" encodes all the information required to
54918dynamically build invocations of the method at runtime: return type and
54919arguments.
54920
54921 The "signature" is a null-terminated string, composed of the following:
54922
54923   * The return type, including type qualifiers.  For example, a method
54924     returning 'int' would have 'i' here.
54925
54926   * The total size (in bytes) required to pass all the parameters.
54927     This includes the two hidden parameters (the object 'self' and the
54928     method selector '_cmd').
54929
54930   * Each argument, with the type encoding, followed by the offset (in
54931     bytes) of the argument in the list of parameters.
54932
54933 For example, a method with no arguments and returning 'int' would have
54934the signature 'i8@0:4' if the size of a pointer is 4.  The signature is
54935interpreted as follows: the 'i' is the return type (an 'int'), the '8'
54936is the total size of the parameters in bytes (two pointers each of size
549374), the '@0' is the first parameter (an object at byte offset '0') and
54938':4' is the second parameter (a 'SEL' at byte offset '4').
54939
54940 You can easily find more examples by running the "strings" program on
54941an Objective-C object file compiled by GCC. You'll see a lot of strings
54942that look very much like 'i8@0:4'.  They are signatures of Objective-C
54943methods.
54944
54945
54946File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
54947
549488.4 Garbage Collection
54949======================
54950
54951This section is specific for the GNU Objective-C runtime.  If you are
54952using a different runtime, you can skip it.
54953
54954 Support for garbage collection with the GNU runtime has been added by
54955using a powerful conservative garbage collector, known as the
54956Boehm-Demers-Weiser conservative garbage collector.
54957
54958 To enable the support for it you have to configure the compiler using
54959an additional argument, '--enable-objc-gc'.  This will build the
54960boehm-gc library, and build an additional runtime library which has
54961several enhancements to support the garbage collector.  The new library
54962has a new name, 'libobjc_gc.a' to not conflict with the
54963non-garbage-collected library.
54964
54965 When the garbage collector is used, the objects are allocated using the
54966so-called typed memory allocation mechanism available in the
54967Boehm-Demers-Weiser collector.  This mode requires precise information
54968on where pointers are located inside objects.  This information is
54969computed once per class, immediately after the class has been
54970initialized.
54971
54972 There is a new runtime function 'class_ivar_set_gcinvisible()' which
54973can be used to declare a so-called "weak pointer" reference.  Such a
54974pointer is basically hidden for the garbage collector; this can be
54975useful in certain situations, especially when you want to keep track of
54976the allocated objects, yet allow them to be collected.  This kind of
54977pointers can only be members of objects, you cannot declare a global
54978pointer as a weak reference.  Every type which is a pointer type can be
54979declared a weak pointer, including 'id', 'Class' and 'SEL'.
54980
54981 Here is an example of how to use this feature.  Suppose you want to
54982implement a class whose instances hold a weak pointer reference; the
54983following class does this:
54984
54985
54986     @interface WeakPointer : Object
54987     {
54988         const void* weakPointer;
54989     }
54990
54991     - initWithPointer:(const void*)p;
54992     - (const void*)weakPointer;
54993     @end
54994
54995
54996     @implementation WeakPointer
54997
54998     + (void)initialize
54999     {
55000       if (self == objc_lookUpClass ("WeakPointer"))
55001         class_ivar_set_gcinvisible (self, "weakPointer", YES);
55002     }
55003
55004     - initWithPointer:(const void*)p
55005     {
55006       weakPointer = p;
55007       return self;
55008     }
55009
55010     - (const void*)weakPointer
55011     {
55012       return weakPointer;
55013     }
55014
55015     @end
55016
55017
55018 Weak pointers are supported through a new type character specifier
55019represented by the '!' character.  The 'class_ivar_set_gcinvisible()'
55020function adds or removes this specifier to the string type description
55021of the instance variable named as argument.
55022
55023
55024File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
55025
550268.5 Constant String Objects
55027===========================
55028
55029GNU Objective-C provides constant string objects that are generated
55030directly by the compiler.  You declare a constant string object by
55031prefixing a C constant string with the character '@':
55032
55033       id myString = @"this is a constant string object";
55034
55035 The constant string objects are by default instances of the
55036'NXConstantString' class which is provided by the GNU Objective-C
55037runtime.  To get the definition of this class you must include the
55038'objc/NXConstStr.h' header file.
55039
55040 User defined libraries may want to implement their own constant string
55041class.  To be able to support them, the GNU Objective-C compiler
55042provides a new command line options
55043'-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
55044to a strict structure, the same as 'NXConstantString''s structure:
55045
55046
55047     @interface MyConstantStringClass
55048     {
55049       Class isa;
55050       char *c_string;
55051       unsigned int len;
55052     }
55053     @end
55054
55055
55056 'NXConstantString' inherits from 'Object'; user class libraries may
55057choose to inherit the customized constant string class from a different
55058class than 'Object'.  There is no requirement in the methods the
55059constant string class has to implement, but the final ivar layout of the
55060class must be the compatible with the given structure.
55061
55062 When the compiler creates the statically allocated constant string
55063object, the 'c_string' field will be filled by the compiler with the
55064string; the 'length' field will be filled by the compiler with the
55065string length; the 'isa' pointer will be filled with 'NULL' by the
55066compiler, and it will later be fixed up automatically at runtime by the
55067GNU Objective-C runtime library to point to the class which was set by
55068the '-fconstant-string-class' option when the object file is loaded (if
55069you wonder how it works behind the scenes, the name of the class to use,
55070and the list of static objects to fixup, are stored by the compiler in
55071the object file in a place where the GNU runtime library will find them
55072at runtime).
55073
55074 As a result, when a file is compiled with the '-fconstant-string-class'
55075option, all the constant string objects will be instances of the class
55076specified as argument to this option.  It is possible to have multiple
55077compilation units referring to different constant string classes,
55078neither the compiler nor the linker impose any restrictions in doing
55079this.
55080
55081
55082File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
55083
550848.6 'compatibility_alias'
55085=========================
55086
55087The keyword '@compatibility_alias' allows you to define a class name as
55088equivalent to another class name.  For example:
55089
55090     @compatibility_alias WOApplication GSWApplication;
55091
55092 tells the compiler that each time it encounters 'WOApplication' as a
55093class name, it should replace it with 'GSWApplication' (that is,
55094'WOApplication' is just an alias for 'GSWApplication').
55095
55096 There are some constraints on how this can be used--
55097
55098   * 'WOApplication' (the alias) must not be an existing class;
55099
55100   * 'GSWApplication' (the real class) must be an existing class.
55101
55102
55103File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
55104
551058.7 Exceptions
55106==============
55107
55108GNU Objective-C provides exception support built into the language, as
55109in the following example:
55110
55111       @try {
55112         ...
55113            @throw expr;
55114         ...
55115       }
55116       @catch (AnObjCClass *exc) {
55117         ...
55118           @throw expr;
55119         ...
55120           @throw;
55121         ...
55122       }
55123       @catch (AnotherClass *exc) {
55124         ...
55125       }
55126       @catch (id allOthers) {
55127         ...
55128       }
55129       @finally {
55130         ...
55131           @throw expr;
55132         ...
55133       }
55134
55135 The '@throw' statement may appear anywhere in an Objective-C or
55136Objective-C++ program; when used inside of a '@catch' block, the
55137'@throw' may appear without an argument (as shown above), in which case
55138the object caught by the '@catch' will be rethrown.
55139
55140 Note that only (pointers to) Objective-C objects may be thrown and
55141caught using this scheme.  When an object is thrown, it will be caught
55142by the nearest '@catch' clause capable of handling objects of that type,
55143analogously to how 'catch' blocks work in C++ and Java.  A '@catch(id
55144...)' clause (as shown above) may also be provided to catch any and all
55145Objective-C exceptions not caught by previous '@catch' clauses (if any).
55146
55147 The '@finally' clause, if present, will be executed upon exit from the
55148immediately preceding '@try ... @catch' section.  This will happen
55149regardless of whether any exceptions are thrown, caught or rethrown
55150inside the '@try ... @catch' section, analogously to the behavior of the
55151'finally' clause in Java.
55152
55153 There are several caveats to using the new exception mechanism:
55154
55155   * The '-fobjc-exceptions' command line option must be used when
55156     compiling Objective-C files that use exceptions.
55157
55158   * With the GNU runtime, exceptions are always implemented as "native"
55159     exceptions and it is recommended that the '-fexceptions' and
55160     '-shared-libgcc' options are used when linking.
55161
55162   * With the NeXT runtime, although currently designed to be binary
55163     compatible with 'NS_HANDLER'-style idioms provided by the
55164     'NSException' class, the new exceptions can only be used on Mac OS
55165     X 10.3 (Panther) and later systems, due to additional functionality
55166     needed in the NeXT Objective-C runtime.
55167
55168   * As mentioned above, the new exceptions do not support handling
55169     types other than Objective-C objects.  Furthermore, when used from
55170     Objective-C++, the Objective-C exception model does not
55171     interoperate with C++ exceptions at this time.  This means you
55172     cannot '@throw' an exception from Objective-C and 'catch' it in
55173     C++, or vice versa (i.e., 'throw ... @catch').
55174
55175
55176File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
55177
551788.8 Synchronization
55179===================
55180
55181GNU Objective-C provides support for synchronized blocks:
55182
55183       @synchronized (ObjCClass *guard) {
55184         ...
55185       }
55186
55187 Upon entering the '@synchronized' block, a thread of execution shall
55188first check whether a lock has been placed on the corresponding 'guard'
55189object by another thread.  If it has, the current thread shall wait
55190until the other thread relinquishes its lock.  Once 'guard' becomes
55191available, the current thread will place its own lock on it, execute the
55192code contained in the '@synchronized' block, and finally relinquish the
55193lock (thereby making 'guard' available to other threads).
55194
55195 Unlike Java, Objective-C does not allow for entire methods to be marked
55196'@synchronized'.  Note that throwing exceptions out of '@synchronized'
55197blocks is allowed, and will cause the guarding object to be unlocked
55198properly.
55199
55200 Because of the interactions between synchronization and exception
55201handling, you can only use '@synchronized' when compiling with
55202exceptions enabled, that is with the command line option
55203'-fobjc-exceptions'.
55204
55205
55206File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
55207
552088.9 Fast Enumeration
55209====================
55210
55211* Menu:
55212
55213* Using fast enumeration::
55214* c99-like fast enumeration syntax::
55215* Fast enumeration details::
55216* Fast enumeration protocol::
55217
55218
55219File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
55220
552218.9.1 Using Fast Enumeration
55222----------------------------
55223
55224GNU Objective-C provides support for the fast enumeration syntax:
55225
55226       id array = ...;
55227       id object;
55228
55229       for (object in array)
55230       {
55231         /* Do something with 'object' */
55232       }
55233
55234 'array' needs to be an Objective-C object (usually a collection object,
55235for example an array, a dictionary or a set) which implements the "Fast
55236Enumeration Protocol" (see below).  If you are using a Foundation
55237library such as GNUstep Base or Apple Cocoa Foundation, all collection
55238objects in the library implement this protocol and can be used in this
55239way.
55240
55241 The code above would iterate over all objects in 'array'.  For each of
55242them, it assigns it to 'object', then executes the 'Do something with
55243'object'' statements.
55244
55245 Here is a fully worked-out example using a Foundation library (which
55246provides the implementation of 'NSArray', 'NSString' and 'NSLog'):
55247
55248       NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
55249       NSString *object;
55250
55251       for (object in array)
55252         NSLog (@"Iterating over %@", object);
55253
55254
55255File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
55256
552578.9.2 C99-Like Fast Enumeration Syntax
55258--------------------------------------
55259
55260A c99-like declaration syntax is also allowed:
55261
55262       id array = ...;
55263
55264       for (id object in array)
55265       {
55266         /* Do something with 'object'  */
55267       }
55268
55269 this is completely equivalent to:
55270
55271       id array = ...;
55272
55273       {
55274         id object;
55275         for (object in array)
55276         {
55277           /* Do something with 'object'  */
55278         }
55279       }
55280
55281 but can save some typing.
55282
55283 Note that the option '-std=c99' is not required to allow this syntax in
55284Objective-C.
55285
55286
55287File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
55288
552898.9.3 Fast Enumeration Details
55290------------------------------
55291
55292Here is a more technical description with the gory details.  Consider
55293the code
55294
55295       for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
55296       {
55297         STATEMENTS
55298       }
55299
55300 here is what happens when you run it:
55301
55302   * 'COLLECTION EXPRESSION' is evaluated exactly once and the result is
55303     used as the collection object to iterate over.  This means it is
55304     safe to write code such as 'for (object in [NSDictionary
55305     keyEnumerator]) ...'.
55306
55307   * the iteration is implemented by the compiler by repeatedly getting
55308     batches of objects from the collection object using the fast
55309     enumeration protocol (see below), then iterating over all objects
55310     in the batch.  This is faster than a normal enumeration where
55311     objects are retrieved one by one (hence the name "fast
55312     enumeration").
55313
55314   * if there are no objects in the collection, then 'OBJECT EXPRESSION'
55315     is set to 'nil' and the loop immediately terminates.
55316
55317   * if there are objects in the collection, then for each object in the
55318     collection (in the order they are returned) 'OBJECT EXPRESSION' is
55319     set to the object, then 'STATEMENTS' are executed.
55320
55321   * 'STATEMENTS' can contain 'break' and 'continue' commands, which
55322     will abort the iteration or skip to the next loop iteration as
55323     expected.
55324
55325   * when the iteration ends because there are no more objects to
55326     iterate over, 'OBJECT EXPRESSION' is set to 'nil'.  This allows you
55327     to determine whether the iteration finished because a 'break'
55328     command was used (in which case 'OBJECT EXPRESSION' will remain set
55329     to the last object that was iterated over) or because it iterated
55330     over all the objects (in which case 'OBJECT EXPRESSION' will be set
55331     to 'nil').
55332
55333   * 'STATEMENTS' must not make any changes to the collection object; if
55334     they do, it is a hard error and the fast enumeration terminates by
55335     invoking 'objc_enumerationMutation', a runtime function that
55336     normally aborts the program but which can be customized by
55337     Foundation libraries via 'objc_set_mutation_handler' to do
55338     something different, such as raising an exception.
55339
55340
55341File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
55342
553438.9.4 Fast Enumeration Protocol
55344-------------------------------
55345
55346If you want your own collection object to be usable with fast
55347enumeration, you need to have it implement the method
55348
55349     - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
55350                                           objects: (id *)objects
55351                                             count: (unsigned long)len;
55352
55353 where 'NSFastEnumerationState' must be defined in your code as follows:
55354
55355     typedef struct
55356     {
55357       unsigned long state;
55358       id            *itemsPtr;
55359       unsigned long *mutationsPtr;
55360       unsigned long extra[5];
55361     } NSFastEnumerationState;
55362
55363 If no 'NSFastEnumerationState' is defined in your code, the compiler
55364will automatically replace 'NSFastEnumerationState *' with 'struct
55365__objcFastEnumerationState *', where that type is silently defined by
55366the compiler in an identical way.  This can be confusing and we
55367recommend that you define 'NSFastEnumerationState' (as shown above)
55368instead.
55369
55370 The method is called repeatedly during a fast enumeration to retrieve
55371batches of objects.  Each invocation of the method should retrieve the
55372next batch of objects.
55373
55374 The return value of the method is the number of objects in the current
55375batch; this should not exceed 'len', which is the maximum size of a
55376batch as requested by the caller.  The batch itself is returned in the
55377'itemsPtr' field of the 'NSFastEnumerationState' struct.
55378
55379 To help with returning the objects, the 'objects' array is a C array
55380preallocated by the caller (on the stack) of size 'len'.  In many cases
55381you can put the objects you want to return in that 'objects' array, then
55382do 'itemsPtr = objects'.  But you don't have to; if your collection
55383already has the objects to return in some form of C array, it could
55384return them from there instead.
55385
55386 The 'state' and 'extra' fields of the 'NSFastEnumerationState'
55387structure allows your collection object to keep track of the state of
55388the enumeration.  In a simple array implementation, 'state' may keep
55389track of the index of the last object that was returned, and 'extra' may
55390be unused.
55391
55392 The 'mutationsPtr' field of the 'NSFastEnumerationState' is used to
55393keep track of mutations.  It should point to a number; before working on
55394each object, the fast enumeration loop will check that this number has
55395not changed.  If it has, a mutation has happened and the fast
55396enumeration will abort.  So, 'mutationsPtr' could be set to point to
55397some sort of version number of your collection, which is increased by
55398one every time there is a change (for example when an object is added or
55399removed).  Or, if you are content with less strict mutation checks, it
55400could point to the number of objects in your collection or some other
55401value that can be checked to perform an approximate check that the
55402collection has not been mutated.
55403
55404 Finally, note how we declared the 'len' argument and the return value
55405to be of type 'unsigned long'.  They could also be declared to be of
55406type 'unsigned int' and everything would still work.
55407
55408
55409File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
55410
554118.10 Messaging with the GNU Objective-C Runtime
55412===============================================
55413
55414This section is specific for the GNU Objective-C runtime.  If you are
55415using a different runtime, you can skip it.
55416
55417 The implementation of messaging in the GNU Objective-C runtime is
55418designed to be portable, and so is based on standard C.
55419
55420 Sending a message in the GNU Objective-C runtime is composed of two
55421separate steps.  First, there is a call to the lookup function,
55422'objc_msg_lookup ()' (or, in the case of messages to super,
55423'objc_msg_lookup_super ()').  This runtime function takes as argument
55424the receiver and the selector of the method to be called; it returns the
55425'IMP', that is a pointer to the function implementing the method.  The
55426second step of method invocation consists of casting this pointer
55427function to the appropriate function pointer type, and calling the
55428function pointed to it with the right arguments.
55429
55430 For example, when the compiler encounters a method invocation such as
55431'[object init]', it compiles it into a call to 'objc_msg_lookup (object,
55432@selector(init))' followed by a cast of the returned value to the
55433appropriate function pointer type, and then it calls it.
55434
55435* Menu:
55436
55437* Dynamically registering methods::
55438* Forwarding hook::
55439
55440
55441File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
55442
554438.10.1 Dynamically Registering Methods
55444--------------------------------------
55445
55446If 'objc_msg_lookup()' does not find a suitable method implementation,
55447because the receiver does not implement the required method, it tries to
55448see if the class can dynamically register the method.
55449
55450 To do so, the runtime checks if the class of the receiver implements
55451the method
55452
55453     + (BOOL) resolveInstanceMethod: (SEL)selector;
55454
55455 in the case of an instance method, or
55456
55457     + (BOOL) resolveClassMethod: (SEL)selector;
55458
55459 in the case of a class method.  If the class implements it, the runtime
55460invokes it, passing as argument the selector of the original method, and
55461if it returns 'YES', the runtime tries the lookup again, which could now
55462succeed if a matching method was added dynamically by
55463'+resolveInstanceMethod:' or '+resolveClassMethod:'.
55464
55465 This allows classes to dynamically register methods (by adding them to
55466the class using 'class_addMethod') when they are first called.  To do
55467so, a class should implement '+resolveInstanceMethod:' (or, depending on
55468the case, '+resolveClassMethod:') and have it recognize the selectors of
55469methods that can be registered dynamically at runtime, register them,
55470and return 'YES'.  It should return 'NO' for methods that it does not
55471dynamically registered at runtime.
55472
55473 If '+resolveInstanceMethod:' (or '+resolveClassMethod:') is not
55474implemented or returns 'NO', the runtime then tries the forwarding hook.
55475
55476 Support for '+resolveInstanceMethod:' and 'resolveClassMethod:' was
55477added to the GNU Objective-C runtime in GCC version 4.6.
55478
55479
55480File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
55481
554828.10.2 Forwarding Hook
55483----------------------
55484
55485The GNU Objective-C runtime provides a hook, called
55486'__objc_msg_forward2', which is called by 'objc_msg_lookup()' when it
55487cannot find a method implementation in the runtime tables and after
55488calling '+resolveInstanceMethod:' and '+resolveClassMethod:' has been
55489attempted and did not succeed in dynamically registering the method.
55490
55491 To configure the hook, you set the global variable
55492'__objc_msg_forward2' to a function with the same argument and return
55493types of 'objc_msg_lookup()'.  When 'objc_msg_lookup()' cannot find a
55494method implementation, it invokes the hook function you provided to get
55495a method implementation to return.  So, in practice
55496'__objc_msg_forward2' allows you to extend 'objc_msg_lookup()' by adding
55497some custom code that is called to do a further lookup when no standard
55498method implementation can be found using the normal lookup.
55499
55500 This hook is generally reserved for "Foundation" libraries such as
55501GNUstep Base, which use it to implement their high-level method
55502forwarding API, typically based around the 'forwardInvocation:' method.
55503So, unless you are implementing your own "Foundation" library, you
55504should not set this hook.
55505
55506 In a typical forwarding implementation, the '__objc_msg_forward2' hook
55507function determines the argument and return type of the method that is
55508being looked up, and then creates a function that takes these arguments
55509and has that return type, and returns it to the caller.  Creating this
55510function is non-trivial and is typically performed using a dedicated
55511library such as 'libffi'.
55512
55513 The forwarding method implementation thus created is returned by
55514'objc_msg_lookup()' and is executed as if it was a normal method
55515implementation.  When the forwarding method implementation is called, it
55516is usually expected to pack all arguments into some sort of object
55517(typically, an 'NSInvocation' in a "Foundation" library), and hand it
55518over to the programmer ('forwardInvocation:') who is then allowed to
55519manipulate the method invocation using a high-level API provided by the
55520"Foundation" library.  For example, the programmer may want to examine
55521the method invocation arguments and name and potentially change them
55522before forwarding the method invocation to one or more local objects
55523('performInvocation:') or even to remote objects (by using Distributed
55524Objects or some other mechanism).  When all this completes, the return
55525value is passed back and must be returned correctly to the original
55526caller.
55527
55528 Note that the GNU Objective-C runtime currently provides no support for
55529method forwarding or method invocations other than the
55530'__objc_msg_forward2' hook.
55531
55532 If the forwarding hook does not exist or returns 'NULL', the runtime
55533currently attempts forwarding using an older, deprecated API, and if
55534that fails, it aborts the program.  In future versions of the GNU
55535Objective-C runtime, the runtime will immediately abort.
55536
55537
55538File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
55539
555409 Binary Compatibility
55541**********************
55542
55543Binary compatibility encompasses several related concepts:
55544
55545"application binary interface (ABI)"
55546     The set of runtime conventions followed by all of the tools that
55547     deal with binary representations of a program, including compilers,
55548     assemblers, linkers, and language runtime support.  Some ABIs are
55549     formal with a written specification, possibly designed by multiple
55550     interested parties.  Others are simply the way things are actually
55551     done by a particular set of tools.
55552
55553"ABI conformance"
55554     A compiler conforms to an ABI if it generates code that follows all
55555     of the specifications enumerated by that ABI.  A library conforms
55556     to an ABI if it is implemented according to that ABI.  An
55557     application conforms to an ABI if it is built using tools that
55558     conform to that ABI and does not contain source code that
55559     specifically changes behavior specified by the ABI.
55560
55561"calling conventions"
55562     Calling conventions are a subset of an ABI that specify of how
55563     arguments are passed and function results are returned.
55564
55565"interoperability"
55566     Different sets of tools are interoperable if they generate files
55567     that can be used in the same program.  The set of tools includes
55568     compilers, assemblers, linkers, libraries, header files, startup
55569     files, and debuggers.  Binaries produced by different sets of tools
55570     are not interoperable unless they implement the same ABI.  This
55571     applies to different versions of the same tools as well as tools
55572     from different vendors.
55573
55574"intercallability"
55575     Whether a function in a binary built by one set of tools can call a
55576     function in a binary built by a different set of tools is a subset
55577     of interoperability.
55578
55579"implementation-defined features"
55580     Language standards include lists of implementation-defined features
55581     whose behavior can vary from one implementation to another.  Some
55582     of these features are normally covered by a platform's ABI and
55583     others are not.  The features that are not covered by an ABI
55584     generally affect how a program behaves, but not intercallability.
55585
55586"compatibility"
55587     Conformance to the same ABI and the same behavior of
55588     implementation-defined features are both relevant for
55589     compatibility.
55590
55591 The application binary interface implemented by a C or C++ compiler
55592affects code generation and runtime support for:
55593
55594   * size and alignment of data types
55595   * layout of structured types
55596   * calling conventions
55597   * register usage conventions
55598   * interfaces for runtime arithmetic support
55599   * object file formats
55600
55601 In addition, the application binary interface implemented by a C++
55602compiler affects code generation and runtime support for:
55603   * name mangling
55604   * exception handling
55605   * invoking constructors and destructors
55606   * layout, alignment, and padding of classes
55607   * layout and alignment of virtual tables
55608
55609 Some GCC compilation options cause the compiler to generate code that
55610does not conform to the platform's default ABI.  Other options cause
55611different program behavior for implementation-defined features that are
55612not covered by an ABI.  These options are provided for consistency with
55613other compilers that do not follow the platform's default ABI or the
55614usual behavior of implementation-defined features for the platform.  Be
55615very careful about using such options.
55616
55617 Most platforms have a well-defined ABI that covers C code, but ABIs
55618that cover C++ functionality are not yet common.
55619
55620 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
55621written, vendor-neutral C++ ABI that was designed to be specific to
5562264-bit Itanium but also includes generic specifications that apply to
55623any platform.  This C++ ABI is also implemented by other compiler
55624vendors on some platforms, notably GNU/Linux and BSD systems.  We have
55625tried hard to provide a stable ABI that will be compatible with future
55626GCC releases, but it is possible that we will encounter problems that
55627make this difficult.  Such problems could include different
55628interpretations of the C++ ABI by different vendors, bugs in the ABI, or
55629bugs in the implementation of the ABI in different compilers.  GCC's
55630'-Wabi' switch warns when G++ generates code that is probably not
55631compatible with the C++ ABI.
55632
55633 The C++ library used with a C++ compiler includes the Standard C++
55634Library, with functionality defined in the C++ Standard, plus language
55635runtime support.  The runtime support is included in a C++ ABI, but
55636there is no formal ABI for the Standard C++ Library.  Two
55637implementations of that library are interoperable if one follows the
55638de-facto ABI of the other and if they are both built with the same
55639compiler, or with compilers that conform to the same ABI for C++
55640compiler and runtime support.
55641
55642 When G++ and another C++ compiler conform to the same C++ ABI, but the
55643implementations of the Standard C++ Library that they normally use do
55644not follow the same ABI for the Standard C++ Library, object files built
55645with those compilers can be used in the same program only if they use
55646the same C++ library.  This requires specifying the location of the C++
55647library header files when invoking the compiler whose usual library is
55648not being used.  The location of GCC's C++ header files depends on how
55649the GCC build was configured, but can be seen by using the G++ '-v'
55650option.  With default configuration options for G++ 3.3 the compile line
55651for a different C++ compiler needs to include
55652
55653         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
55654
55655 Similarly, compiling code with G++ that must use a C++ library other
55656than the GNU C++ library requires specifying the location of the header
55657files for that other library.
55658
55659 The most straightforward way to link a program to use a particular C++
55660library is to use a C++ driver that specifies that C++ library by
55661default.  The 'g++' driver, for example, tells the linker where to find
55662GCC's C++ library ('libstdc++') plus the other libraries and startup
55663files it needs, in the proper order.
55664
55665 If a program must use a different C++ library and it's not possible to
55666do the final link using a C++ driver that uses that library by default,
55667it is necessary to tell 'g++' the location and name of that library.  It
55668might also be necessary to specify different startup files and other
55669runtime support libraries, and to suppress the use of GCC's support
55670libraries with one or more of the options '-nostdlib', '-nostartfiles',
55671and '-nodefaultlibs'.
55672
55673
55674File: gcc.info,  Node: Gcov,  Next: Gcov-tool,  Prev: Compatibility,  Up: Top
55675
5567610 'gcov'--a Test Coverage Program
55677**********************************
55678
55679'gcov' is a tool you can use in conjunction with GCC to test code
55680coverage in your programs.
55681
55682* Menu:
55683
55684* Gcov Intro::                  Introduction to gcov.
55685* Invoking Gcov::               How to use gcov.
55686* Gcov and Optimization::       Using gcov with GCC optimization.
55687* Gcov Data Files::             The files used by gcov.
55688* Cross-profiling::             Data file relocation.
55689
55690
55691File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
55692
5569310.1 Introduction to 'gcov'
55694===========================
55695
55696'gcov' is a test coverage program.  Use it in concert with GCC to
55697analyze your programs to help create more efficient, faster running code
55698and to discover untested parts of your program.  You can use 'gcov' as a
55699profiling tool to help discover where your optimization efforts will
55700best affect your code.  You can also use 'gcov' along with the other
55701profiling tool, 'gprof', to assess which parts of your code use the
55702greatest amount of computing time.
55703
55704 Profiling tools help you analyze your code's performance.  Using a
55705profiler such as 'gcov' or 'gprof', you can find out some basic
55706performance statistics, such as:
55707
55708   * how often each line of code executes
55709
55710   * what lines of code are actually executed
55711
55712   * how much computing time each section of code uses
55713
55714 Once you know these things about how your code works when compiled, you
55715can look at each module to see which modules should be optimized.
55716'gcov' helps you determine where to work on optimization.
55717
55718 Software developers also use coverage testing in concert with
55719testsuites, to make sure software is actually good enough for a release.
55720Testsuites can verify that a program works as expected; a coverage
55721program tests to see how much of the program is exercised by the
55722testsuite.  Developers can then determine what kinds of test cases need
55723to be added to the testsuites to create both better testing and a better
55724final product.
55725
55726 You should compile your code without optimization if you plan to use
55727'gcov' because the optimization, by combining some lines of code into
55728one function, may not give you as much information as you need to look
55729for 'hot spots' where the code is using a great deal of computer time.
55730Likewise, because 'gcov' accumulates statistics by line (at the lowest
55731resolution), it works best with a programming style that places only one
55732statement on each line.  If you use complicated macros that expand to
55733loops or to other control structures, the statistics are less
55734helpful--they only report on the line where the macro call appears.  If
55735your complex macros behave like functions, you can replace them with
55736inline functions to solve this problem.
55737
55738 'gcov' creates a logfile called 'SOURCEFILE.gcov' which indicates how
55739many times each line of a source file 'SOURCEFILE.c' has executed.  You
55740can use these logfiles along with 'gprof' to aid in fine-tuning the
55741performance of your programs.  'gprof' gives timing information you can
55742use along with the information you get from 'gcov'.
55743
55744 'gcov' works only on code compiled with GCC.  It is not compatible with
55745any other profiling or test coverage mechanism.
55746
55747
55748File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
55749
5575010.2 Invoking 'gcov'
55751====================
55752
55753     gcov [OPTIONS] FILES
55754
55755 'gcov' accepts the following options:
55756
55757'-a'
55758'--all-blocks'
55759     Write individual execution counts for every basic block.  Normally
55760     gcov outputs execution counts only for the main blocks of a line.
55761     With this option you can determine if blocks within a single line
55762     are not being executed.
55763
55764'-b'
55765'--branch-probabilities'
55766     Write branch frequencies to the output file, and write branch
55767     summary info to the standard output.  This option allows you to see
55768     how often each branch in your program was taken.  Unconditional
55769     branches will not be shown, unless the '-u' option is given.
55770
55771'-c'
55772'--branch-counts'
55773     Write branch frequencies as the number of branches taken, rather
55774     than the percentage of branches taken.
55775
55776'-d'
55777'--display-progress'
55778     Display the progress on the standard output.
55779
55780'-f'
55781'--function-summaries'
55782     Output summaries for each function in addition to the file level
55783     summary.
55784
55785'-h'
55786'--help'
55787     Display help about using 'gcov' (on the standard output), and exit
55788     without doing any further processing.
55789
55790'-i'
55791'--json-format'
55792     Output gcov file in an easy-to-parse JSON intermediate format which
55793     does not require source code for generation.  The JSON file is
55794     compressed with gzip compression algorithm and the files have
55795     '.gcov.json.gz' extension.
55796
55797     Structure of the JSON is following:
55798
55799          {
55800            "current_working_directory": CURRENT_WORKING_DIRECTORY,
55801            "data_file": DATA_FILE,
55802            "format_version": FORMAT_VERSION,
55803            "gcc_version": GCC_VERSION
55804            "files": [FILE]
55805          }
55806
55807     Fields of the root element have following semantics:
55808
55809        * CURRENT_WORKING_DIRECTORY: working directory where a
55810          compilation unit was compiled
55811
55812        * DATA_FILE: name of the data file (GCDA)
55813
55814        * FORMAT_VERSION: semantic version of the format
55815
55816        * GCC_VERSION: version of the GCC compiler
55817
55818     Each FILE has the following form:
55819
55820          {
55821            "file": FILE_NAME,
55822            "functions": [FUNCTION],
55823            "lines": [LINE]
55824          }
55825
55826     Fields of the FILE element have following semantics:
55827
55828        * FILE_NAME: name of the source file
55829
55830     Each FUNCTION has the following form:
55831
55832          {
55833            "blocks": BLOCKS,
55834            "blocks_executed": BLOCKS_EXECUTED,
55835            "demangled_name": "DEMANGLED_NAME,
55836            "end_column": END_COLUMN,
55837            "end_line": END_LINE,
55838            "execution_count": EXECUTION_COUNT,
55839            "name": NAME,
55840            "start_column": START_COLUMN
55841            "start_line": START_LINE
55842          }
55843
55844     Fields of the FUNCTION element have following semantics:
55845
55846        * BLOCKS: number of blocks that are in the function
55847
55848        * BLOCKS_EXECUTED: number of executed blocks of the function
55849
55850        * DEMANGLED_NAME: demangled name of the function
55851
55852        * END_COLUMN: column in the source file where the function ends
55853
55854        * END_LINE: line in the source file where the function ends
55855
55856        * EXECUTION_COUNT: number of executions of the function
55857
55858        * NAME: name of the function
55859
55860        * START_COLUMN: column in the source file where the function
55861          begins
55862
55863        * START_LINE: line in the source file where the function begins
55864
55865     Note that line numbers and column numbers number from 1.  In the
55866     current implementation, START_LINE and START_COLUMN do not include
55867     any template parameters and the leading return type but that this
55868     is likely to be fixed in the future.
55869
55870     Each LINE has the following form:
55871
55872          {
55873            "branches": [BRANCH],
55874            "count": COUNT,
55875            "line_number": LINE_NUMBER,
55876            "unexecuted_block": UNEXECUTED_BLOCK
55877            "function_name": FUNCTION_NAME,
55878          }
55879
55880     Branches are present only with -B option.  Fields of the LINE
55881     element have following semantics:
55882
55883        * COUNT: number of executions of the line
55884
55885        * LINE_NUMBER: line number
55886
55887        * UNEXECUTED_BLOCK: flag whether the line contains an unexecuted
55888          block (not all statements on the line are executed)
55889
55890        * FUNCTION_NAME: a name of a function this LINE belongs to (for
55891          a line with an inlined statements can be not set)
55892
55893     Each BRANCH has the following form:
55894
55895          {
55896            "count": COUNT,
55897            "fallthrough": FALLTHROUGH,
55898            "throw": THROW
55899          }
55900
55901     Fields of the BRANCH element have following semantics:
55902
55903        * COUNT: number of executions of the branch
55904
55905        * FALLTHROUGH: true when the branch is a fall through branch
55906
55907        * THROW: true when the branch is an exceptional branch
55908
55909'-j'
55910'--human-readable'
55911     Write counts in human readable format (like 24.6k).
55912
55913'-k'
55914'--use-colors'
55915
55916     Use colors for lines of code that have zero coverage.  We use red
55917     color for non-exceptional lines and cyan for exceptional.  Same
55918     colors are used for basic blocks with '-a' option.
55919
55920'-l'
55921'--long-file-names'
55922     Create long file names for included source files.  For example, if
55923     the header file 'x.h' contains code, and was included in the file
55924     'a.c', then running 'gcov' on the file 'a.c' will produce an output
55925     file called 'a.c##x.h.gcov' instead of 'x.h.gcov'.  This can be
55926     useful if 'x.h' is included in multiple source files and you want
55927     to see the individual contributions.  If you use the '-p' option,
55928     both the including and included file names will be complete path
55929     names.
55930
55931'-m'
55932'--demangled-names'
55933     Display demangled function names in output.  The default is to show
55934     mangled function names.
55935
55936'-n'
55937'--no-output'
55938     Do not create the 'gcov' output file.
55939
55940'-o DIRECTORY|FILE'
55941'--object-directory DIRECTORY'
55942'--object-file FILE'
55943     Specify either the directory containing the gcov data files, or the
55944     object path name.  The '.gcno', and '.gcda' data files are searched
55945     for using this option.  If a directory is specified, the data files
55946     are in that directory and named after the input file name, without
55947     its extension.  If a file is specified here, the data files are
55948     named after that file, without its extension.
55949
55950'-p'
55951'--preserve-paths'
55952     Preserve complete path information in the names of generated
55953     '.gcov' files.  Without this option, just the filename component is
55954     used.  With this option, all directories are used, with '/'
55955     characters translated to '#' characters, '.' directory components
55956     removed and unremoveable '..' components renamed to '^'.  This is
55957     useful if sourcefiles are in several different directories.
55958
55959'-q'
55960'--use-hotness-colors'
55961
55962     Emit perf-like colored output for hot lines.  Legend of the color
55963     scale is printed at the very beginning of the output file.
55964
55965'-r'
55966'--relative-only'
55967     Only output information about source files with a relative pathname
55968     (after source prefix elision).  Absolute paths are usually system
55969     header files and coverage of any inline functions therein is
55970     normally uninteresting.
55971
55972'-s DIRECTORY'
55973'--source-prefix DIRECTORY'
55974     A prefix for source file names to remove when generating the output
55975     coverage files.  This option is useful when building in a separate
55976     directory, and the pathname to the source directory is not wanted
55977     when determining the output file names.  Note that this prefix
55978     detection is applied before determining whether the source file is
55979     absolute.
55980
55981'-t'
55982'--stdout'
55983     Output to standard output instead of output files.
55984
55985'-u'
55986'--unconditional-branches'
55987     When branch probabilities are given, include those of unconditional
55988     branches.  Unconditional branches are normally not interesting.
55989
55990'-v'
55991'--version'
55992     Display the 'gcov' version number (on the standard output), and
55993     exit without doing any further processing.
55994
55995'-w'
55996'--verbose'
55997     Print verbose informations related to basic blocks and arcs.
55998
55999'-x'
56000'--hash-filenames'
56001     When using -PRESERVE-PATHS, gcov uses the full pathname of the
56002     source files to create an output filename.  This can lead to long
56003     filenames that can overflow filesystem limits.  This option creates
56004     names of the form 'SOURCE-FILE##MD5.gcov', where the SOURCE-FILE
56005     component is the final filename part and the MD5 component is
56006     calculated from the full mangled name that would have been used
56007     otherwise.  The option is an alternative to the -PRESERVE-PATHS on
56008     systems which have a filesystem limit.
56009
56010 'gcov' should be run with the current directory the same as that when
56011you invoked the compiler.  Otherwise it will not be able to locate the
56012source files.  'gcov' produces files called 'MANGLEDNAME.gcov' in the
56013current directory.  These contain the coverage information of the source
56014file they correspond to.  One '.gcov' file is produced for each source
56015(or header) file containing code, which was compiled to produce the data
56016files.  The MANGLEDNAME part of the output file name is usually simply
56017the source file name, but can be something more complicated if the '-l'
56018or '-p' options are given.  Refer to those options for details.
56019
56020 If you invoke 'gcov' with multiple input files, the contributions from
56021each input file are summed.  Typically you would invoke it with the same
56022list of files as the final link of your executable.
56023
56024 The '.gcov' files contain the ':' separated fields along with program
56025source code.  The format is
56026
56027     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
56028
56029 Additional block information may succeed each line, when requested by
56030command line option.  The EXECUTION_COUNT is '-' for lines containing no
56031code.  Unexecuted lines are marked '#####' or '=====', depending on
56032whether they are reachable by non-exceptional paths or only exceptional
56033paths such as C++ exception handlers, respectively.  Given the '-a'
56034option, unexecuted blocks are marked '$$$$$' or '%%%%%', depending on
56035whether a basic block is reachable via non-exceptional or exceptional
56036paths.  Executed basic blocks having a statement with zero
56037EXECUTION_COUNT end with '*' character and are colored with magenta
56038color with the '-k' option.  This functionality is not supported in Ada.
56039
56040 Note that GCC can completely remove the bodies of functions that are
56041not needed - for instance if they are inlined everywhere.  Such
56042functions are marked with '-', which can be confusing.  Use the
56043'-fkeep-inline-functions' and '-fkeep-static-functions' options to
56044retain these functions and allow gcov to properly show their
56045EXECUTION_COUNT.
56046
56047 Some lines of information at the start have LINE_NUMBER of zero.  These
56048preamble lines are of the form
56049
56050     -:0:TAG:VALUE
56051
56052 The ordering and number of these preamble lines will be augmented as
56053'gcov' development progresses -- do not rely on them remaining
56054unchanged.  Use TAG to locate a particular preamble line.
56055
56056 The additional block information is of the form
56057
56058     TAG INFORMATION
56059
56060 The INFORMATION is human readable, but designed to be simple enough for
56061machine parsing too.
56062
56063 When printing percentages, 0% and 100% are only printed when the values
56064are _exactly_ 0% and 100% respectively.  Other values which would
56065conventionally be rounded to 0% or 100% are instead printed as the
56066nearest non-boundary value.
56067
56068 When using 'gcov', you must first compile your program with a special
56069GCC option '--coverage'.  This tells the compiler to generate additional
56070information needed by gcov (basically a flow graph of the program) and
56071also includes additional code in the object files for generating the
56072extra profiling information needed by gcov.  These additional files are
56073placed in the directory where the object file is located.
56074
56075 Running the program will cause profile output to be generated.  For
56076each source file compiled with '-fprofile-arcs', an accompanying '.gcda'
56077file will be placed in the object file directory.
56078
56079 Running 'gcov' with your program's source file names as arguments will
56080now produce a listing of the code along with frequency of execution for
56081each line.  For example, if your program is called 'tmp.cpp', this is
56082what you see when you use the basic 'gcov' facility:
56083
56084     $ g++ --coverage tmp.cpp
56085     $ a.out
56086     $ gcov tmp.cpp -m
56087     File 'tmp.cpp'
56088     Lines executed:92.86% of 14
56089     Creating 'tmp.cpp.gcov'
56090
56091 The file 'tmp.cpp.gcov' contains output from 'gcov'.  Here is a sample:
56092
56093             -:    0:Source:tmp.cpp
56094             -:    0:Working directory:/home/gcc/testcase
56095             -:    0:Graph:tmp.gcno
56096             -:    0:Data:tmp.gcda
56097             -:    0:Runs:1
56098             -:    0:Programs:1
56099             -:    1:#include <stdio.h>
56100             -:    2:
56101             -:    3:template<class T>
56102             -:    4:class Foo
56103             -:    5:{
56104             -:    6:  public:
56105            1*:    7:  Foo(): b (1000) {}
56106     ------------------
56107     Foo<char>::Foo():
56108         #####:    7:  Foo(): b (1000) {}
56109     ------------------
56110     Foo<int>::Foo():
56111             1:    7:  Foo(): b (1000) {}
56112     ------------------
56113            2*:    8:  void inc () { b++; }
56114     ------------------
56115     Foo<char>::inc():
56116         #####:    8:  void inc () { b++; }
56117     ------------------
56118     Foo<int>::inc():
56119             2:    8:  void inc () { b++; }
56120     ------------------
56121             -:    9:
56122             -:   10:  private:
56123             -:   11:  int b;
56124             -:   12:};
56125             -:   13:
56126             -:   14:template class Foo<int>;
56127             -:   15:template class Foo<char>;
56128             -:   16:
56129             -:   17:int
56130             1:   18:main (void)
56131             -:   19:{
56132             -:   20:  int i, total;
56133             1:   21:  Foo<int> counter;
56134             -:   22:
56135             1:   23:  counter.inc();
56136             1:   24:  counter.inc();
56137             1:   25:  total = 0;
56138             -:   26:
56139            11:   27:  for (i = 0; i < 10; i++)
56140            10:   28:    total += i;
56141             -:   29:
56142            1*:   30:  int v = total > 100 ? 1 : 2;
56143             -:   31:
56144             1:   32:  if (total != 45)
56145         #####:   33:    printf ("Failure\n");
56146             -:   34:  else
56147             1:   35:    printf ("Success\n");
56148             1:   36:  return 0;
56149             -:   37:}
56150
56151 Note that line 7 is shown in the report multiple times.  First
56152occurrence presents total number of execution of the line and the next
56153two belong to instances of class Foo constructors.  As you can also see,
56154line 30 contains some unexecuted basic blocks and thus execution count
56155has asterisk symbol.
56156
56157 When you use the '-a' option, you will get individual block counts, and
56158the output looks like this:
56159
56160             -:    0:Source:tmp.cpp
56161             -:    0:Working directory:/home/gcc/testcase
56162             -:    0:Graph:tmp.gcno
56163             -:    0:Data:tmp.gcda
56164             -:    0:Runs:1
56165             -:    0:Programs:1
56166             -:    1:#include <stdio.h>
56167             -:    2:
56168             -:    3:template<class T>
56169             -:    4:class Foo
56170             -:    5:{
56171             -:    6:  public:
56172            1*:    7:  Foo(): b (1000) {}
56173     ------------------
56174     Foo<char>::Foo():
56175         #####:    7:  Foo(): b (1000) {}
56176     ------------------
56177     Foo<int>::Foo():
56178             1:    7:  Foo(): b (1000) {}
56179     ------------------
56180            2*:    8:  void inc () { b++; }
56181     ------------------
56182     Foo<char>::inc():
56183         #####:    8:  void inc () { b++; }
56184     ------------------
56185     Foo<int>::inc():
56186             2:    8:  void inc () { b++; }
56187     ------------------
56188             -:    9:
56189             -:   10:  private:
56190             -:   11:  int b;
56191             -:   12:};
56192             -:   13:
56193             -:   14:template class Foo<int>;
56194             -:   15:template class Foo<char>;
56195             -:   16:
56196             -:   17:int
56197             1:   18:main (void)
56198             -:   19:{
56199             -:   20:  int i, total;
56200             1:   21:  Foo<int> counter;
56201             1:   21-block  0
56202             -:   22:
56203             1:   23:  counter.inc();
56204             1:   23-block  0
56205             1:   24:  counter.inc();
56206             1:   24-block  0
56207             1:   25:  total = 0;
56208             -:   26:
56209            11:   27:  for (i = 0; i < 10; i++)
56210             1:   27-block  0
56211            11:   27-block  1
56212            10:   28:    total += i;
56213            10:   28-block  0
56214             -:   29:
56215            1*:   30:  int v = total > 100 ? 1 : 2;
56216             1:   30-block  0
56217         %%%%%:   30-block  1
56218             1:   30-block  2
56219             -:   31:
56220             1:   32:  if (total != 45)
56221             1:   32-block  0
56222         #####:   33:    printf ("Failure\n");
56223         %%%%%:   33-block  0
56224             -:   34:  else
56225             1:   35:    printf ("Success\n");
56226             1:   35-block  0
56227             1:   36:  return 0;
56228             1:   36-block  0
56229             -:   37:}
56230
56231 In this mode, each basic block is only shown on one line - the last
56232line of the block.  A multi-line block will only contribute to the
56233execution count of that last line, and other lines will not be shown to
56234contain code, unless previous blocks end on those lines.  The total
56235execution count of a line is shown and subsequent lines show the
56236execution counts for individual blocks that end on that line.  After
56237each block, the branch and call counts of the block will be shown, if
56238the '-b' option is given.
56239
56240 Because of the way GCC instruments calls, a call count can be shown
56241after a line with no individual blocks.  As you can see, line 33
56242contains a basic block that was not executed.
56243
56244 When you use the '-b' option, your output looks like this:
56245
56246             -:    0:Source:tmp.cpp
56247             -:    0:Working directory:/home/gcc/testcase
56248             -:    0:Graph:tmp.gcno
56249             -:    0:Data:tmp.gcda
56250             -:    0:Runs:1
56251             -:    0:Programs:1
56252             -:    1:#include <stdio.h>
56253             -:    2:
56254             -:    3:template<class T>
56255             -:    4:class Foo
56256             -:    5:{
56257             -:    6:  public:
56258            1*:    7:  Foo(): b (1000) {}
56259     ------------------
56260     Foo<char>::Foo():
56261     function Foo<char>::Foo() called 0 returned 0% blocks executed 0%
56262         #####:    7:  Foo(): b (1000) {}
56263     ------------------
56264     Foo<int>::Foo():
56265     function Foo<int>::Foo() called 1 returned 100% blocks executed 100%
56266             1:    7:  Foo(): b (1000) {}
56267     ------------------
56268            2*:    8:  void inc () { b++; }
56269     ------------------
56270     Foo<char>::inc():
56271     function Foo<char>::inc() called 0 returned 0% blocks executed 0%
56272         #####:    8:  void inc () { b++; }
56273     ------------------
56274     Foo<int>::inc():
56275     function Foo<int>::inc() called 2 returned 100% blocks executed 100%
56276             2:    8:  void inc () { b++; }
56277     ------------------
56278             -:    9:
56279             -:   10:  private:
56280             -:   11:  int b;
56281             -:   12:};
56282             -:   13:
56283             -:   14:template class Foo<int>;
56284             -:   15:template class Foo<char>;
56285             -:   16:
56286             -:   17:int
56287     function main called 1 returned 100% blocks executed 81%
56288             1:   18:main (void)
56289             -:   19:{
56290             -:   20:  int i, total;
56291             1:   21:  Foo<int> counter;
56292     call    0 returned 100%
56293     branch  1 taken 100% (fallthrough)
56294     branch  2 taken 0% (throw)
56295             -:   22:
56296             1:   23:  counter.inc();
56297     call    0 returned 100%
56298     branch  1 taken 100% (fallthrough)
56299     branch  2 taken 0% (throw)
56300             1:   24:  counter.inc();
56301     call    0 returned 100%
56302     branch  1 taken 100% (fallthrough)
56303     branch  2 taken 0% (throw)
56304             1:   25:  total = 0;
56305             -:   26:
56306            11:   27:  for (i = 0; i < 10; i++)
56307     branch  0 taken 91% (fallthrough)
56308     branch  1 taken 9%
56309            10:   28:    total += i;
56310             -:   29:
56311            1*:   30:  int v = total > 100 ? 1 : 2;
56312     branch  0 taken 0% (fallthrough)
56313     branch  1 taken 100%
56314             -:   31:
56315             1:   32:  if (total != 45)
56316     branch  0 taken 0% (fallthrough)
56317     branch  1 taken 100%
56318         #####:   33:    printf ("Failure\n");
56319     call    0 never executed
56320     branch  1 never executed
56321     branch  2 never executed
56322             -:   34:  else
56323             1:   35:    printf ("Success\n");
56324     call    0 returned 100%
56325     branch  1 taken 100% (fallthrough)
56326     branch  2 taken 0% (throw)
56327             1:   36:  return 0;
56328             -:   37:}
56329
56330 For each function, a line is printed showing how many times the
56331function is called, how many times it returns and what percentage of the
56332function's blocks were executed.
56333
56334 For each basic block, a line is printed after the last line of the
56335basic block describing the branch or call that ends the basic block.
56336There can be multiple branches and calls listed for a single source line
56337if there are multiple basic blocks that end on that line.  In this case,
56338the branches and calls are each given a number.  There is no simple way
56339to map these branches and calls back to source constructs.  In general,
56340though, the lowest numbered branch or call will correspond to the
56341leftmost construct on the source line.
56342
56343 For a branch, if it was executed at least once, then a percentage
56344indicating the number of times the branch was taken divided by the
56345number of times the branch was executed will be printed.  Otherwise, the
56346message "never executed" is printed.
56347
56348 For a call, if it was executed at least once, then a percentage
56349indicating the number of times the call returned divided by the number
56350of times the call was executed will be printed.  This will usually be
56351100%, but may be less for functions that call 'exit' or 'longjmp', and
56352thus may not return every time they are called.
56353
56354 The execution counts are cumulative.  If the example program were
56355executed again without removing the '.gcda' file, the count for the
56356number of times each line in the source was executed would be added to
56357the results of the previous run(s).  This is potentially useful in
56358several ways.  For example, it could be used to accumulate data over a
56359number of program runs as part of a test verification suite, or to
56360provide more accurate long-term information over a large number of
56361program runs.
56362
56363 The data in the '.gcda' files is saved immediately before the program
56364exits.  For each source file compiled with '-fprofile-arcs', the
56365profiling code first attempts to read in an existing '.gcda' file; if
56366the file doesn't match the executable (differing number of basic block
56367counts) it will ignore the contents of the file.  It then adds in the
56368new execution counts and finally writes the data to the file.
56369
56370
56371File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
56372
5637310.3 Using 'gcov' with GCC Optimization
56374=======================================
56375
56376If you plan to use 'gcov' to help optimize your code, you must first
56377compile your program with a special GCC option '--coverage'.  Aside from
56378that, you can use any other GCC options; but if you want to prove that
56379every single line in your program was executed, you should not compile
56380with optimization at the same time.  On some machines the optimizer can
56381eliminate some simple code lines by combining them with other lines.
56382For example, code like this:
56383
56384     if (a != b)
56385       c = 1;
56386     else
56387       c = 0;
56388
56389can be compiled into one instruction on some machines.  In this case,
56390there is no way for 'gcov' to calculate separate execution counts for
56391each line because there isn't separate code for each line.  Hence the
56392'gcov' output looks like this if you compiled the program with
56393optimization:
56394
56395           100:   12:if (a != b)
56396           100:   13:  c = 1;
56397           100:   14:else
56398           100:   15:  c = 0;
56399
56400 The output shows that this block of code, combined by optimization,
56401executed 100 times.  In one sense this result is correct, because there
56402was only one instruction representing all four of these lines.  However,
56403the output does not indicate how many times the result was 0 and how
56404many times the result was 1.
56405
56406 Inlineable functions can create unexpected line counts.  Line counts
56407are shown for the source code of the inlineable function, but what is
56408shown depends on where the function is inlined, or if it is not inlined
56409at all.
56410
56411 If the function is not inlined, the compiler must emit an out of line
56412copy of the function, in any object file that needs it.  If 'fileA.o'
56413and 'fileB.o' both contain out of line bodies of a particular inlineable
56414function, they will also both contain coverage counts for that function.
56415When 'fileA.o' and 'fileB.o' are linked together, the linker will, on
56416many systems, select one of those out of line bodies for all calls to
56417that function, and remove or ignore the other.  Unfortunately, it will
56418not remove the coverage counters for the unused function body.  Hence
56419when instrumented, all but one use of that function will show zero
56420counts.
56421
56422 If the function is inlined in several places, the block structure in
56423each location might not be the same.  For instance, a condition might
56424now be calculable at compile time in some instances.  Because the
56425coverage of all the uses of the inline function will be shown for the
56426same source lines, the line counts themselves might seem inconsistent.
56427
56428 Long-running applications can use the '__gcov_reset' and '__gcov_dump'
56429facilities to restrict profile collection to the program region of
56430interest.  Calling '__gcov_reset(void)' will clear all profile counters
56431to zero, and calling '__gcov_dump(void)' will cause the profile
56432information collected at that point to be dumped to '.gcda' output
56433files.  Instrumented applications use a static destructor with priority
5643499 to invoke the '__gcov_dump' function.  Thus '__gcov_dump' is executed
56435after all user defined static destructors, as well as handlers
56436registered with 'atexit'.  If an executable loads a dynamic shared
56437object via dlopen functionality, '-Wl,--dynamic-list-data' is needed to
56438dump all profile data.
56439
56440 Profiling run-time library reports various errors related to profile
56441manipulation and profile saving.  Errors are printed into standard error
56442output or 'GCOV_ERROR_FILE' file, if environment variable is used.  In
56443order to terminate immediately after an errors occurs set
56444'GCOV_EXIT_AT_ERROR' environment variable.  That can help users to find
56445profile clashing which leads to a misleading profile.
56446
56447
56448File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
56449
5645010.4 Brief Description of 'gcov' Data Files
56451===========================================
56452
56453'gcov' uses two files for profiling.  The names of these files are
56454derived from the original _object_ file by substituting the file suffix
56455with either '.gcno', or '.gcda'.  The files contain coverage and profile
56456data stored in a platform-independent format.  The '.gcno' files are
56457placed in the same directory as the object file.  By default, the
56458'.gcda' files are also stored in the same directory as the object file,
56459but the GCC '-fprofile-dir' option may be used to store the '.gcda'
56460files in a separate directory.
56461
56462 The '.gcno' notes file is generated when the source file is compiled
56463with the GCC '-ftest-coverage' option.  It contains information to
56464reconstruct the basic block graphs and assign source line numbers to
56465blocks.
56466
56467 The '.gcda' count data file is generated when a program containing
56468object files built with the GCC '-fprofile-arcs' option is executed.  A
56469separate '.gcda' file is created for each object file compiled with this
56470option.  It contains arc transition counts, value profile counts, and
56471some summary information.
56472
56473 It is not recommended to access the coverage files directly.  Consumers
56474should use the intermediate format that is provided by 'gcov' tool via
56475'--json-format' option.
56476
56477
56478File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
56479
5648010.5 Data File Relocation to Support Cross-Profiling
56481====================================================
56482
56483Running the program will cause profile output to be generated.  For each
56484source file compiled with '-fprofile-arcs', an accompanying '.gcda' file
56485will be placed in the object file directory.  That implicitly requires
56486running the program on the same system as it was built or having the
56487same absolute directory structure on the target system.  The program
56488will try to create the needed directory structure, if it is not already
56489present.
56490
56491 To support cross-profiling, a program compiled with '-fprofile-arcs'
56492can relocate the data files based on two environment variables:
56493
56494   * GCOV_PREFIX contains the prefix to add to the absolute paths in the
56495     object file.  Prefix can be absolute, or relative.  The default is
56496     no prefix.
56497
56498   * GCOV_PREFIX_STRIP indicates the how many initial directory names to
56499     strip off the hardwired absolute paths.  Default value is 0.
56500
56501     _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
56502     undefined, then a relative path is made out of the hardwired
56503     absolute paths.
56504
56505 For example, if the object file '/user/build/foo.o' was built with
56506'-fprofile-arcs', the final executable will try to create the data file
56507'/user/build/foo.gcda' when running on the target system.  This will
56508fail if the corresponding directory does not exist and it is unable to
56509create it.  This can be overcome by, for example, setting the
56510environment as 'GCOV_PREFIX=/target/run' and 'GCOV_PREFIX_STRIP=1'.
56511Such a setting will name the data file '/target/run/build/foo.gcda'.
56512
56513 You must move the data files to the expected directory tree in order to
56514use them for profile directed optimizations ('-fprofile-use'), or to use
56515the 'gcov' tool.
56516
56517
56518File: gcc.info,  Node: Gcov-tool,  Next: Gcov-dump,  Prev: Gcov,  Up: Top
56519
5652011 'gcov-tool'--an Offline Gcda Profile Processing Tool
56521*******************************************************
56522
56523'gcov-tool' is a tool you can use in conjunction with GCC to manipulate
56524or process gcda profile files offline.
56525
56526* Menu:
56527
56528* Gcov-tool Intro::             Introduction to gcov-tool.
56529* Invoking Gcov-tool::          How to use gcov-tool.
56530
56531
56532File: gcc.info,  Node: Gcov-tool Intro,  Next: Invoking Gcov-tool,  Up: Gcov-tool
56533
5653411.1 Introduction to 'gcov-tool'
56535================================
56536
56537'gcov-tool' is an offline tool to process gcc's gcda profile files.
56538
56539 Current gcov-tool supports the following functionalities:
56540
56541   * merge two sets of profiles with weights.
56542
56543   * read one set of profile and rewrite profile contents.  One can
56544     scale or normalize the count values.
56545
56546 Examples of the use cases for this tool are:
56547   * Collect the profiles for different set of inputs, and use this tool
56548     to merge them.  One can specify the weight to factor in the
56549     relative importance of each input.
56550
56551   * Rewrite the profile after removing a subset of the gcda files,
56552     while maintaining the consistency of the summary and the histogram.
56553
56554   * It can also be used to debug or libgcov code as the tools shares
56555     the majority code as the runtime library.
56556
56557 Note that for the merging operation, this profile generated offline may
56558contain slight different values from the online merged profile.  Here
56559are a list of typical differences:
56560
56561   * histogram difference: This offline tool recomputes the histogram
56562     after merging the counters.  The resulting histogram, therefore, is
56563     precise.  The online merging does not have this capability - the
56564     histogram is merged from two histograms and the result is an
56565     approximation.
56566
56567   * summary checksum difference: Summary checksum uses a CRC32
56568     operation.  The value depends on the link list order of gcov-info
56569     objects.  This order is different in gcov-tool from that in the
56570     online merge.  It's expected to have different summary checksums.
56571     It does not really matter as the compiler does not use this
56572     checksum anywhere.
56573
56574   * value profile counter values difference: Some counter values for
56575     value profile are runtime dependent, like heap addresses.  It's
56576     normal to see some difference in these kind of counters.
56577
56578
56579File: gcc.info,  Node: Invoking Gcov-tool,  Prev: Gcov-tool Intro,  Up: Gcov-tool
56580
5658111.2 Invoking 'gcov-tool'
56582=========================
56583
56584     gcov-tool [GLOBAL-OPTIONS] SUB_COMMAND [SUB_COMMAND-OPTIONS] PROFILE_DIR
56585
56586 'gcov-tool' accepts the following options:
56587
56588'-h'
56589'--help'
56590     Display help about using 'gcov-tool' (on the standard output), and
56591     exit without doing any further processing.
56592
56593'-v'
56594'--version'
56595     Display the 'gcov-tool' version number (on the standard output),
56596     and exit without doing any further processing.
56597
56598'merge'
56599     Merge two profile directories.
56600
56601     '-o DIRECTORY'
56602     '--output DIRECTORY'
56603          Set the output profile directory.  Default output directory
56604          name is MERGED_PROFILE.
56605
56606     '-v'
56607     '--verbose'
56608          Set the verbose mode.
56609
56610     '-w W1,W2'
56611     '--weight W1,W2'
56612          Set the merge weights of the DIRECTORY1 and DIRECTORY2,
56613          respectively.  The default weights are 1 for both.
56614
56615'rewrite'
56616     Read the specified profile directory and rewrite to a new
56617     directory.
56618
56619     '-n LONG_LONG_VALUE'
56620     '--normalize <long_long_value>'
56621          Normalize the profile.  The specified value is the max counter
56622          value in the new profile.
56623
56624     '-o DIRECTORY'
56625     '--output DIRECTORY'
56626          Set the output profile directory.  Default output name is
56627          REWRITE_PROFILE.
56628
56629     '-s FLOAT_OR_SIMPLE-FRAC_VALUE'
56630     '--scale FLOAT_OR_SIMPLE-FRAC_VALUE'
56631          Scale the profile counters.  The specified value can be in
56632          floating point value, or simple fraction value form, such 1,
56633          2, 2/3, and 5/3.
56634
56635     '-v'
56636     '--verbose'
56637          Set the verbose mode.
56638
56639'overlap'
56640     Compute the overlap score between the two specified profile
56641     directories.  The overlap score is computed based on the arc
56642     profiles.  It is defined as the sum of min (p1_counter[i] /
56643     p1_sum_all, p2_counter[i] / p2_sum_all), for all arc counter i,
56644     where p1_counter[i] and p2_counter[i] are two matched counters and
56645     p1_sum_all and p2_sum_all are the sum of counter values in profile
56646     1 and profile 2, respectively.
56647
56648     '-f'
56649     '--function'
56650          Print function level overlap score.
56651
56652     '-F'
56653     '--fullname'
56654          Print full gcda filename.
56655
56656     '-h'
56657     '--hotonly'
56658          Only print info for hot objects/functions.
56659
56660     '-o'
56661     '--object'
56662          Print object level overlap score.
56663
56664     '-t FLOAT'
56665     '--hot_threshold <float>'
56666          Set the threshold for hot counter value.
56667
56668     '-v'
56669     '--verbose'
56670          Set the verbose mode.
56671
56672
56673File: gcc.info,  Node: Gcov-dump,  Next: lto-dump,  Prev: Gcov-tool,  Up: Top
56674
5667512 'gcov-dump'--an Offline Gcda and Gcno Profile Dump Tool
56676**********************************************************
56677
56678* Menu:
56679
56680* Gcov-dump Intro::             Introduction to gcov-dump.
56681* Invoking Gcov-dump::          How to use gcov-dump.
56682
56683
56684File: gcc.info,  Node: Gcov-dump Intro,  Next: Invoking Gcov-dump,  Up: Gcov-dump
56685
5668612.1 Introduction to 'gcov-dump'
56687================================
56688
56689'gcov-dump' is a tool you can use in conjunction with GCC to dump
56690content of gcda and gcno profile files offline.
56691
56692
56693File: gcc.info,  Node: Invoking Gcov-dump,  Prev: Gcov-dump Intro,  Up: Gcov-dump
56694
5669512.2 Invoking 'gcov-dump'
56696=========================
56697
56698     Usage: gcov-dump [OPTION] ... GCOVFILES
56699
56700 'gcov-dump' accepts the following options:
56701
56702'-h'
56703'--help'
56704     Display help about using 'gcov-dump' (on the standard output), and
56705     exit without doing any further processing.
56706
56707'-l'
56708'--long'
56709     Dump content of records.
56710
56711'-p'
56712'--positions'
56713     Dump positions of records.
56714
56715'-v'
56716'--version'
56717     Display the 'gcov-dump' version number (on the standard output),
56718     and exit without doing any further processing.
56719
56720
56721File: gcc.info,  Node: lto-dump,  Next: Trouble,  Prev: Gcov-dump,  Up: Top
56722
5672313 'lto-dump'--Tool for dumping LTO object files.
56724*************************************************
56725
56726* Menu:
56727
56728* lto-dump Intro::             Introduction to lto-dump.
56729* Invoking lto-dump::          How to use lto-dump.
56730
56731
56732File: gcc.info,  Node: lto-dump Intro,  Next: Invoking lto-dump,  Up: lto-dump
56733
5673413.1 Introduction to 'lto-dump'
56735===============================
56736
56737'lto-dump' is a tool you can use in conjunction with GCC to dump link
56738time optimization object files.
56739
56740
56741File: gcc.info,  Node: Invoking lto-dump,  Prev: lto-dump Intro,  Up: lto-dump
56742
5674313.2 Invoking 'lto-dump'
56744========================
56745
56746     Usage: lto-dump [OPTION] ... OBJFILES
56747
56748 'lto-dump' accepts the following options:
56749
56750'-list'
56751     Dumps list of details of functions and variables.
56752
56753'-demangle'
56754     Dump the demangled output.
56755
56756'-defined-only'
56757     Dump only the defined symbols.
56758
56759'-print-value'
56760     Dump initial values of the variables.
56761
56762'-name-sort'
56763     Sort the symbols alphabetically.
56764
56765'-size-sort'
56766     Sort the symbols according to size.
56767
56768'-reverse-sort'
56769     Dump the symbols in reverse order.
56770
56771'-no-sort'
56772     Dump the symbols in order of occurrence.
56773
56774'-symbol='
56775     Dump the details of specific symbol.
56776
56777'-objects'
56778     Dump the details of LTO objects.
56779
56780'-type-stats'
56781     Dump the statistics of tree types.
56782
56783'-tree-stats'
56784     Dump the statistics of trees.
56785
56786'-gimple-stats'
56787     Dump the statistics of gimple statements.
56788
56789'-dump-level='
56790     For deciding the optimization level of body.
56791
56792'-dump-body='
56793     Dump the specific gimple body.
56794
56795'-help'
56796     Display the dump tool help.
56797
56798
56799File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: lto-dump,  Up: Top
56800
5680114 Known Causes of Trouble with GCC
56802***********************************
56803
56804This section describes known problems that affect users of GCC.  Most of
56805these are not GCC bugs per se--if they were, we would fix them.  But the
56806result for a user may be like the result of a bug.
56807
56808 Some of these problems are due to bugs in other software, some are
56809missing features that are too much work to add, and some are places
56810where people's opinions differ as to what is best.
56811
56812* Menu:
56813
56814* Actual Bugs::         Bugs we will fix later.
56815* Interoperation::      Problems using GCC with other compilers,
56816                        and with certain linkers, assemblers and debuggers.
56817* Incompatibilities::   GCC is incompatible with traditional C.
56818* Fixed Headers::       GCC uses corrected versions of system header files.
56819                        This is necessary, but doesn't always work smoothly.
56820* Standard Libraries::  GCC uses the system C library, which might not be
56821                        compliant with the ISO C standard.
56822* Disappointments::     Regrettable things we cannot change, but not quite bugs.
56823* C++ Misunderstandings:: Common misunderstandings with GNU C++.
56824* Non-bugs::            Things we think are right, but some others disagree.
56825* Warnings and Errors:: Which problems in your code get warnings,
56826                        and which get errors.
56827
56828
56829File: gcc.info,  Node: Actual Bugs,  Next: Interoperation,  Up: Trouble
56830
5683114.1 Actual Bugs We Haven't Fixed Yet
56832=====================================
56833
56834   * The 'fixincludes' script interacts badly with automounters; if the
56835     directory of system header files is automounted, it tends to be
56836     unmounted while 'fixincludes' is running.  This would seem to be a
56837     bug in the automounter.  We don't know any good way to work around
56838     it.
56839
56840
56841File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Actual Bugs,  Up: Trouble
56842
5684314.2 Interoperation
56844===================
56845
56846This section lists various difficulties encountered in using GCC
56847together with other compilers or with the assemblers, linkers, libraries
56848and debuggers on certain systems.
56849
56850   * On many platforms, GCC supports a different ABI for C++ than do
56851     other compilers, so the object files compiled by GCC cannot be used
56852     with object files generated by another C++ compiler.
56853
56854     An area where the difference is most apparent is name mangling.
56855     The use of different name mangling is intentional, to protect you
56856     from more subtle problems.  Compilers differ as to many internal
56857     details of C++ implementation, including: how class instances are
56858     laid out, how multiple inheritance is implemented, and how virtual
56859     function calls are handled.  If the name encoding were made the
56860     same, your programs would link against libraries provided from
56861     other compilers--but the programs would then crash when run.
56862     Incompatible libraries are then detected at link time, rather than
56863     at run time.
56864
56865   * On some BSD systems, including some versions of Ultrix, use of
56866     profiling causes static variable destructors (currently used only
56867     in C++) not to be run.
56868
56869   * On a SPARC, GCC aligns all values of type 'double' on an 8-byte
56870     boundary, and it expects every 'double' to be so aligned.  The Sun
56871     compiler usually gives 'double' values 8-byte alignment, with one
56872     exception: function arguments of type 'double' may not be aligned.
56873
56874     As a result, if a function compiled with Sun CC takes the address
56875     of an argument of type 'double' and passes this pointer of type
56876     'double *' to a function compiled with GCC, dereferencing the
56877     pointer may cause a fatal signal.
56878
56879     One way to solve this problem is to compile your entire program
56880     with GCC.  Another solution is to modify the function that is
56881     compiled with Sun CC to copy the argument into a local variable;
56882     local variables are always properly aligned.  A third solution is
56883     to modify the function that uses the pointer to dereference it via
56884     the following function 'access_double' instead of directly with
56885     '*':
56886
56887          inline double
56888          access_double (double *unaligned_ptr)
56889          {
56890            union d2i { double d; int i[2]; };
56891
56892            union d2i *p = (union d2i *) unaligned_ptr;
56893            union d2i u;
56894
56895            u.i[0] = p->i[0];
56896            u.i[1] = p->i[1];
56897
56898            return u.d;
56899          }
56900
56901     Storing into the pointer can be done likewise with the same union.
56902
56903   * On Solaris, the 'malloc' function in the 'libmalloc.a' library may
56904     allocate memory that is only 4 byte aligned.  Since GCC on the
56905     SPARC assumes that doubles are 8 byte aligned, this may result in a
56906     fatal signal if doubles are stored in memory allocated by the
56907     'libmalloc.a' library.
56908
56909     The solution is to not use the 'libmalloc.a' library.  Use instead
56910     'malloc' and related functions from 'libc.a'; they do not have this
56911     problem.
56912
56913   * On the HP PA machine, ADB sometimes fails to work on functions
56914     compiled with GCC.  Specifically, it fails to work on functions
56915     that use 'alloca' or variable-size arrays.  This is because GCC
56916     doesn't generate HP-UX unwind descriptors for such functions.  It
56917     may even be impossible to generate them.
56918
56919   * Debugging ('-g') is not supported on the HP PA machine, unless you
56920     use the preliminary GNU tools.
56921
56922   * Taking the address of a label may generate errors from the HP-UX PA
56923     assembler.  GAS for the PA does not have this problem.
56924
56925   * Using floating point parameters for indirect calls to static
56926     functions will not work when using the HP assembler.  There simply
56927     is no way for GCC to specify what registers hold arguments for
56928     static functions when using the HP assembler.  GAS for the PA does
56929     not have this problem.
56930
56931   * In extremely rare cases involving some very large functions you may
56932     receive errors from the HP linker complaining about an out of
56933     bounds unconditional branch offset.  This used to occur more often
56934     in previous versions of GCC, but is now exceptionally rare.  If you
56935     should run into it, you can work around by making your function
56936     smaller.
56937
56938   * GCC compiled code sometimes emits warnings from the HP-UX assembler
56939     of the form:
56940
56941          (warning) Use of GR3 when
56942            frame >= 8192 may cause conflict.
56943
56944     These warnings are harmless and can be safely ignored.
56945
56946   * In extremely rare cases involving some very large functions you may
56947     receive errors from the AIX Assembler complaining about a
56948     displacement that is too large.  If you should run into it, you can
56949     work around by making your function smaller.
56950
56951   * The 'libstdc++.a' library in GCC relies on the SVR4 dynamic linker
56952     semantics which merges global symbols between libraries and
56953     applications, especially necessary for C++ streams functionality.
56954     This is not the default behavior of AIX shared libraries and
56955     dynamic linking.  'libstdc++.a' is built on AIX with
56956     "runtime-linking" enabled so that symbol merging can occur.  To
56957     utilize this feature, the application linked with 'libstdc++.a'
56958     must include the '-Wl,-brtl' flag on the link line.  G++ cannot
56959     impose this because this option may interfere with the semantics of
56960     the user program and users may not always use 'g++' to link his or
56961     her application.  Applications are not required to use the
56962     '-Wl,-brtl' flag on the link line--the rest of the 'libstdc++.a'
56963     library which is not dependent on the symbol merging semantics will
56964     continue to function correctly.
56965
56966   * An application can interpose its own definition of functions for
56967     functions invoked by 'libstdc++.a' with "runtime-linking" enabled
56968     on AIX.  To accomplish this the application must be linked with
56969     "runtime-linking" option and the functions explicitly must be
56970     exported by the application ('-Wl,-brtl,-bE:exportfile').
56971
56972   * AIX on the RS/6000 provides support (NLS) for environments outside
56973     of the United States.  Compilers and assemblers use NLS to support
56974     locale-specific representations of various objects including
56975     floating-point numbers ('.' vs ',' for separating decimal
56976     fractions).  There have been problems reported where the library
56977     linked with GCC does not produce the same floating-point formats
56978     that the assembler accepts.  If you have this problem, set the
56979     'LANG' environment variable to 'C' or 'En_US'.
56980
56981   * Even if you specify '-fdollars-in-identifiers', you cannot
56982     successfully use '$' in identifiers on the RS/6000 due to a
56983     restriction in the IBM assembler.  GAS supports these identifiers.
56984
56985
56986File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
56987
5698814.3 Incompatibilities of GCC
56989=============================
56990
56991There are several noteworthy incompatibilities between GNU C and K&R
56992(non-ISO) versions of C.
56993
56994   * GCC normally makes string constants read-only.  If several
56995     identical-looking string constants are used, GCC stores only one
56996     copy of the string.
56997
56998     One consequence is that you cannot call 'mktemp' with a string
56999     constant argument.  The function 'mktemp' always alters the string
57000     its argument points to.
57001
57002     Another consequence is that 'sscanf' does not work on some very old
57003     systems when passed a string constant as its format control string
57004     or input.  This is because 'sscanf' incorrectly tries to write into
57005     the string constant.  Likewise 'fscanf' and 'scanf'.
57006
57007     The solution to these problems is to change the program to use
57008     'char'-array variables with initialization strings for these
57009     purposes instead of string constants.
57010
57011   * '-2147483648' is positive.
57012
57013     This is because 2147483648 cannot fit in the type 'int', so
57014     (following the ISO C rules) its data type is 'unsigned long int'.
57015     Negating this value yields 2147483648 again.
57016
57017   * GCC does not substitute macro arguments when they appear inside of
57018     string constants.  For example, the following macro in GCC
57019
57020          #define foo(a) "a"
57021
57022     will produce output '"a"' regardless of what the argument A is.
57023
57024   * When you use 'setjmp' and 'longjmp', the only automatic variables
57025     guaranteed to remain valid are those declared 'volatile'.  This is
57026     a consequence of automatic register allocation.  Consider this
57027     function:
57028
57029          jmp_buf j;
57030
57031          foo ()
57032          {
57033            int a, b;
57034
57035            a = fun1 ();
57036            if (setjmp (j))
57037              return a;
57038
57039            a = fun2 ();
57040            /* 'longjmp (j)' may occur in 'fun3'. */
57041            return a + fun3 ();
57042          }
57043
57044     Here 'a' may or may not be restored to its first value when the
57045     'longjmp' occurs.  If 'a' is allocated in a register, then its
57046     first value is restored; otherwise, it keeps the last value stored
57047     in it.
57048
57049     If you use the '-W' option with the '-O' option, you will get a
57050     warning when GCC thinks such a problem might be possible.
57051
57052   * Programs that use preprocessing directives in the middle of macro
57053     arguments do not work with GCC.  For example, a program like this
57054     will not work:
57055
57056          foobar (
57057          #define luser
57058                  hack)
57059
57060     ISO C does not permit such a construct.
57061
57062   * K&R compilers allow comments to cross over an inclusion boundary
57063     (i.e. started in an include file and ended in the including file).
57064
57065   * Declarations of external variables and functions within a block
57066     apply only to the block containing the declaration.  In other
57067     words, they have the same scope as any other declaration in the
57068     same place.
57069
57070     In some other C compilers, an 'extern' declaration affects all the
57071     rest of the file even if it happens within a block.
57072
57073   * In traditional C, you can combine 'long', etc., with a typedef
57074     name, as shown here:
57075
57076          typedef int foo;
57077          typedef long foo bar;
57078
57079     In ISO C, this is not allowed: 'long' and other type modifiers
57080     require an explicit 'int'.
57081
57082   * PCC allows typedef names to be used as function parameters.
57083
57084   * Traditional C allows the following erroneous pair of declarations
57085     to appear together in a given scope:
57086
57087          typedef int foo;
57088          typedef foo foo;
57089
57090   * GCC treats all characters of identifiers as significant.  According
57091     to K&R-1 (2.2), "No more than the first eight characters are
57092     significant, although more may be used.".  Also according to K&R-1
57093     (2.2), "An identifier is a sequence of letters and digits; the
57094     first character must be a letter.  The underscore _ counts as a
57095     letter.", but GCC also allows dollar signs in identifiers.
57096
57097   * PCC allows whitespace in the middle of compound assignment
57098     operators such as '+='.  GCC, following the ISO standard, does not
57099     allow this.
57100
57101   * GCC complains about unterminated character constants inside of
57102     preprocessing conditionals that fail.  Some programs have English
57103     comments enclosed in conditionals that are guaranteed to fail; if
57104     these comments contain apostrophes, GCC will probably report an
57105     error.  For example, this code would produce an error:
57106
57107          #if 0
57108          You can't expect this to work.
57109          #endif
57110
57111     The best solution to such a problem is to put the text into an
57112     actual C comment delimited by '/*...*/'.
57113
57114   * Many user programs contain the declaration 'long time ();'.  In the
57115     past, the system header files on many systems did not actually
57116     declare 'time', so it did not matter what type your program
57117     declared it to return.  But in systems with ISO C headers, 'time'
57118     is declared to return 'time_t', and if that is not the same as
57119     'long', then 'long time ();' is erroneous.
57120
57121     The solution is to change your program to use appropriate system
57122     headers ('<time.h>' on systems with ISO C headers) and not to
57123     declare 'time' if the system header files declare it, or failing
57124     that to use 'time_t' as the return type of 'time'.
57125
57126   * When compiling functions that return 'float', PCC converts it to a
57127     double.  GCC actually returns a 'float'.  If you are concerned with
57128     PCC compatibility, you should declare your functions to return
57129     'double'; you might as well say what you mean.
57130
57131   * When compiling functions that return structures or unions, GCC
57132     output code normally uses a method different from that used on most
57133     versions of Unix.  As a result, code compiled with GCC cannot call
57134     a structure-returning function compiled with PCC, and vice versa.
57135
57136     The method used by GCC is as follows: a structure or union which is
57137     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
57138     union with any other size is stored into an address supplied by the
57139     caller (usually in a special, fixed register, but on some machines
57140     it is passed on the stack).  The target hook
57141     'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
57142
57143     By contrast, PCC on most target machines returns structures and
57144     unions of any size by copying the data into an area of static
57145     storage, and then returning the address of that storage as if it
57146     were a pointer value.  The caller must copy the data from that
57147     memory area to the place where the value is wanted.  GCC does not
57148     use this method because it is slower and nonreentrant.
57149
57150     On some newer machines, PCC uses a reentrant convention for all
57151     structure and union returning.  GCC on most of these machines uses
57152     a compatible convention when returning structures and unions in
57153     memory, but still returns small structures and unions in registers.
57154
57155     You can tell GCC to use a compatible convention for all structure
57156     and union returning with the option '-fpcc-struct-return'.
57157
57158   * GCC complains about program fragments such as '0x74ae-0x4000' which
57159     appear to be two hexadecimal constants separated by the minus
57160     operator.  Actually, this string is a single "preprocessing token".
57161     Each such token must correspond to one token in C.  Since this does
57162     not, GCC prints an error message.  Although it may appear obvious
57163     that what is meant is an operator and two values, the ISO C
57164     standard specifically requires that this be treated as erroneous.
57165
57166     A "preprocessing token" is a "preprocessing number" if it begins
57167     with a digit and is followed by letters, underscores, digits,
57168     periods and 'e+', 'e-', 'E+', 'E-', 'p+', 'p-', 'P+', or 'P-'
57169     character sequences.  (In strict C90 mode, the sequences 'p+',
57170     'p-', 'P+' and 'P-' cannot appear in preprocessing numbers.)
57171
57172     To make the above program fragment valid, place whitespace in front
57173     of the minus sign.  This whitespace will end the preprocessing
57174     number.
57175
57176
57177File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
57178
5717914.4 Fixed Header Files
57180=======================
57181
57182GCC needs to install corrected versions of some system header files.
57183This is because most target systems have some header files that won't
57184work with GCC unless they are changed.  Some have bugs, some are
57185incompatible with ISO C, and some depend on special features of other
57186compilers.
57187
57188 Installing GCC automatically creates and installs the fixed header
57189files, by running a program called 'fixincludes'.  Normally, you don't
57190need to pay attention to this.  But there are cases where it doesn't do
57191the right thing automatically.
57192
57193   * If you update the system's header files, such as by installing a
57194     new system version, the fixed header files of GCC are not
57195     automatically updated.  They can be updated using the 'mkheaders'
57196     script installed in 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
57197
57198   * On some systems, header file directories contain machine-specific
57199     symbolic links in certain places.  This makes it possible to share
57200     most of the header files among hosts running the same version of
57201     the system on different machine models.
57202
57203     The programs that fix the header files do not understand this
57204     special way of using symbolic links; therefore, the directory of
57205     fixed header files is good only for the machine model used to build
57206     it.
57207
57208     It is possible to make separate sets of fixed header files for the
57209     different machine models, and arrange a structure of symbolic links
57210     so as to use the proper set, but you'll have to do this by hand.
57211
57212
57213File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
57214
5721514.5 Standard Libraries
57216=======================
57217
57218GCC by itself attempts to be a conforming freestanding implementation.
57219*Note Language Standards Supported by GCC: Standards, for details of
57220what this means.  Beyond the library facilities required of such an
57221implementation, the rest of the C library is supplied by the vendor of
57222the operating system.  If that C library doesn't conform to the C
57223standards, then your programs might get warnings (especially when using
57224'-Wall') that you don't expect.
57225
57226 For example, the 'sprintf' function on SunOS 4.1.3 returns 'char *'
57227while the C standard says that 'sprintf' returns an 'int'.  The
57228'fixincludes' program could make the prototype for this function match
57229the Standard, but that would be wrong, since the function will still
57230return 'char *'.
57231
57232 If you need a Standard compliant library, then you need to find one, as
57233GCC does not provide one.  The GNU C library (called 'glibc') provides
57234ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
57235HURD-based GNU systems; no recent version of it supports other systems,
57236though some very old versions did.  Version 2.2 of the GNU C library
57237includes nearly complete C99 support.  You could also ask your operating
57238system vendor if newer libraries are available.
57239
57240
57241File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
57242
5724314.6 Disappointments and Misunderstandings
57244==========================================
57245
57246These problems are perhaps regrettable, but we don't know any practical
57247way around them.
57248
57249   * Certain local variables aren't recognized by debuggers when you
57250     compile with optimization.
57251
57252     This occurs because sometimes GCC optimizes the variable out of
57253     existence.  There is no way to tell the debugger how to compute the
57254     value such a variable "would have had", and it is not clear that
57255     would be desirable anyway.  So GCC simply does not mention the
57256     eliminated variable when it writes debugging information.
57257
57258     You have to expect a certain amount of disagreement between the
57259     executable and your source code, when you use optimization.
57260
57261   * Users often think it is a bug when GCC reports an error for code
57262     like this:
57263
57264          int foo (struct mumble *);
57265
57266          struct mumble { ... };
57267
57268          int foo (struct mumble *x)
57269          { ... }
57270
57271     This code really is erroneous, because the scope of 'struct mumble'
57272     in the prototype is limited to the argument list containing it.  It
57273     does not refer to the 'struct mumble' defined with file scope
57274     immediately below--they are two unrelated types with similar names
57275     in different scopes.
57276
57277     But in the definition of 'foo', the file-scope type is used because
57278     that is available to be inherited.  Thus, the definition and the
57279     prototype do not match, and you get an error.
57280
57281     This behavior may seem silly, but it's what the ISO standard
57282     specifies.  It is easy enough for you to make your code work by
57283     moving the definition of 'struct mumble' above the prototype.  It's
57284     not worth being incompatible with ISO C just to avoid an error for
57285     the example shown above.
57286
57287   * Accesses to bit-fields even in volatile objects works by accessing
57288     larger objects, such as a byte or a word.  You cannot rely on what
57289     size of object is accessed in order to read or write the bit-field;
57290     it may even vary for a given bit-field according to the precise
57291     usage.
57292
57293     If you care about controlling the amount of memory that is
57294     accessed, use volatile but do not use bit-fields.
57295
57296   * GCC comes with shell scripts to fix certain known problems in
57297     system header files.  They install corrected copies of various
57298     header files in a special directory where only GCC will normally
57299     look for them.  The scripts adapt to various systems by searching
57300     all the system header files for the problem cases that we know
57301     about.
57302
57303     If new system header files are installed, nothing automatically
57304     arranges to update the corrected header files.  They can be updated
57305     using the 'mkheaders' script installed in
57306     'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
57307
57308   * On 68000 and x86 systems, for instance, you can get paradoxical
57309     results if you test the precise values of floating point numbers.
57310     For example, you can find that a floating point value which is not
57311     a NaN is not equal to itself.  This results from the fact that the
57312     floating point registers hold a few more bits of precision than fit
57313     in a 'double' in memory.  Compiled code moves values between memory
57314     and floating point registers at its convenience, and moving them
57315     into memory truncates them.
57316
57317     You can partially avoid this problem by using the '-ffloat-store'
57318     option (*note Optimize Options::).
57319
57320   * On AIX and other platforms without weak symbol support, templates
57321     need to be instantiated explicitly and symbols for static members
57322     of templates will not be generated.
57323
57324   * On AIX, GCC scans object files and library archives for static
57325     constructors and destructors when linking an application before the
57326     linker prunes unreferenced symbols.  This is necessary to prevent
57327     the AIX linker from mistakenly assuming that static constructor or
57328     destructor are unused and removing them before the scanning can
57329     occur.  All static constructors and destructors found will be
57330     referenced even though the modules in which they occur may not be
57331     used by the program.  This may lead to both increased executable
57332     size and unexpected symbol references.
57333
57334
57335File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
57336
5733714.7 Common Misunderstandings with GNU C++
57338==========================================
57339
57340C++ is a complex language and an evolving one, and its standard
57341definition (the ISO C++ standard) was only recently completed.  As a
57342result, your C++ compiler may occasionally surprise you, even when its
57343behavior is correct.  This section discusses some areas that frequently
57344give rise to questions of this sort.
57345
57346* Menu:
57347
57348* Static Definitions::  Static member declarations are not definitions
57349* Name lookup::         Name lookup, templates, and accessing members of base classes
57350* Temporaries::         Temporaries may vanish before you expect
57351* Copy Assignment::     Copy Assignment operators copy virtual bases twice
57352
57353
57354File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
57355
5735614.7.1 Declare _and_ Define Static Members
57357------------------------------------------
57358
57359When a class has static data members, it is not enough to _declare_ the
57360static member; you must also _define_ it.  For example:
57361
57362     class Foo
57363     {
57364       ...
57365       void method();
57366       static int bar;
57367     };
57368
57369 This declaration only establishes that the class 'Foo' has an 'int'
57370named 'Foo::bar', and a member function named 'Foo::method'.  But you
57371still need to define _both_ 'method' and 'bar' elsewhere.  According to
57372the ISO standard, you must supply an initializer in one (and only one)
57373source file, such as:
57374
57375     int Foo::bar = 0;
57376
57377 Other C++ compilers may not correctly implement the standard behavior.
57378As a result, when you switch to 'g++' from one of these compilers, you
57379may discover that a program that appeared to work correctly in fact does
57380not conform to the standard: 'g++' reports as undefined symbols any
57381static data members that lack definitions.
57382
57383
57384File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
57385
5738614.7.2 Name Lookup, Templates, and Accessing Members of Base Classes
57387--------------------------------------------------------------------
57388
57389The C++ standard prescribes that all names that are not dependent on
57390template parameters are bound to their present definitions when parsing
57391a template function or class.(1)  Only names that are dependent are
57392looked up at the point of instantiation.  For example, consider
57393
57394       void foo(double);
57395
57396       struct A {
57397         template <typename T>
57398         void f () {
57399           foo (1);        // 1
57400           int i = N;      // 2
57401           T t;
57402           t.bar();        // 3
57403           foo (t);        // 4
57404         }
57405
57406         static const int N;
57407       };
57408
57409 Here, the names 'foo' and 'N' appear in a context that does not depend
57410on the type of 'T'.  The compiler will thus require that they are
57411defined in the context of use in the template, not only before the point
57412of instantiation, and will here use '::foo(double)' and 'A::N',
57413respectively.  In particular, it will convert the integer value to a
57414'double' when passing it to '::foo(double)'.
57415
57416 Conversely, 'bar' and the call to 'foo' in the fourth marked line are
57417used in contexts that do depend on the type of 'T', so they are only
57418looked up at the point of instantiation, and you can provide
57419declarations for them after declaring the template, but before
57420instantiating it.  In particular, if you instantiate 'A::f<int>', the
57421last line will call an overloaded '::foo(int)' if one was provided, even
57422if after the declaration of 'struct A'.
57423
57424 This distinction between lookup of dependent and non-dependent names is
57425called two-stage (or dependent) name lookup.  G++ implements it since
57426version 3.4.
57427
57428 Two-stage name lookup sometimes leads to situations with behavior
57429different from non-template codes.  The most common is probably this:
57430
57431       template <typename T> struct Base {
57432         int i;
57433       };
57434
57435       template <typename T> struct Derived : public Base<T> {
57436         int get_i() { return i; }
57437       };
57438
57439 In 'get_i()', 'i' is not used in a dependent context, so the compiler
57440will look for a name declared at the enclosing namespace scope (which is
57441the global scope here).  It will not look into the base class, since
57442that is dependent and you may declare specializations of 'Base' even
57443after declaring 'Derived', so the compiler cannot really know what 'i'
57444would refer to.  If there is no global variable 'i', then you will get
57445an error message.
57446
57447 In order to make it clear that you want the member of the base class,
57448you need to defer lookup until instantiation time, at which the base
57449class is known.  For this, you need to access 'i' in a dependent
57450context, by either using 'this->i' (remember that 'this' is of type
57451'Derived<T>*', so is obviously dependent), or using 'Base<T>::i'.
57452Alternatively, 'Base<T>::i' might be brought into scope by a
57453'using'-declaration.
57454
57455 Another, similar example involves calling member functions of a base
57456class:
57457
57458       template <typename T> struct Base {
57459           int f();
57460       };
57461
57462       template <typename T> struct Derived : Base<T> {
57463           int g() { return f(); };
57464       };
57465
57466 Again, the call to 'f()' is not dependent on template arguments (there
57467are no arguments that depend on the type 'T', and it is also not
57468otherwise specified that the call should be in a dependent context).
57469Thus a global declaration of such a function must be available, since
57470the one in the base class is not visible until instantiation time.  The
57471compiler will consequently produce the following error message:
57472
57473       x.cc: In member function `int Derived<T>::g()':
57474       x.cc:6: error: there are no arguments to `f' that depend on a template
57475          parameter, so a declaration of `f' must be available
57476       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
57477          allowing the use of an undeclared name is deprecated)
57478
57479 To make the code valid either use 'this->f()', or 'Base<T>::f()'.
57480Using the '-fpermissive' flag will also let the compiler accept the
57481code, by marking all function calls for which no declaration is visible
57482at the time of definition of the template for later lookup at
57483instantiation time, as if it were a dependent call.  We do not recommend
57484using '-fpermissive' to work around invalid code, and it will also only
57485catch cases where functions in base classes are called, not where
57486variables in base classes are used (as in the example above).
57487
57488 Note that some compilers (including G++ versions prior to 3.4) get
57489these examples wrong and accept above code without an error.  Those
57490compilers do not implement two-stage name lookup correctly.
57491
57492   ---------- Footnotes ----------
57493
57494   (1) The C++ standard just uses the term "dependent" for names that
57495depend on the type or value of template parameters.  This shorter term
57496will also be used in the rest of this section.
57497
57498
57499File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
57500
5750114.7.3 Temporaries May Vanish Before You Expect
57502-----------------------------------------------
57503
57504It is dangerous to use pointers or references to _portions_ of a
57505temporary object.  The compiler may very well delete the object before
57506you expect it to, leaving a pointer to garbage.  The most common place
57507where this problem crops up is in classes like string classes,
57508especially ones that define a conversion function to type 'char *' or
57509'const char *'--which is one reason why the standard 'string' class
57510requires you to call the 'c_str' member function.  However, any class
57511that returns a pointer to some internal structure is potentially subject
57512to this problem.
57513
57514 For example, a program may use a function 'strfunc' that returns
57515'string' objects, and another function 'charfunc' that operates on
57516pointers to 'char':
57517
57518     string strfunc ();
57519     void charfunc (const char *);
57520
57521     void
57522     f ()
57523     {
57524       const char *p = strfunc().c_str();
57525       ...
57526       charfunc (p);
57527       ...
57528       charfunc (p);
57529     }
57530
57531In this situation, it may seem reasonable to save a pointer to the C
57532string returned by the 'c_str' member function and use that rather than
57533call 'c_str' repeatedly.  However, the temporary string created by the
57534call to 'strfunc' is destroyed after 'p' is initialized, at which point
57535'p' is left pointing to freed memory.
57536
57537 Code like this may run successfully under some other compilers,
57538particularly obsolete cfront-based compilers that delete temporaries
57539along with normal local variables.  However, the GNU C++ behavior is
57540standard-conforming, so if your program depends on late destruction of
57541temporaries it is not portable.
57542
57543 The safe way to write such code is to give the temporary a name, which
57544forces it to remain until the end of the scope of the name.  For
57545example:
57546
57547     const string& tmp = strfunc ();
57548     charfunc (tmp.c_str ());
57549
57550
57551File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
57552
5755314.7.4 Implicit Copy-Assignment for Virtual Bases
57554-------------------------------------------------
57555
57556When a base class is virtual, only one subobject of the base class
57557belongs to each full object.  Also, the constructors and destructors are
57558invoked only once, and called from the most-derived class.  However,
57559such objects behave unspecified when being assigned.  For example:
57560
57561     struct Base{
57562       char *name;
57563       Base(const char *n) : name(strdup(n)){}
57564       Base& operator= (const Base& other){
57565        free (name);
57566        name = strdup (other.name);
57567        return *this;
57568       }
57569     };
57570
57571     struct A:virtual Base{
57572       int val;
57573       A():Base("A"){}
57574     };
57575
57576     struct B:virtual Base{
57577       int bval;
57578       B():Base("B"){}
57579     };
57580
57581     struct Derived:public A, public B{
57582       Derived():Base("Derived"){}
57583     };
57584
57585     void func(Derived &d1, Derived &d2)
57586     {
57587       d1 = d2;
57588     }
57589
57590 The C++ standard specifies that 'Base::Base' is only called once when
57591constructing or copy-constructing a Derived object.  It is unspecified
57592whether 'Base::operator=' is called more than once when the implicit
57593copy-assignment for Derived objects is invoked (as it is inside 'func'
57594in the example).
57595
57596 G++ implements the "intuitive" algorithm for copy-assignment: assign
57597all direct bases, then assign all members.  In that algorithm, the
57598virtual base subobject can be encountered more than once.  In the
57599example, copying proceeds in the following order: 'name' (via 'strdup'),
57600'val', 'name' again, and 'bval'.
57601
57602 If application code relies on copy-assignment, a user-defined
57603copy-assignment operator removes any uncertainties.  With such an
57604operator, the application can define whether and how the virtual base
57605subobject is assigned.
57606
57607
57608File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
57609
5761014.8 Certain Changes We Don't Want to Make
57611==========================================
57612
57613This section lists changes that people frequently request, but which we
57614do not make because we think GCC is better without them.
57615
57616   * Checking the number and type of arguments to a function which has
57617     an old-fashioned definition and no prototype.
57618
57619     Such a feature would work only occasionally--only for calls that
57620     appear in the same file as the called function, following the
57621     definition.  The only way to check all calls reliably is to add a
57622     prototype for the function.  But adding a prototype eliminates the
57623     motivation for this feature.  So the feature is not worthwhile.
57624
57625   * Warning about using an expression whose type is signed as a shift
57626     count.
57627
57628     Shift count operands are probably signed more often than unsigned.
57629     Warning about this would cause far more annoyance than good.
57630
57631   * Warning about assigning a signed value to an unsigned variable.
57632
57633     Such assignments must be very common; warning about them would
57634     cause more annoyance than good.
57635
57636   * Warning when a non-void function value is ignored.
57637
57638     C contains many standard functions that return a value that most
57639     programs choose to ignore.  One obvious example is 'printf'.
57640     Warning about this practice only leads the defensive programmer to
57641     clutter programs with dozens of casts to 'void'.  Such casts are
57642     required so frequently that they become visual noise.  Writing
57643     those casts becomes so automatic that they no longer convey useful
57644     information about the intentions of the programmer.  For functions
57645     where the return value should never be ignored, use the
57646     'warn_unused_result' function attribute (*note Function
57647     Attributes::).
57648
57649   * Making '-fshort-enums' the default.
57650
57651     This would cause storage layout to be incompatible with most other
57652     C compilers.  And it doesn't seem very important, given that you
57653     can get the same result in other ways.  The case where it matters
57654     most is when the enumeration-valued object is inside a structure,
57655     and in that case you can specify a field width explicitly.
57656
57657   * Making bit-fields unsigned by default on particular machines where
57658     "the ABI standard" says to do so.
57659
57660     The ISO C standard leaves it up to the implementation whether a
57661     bit-field declared plain 'int' is signed or not.  This in effect
57662     creates two alternative dialects of C.
57663
57664     The GNU C compiler supports both dialects; you can specify the
57665     signed dialect with '-fsigned-bitfields' and the unsigned dialect
57666     with '-funsigned-bitfields'.  However, this leaves open the
57667     question of which dialect to use by default.
57668
57669     Currently, the preferred dialect makes plain bit-fields signed,
57670     because this is simplest.  Since 'int' is the same as 'signed int'
57671     in every other context, it is cleanest for them to be the same in
57672     bit-fields as well.
57673
57674     Some computer manufacturers have published Application Binary
57675     Interface standards which specify that plain bit-fields should be
57676     unsigned.  It is a mistake, however, to say anything about this
57677     issue in an ABI.  This is because the handling of plain bit-fields
57678     distinguishes two dialects of C.  Both dialects are meaningful on
57679     every type of machine.  Whether a particular object file was
57680     compiled using signed bit-fields or unsigned is of no concern to
57681     other object files, even if they access the same bit-fields in the
57682     same data structures.
57683
57684     A given program is written in one or the other of these two
57685     dialects.  The program stands a chance to work on most any machine
57686     if it is compiled with the proper dialect.  It is unlikely to work
57687     at all if compiled with the wrong dialect.
57688
57689     Many users appreciate the GNU C compiler because it provides an
57690     environment that is uniform across machines.  These users would be
57691     inconvenienced if the compiler treated plain bit-fields differently
57692     on certain machines.
57693
57694     Occasionally users write programs intended only for a particular
57695     machine type.  On these occasions, the users would benefit if the
57696     GNU C compiler were to support by default the same dialect as the
57697     other compilers on that machine.  But such applications are rare.
57698     And users writing a program to run on more than one type of machine
57699     cannot possibly benefit from this kind of compatibility.
57700
57701     This is why GCC does and will treat plain bit-fields in the same
57702     fashion on all types of machines (by default).
57703
57704     There are some arguments for making bit-fields unsigned by default
57705     on all machines.  If, for example, this becomes a universal de
57706     facto standard, it would make sense for GCC to go along with it.
57707     This is something to be considered in the future.
57708
57709     (Of course, users strongly concerned about portability should
57710     indicate explicitly in each bit-field whether it is signed or not.
57711     In this way, they write programs which have the same meaning in
57712     both C dialects.)
57713
57714   * Undefining '__STDC__' when '-ansi' is not used.
57715
57716     Currently, GCC defines '__STDC__' unconditionally.  This provides
57717     good results in practice.
57718
57719     Programmers normally use conditionals on '__STDC__' to ask whether
57720     it is safe to use certain features of ISO C, such as function
57721     prototypes or ISO token concatenation.  Since plain 'gcc' supports
57722     all the features of ISO C, the correct answer to these questions is
57723     "yes".
57724
57725     Some users try to use '__STDC__' to check for the availability of
57726     certain library facilities.  This is actually incorrect usage in an
57727     ISO C program, because the ISO C standard says that a conforming
57728     freestanding implementation should define '__STDC__' even though it
57729     does not have the library facilities.  'gcc -ansi -pedantic' is a
57730     conforming freestanding implementation, and it is therefore
57731     required to define '__STDC__', even though it does not come with an
57732     ISO C library.
57733
57734     Sometimes people say that defining '__STDC__' in a compiler that
57735     does not completely conform to the ISO C standard somehow violates
57736     the standard.  This is illogical.  The standard is a standard for
57737     compilers that claim to support ISO C, such as 'gcc -ansi'--not for
57738     other compilers such as plain 'gcc'.  Whatever the ISO C standard
57739     says is relevant to the design of plain 'gcc' without '-ansi' only
57740     for pragmatic reasons, not as a requirement.
57741
57742     GCC normally defines '__STDC__' to be 1, and in addition defines
57743     '__STRICT_ANSI__' if you specify the '-ansi' option, or a '-std'
57744     option for strict conformance to some version of ISO C.  On some
57745     hosts, system include files use a different convention, where
57746     '__STDC__' is normally 0, but is 1 if the user specifies strict
57747     conformance to the C Standard.  GCC follows the host convention
57748     when processing system include files, but when processing user
57749     files it follows the usual GNU C convention.
57750
57751   * Undefining '__STDC__' in C++.
57752
57753     Programs written to compile with C++-to-C translators get the value
57754     of '__STDC__' that goes with the C compiler that is subsequently
57755     used.  These programs must test '__STDC__' to determine what kind
57756     of C preprocessor that compiler uses: whether they should
57757     concatenate tokens in the ISO C fashion or in the traditional
57758     fashion.
57759
57760     These programs work properly with GNU C++ if '__STDC__' is defined.
57761     They would not work otherwise.
57762
57763     In addition, many header files are written to provide prototypes in
57764     ISO C but not in traditional C.  Many of these header files can
57765     work without change in C++ provided '__STDC__' is defined.  If
57766     '__STDC__' is not defined, they will all fail, and will all need to
57767     be changed to test explicitly for C++ as well.
57768
57769   * Deleting "empty" loops.
57770
57771     Historically, GCC has not deleted "empty" loops under the
57772     assumption that the most likely reason you would put one in a
57773     program is to have a delay, so deleting them will not make real
57774     programs run any faster.
57775
57776     However, the rationale here is that optimization of a nonempty loop
57777     cannot produce an empty one.  This held for carefully written C
57778     compiled with less powerful optimizers but is not always the case
57779     for carefully written C++ or with more powerful optimizers.  Thus
57780     GCC will remove operations from loops whenever it can determine
57781     those operations are not externally visible (apart from the time
57782     taken to execute them, of course).  In case the loop can be proved
57783     to be finite, GCC will also remove the loop itself.
57784
57785     Be aware of this when performing timing tests, for instance the
57786     following loop can be completely removed, provided
57787     'some_expression' can provably not change any global state.
57788
57789          {
57790             int sum = 0;
57791             int ix;
57792
57793             for (ix = 0; ix != 10000; ix++)
57794                sum += some_expression;
57795          }
57796
57797     Even though 'sum' is accumulated in the loop, no use is made of
57798     that summation, so the accumulation can be removed.
57799
57800   * Making side effects happen in the same order as in some other
57801     compiler.
57802
57803     It is never safe to depend on the order of evaluation of side
57804     effects.  For example, a function call like this may very well
57805     behave differently from one compiler to another:
57806
57807          void func (int, int);
57808
57809          int i = 2;
57810          func (i++, i++);
57811
57812     There is no guarantee (in either the C or the C++ standard language
57813     definitions) that the increments will be evaluated in any
57814     particular order.  Either increment might happen first.  'func'
57815     might get the arguments '2, 3', or it might get '3, 2', or even '2,
57816     2'.
57817
57818   * Making certain warnings into errors by default.
57819
57820     Some ISO C testsuites report failure when the compiler does not
57821     produce an error message for a certain program.
57822
57823     ISO C requires a "diagnostic" message for certain kinds of invalid
57824     programs, but a warning is defined by GCC to count as a diagnostic.
57825     If GCC produces a warning but not an error, that is correct ISO C
57826     support.  If testsuites call this "failure", they should be run
57827     with the GCC option '-pedantic-errors', which will turn these
57828     warnings into errors.
57829
57830
57831File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
57832
5783314.9 Warning Messages and Error Messages
57834========================================
57835
57836The GNU compiler can produce two kinds of diagnostics: errors and
57837warnings.  Each kind has a different purpose:
57838
57839     "Errors" report problems that make it impossible to compile your
57840     program.  GCC reports errors with the source file name and line
57841     number where the problem is apparent.
57842
57843     "Warnings" report other unusual conditions in your code that _may_
57844     indicate a problem, although compilation can (and does) proceed.
57845     Warning messages also report the source file name and line number,
57846     but include the text 'warning:' to distinguish them from error
57847     messages.
57848
57849 Warnings may indicate danger points where you should check to make sure
57850that your program really does what you intend; or the use of obsolete
57851features; or the use of nonstandard features of GNU C or C++.  Many
57852warnings are issued only if you ask for them, with one of the '-W'
57853options (for instance, '-Wall' requests a variety of useful warnings).
57854
57855 GCC always tries to compile your program if possible; it never
57856gratuitously rejects a program whose meaning is clear merely because
57857(for instance) it fails to conform to a standard.  In some cases,
57858however, the C and C++ standards specify that certain extensions are
57859forbidden, and a diagnostic _must_ be issued by a conforming compiler.
57860The '-pedantic' option tells GCC to issue warnings in such cases;
57861'-pedantic-errors' says to make them errors instead.  This does not mean
57862that _all_ non-ISO constructs get warnings or errors.
57863
57864 *Note Options to Request or Suppress Warnings: Warning Options, for
57865more detail on these and related command-line options.
57866
57867
57868File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
57869
5787015 Reporting Bugs
57871*****************
57872
57873Your bug reports play an essential role in making GCC reliable.
57874
57875 When you encounter a problem, the first thing to do is to see if it is
57876already known.  *Note Trouble::.  If it isn't known, then you should
57877report the problem.
57878
57879* Menu:
57880
57881* Criteria:  Bug Criteria.   Have you really found a bug?
57882* Reporting: Bug Reporting.  How to report a bug effectively.
57883
57884
57885File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
57886
5788715.1 Have You Found a Bug?
57888==========================
57889
57890If you are not sure whether you have found a bug, here are some
57891guidelines:
57892
57893   * If the compiler gets a fatal signal, for any input whatever, that
57894     is a compiler bug.  Reliable compilers never crash.
57895
57896   * If the compiler produces invalid assembly code, for any input
57897     whatever (except an 'asm' statement), that is a compiler bug,
57898     unless the compiler reports errors (not just warnings) which would
57899     ordinarily prevent the assembler from being run.
57900
57901   * If the compiler produces valid assembly code that does not
57902     correctly execute the input source code, that is a compiler bug.
57903
57904     However, you must double-check to make sure, because you may have a
57905     program whose behavior is undefined, which happened by chance to
57906     give the desired results with another C or C++ compiler.
57907
57908     For example, in many nonoptimizing compilers, you can write 'x;' at
57909     the end of a function instead of 'return x;', with the same
57910     results.  But the value of the function is undefined if 'return' is
57911     omitted; it is not a bug when GCC produces different results.
57912
57913     Problems often result from expressions with two increment
57914     operators, as in 'f (*p++, *p++)'.  Your previous compiler might
57915     have interpreted that expression the way you intended; GCC might
57916     interpret it another way.  Neither compiler is wrong.  The bug is
57917     in your code.
57918
57919     After you have localized the error to a single source line, it
57920     should be easy to check for these things.  If your program is
57921     correct and well defined, you have found a compiler bug.
57922
57923   * If the compiler produces an error message for valid input, that is
57924     a compiler bug.
57925
57926   * If the compiler does not produce an error message for invalid
57927     input, that is a compiler bug.  However, you should note that your
57928     idea of "invalid input" might be someone else's idea of "an
57929     extension" or "support for traditional practice".
57930
57931   * If you are an experienced user of one of the languages GCC
57932     supports, your suggestions for improvement of GCC are welcome in
57933     any case.
57934
57935
57936File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
57937
5793815.2 How and Where to Report Bugs
57939=================================
57940
57941Bugs should be reported to the bug database at
57942<https://gcc.gnu.org/bugs/>.
57943
57944
57945File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
57946
5794716 How To Get Help with GCC
57948***************************
57949
57950If you need help installing, using or changing GCC, there are two ways
57951to find it:
57952
57953   * Send a message to a suitable network mailing list.  First try
57954     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
57955     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
57956     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
57957     GCC, please report it following the instructions at *note Bug
57958     Reporting::.
57959
57960   * Look in the service directory for someone who might help you for a
57961     fee.  The service directory is found at
57962     <https://www.fsf.org/resources/service>.
57963
57964 For further information, see <http://gcc.gnu.org/faq.html#support>.
57965
57966
57967File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
57968
5796917 Contributing to GCC Development
57970**********************************
57971
57972If you would like to help pretest GCC releases to assure they work well,
57973current development sources are available via Git (see
57974<http://gcc.gnu.org/git.html>).  Source and binary snapshots are also
57975available for FTP; see <http://gcc.gnu.org/snapshots.html>.
57976
57977 If you would like to work on improvements to GCC, please read the
57978advice at these URLs:
57979
57980     <http://gcc.gnu.org/contribute.html>
57981     <http://gcc.gnu.org/contributewhy.html>
57982
57983for information on how to make useful contributions and avoid
57984duplication of effort.  Suggested projects are listed at
57985<http://gcc.gnu.org/projects/>.
57986
57987
57988File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
57989
57990Funding Free Software
57991*********************
57992
57993If you want to have more free software a few years from now, it makes
57994sense for you to help encourage people to contribute funds for its
57995development.  The most effective approach known is to encourage
57996commercial redistributors to donate.
57997
57998 Users of free software systems can boost the pace of development by
57999encouraging for-a-fee distributors to donate part of their selling price
58000to free software developers--the Free Software Foundation, and others.
58001
58002 The way to convince distributors to do this is to demand it and expect
58003it from them.  So when you compare distributors, judge them partly by
58004how much they give to free software development.  Show distributors they
58005must compete to be the one who gives the most.
58006
58007 To make this approach work, you must insist on numbers that you can
58008compare, such as, "We will donate ten dollars to the Frobnitz project
58009for each disk sold."  Don't be satisfied with a vague promise, such as
58010"A portion of the profits are donated," since it doesn't give a basis
58011for comparison.
58012
58013 Even a precise fraction "of the profits from this disk" is not very
58014meaningful, since creative accounting and unrelated business decisions
58015can greatly alter what fraction of the sales price counts as profit.  If
58016the price you pay is $50, ten percent of the profit is probably less
58017than a dollar; it might be a few cents, or nothing at all.
58018
58019 Some redistributors do development work themselves.  This is useful
58020too; but to keep everyone honest, you need to inquire how much they do,
58021and what kind.  Some kinds of development make much more long-term
58022difference than others.  For example, maintaining a separate version of
58023a program contributes very little; maintaining the standard version of a
58024program for the whole community contributes much.  Easy new ports
58025contribute little, since someone else would surely do them; difficult
58026ports such as adding a new CPU to the GNU Compiler Collection contribute
58027more; major new features or packages contribute the most.
58028
58029 By establishing the idea that supporting further development is "the
58030proper thing to do" when distributing free software for a fee, we can
58031assure a steady flow of resources into making more free software.
58032
58033     Copyright (C) 1994 Free Software Foundation, Inc.
58034     Verbatim copying and redistribution of this section is permitted
58035     without royalty; alteration is not permitted.
58036
58037
58038File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
58039
58040The GNU Project and GNU/Linux
58041*****************************
58042
58043The GNU Project was launched in 1984 to develop a complete Unix-like
58044operating system which is free software: the GNU system.  (GNU is a
58045recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
58046Variants of the GNU operating system, which use the kernel Linux, are
58047now widely used; though these systems are often referred to as "Linux",
58048they are more accurately called GNU/Linux systems.
58049
58050 For more information, see:
58051     <http://www.gnu.org/>
58052     <http://www.gnu.org/gnu/linux-and-gnu.html>
58053
58054
58055File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
58056
58057GNU General Public License
58058**************************
58059
58060                        Version 3, 29 June 2007
58061
58062     Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
58063
58064     Everyone is permitted to copy and distribute verbatim copies of this
58065     license document, but changing it is not allowed.
58066
58067Preamble
58068========
58069
58070The GNU General Public License is a free, copyleft license for software
58071and other kinds of works.
58072
58073 The licenses for most software and other practical works are designed
58074to take away your freedom to share and change the works.  By contrast,
58075the GNU General Public License is intended to guarantee your freedom to
58076share and change all versions of a program-to make sure it remains free
58077software for all its users.  We, the Free Software Foundation, use the
58078GNU General Public License for most of our software; it applies also to
58079any other work released this way by its authors.  You can apply it to
58080your programs, too.
58081
58082 When we speak of free software, we are referring to freedom, not price.
58083Our General Public Licenses are designed to make sure that you have the
58084freedom to distribute copies of free software (and charge for them if
58085you wish), that you receive source code or can get it if you want it,
58086that you can change the software or use pieces of it in new free
58087programs, and that you know you can do these things.
58088
58089 To protect your rights, we need to prevent others from denying you
58090these rights or asking you to surrender the rights.  Therefore, you have
58091certain responsibilities if you distribute copies of the software, or if
58092you modify it: responsibilities to respect the freedom of others.
58093
58094 For example, if you distribute copies of such a program, whether gratis
58095or for a fee, you must pass on to the recipients the same freedoms that
58096you received.  You must make sure that they, too, receive or can get the
58097source code.  And you must show them these terms so they know their
58098rights.
58099
58100 Developers that use the GNU GPL protect your rights with two steps: (1)
58101assert copyright on the software, and (2) offer you this License giving
58102you legal permission to copy, distribute and/or modify it.
58103
58104 For the developers' and authors' protection, the GPL clearly explains
58105that there is no warranty for this free software.  For both users' and
58106authors' sake, the GPL requires that modified versions be marked as
58107changed, so that their problems will not be attributed erroneously to
58108authors of previous versions.
58109
58110 Some devices are designed to deny users access to install or run
58111modified versions of the software inside them, although the manufacturer
58112can do so.  This is fundamentally incompatible with the aim of
58113protecting users' freedom to change the software.  The systematic
58114pattern of such abuse occurs in the area of products for individuals to
58115use, which is precisely where it is most unacceptable.  Therefore, we
58116have designed this version of the GPL to prohibit the practice for those
58117products.  If such problems arise substantially in other domains, we
58118stand ready to extend this provision to those domains in future versions
58119of the GPL, as needed to protect the freedom of users.
58120
58121 Finally, every program is threatened constantly by software patents.
58122States should not allow patents to restrict development and use of
58123software on general-purpose computers, but in those that do, we wish to
58124avoid the special danger that patents applied to a free program could
58125make it effectively proprietary.  To prevent this, the GPL assures that
58126patents cannot be used to render the program non-free.
58127
58128 The precise terms and conditions for copying, distribution and
58129modification follow.
58130
58131TERMS AND CONDITIONS
58132====================
58133
58134  0. Definitions.
58135
58136     "This License" refers to version 3 of the GNU General Public
58137     License.
58138
58139     "Copyright" also means copyright-like laws that apply to other
58140     kinds of works, such as semiconductor masks.
58141
58142     "The Program" refers to any copyrightable work licensed under this
58143     License.  Each licensee is addressed as "you".  "Licensees" and
58144     "recipients" may be individuals or organizations.
58145
58146     To "modify" a work means to copy from or adapt all or part of the
58147     work in a fashion requiring copyright permission, other than the
58148     making of an exact copy.  The resulting work is called a "modified
58149     version" of the earlier work or a work "based on" the earlier work.
58150
58151     A "covered work" means either the unmodified Program or a work
58152     based on the Program.
58153
58154     To "propagate" a work means to do anything with it that, without
58155     permission, would make you directly or secondarily liable for
58156     infringement under applicable copyright law, except executing it on
58157     a computer or modifying a private copy.  Propagation includes
58158     copying, distribution (with or without modification), making
58159     available to the public, and in some countries other activities as
58160     well.
58161
58162     To "convey" a work means any kind of propagation that enables other
58163     parties to make or receive copies.  Mere interaction with a user
58164     through a computer network, with no transfer of a copy, is not
58165     conveying.
58166
58167     An interactive user interface displays "Appropriate Legal Notices"
58168     to the extent that it includes a convenient and prominently visible
58169     feature that (1) displays an appropriate copyright notice, and (2)
58170     tells the user that there is no warranty for the work (except to
58171     the extent that warranties are provided), that licensees may convey
58172     the work under this License, and how to view a copy of this
58173     License.  If the interface presents a list of user commands or
58174     options, such as a menu, a prominent item in the list meets this
58175     criterion.
58176
58177  1. Source Code.
58178
58179     The "source code" for a work means the preferred form of the work
58180     for making modifications to it.  "Object code" means any non-source
58181     form of a work.
58182
58183     A "Standard Interface" means an interface that either is an
58184     official standard defined by a recognized standards body, or, in
58185     the case of interfaces specified for a particular programming
58186     language, one that is widely used among developers working in that
58187     language.
58188
58189     The "System Libraries" of an executable work include anything,
58190     other than the work as a whole, that (a) is included in the normal
58191     form of packaging a Major Component, but which is not part of that
58192     Major Component, and (b) serves only to enable use of the work with
58193     that Major Component, or to implement a Standard Interface for
58194     which an implementation is available to the public in source code
58195     form.  A "Major Component", in this context, means a major
58196     essential component (kernel, window system, and so on) of the
58197     specific operating system (if any) on which the executable work
58198     runs, or a compiler used to produce the work, or an object code
58199     interpreter used to run it.
58200
58201     The "Corresponding Source" for a work in object code form means all
58202     the source code needed to generate, install, and (for an executable
58203     work) run the object code and to modify the work, including scripts
58204     to control those activities.  However, it does not include the
58205     work's System Libraries, or general-purpose tools or generally
58206     available free programs which are used unmodified in performing
58207     those activities but which are not part of the work.  For example,
58208     Corresponding Source includes interface definition files associated
58209     with source files for the work, and the source code for shared
58210     libraries and dynamically linked subprograms that the work is
58211     specifically designed to require, such as by intimate data
58212     communication or control flow between those subprograms and other
58213     parts of the work.
58214
58215     The Corresponding Source need not include anything that users can
58216     regenerate automatically from other parts of the Corresponding
58217     Source.
58218
58219     The Corresponding Source for a work in source code form is that
58220     same work.
58221
58222  2. Basic Permissions.
58223
58224     All rights granted under this License are granted for the term of
58225     copyright on the Program, and are irrevocable provided the stated
58226     conditions are met.  This License explicitly affirms your unlimited
58227     permission to run the unmodified Program.  The output from running
58228     a covered work is covered by this License only if the output, given
58229     its content, constitutes a covered work.  This License acknowledges
58230     your rights of fair use or other equivalent, as provided by
58231     copyright law.
58232
58233     You may make, run and propagate covered works that you do not
58234     convey, without conditions so long as your license otherwise
58235     remains in force.  You may convey covered works to others for the
58236     sole purpose of having them make modifications exclusively for you,
58237     or provide you with facilities for running those works, provided
58238     that you comply with the terms of this License in conveying all
58239     material for which you do not control copyright.  Those thus making
58240     or running the covered works for you must do so exclusively on your
58241     behalf, under your direction and control, on terms that prohibit
58242     them from making any copies of your copyrighted material outside
58243     their relationship with you.
58244
58245     Conveying under any other circumstances is permitted solely under
58246     the conditions stated below.  Sublicensing is not allowed; section
58247     10 makes it unnecessary.
58248
58249  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
58250
58251     No covered work shall be deemed part of an effective technological
58252     measure under any applicable law fulfilling obligations under
58253     article 11 of the WIPO copyright treaty adopted on 20 December
58254     1996, or similar laws prohibiting or restricting circumvention of
58255     such measures.
58256
58257     When you convey a covered work, you waive any legal power to forbid
58258     circumvention of technological measures to the extent such
58259     circumvention is effected by exercising rights under this License
58260     with respect to the covered work, and you disclaim any intention to
58261     limit operation or modification of the work as a means of
58262     enforcing, against the work's users, your or third parties' legal
58263     rights to forbid circumvention of technological measures.
58264
58265  4. Conveying Verbatim Copies.
58266
58267     You may convey verbatim copies of the Program's source code as you
58268     receive it, in any medium, provided that you conspicuously and
58269     appropriately publish on each copy an appropriate copyright notice;
58270     keep intact all notices stating that this License and any
58271     non-permissive terms added in accord with section 7 apply to the
58272     code; keep intact all notices of the absence of any warranty; and
58273     give all recipients a copy of this License along with the Program.
58274
58275     You may charge any price or no price for each copy that you convey,
58276     and you may offer support or warranty protection for a fee.
58277
58278  5. Conveying Modified Source Versions.
58279
58280     You may convey a work based on the Program, or the modifications to
58281     produce it from the Program, in the form of source code under the
58282     terms of section 4, provided that you also meet all of these
58283     conditions:
58284
58285       a. The work must carry prominent notices stating that you
58286          modified it, and giving a relevant date.
58287
58288       b. The work must carry prominent notices stating that it is
58289          released under this License and any conditions added under
58290          section 7.  This requirement modifies the requirement in
58291          section 4 to "keep intact all notices".
58292
58293       c. You must license the entire work, as a whole, under this
58294          License to anyone who comes into possession of a copy.  This
58295          License will therefore apply, along with any applicable
58296          section 7 additional terms, to the whole of the work, and all
58297          its parts, regardless of how they are packaged.  This License
58298          gives no permission to license the work in any other way, but
58299          it does not invalidate such permission if you have separately
58300          received it.
58301
58302       d. If the work has interactive user interfaces, each must display
58303          Appropriate Legal Notices; however, if the Program has
58304          interactive interfaces that do not display Appropriate Legal
58305          Notices, your work need not make them do so.
58306
58307     A compilation of a covered work with other separate and independent
58308     works, which are not by their nature extensions of the covered
58309     work, and which are not combined with it such as to form a larger
58310     program, in or on a volume of a storage or distribution medium, is
58311     called an "aggregate" if the compilation and its resulting
58312     copyright are not used to limit the access or legal rights of the
58313     compilation's users beyond what the individual works permit.
58314     Inclusion of a covered work in an aggregate does not cause this
58315     License to apply to the other parts of the aggregate.
58316
58317  6. Conveying Non-Source Forms.
58318
58319     You may convey a covered work in object code form under the terms
58320     of sections 4 and 5, provided that you also convey the
58321     machine-readable Corresponding Source under the terms of this
58322     License, in one of these ways:
58323
58324       a. Convey the object code in, or embodied in, a physical product
58325          (including a physical distribution medium), accompanied by the
58326          Corresponding Source fixed on a durable physical medium
58327          customarily used for software interchange.
58328
58329       b. Convey the object code in, or embodied in, a physical product
58330          (including a physical distribution medium), accompanied by a
58331          written offer, valid for at least three years and valid for as
58332          long as you offer spare parts or customer support for that
58333          product model, to give anyone who possesses the object code
58334          either (1) a copy of the Corresponding Source for all the
58335          software in the product that is covered by this License, on a
58336          durable physical medium customarily used for software
58337          interchange, for a price no more than your reasonable cost of
58338          physically performing this conveying of source, or (2) access
58339          to copy the Corresponding Source from a network server at no
58340          charge.
58341
58342       c. Convey individual copies of the object code with a copy of the
58343          written offer to provide the Corresponding Source.  This
58344          alternative is allowed only occasionally and noncommercially,
58345          and only if you received the object code with such an offer,
58346          in accord with subsection 6b.
58347
58348       d. Convey the object code by offering access from a designated
58349          place (gratis or for a charge), and offer equivalent access to
58350          the Corresponding Source in the same way through the same
58351          place at no further charge.  You need not require recipients
58352          to copy the Corresponding Source along with the object code.
58353          If the place to copy the object code is a network server, the
58354          Corresponding Source may be on a different server (operated by
58355          you or a third party) that supports equivalent copying
58356          facilities, provided you maintain clear directions next to the
58357          object code saying where to find the Corresponding Source.
58358          Regardless of what server hosts the Corresponding Source, you
58359          remain obligated to ensure that it is available for as long as
58360          needed to satisfy these requirements.
58361
58362       e. Convey the object code using peer-to-peer transmission,
58363          provided you inform other peers where the object code and
58364          Corresponding Source of the work are being offered to the
58365          general public at no charge under subsection 6d.
58366
58367     A separable portion of the object code, whose source code is
58368     excluded from the Corresponding Source as a System Library, need
58369     not be included in conveying the object code work.
58370
58371     A "User Product" is either (1) a "consumer product", which means
58372     any tangible personal property which is normally used for personal,
58373     family, or household purposes, or (2) anything designed or sold for
58374     incorporation into a dwelling.  In determining whether a product is
58375     a consumer product, doubtful cases shall be resolved in favor of
58376     coverage.  For a particular product received by a particular user,
58377     "normally used" refers to a typical or common use of that class of
58378     product, regardless of the status of the particular user or of the
58379     way in which the particular user actually uses, or expects or is
58380     expected to use, the product.  A product is a consumer product
58381     regardless of whether the product has substantial commercial,
58382     industrial or non-consumer uses, unless such uses represent the
58383     only significant mode of use of the product.
58384
58385     "Installation Information" for a User Product means any methods,
58386     procedures, authorization keys, or other information required to
58387     install and execute modified versions of a covered work in that
58388     User Product from a modified version of its Corresponding Source.
58389     The information must suffice to ensure that the continued
58390     functioning of the modified object code is in no case prevented or
58391     interfered with solely because modification has been made.
58392
58393     If you convey an object code work under this section in, or with,
58394     or specifically for use in, a User Product, and the conveying
58395     occurs as part of a transaction in which the right of possession
58396     and use of the User Product is transferred to the recipient in
58397     perpetuity or for a fixed term (regardless of how the transaction
58398     is characterized), the Corresponding Source conveyed under this
58399     section must be accompanied by the Installation Information.  But
58400     this requirement does not apply if neither you nor any third party
58401     retains the ability to install modified object code on the User
58402     Product (for example, the work has been installed in ROM).
58403
58404     The requirement to provide Installation Information does not
58405     include a requirement to continue to provide support service,
58406     warranty, or updates for a work that has been modified or installed
58407     by the recipient, or for the User Product in which it has been
58408     modified or installed.  Access to a network may be denied when the
58409     modification itself materially and adversely affects the operation
58410     of the network or violates the rules and protocols for
58411     communication across the network.
58412
58413     Corresponding Source conveyed, and Installation Information
58414     provided, in accord with this section must be in a format that is
58415     publicly documented (and with an implementation available to the
58416     public in source code form), and must require no special password
58417     or key for unpacking, reading or copying.
58418
58419  7. Additional Terms.
58420
58421     "Additional permissions" are terms that supplement the terms of
58422     this License by making exceptions from one or more of its
58423     conditions.  Additional permissions that are applicable to the
58424     entire Program shall be treated as though they were included in
58425     this License, to the extent that they are valid under applicable
58426     law.  If additional permissions apply only to part of the Program,
58427     that part may be used separately under those permissions, but the
58428     entire Program remains governed by this License without regard to
58429     the additional permissions.
58430
58431     When you convey a copy of a covered work, you may at your option
58432     remove any additional permissions from that copy, or from any part
58433     of it.  (Additional permissions may be written to require their own
58434     removal in certain cases when you modify the work.)  You may place
58435     additional permissions on material, added by you to a covered work,
58436     for which you have or can give appropriate copyright permission.
58437
58438     Notwithstanding any other provision of this License, for material
58439     you add to a covered work, you may (if authorized by the copyright
58440     holders of that material) supplement the terms of this License with
58441     terms:
58442
58443       a. Disclaiming warranty or limiting liability differently from
58444          the terms of sections 15 and 16 of this License; or
58445
58446       b. Requiring preservation of specified reasonable legal notices
58447          or author attributions in that material or in the Appropriate
58448          Legal Notices displayed by works containing it; or
58449
58450       c. Prohibiting misrepresentation of the origin of that material,
58451          or requiring that modified versions of such material be marked
58452          in reasonable ways as different from the original version; or
58453
58454       d. Limiting the use for publicity purposes of names of licensors
58455          or authors of the material; or
58456
58457       e. Declining to grant rights under trademark law for use of some
58458          trade names, trademarks, or service marks; or
58459
58460       f. Requiring indemnification of licensors and authors of that
58461          material by anyone who conveys the material (or modified
58462          versions of it) with contractual assumptions of liability to
58463          the recipient, for any liability that these contractual
58464          assumptions directly impose on those licensors and authors.
58465
58466     All other non-permissive additional terms are considered "further
58467     restrictions" within the meaning of section 10.  If the Program as
58468     you received it, or any part of it, contains a notice stating that
58469     it is governed by this License along with a term that is a further
58470     restriction, you may remove that term.  If a license document
58471     contains a further restriction but permits relicensing or conveying
58472     under this License, you may add to a covered work material governed
58473     by the terms of that license document, provided that the further
58474     restriction does not survive such relicensing or conveying.
58475
58476     If you add terms to a covered work in accord with this section, you
58477     must place, in the relevant source files, a statement of the
58478     additional terms that apply to those files, or a notice indicating
58479     where to find the applicable terms.
58480
58481     Additional terms, permissive or non-permissive, may be stated in
58482     the form of a separately written license, or stated as exceptions;
58483     the above requirements apply either way.
58484
58485  8. Termination.
58486
58487     You may not propagate or modify a covered work except as expressly
58488     provided under this License.  Any attempt otherwise to propagate or
58489     modify it is void, and will automatically terminate your rights
58490     under this License (including any patent licenses granted under the
58491     third paragraph of section 11).
58492
58493     However, if you cease all violation of this License, then your
58494     license from a particular copyright holder is reinstated (a)
58495     provisionally, unless and until the copyright holder explicitly and
58496     finally terminates your license, and (b) permanently, if the
58497     copyright holder fails to notify you of the violation by some
58498     reasonable means prior to 60 days after the cessation.
58499
58500     Moreover, your license from a particular copyright holder is
58501     reinstated permanently if the copyright holder notifies you of the
58502     violation by some reasonable means, this is the first time you have
58503     received notice of violation of this License (for any work) from
58504     that copyright holder, and you cure the violation prior to 30 days
58505     after your receipt of the notice.
58506
58507     Termination of your rights under this section does not terminate
58508     the licenses of parties who have received copies or rights from you
58509     under this License.  If your rights have been terminated and not
58510     permanently reinstated, you do not qualify to receive new licenses
58511     for the same material under section 10.
58512
58513  9. Acceptance Not Required for Having Copies.
58514
58515     You are not required to accept this License in order to receive or
58516     run a copy of the Program.  Ancillary propagation of a covered work
58517     occurring solely as a consequence of using peer-to-peer
58518     transmission to receive a copy likewise does not require
58519     acceptance.  However, nothing other than this License grants you
58520     permission to propagate or modify any covered work.  These actions
58521     infringe copyright if you do not accept this License.  Therefore,
58522     by modifying or propagating a covered work, you indicate your
58523     acceptance of this License to do so.
58524
58525  10. Automatic Licensing of Downstream Recipients.
58526
58527     Each time you convey a covered work, the recipient automatically
58528     receives a license from the original licensors, to run, modify and
58529     propagate that work, subject to this License.  You are not
58530     responsible for enforcing compliance by third parties with this
58531     License.
58532
58533     An "entity transaction" is a transaction transferring control of an
58534     organization, or substantially all assets of one, or subdividing an
58535     organization, or merging organizations.  If propagation of a
58536     covered work results from an entity transaction, each party to that
58537     transaction who receives a copy of the work also receives whatever
58538     licenses to the work the party's predecessor in interest had or
58539     could give under the previous paragraph, plus a right to possession
58540     of the Corresponding Source of the work from the predecessor in
58541     interest, if the predecessor has it or can get it with reasonable
58542     efforts.
58543
58544     You may not impose any further restrictions on the exercise of the
58545     rights granted or affirmed under this License.  For example, you
58546     may not impose a license fee, royalty, or other charge for exercise
58547     of rights granted under this License, and you may not initiate
58548     litigation (including a cross-claim or counterclaim in a lawsuit)
58549     alleging that any patent claim is infringed by making, using,
58550     selling, offering for sale, or importing the Program or any portion
58551     of it.
58552
58553  11. Patents.
58554
58555     A "contributor" is a copyright holder who authorizes use under this
58556     License of the Program or a work on which the Program is based.
58557     The work thus licensed is called the contributor's "contributor
58558     version".
58559
58560     A contributor's "essential patent claims" are all patent claims
58561     owned or controlled by the contributor, whether already acquired or
58562     hereafter acquired, that would be infringed by some manner,
58563     permitted by this License, of making, using, or selling its
58564     contributor version, but do not include claims that would be
58565     infringed only as a consequence of further modification of the
58566     contributor version.  For purposes of this definition, "control"
58567     includes the right to grant patent sublicenses in a manner
58568     consistent with the requirements of this License.
58569
58570     Each contributor grants you a non-exclusive, worldwide,
58571     royalty-free patent license under the contributor's essential
58572     patent claims, to make, use, sell, offer for sale, import and
58573     otherwise run, modify and propagate the contents of its contributor
58574     version.
58575
58576     In the following three paragraphs, a "patent license" is any
58577     express agreement or commitment, however denominated, not to
58578     enforce a patent (such as an express permission to practice a
58579     patent or covenant not to sue for patent infringement).  To "grant"
58580     such a patent license to a party means to make such an agreement or
58581     commitment not to enforce a patent against the party.
58582
58583     If you convey a covered work, knowingly relying on a patent
58584     license, and the Corresponding Source of the work is not available
58585     for anyone to copy, free of charge and under the terms of this
58586     License, through a publicly available network server or other
58587     readily accessible means, then you must either (1) cause the
58588     Corresponding Source to be so available, or (2) arrange to deprive
58589     yourself of the benefit of the patent license for this particular
58590     work, or (3) arrange, in a manner consistent with the requirements
58591     of this License, to extend the patent license to downstream
58592     recipients.  "Knowingly relying" means you have actual knowledge
58593     that, but for the patent license, your conveying the covered work
58594     in a country, or your recipient's use of the covered work in a
58595     country, would infringe one or more identifiable patents in that
58596     country that you have reason to believe are valid.
58597
58598     If, pursuant to or in connection with a single transaction or
58599     arrangement, you convey, or propagate by procuring conveyance of, a
58600     covered work, and grant a patent license to some of the parties
58601     receiving the covered work authorizing them to use, propagate,
58602     modify or convey a specific copy of the covered work, then the
58603     patent license you grant is automatically extended to all
58604     recipients of the covered work and works based on it.
58605
58606     A patent license is "discriminatory" if it does not include within
58607     the scope of its coverage, prohibits the exercise of, or is
58608     conditioned on the non-exercise of one or more of the rights that
58609     are specifically granted under this License.  You may not convey a
58610     covered work if you are a party to an arrangement with a third
58611     party that is in the business of distributing software, under which
58612     you make payment to the third party based on the extent of your
58613     activity of conveying the work, and under which the third party
58614     grants, to any of the parties who would receive the covered work
58615     from you, a discriminatory patent license (a) in connection with
58616     copies of the covered work conveyed by you (or copies made from
58617     those copies), or (b) primarily for and in connection with specific
58618     products or compilations that contain the covered work, unless you
58619     entered into that arrangement, or that patent license was granted,
58620     prior to 28 March 2007.
58621
58622     Nothing in this License shall be construed as excluding or limiting
58623     any implied license or other defenses to infringement that may
58624     otherwise be available to you under applicable patent law.
58625
58626  12. No Surrender of Others' Freedom.
58627
58628     If conditions are imposed on you (whether by court order, agreement
58629     or otherwise) that contradict the conditions of this License, they
58630     do not excuse you from the conditions of this License.  If you
58631     cannot convey a covered work so as to satisfy simultaneously your
58632     obligations under this License and any other pertinent obligations,
58633     then as a consequence you may not convey it at all.  For example,
58634     if you agree to terms that obligate you to collect a royalty for
58635     further conveying from those to whom you convey the Program, the
58636     only way you could satisfy both those terms and this License would
58637     be to refrain entirely from conveying the Program.
58638
58639  13. Use with the GNU Affero General Public License.
58640
58641     Notwithstanding any other provision of this License, you have
58642     permission to link or combine any covered work with a work licensed
58643     under version 3 of the GNU Affero General Public License into a
58644     single combined work, and to convey the resulting work.  The terms
58645     of this License will continue to apply to the part which is the
58646     covered work, but the special requirements of the GNU Affero
58647     General Public License, section 13, concerning interaction through
58648     a network will apply to the combination as such.
58649
58650  14. Revised Versions of this License.
58651
58652     The Free Software Foundation may publish revised and/or new
58653     versions of the GNU General Public License from time to time.  Such
58654     new versions will be similar in spirit to the present version, but
58655     may differ in detail to address new problems or concerns.
58656
58657     Each version is given a distinguishing version number.  If the
58658     Program specifies that a certain numbered version of the GNU
58659     General Public License "or any later version" applies to it, you
58660     have the option of following the terms and conditions either of
58661     that numbered version or of any later version published by the Free
58662     Software Foundation.  If the Program does not specify a version
58663     number of the GNU General Public License, you may choose any
58664     version ever published by the Free Software Foundation.
58665
58666     If the Program specifies that a proxy can decide which future
58667     versions of the GNU General Public License can be used, that
58668     proxy's public statement of acceptance of a version permanently
58669     authorizes you to choose that version for the Program.
58670
58671     Later license versions may give you additional or different
58672     permissions.  However, no additional obligations are imposed on any
58673     author or copyright holder as a result of your choosing to follow a
58674     later version.
58675
58676  15. Disclaimer of Warranty.
58677
58678     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
58679     APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
58680     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
58681     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
58682     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
58683     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
58684     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
58685     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
58686     NECESSARY SERVICING, REPAIR OR CORRECTION.
58687
58688  16. Limitation of Liability.
58689
58690     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
58691     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
58692     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
58693     DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
58694     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
58695     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
58696     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
58697     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
58698     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
58699     THE POSSIBILITY OF SUCH DAMAGES.
58700
58701  17. Interpretation of Sections 15 and 16.
58702
58703     If the disclaimer of warranty and limitation of liability provided
58704     above cannot be given local legal effect according to their terms,
58705     reviewing courts shall apply local law that most closely
58706     approximates an absolute waiver of all civil liability in
58707     connection with the Program, unless a warranty or assumption of
58708     liability accompanies a copy of the Program in return for a fee.
58709
58710END OF TERMS AND CONDITIONS
58711===========================
58712
58713How to Apply These Terms to Your New Programs
58714=============================================
58715
58716If you develop a new program, and you want it to be of the greatest
58717possible use to the public, the best way to achieve this is to make it
58718free software which everyone can redistribute and change under these
58719terms.
58720
58721 To do so, attach the following notices to the program.  It is safest to
58722attach them to the start of each source file to most effectively state
58723the exclusion of warranty; and each file should have at least the
58724"copyright" line and a pointer to where the full notice is found.
58725
58726     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
58727     Copyright (C) YEAR NAME OF AUTHOR
58728
58729     This program is free software: you can redistribute it and/or modify
58730     it under the terms of the GNU General Public License as published by
58731     the Free Software Foundation, either version 3 of the License, or (at
58732     your option) any later version.
58733
58734     This program is distributed in the hope that it will be useful, but
58735     WITHOUT ANY WARRANTY; without even the implied warranty of
58736     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
58737     General Public License for more details.
58738
58739     You should have received a copy of the GNU General Public License
58740     along with this program.  If not, see <http://www.gnu.org/licenses/>.
58741
58742 Also add information on how to contact you by electronic and paper
58743mail.
58744
58745 If the program does terminal interaction, make it output a short notice
58746like this when it starts in an interactive mode:
58747
58748     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
58749     This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
58750     This is free software, and you are welcome to redistribute it
58751     under certain conditions; type 'show c' for details.
58752
58753 The hypothetical commands 'show w' and 'show c' should show the
58754appropriate parts of the General Public License.  Of course, your
58755program's commands might be different; for a GUI interface, you would
58756use an "about box".
58757
58758 You should also get your employer (if you work as a programmer) or
58759school, if any, to sign a "copyright disclaimer" for the program, if
58760necessary.  For more information on this, and how to apply and follow
58761the GNU GPL, see <http://www.gnu.org/licenses/>.
58762
58763 The GNU General Public License does not permit incorporating your
58764program into proprietary programs.  If your program is a subroutine
58765library, you may consider it more useful to permit linking proprietary
58766applications with the library.  If this is what you want to do, use the
58767GNU Lesser General Public License instead of this License.  But first,
58768please read <https://www.gnu.org/licenses/why-not-lgpl.html>.
58769
58770
58771File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
58772
58773GNU Free Documentation License
58774******************************
58775
58776                     Version 1.3, 3 November 2008
58777
58778     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
58779     <http://fsf.org/>
58780
58781     Everyone is permitted to copy and distribute verbatim copies
58782     of this license document, but changing it is not allowed.
58783
58784  0. PREAMBLE
58785
58786     The purpose of this License is to make a manual, textbook, or other
58787     functional and useful document "free" in the sense of freedom: to
58788     assure everyone the effective freedom to copy and redistribute it,
58789     with or without modifying it, either commercially or
58790     noncommercially.  Secondarily, this License preserves for the
58791     author and publisher a way to get credit for their work, while not
58792     being considered responsible for modifications made by others.
58793
58794     This License is a kind of "copyleft", which means that derivative
58795     works of the document must themselves be free in the same sense.
58796     It complements the GNU General Public License, which is a copyleft
58797     license designed for free software.
58798
58799     We have designed this License in order to use it for manuals for
58800     free software, because free software needs free documentation: a
58801     free program should come with manuals providing the same freedoms
58802     that the software does.  But this License is not limited to
58803     software manuals; it can be used for any textual work, regardless
58804     of subject matter or whether it is published as a printed book.  We
58805     recommend this License principally for works whose purpose is
58806     instruction or reference.
58807
58808  1. APPLICABILITY AND DEFINITIONS
58809
58810     This License applies to any manual or other work, in any medium,
58811     that contains a notice placed by the copyright holder saying it can
58812     be distributed under the terms of this License.  Such a notice
58813     grants a world-wide, royalty-free license, unlimited in duration,
58814     to use that work under the conditions stated herein.  The
58815     "Document", below, refers to any such manual or work.  Any member
58816     of the public is a licensee, and is addressed as "you".  You accept
58817     the license if you copy, modify or distribute the work in a way
58818     requiring permission under copyright law.
58819
58820     A "Modified Version" of the Document means any work containing the
58821     Document or a portion of it, either copied verbatim, or with
58822     modifications and/or translated into another language.
58823
58824     A "Secondary Section" is a named appendix or a front-matter section
58825     of the Document that deals exclusively with the relationship of the
58826     publishers or authors of the Document to the Document's overall
58827     subject (or to related matters) and contains nothing that could
58828     fall directly within that overall subject.  (Thus, if the Document
58829     is in part a textbook of mathematics, a Secondary Section may not
58830     explain any mathematics.)  The relationship could be a matter of
58831     historical connection with the subject or with related matters, or
58832     of legal, commercial, philosophical, ethical or political position
58833     regarding them.
58834
58835     The "Invariant Sections" are certain Secondary Sections whose
58836     titles are designated, as being those of Invariant Sections, in the
58837     notice that says that the Document is released under this License.
58838     If a section does not fit the above definition of Secondary then it
58839     is not allowed to be designated as Invariant.  The Document may
58840     contain zero Invariant Sections.  If the Document does not identify
58841     any Invariant Sections then there are none.
58842
58843     The "Cover Texts" are certain short passages of text that are
58844     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
58845     that says that the Document is released under this License.  A
58846     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
58847     be at most 25 words.
58848
58849     A "Transparent" copy of the Document means a machine-readable copy,
58850     represented in a format whose specification is available to the
58851     general public, that is suitable for revising the document
58852     straightforwardly with generic text editors or (for images composed
58853     of pixels) generic paint programs or (for drawings) some widely
58854     available drawing editor, and that is suitable for input to text
58855     formatters or for automatic translation to a variety of formats
58856     suitable for input to text formatters.  A copy made in an otherwise
58857     Transparent file format whose markup, or absence of markup, has
58858     been arranged to thwart or discourage subsequent modification by
58859     readers is not Transparent.  An image format is not Transparent if
58860     used for any substantial amount of text.  A copy that is not
58861     "Transparent" is called "Opaque".
58862
58863     Examples of suitable formats for Transparent copies include plain
58864     ASCII without markup, Texinfo input format, LaTeX input format,
58865     SGML or XML using a publicly available DTD, and standard-conforming
58866     simple HTML, PostScript or PDF designed for human modification.
58867     Examples of transparent image formats include PNG, XCF and JPG.
58868     Opaque formats include proprietary formats that can be read and
58869     edited only by proprietary word processors, SGML or XML for which
58870     the DTD and/or processing tools are not generally available, and
58871     the machine-generated HTML, PostScript or PDF produced by some word
58872     processors for output purposes only.
58873
58874     The "Title Page" means, for a printed book, the title page itself,
58875     plus such following pages as are needed to hold, legibly, the
58876     material this License requires to appear in the title page.  For
58877     works in formats which do not have any title page as such, "Title
58878     Page" means the text near the most prominent appearance of the
58879     work's title, preceding the beginning of the body of the text.
58880
58881     The "publisher" means any person or entity that distributes copies
58882     of the Document to the public.
58883
58884     A section "Entitled XYZ" means a named subunit of the Document
58885     whose title either is precisely XYZ or contains XYZ in parentheses
58886     following text that translates XYZ in another language.  (Here XYZ
58887     stands for a specific section name mentioned below, such as
58888     "Acknowledgements", "Dedications", "Endorsements", or "History".)
58889     To "Preserve the Title" of such a section when you modify the
58890     Document means that it remains a section "Entitled XYZ" according
58891     to this definition.
58892
58893     The Document may include Warranty Disclaimers next to the notice
58894     which states that this License applies to the Document.  These
58895     Warranty Disclaimers are considered to be included by reference in
58896     this License, but only as regards disclaiming warranties: any other
58897     implication that these Warranty Disclaimers may have is void and
58898     has no effect on the meaning of this License.
58899
58900  2. VERBATIM COPYING
58901
58902     You may copy and distribute the Document in any medium, either
58903     commercially or noncommercially, provided that this License, the
58904     copyright notices, and the license notice saying this License
58905     applies to the Document are reproduced in all copies, and that you
58906     add no other conditions whatsoever to those of this License.  You
58907     may not use technical measures to obstruct or control the reading
58908     or further copying of the copies you make or distribute.  However,
58909     you may accept compensation in exchange for copies.  If you
58910     distribute a large enough number of copies you must also follow the
58911     conditions in section 3.
58912
58913     You may also lend copies, under the same conditions stated above,
58914     and you may publicly display copies.
58915
58916  3. COPYING IN QUANTITY
58917
58918     If you publish printed copies (or copies in media that commonly
58919     have printed covers) of the Document, numbering more than 100, and
58920     the Document's license notice requires Cover Texts, you must
58921     enclose the copies in covers that carry, clearly and legibly, all
58922     these Cover Texts: Front-Cover Texts on the front cover, and
58923     Back-Cover Texts on the back cover.  Both covers must also clearly
58924     and legibly identify you as the publisher of these copies.  The
58925     front cover must present the full title with all words of the title
58926     equally prominent and visible.  You may add other material on the
58927     covers in addition.  Copying with changes limited to the covers, as
58928     long as they preserve the title of the Document and satisfy these
58929     conditions, can be treated as verbatim copying in other respects.
58930
58931     If the required texts for either cover are too voluminous to fit
58932     legibly, you should put the first ones listed (as many as fit
58933     reasonably) on the actual cover, and continue the rest onto
58934     adjacent pages.
58935
58936     If you publish or distribute Opaque copies of the Document
58937     numbering more than 100, you must either include a machine-readable
58938     Transparent copy along with each Opaque copy, or state in or with
58939     each Opaque copy a computer-network location from which the general
58940     network-using public has access to download using public-standard
58941     network protocols a complete Transparent copy of the Document, free
58942     of added material.  If you use the latter option, you must take
58943     reasonably prudent steps, when you begin distribution of Opaque
58944     copies in quantity, to ensure that this Transparent copy will
58945     remain thus accessible at the stated location until at least one
58946     year after the last time you distribute an Opaque copy (directly or
58947     through your agents or retailers) of that edition to the public.
58948
58949     It is requested, but not required, that you contact the authors of
58950     the Document well before redistributing any large number of copies,
58951     to give them a chance to provide you with an updated version of the
58952     Document.
58953
58954  4. MODIFICATIONS
58955
58956     You may copy and distribute a Modified Version of the Document
58957     under the conditions of sections 2 and 3 above, provided that you
58958     release the Modified Version under precisely this License, with the
58959     Modified Version filling the role of the Document, thus licensing
58960     distribution and modification of the Modified Version to whoever
58961     possesses a copy of it.  In addition, you must do these things in
58962     the Modified Version:
58963
58964       A. Use in the Title Page (and on the covers, if any) a title
58965          distinct from that of the Document, and from those of previous
58966          versions (which should, if there were any, be listed in the
58967          History section of the Document).  You may use the same title
58968          as a previous version if the original publisher of that
58969          version gives permission.
58970
58971       B. List on the Title Page, as authors, one or more persons or
58972          entities responsible for authorship of the modifications in
58973          the Modified Version, together with at least five of the
58974          principal authors of the Document (all of its principal
58975          authors, if it has fewer than five), unless they release you
58976          from this requirement.
58977
58978       C. State on the Title page the name of the publisher of the
58979          Modified Version, as the publisher.
58980
58981       D. Preserve all the copyright notices of the Document.
58982
58983       E. Add an appropriate copyright notice for your modifications
58984          adjacent to the other copyright notices.
58985
58986       F. Include, immediately after the copyright notices, a license
58987          notice giving the public permission to use the Modified
58988          Version under the terms of this License, in the form shown in
58989          the Addendum below.
58990
58991       G. Preserve in that license notice the full lists of Invariant
58992          Sections and required Cover Texts given in the Document's
58993          license notice.
58994
58995       H. Include an unaltered copy of this License.
58996
58997       I. Preserve the section Entitled "History", Preserve its Title,
58998          and add to it an item stating at least the title, year, new
58999          authors, and publisher of the Modified Version as given on the
59000          Title Page.  If there is no section Entitled "History" in the
59001          Document, create one stating the title, year, authors, and
59002          publisher of the Document as given on its Title Page, then add
59003          an item describing the Modified Version as stated in the
59004          previous sentence.
59005
59006       J. Preserve the network location, if any, given in the Document
59007          for public access to a Transparent copy of the Document, and
59008          likewise the network locations given in the Document for
59009          previous versions it was based on.  These may be placed in the
59010          "History" section.  You may omit a network location for a work
59011          that was published at least four years before the Document
59012          itself, or if the original publisher of the version it refers
59013          to gives permission.
59014
59015       K. For any section Entitled "Acknowledgements" or "Dedications",
59016          Preserve the Title of the section, and preserve in the section
59017          all the substance and tone of each of the contributor
59018          acknowledgements and/or dedications given therein.
59019
59020       L. Preserve all the Invariant Sections of the Document, unaltered
59021          in their text and in their titles.  Section numbers or the
59022          equivalent are not considered part of the section titles.
59023
59024       M. Delete any section Entitled "Endorsements".  Such a section
59025          may not be included in the Modified Version.
59026
59027       N. Do not retitle any existing section to be Entitled
59028          "Endorsements" or to conflict in title with any Invariant
59029          Section.
59030
59031       O. Preserve any Warranty Disclaimers.
59032
59033     If the Modified Version includes new front-matter sections or
59034     appendices that qualify as Secondary Sections and contain no
59035     material copied from the Document, you may at your option designate
59036     some or all of these sections as invariant.  To do this, add their
59037     titles to the list of Invariant Sections in the Modified Version's
59038     license notice.  These titles must be distinct from any other
59039     section titles.
59040
59041     You may add a section Entitled "Endorsements", provided it contains
59042     nothing but endorsements of your Modified Version by various
59043     parties--for example, statements of peer review or that the text
59044     has been approved by an organization as the authoritative
59045     definition of a standard.
59046
59047     You may add a passage of up to five words as a Front-Cover Text,
59048     and a passage of up to 25 words as a Back-Cover Text, to the end of
59049     the list of Cover Texts in the Modified Version.  Only one passage
59050     of Front-Cover Text and one of Back-Cover Text may be added by (or
59051     through arrangements made by) any one entity.  If the Document
59052     already includes a cover text for the same cover, previously added
59053     by you or by arrangement made by the same entity you are acting on
59054     behalf of, you may not add another; but you may replace the old
59055     one, on explicit permission from the previous publisher that added
59056     the old one.
59057
59058     The author(s) and publisher(s) of the Document do not by this
59059     License give permission to use their names for publicity for or to
59060     assert or imply endorsement of any Modified Version.
59061
59062  5. COMBINING DOCUMENTS
59063
59064     You may combine the Document with other documents released under
59065     this License, under the terms defined in section 4 above for
59066     modified versions, provided that you include in the combination all
59067     of the Invariant Sections of all of the original documents,
59068     unmodified, and list them all as Invariant Sections of your
59069     combined work in its license notice, and that you preserve all
59070     their Warranty Disclaimers.
59071
59072     The combined work need only contain one copy of this License, and
59073     multiple identical Invariant Sections may be replaced with a single
59074     copy.  If there are multiple Invariant Sections with the same name
59075     but different contents, make the title of each such section unique
59076     by adding at the end of it, in parentheses, the name of the
59077     original author or publisher of that section if known, or else a
59078     unique number.  Make the same adjustment to the section titles in
59079     the list of Invariant Sections in the license notice of the
59080     combined work.
59081
59082     In the combination, you must combine any sections Entitled
59083     "History" in the various original documents, forming one section
59084     Entitled "History"; likewise combine any sections Entitled
59085     "Acknowledgements", and any sections Entitled "Dedications".  You
59086     must delete all sections Entitled "Endorsements."
59087
59088  6. COLLECTIONS OF DOCUMENTS
59089
59090     You may make a collection consisting of the Document and other
59091     documents released under this License, and replace the individual
59092     copies of this License in the various documents with a single copy
59093     that is included in the collection, provided that you follow the
59094     rules of this License for verbatim copying of each of the documents
59095     in all other respects.
59096
59097     You may extract a single document from such a collection, and
59098     distribute it individually under this License, provided you insert
59099     a copy of this License into the extracted document, and follow this
59100     License in all other respects regarding verbatim copying of that
59101     document.
59102
59103  7. AGGREGATION WITH INDEPENDENT WORKS
59104
59105     A compilation of the Document or its derivatives with other
59106     separate and independent documents or works, in or on a volume of a
59107     storage or distribution medium, is called an "aggregate" if the
59108     copyright resulting from the compilation is not used to limit the
59109     legal rights of the compilation's users beyond what the individual
59110     works permit.  When the Document is included in an aggregate, this
59111     License does not apply to the other works in the aggregate which
59112     are not themselves derivative works of the Document.
59113
59114     If the Cover Text requirement of section 3 is applicable to these
59115     copies of the Document, then if the Document is less than one half
59116     of the entire aggregate, the Document's Cover Texts may be placed
59117     on covers that bracket the Document within the aggregate, or the
59118     electronic equivalent of covers if the Document is in electronic
59119     form.  Otherwise they must appear on printed covers that bracket
59120     the whole aggregate.
59121
59122  8. TRANSLATION
59123
59124     Translation is considered a kind of modification, so you may
59125     distribute translations of the Document under the terms of section
59126     4.  Replacing Invariant Sections with translations requires special
59127     permission from their copyright holders, but you may include
59128     translations of some or all Invariant Sections in addition to the
59129     original versions of these Invariant Sections.  You may include a
59130     translation of this License, and all the license notices in the
59131     Document, and any Warranty Disclaimers, provided that you also
59132     include the original English version of this License and the
59133     original versions of those notices and disclaimers.  In case of a
59134     disagreement between the translation and the original version of
59135     this License or a notice or disclaimer, the original version will
59136     prevail.
59137
59138     If a section in the Document is Entitled "Acknowledgements",
59139     "Dedications", or "History", the requirement (section 4) to
59140     Preserve its Title (section 1) will typically require changing the
59141     actual title.
59142
59143  9. TERMINATION
59144
59145     You may not copy, modify, sublicense, or distribute the Document
59146     except as expressly provided under this License.  Any attempt
59147     otherwise to copy, modify, sublicense, or distribute it is void,
59148     and will automatically terminate your rights under this License.
59149
59150     However, if you cease all violation of this License, then your
59151     license from a particular copyright holder is reinstated (a)
59152     provisionally, unless and until the copyright holder explicitly and
59153     finally terminates your license, and (b) permanently, if the
59154     copyright holder fails to notify you of the violation by some
59155     reasonable means prior to 60 days after the cessation.
59156
59157     Moreover, your license from a particular copyright holder is
59158     reinstated permanently if the copyright holder notifies you of the
59159     violation by some reasonable means, this is the first time you have
59160     received notice of violation of this License (for any work) from
59161     that copyright holder, and you cure the violation prior to 30 days
59162     after your receipt of the notice.
59163
59164     Termination of your rights under this section does not terminate
59165     the licenses of parties who have received copies or rights from you
59166     under this License.  If your rights have been terminated and not
59167     permanently reinstated, receipt of a copy of some or all of the
59168     same material does not give you any rights to use it.
59169
59170  10. FUTURE REVISIONS OF THIS LICENSE
59171
59172     The Free Software Foundation may publish new, revised versions of
59173     the GNU Free Documentation License from time to time.  Such new
59174     versions will be similar in spirit to the present version, but may
59175     differ in detail to address new problems or concerns.  See
59176     <http://www.gnu.org/copyleft/>.
59177
59178     Each version of the License is given a distinguishing version
59179     number.  If the Document specifies that a particular numbered
59180     version of this License "or any later version" applies to it, you
59181     have the option of following the terms and conditions either of
59182     that specified version or of any later version that has been
59183     published (not as a draft) by the Free Software Foundation.  If the
59184     Document does not specify a version number of this License, you may
59185     choose any version ever published (not as a draft) by the Free
59186     Software Foundation.  If the Document specifies that a proxy can
59187     decide which future versions of this License can be used, that
59188     proxy's public statement of acceptance of a version permanently
59189     authorizes you to choose that version for the Document.
59190
59191  11. RELICENSING
59192
59193     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
59194     World Wide Web server that publishes copyrightable works and also
59195     provides prominent facilities for anybody to edit those works.  A
59196     public wiki that anybody can edit is an example of such a server.
59197     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
59198     site means any set of copyrightable works thus published on the MMC
59199     site.
59200
59201     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
59202     license published by Creative Commons Corporation, a not-for-profit
59203     corporation with a principal place of business in San Francisco,
59204     California, as well as future copyleft versions of that license
59205     published by that same organization.
59206
59207     "Incorporate" means to publish or republish a Document, in whole or
59208     in part, as part of another Document.
59209
59210     An MMC is "eligible for relicensing" if it is licensed under this
59211     License, and if all works that were first published under this
59212     License somewhere other than this MMC, and subsequently
59213     incorporated in whole or in part into the MMC, (1) had no cover
59214     texts or invariant sections, and (2) were thus incorporated prior
59215     to November 1, 2008.
59216
59217     The operator of an MMC Site may republish an MMC contained in the
59218     site under CC-BY-SA on the same site at any time before August 1,
59219     2009, provided the MMC is eligible for relicensing.
59220
59221ADDENDUM: How to use this License for your documents
59222====================================================
59223
59224To use this License in a document you have written, include a copy of
59225the License in the document and put the following copyright and license
59226notices just after the title page:
59227
59228       Copyright (C)  YEAR  YOUR NAME.
59229       Permission is granted to copy, distribute and/or modify this document
59230       under the terms of the GNU Free Documentation License, Version 1.3
59231       or any later version published by the Free Software Foundation;
59232       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
59233       Texts.  A copy of the license is included in the section entitled ``GNU
59234       Free Documentation License''.
59235
59236 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
59237replace the "with...Texts."  line with this:
59238
59239         with the Invariant Sections being LIST THEIR TITLES, with
59240         the Front-Cover Texts being LIST, and with the Back-Cover Texts
59241         being LIST.
59242
59243 If you have Invariant Sections without Cover Texts, or some other
59244combination of the three, merge those two alternatives to suit the
59245situation.
59246
59247 If your document contains nontrivial examples of program code, we
59248recommend releasing these examples in parallel under your choice of free
59249software license, such as the GNU General Public License, to permit
59250their use in free software.
59251
59252
59253File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
59254
59255Contributors to GCC
59256*******************
59257
59258The GCC project would like to thank its many contributors.  Without them
59259the project would not have been nearly as successful as it has been.
59260Any omissions in this list are accidental.  Feel free to contact
59261<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
59262some of your contributions are not listed.  Please keep this list in
59263alphabetical order.
59264
59265   * Analog Devices helped implement the support for complex data types
59266     and iterators.
59267
59268   * John David Anglin for threading-related fixes and improvements to
59269     libstdc++-v3, and the HP-UX port.
59270
59271   * James van Artsdalen wrote the code that makes efficient use of the
59272     Intel 80387 register stack.
59273
59274   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
59275     Series port.
59276
59277   * Alasdair Baird for various bug fixes.
59278
59279   * Giovanni Bajo for analyzing lots of complicated C++ problem
59280     reports.
59281
59282   * Peter Barada for his work to improve code generation for new
59283     ColdFire cores.
59284
59285   * Gerald Baumgartner added the signature extension to the C++ front
59286     end.
59287
59288   * Godmar Back for his Java improvements and encouragement.
59289
59290   * Scott Bambrough for help porting the Java compiler.
59291
59292   * Wolfgang Bangerth for processing tons of bug reports.
59293
59294   * Jon Beniston for his Microsoft Windows port of Java and port to
59295     Lattice Mico32.
59296
59297   * Daniel Berlin for better DWARF 2 support, faster/better
59298     optimizations, improved alias analysis, plus migrating GCC to
59299     Bugzilla.
59300
59301   * Geoff Berry for his Java object serialization work and various
59302     patches.
59303
59304   * David Binderman tests weekly snapshots of GCC trunk against Fedora
59305     Rawhide for several architectures.
59306
59307   * Laurynas Biveinis for memory management work and DJGPP port fixes.
59308
59309   * Uros Bizjak for the implementation of x87 math built-in functions
59310     and for various middle end and i386 back end improvements and bug
59311     fixes.
59312
59313   * Eric Blake for helping to make GCJ and libgcj conform to the
59314     specifications.
59315
59316   * Janne Blomqvist for contributions to GNU Fortran.
59317
59318   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
59319     other Java work.
59320
59321   * Segher Boessenkool for helping maintain the PowerPC port and the
59322     instruction combiner plus various contributions to the middle end.
59323
59324   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
59325     miscellaneous clean-ups.
59326
59327   * Steven Bosscher for integrating the GNU Fortran front end into GCC
59328     and for contributing to the tree-ssa branch.
59329
59330   * Eric Botcazou for fixing middle- and backend bugs left and right.
59331
59332   * Per Bothner for his direction via the steering committee and
59333     various improvements to the infrastructure for supporting new
59334     languages.  Chill front end implementation.  Initial
59335     implementations of cpplib, fix-header, config.guess, libio, and
59336     past C++ library (libg++) maintainer.  Dreaming up, designing and
59337     implementing much of GCJ.
59338
59339   * Devon Bowen helped port GCC to the Tahoe.
59340
59341   * Don Bowman for mips-vxworks contributions.
59342
59343   * James Bowman for the FT32 port.
59344
59345   * Dave Brolley for work on cpplib and Chill.
59346
59347   * Paul Brook for work on the ARM architecture and maintaining GNU
59348     Fortran.
59349
59350   * Robert Brown implemented the support for Encore 32000 systems.
59351
59352   * Christian Bruel for improvements to local store elimination.
59353
59354   * Herman A.J. ten Brugge for various fixes.
59355
59356   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
59357     FAQ.
59358
59359   * Joe Buck for his direction via the steering committee from its
59360     creation to 2013.
59361
59362   * Iain Buclaw for the D frontend.
59363
59364   * Craig Burley for leadership of the G77 Fortran effort.
59365
59366   * Tobias Burnus for contributions to GNU Fortran.
59367
59368   * Stephan Buys for contributing Doxygen notes for libstdc++.
59369
59370   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
59371     to the C++ strings, streambufs and formatted I/O, hard detective
59372     work on the frustrating localization issues, and keeping up with
59373     the problem reports.
59374
59375   * John Carr for his alias work, SPARC hacking, infrastructure
59376     improvements, previous contributions to the steering committee,
59377     loop optimizations, etc.
59378
59379   * Stephane Carrez for 68HC11 and 68HC12 ports.
59380
59381   * Steve Chamberlain for support for the Renesas SH and H8 processors
59382     and the PicoJava processor, and for GCJ config fixes.
59383
59384   * Glenn Chambers for help with the GCJ FAQ.
59385
59386   * John-Marc Chandonia for various libgcj patches.
59387
59388   * Denis Chertykov for contributing and maintaining the AVR port, the
59389     first GCC port for an 8-bit architecture.
59390
59391   * Kito Cheng for his work on the RISC-V port, including bringing up
59392     the test suite and maintenance.
59393
59394   * Scott Christley for his Objective-C contributions.
59395
59396   * Eric Christopher for his Java porting help and clean-ups.
59397
59398   * Branko Cibej for more warning contributions.
59399
59400   * The GNU Classpath project for all of their merged runtime code.
59401
59402   * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
59403     '--help', and other random hacking.
59404
59405   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
59406
59407   * R. Kelley Cook for making GCC buildable from a read-only directory
59408     as well as other miscellaneous build process and documentation
59409     clean-ups.
59410
59411   * Ralf Corsepius for SH testing and minor bug fixing.
59412
59413   * Franc,ois-Xavier Coudert for contributions to GNU Fortran.
59414
59415   * Stan Cox for care and feeding of the x86 port and lots of behind
59416     the scenes hacking.
59417
59418   * Alex Crain provided changes for the 3b1.
59419
59420   * Ian Dall for major improvements to the NS32k port.
59421
59422   * Paul Dale for his work to add uClinux platform support to the m68k
59423     backend.
59424
59425   * Palmer Dabbelt for his work maintaining the RISC-V port.
59426
59427   * Dario Dariol contributed the four varieties of sample programs that
59428     print a copy of their source.
59429
59430   * Russell Davidson for fstream and stringstream fixes in libstdc++.
59431
59432   * Bud Davis for work on the G77 and GNU Fortran compilers.
59433
59434   * Mo DeJong for GCJ and libgcj bug fixes.
59435
59436   * Jerry DeLisle for contributions to GNU Fortran.
59437
59438   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
59439     various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.
59440
59441   * Arnaud Desitter for helping to debug GNU Fortran.
59442
59443   * Gabriel Dos Reis for contributions to G++, contributions and
59444     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
59445     including 'valarray<>', 'complex<>', maintaining the numerics
59446     library (including that pesky '<limits>' :-) and keeping up-to-date
59447     anything to do with numbers.
59448
59449   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
59450     ISO C99 support, CFG dumping support, etc., plus support of the C++
59451     runtime libraries including for all kinds of C interface issues,
59452     contributing and maintaining 'complex<>', sanity checking and
59453     disbursement, configuration architecture, libio maintenance, and
59454     early math work.
59455
59456   * Franc,ois Dumont for his work on libstdc++-v3, especially
59457     maintaining and improving 'debug-mode' and associative and
59458     unordered containers.
59459
59460   * Zdenek Dvorak for a new loop unroller and various fixes.
59461
59462   * Michael Eager for his work on the Xilinx MicroBlaze port.
59463
59464   * Richard Earnshaw for his ongoing work with the ARM.
59465
59466   * David Edelsohn for his direction via the steering committee,
59467     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
59468     loop changes, doing the entire AIX port of libstdc++ with his bare
59469     hands, and for ensuring GCC properly keeps working on AIX.
59470
59471   * Kevin Ediger for the floating point formatting of num_put::do_put
59472     in libstdc++.
59473
59474   * Phil Edwards for libstdc++ work including configuration hackery,
59475     documentation maintainer, chief breaker of the web pages, the
59476     occasional iostream bug fix, and work on shared library symbol
59477     versioning.
59478
59479   * Paul Eggert for random hacking all over GCC.
59480
59481   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
59482     configuration support for locales and fstream-related fixes.
59483
59484   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
59485     iostreams.
59486
59487   * Christian Ehrhardt for dealing with bug reports.
59488
59489   * Ben Elliston for his work to move the Objective-C runtime into its
59490     own subdirectory and for his work on autoconf.
59491
59492   * Revital Eres for work on the PowerPC 750CL port.
59493
59494   * Marc Espie for OpenBSD support.
59495
59496   * Doug Evans for much of the global optimization framework, arc,
59497     m32r, and SPARC work.
59498
59499   * Christopher Faylor for his work on the Cygwin port and for caring
59500     and feeding the gcc.gnu.org box and saving its users tons of spam.
59501
59502   * Fred Fish for BeOS support and Ada fixes.
59503
59504   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
59505
59506   * Peter Gerwinski for various bug fixes and the Pascal front end.
59507
59508   * Kaveh R. Ghazi for his direction via the steering committee,
59509     amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC
59510     on a plethora of platforms.  Kaveh extends his gratitude to the
59511     CAIP Center at Rutgers University for providing him with computing
59512     resources to work on Free Software from the late 1980s to 2010.
59513
59514   * John Gilmore for a donation to the FSF earmarked improving GNU
59515     Java.
59516
59517   * Judy Goldberg for c++ contributions.
59518
59519   * Torbjorn Granlund for various fixes and the c-torture testsuite,
59520     multiply- and divide-by-constant optimization, improved long long
59521     support, improved leaf function register allocation, and his
59522     direction via the steering committee.
59523
59524   * Jonny Grant for improvements to 'collect2's' '--help'
59525     documentation.
59526
59527   * Anthony Green for his '-Os' contributions, the moxie port, and Java
59528     front end work.
59529
59530   * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
59531     code.
59532
59533   * Michael K. Gschwind contributed the port to the PDP-11.
59534
59535   * Richard Biener for his ongoing middle-end contributions and bug
59536     fixes and for release management.
59537
59538   * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools,
59539     the support for DWARF 1 symbolic debugging information, and much of
59540     the support for System V Release 4.  He has also worked heavily on
59541     the Intel 386 and 860 support.
59542
59543   * Sumanth Gundapaneni for contributing the CR16 port.
59544
59545   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
59546     GCSE.
59547
59548   * Bruno Haible for improvements in the runtime overhead for EH, new
59549     warnings and assorted bug fixes.
59550
59551   * Andrew Haley for his amazing Java compiler and library efforts.
59552
59553   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
59554     series 300.
59555
59556   * Michael Hayes for various thankless work he's done trying to get
59557     the c30/c40 ports functional.  Lots of loop and unroll improvements
59558     and fixes.
59559
59560   * Dara Hazeghi for wading through myriads of target-specific bug
59561     reports.
59562
59563   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
59564
59565   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
59566     work, loop opts, and generally fixing lots of old problems we've
59567     ignored for years, flow rewrite and lots of further stuff,
59568     including reviewing tons of patches.
59569
59570   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
59571     various fixes.
59572
59573   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
59574     contributed the support for the Sony NEWS machine.
59575
59576   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
59577     various fixes.
59578
59579   * Katherine Holcomb for work on GNU Fortran.
59580
59581   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
59582     of testing and bug fixing, particularly of GCC configury code.
59583
59584   * Steve Holmgren for MachTen patches.
59585
59586   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
59587
59588   * Jan Hubicka for his x86 port improvements.
59589
59590   * Falk Hueffner for working on C and optimization bug reports.
59591
59592   * Bernardo Innocenti for his m68k work, including merging of ColdFire
59593     improvements and uClinux support.
59594
59595   * Christian Iseli for various bug fixes.
59596
59597   * Kamil Iskra for general m68k hacking.
59598
59599   * Lee Iverson for random fixes and MIPS testing.
59600
59601   * Balaji V. Iyer for Cilk+ development and merging.
59602
59603   * Andreas Jaeger for testing and benchmarking of GCC and various bug
59604     fixes.
59605
59606   * Martin Jambor for his work on inter-procedural optimizations, the
59607     switch conversion pass, and scalar replacement of aggregates.
59608
59609   * Jakub Jelinek for his SPARC work and sibling call optimizations as
59610     well as lots of bug fixes and test cases, and for improving the
59611     Java build system.
59612
59613   * Janis Johnson for ia64 testing and fixes, her quality improvement
59614     sidetracks, and web page maintenance.
59615
59616   * Kean Johnston for SCO OpenServer support and various fixes.
59617
59618   * Tim Josling for the sample language treelang based originally on
59619     Richard Kenner's "toy" language.
59620
59621   * Nicolai Josuttis for additional libstdc++ documentation.
59622
59623   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
59624     target.
59625
59626   * Steven G. Kargl for work on GNU Fortran.
59627
59628   * David Kashtan of SRI adapted GCC to VMS.
59629
59630   * Ryszard Kabatek for many, many libstdc++ bug fixes and
59631     optimizations of strings, especially member functions, and for
59632     auto_ptr fixes.
59633
59634   * Geoffrey Keating for his ongoing work to make the PPC work for
59635     GNU/Linux and his automatic regression tester.
59636
59637   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
59638     work in just about every part of libstdc++.
59639
59640   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
59641     MIL-STD-1750A.
59642
59643   * Richard Kenner of the New York University Ultracomputer Research
59644     Laboratory wrote the machine descriptions for the AMD 29000, the
59645     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
59646     support for instruction attributes.  He also made changes to better
59647     support RISC processors including changes to common subexpression
59648     elimination, strength reduction, function calling sequence
59649     handling, and condition code support, in addition to generalizing
59650     the code for frame pointer elimination and delay slot scheduling.
59651     Richard Kenner was also the head maintainer of GCC for several
59652     years.
59653
59654   * Mumit Khan for various contributions to the Cygwin and Mingw32
59655     ports and maintaining binary releases for Microsoft Windows hosts,
59656     and for massive libstdc++ porting work to Cygwin/Mingw32.
59657
59658   * Robin Kirkham for cpu32 support.
59659
59660   * Mark Klein for PA improvements.
59661
59662   * Thomas Koenig for various bug fixes.
59663
59664   * Bruce Korb for the new and improved fixincludes code.
59665
59666   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
59667     effort.
59668
59669   * Maxim Kuvyrkov for contributions to the instruction scheduler, the
59670     Android and m68k/Coldfire ports, and optimizations.
59671
59672   * Charles LaBrec contributed the support for the Integrated Solutions
59673     68020 system.
59674
59675   * Asher Langton and Mike Kumbera for contributing Cray pointer
59676     support to GNU Fortran, and for other GNU Fortran improvements.
59677
59678   * Jeff Law for his direction via the steering committee, coordinating
59679     the entire egcs project and GCC 2.95, rolling out snapshots and
59680     releases, handling merges from GCC2, reviewing tons of patches that
59681     might have fallen through the cracks else, and random but extensive
59682     hacking.
59683
59684   * Walter Lee for work on the TILE-Gx and TILEPro ports.
59685
59686   * Marc Lehmann for his direction via the steering committee and
59687     helping with analysis and improvements of x86 performance.
59688
59689   * Victor Leikehman for work on GNU Fortran.
59690
59691   * Ted Lemon wrote parts of the RTL reader and printer.
59692
59693   * Kriang Lerdsuwanakij for C++ improvements including template as
59694     template parameter support, and many C++ fixes.
59695
59696   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
59697     and random work on the Java front end.
59698
59699   * Alain Lichnewsky ported GCC to the MIPS CPU.
59700
59701   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
59702     and patches.
59703
59704   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
59705
59706   * Chen Liqin for various S+core related fixes/improvement, and for
59707     maintaining the S+core port.
59708
59709   * Martin Liska for his work on identical code folding, the
59710     sanitizers, HSA, general bug fixing and for running automated
59711     regression testing of GCC and reporting numerous bugs.
59712
59713   * Weiwen Liu for testing and various bug fixes.
59714
59715   * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other
59716     diagnostics fixes and improvements.
59717
59718   * Dave Love for his ongoing work with the Fortran front end and
59719     runtime libraries.
59720
59721   * Martin von Lo"wis for internal consistency checking infrastructure,
59722     various C++ improvements including namespace support, and tons of
59723     assistance with libstdc++/compiler merges.
59724
59725   * H.J. Lu for his previous contributions to the steering committee,
59726     many x86 bug reports, prototype patches, and keeping the GNU/Linux
59727     ports working.
59728
59729   * Greg McGary for random fixes and (someday) bounded pointers.
59730
59731   * Andrew MacLeod for his ongoing work in building a real EH system,
59732     various code generation improvements, work on the global optimizer,
59733     etc.
59734
59735   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
59736     hacking improvements to compile-time performance, overall knowledge
59737     and direction in the area of instruction scheduling, design and
59738     implementation of the automaton based instruction scheduler and
59739     design and implementation of the integrated and local register
59740     allocators.
59741
59742   * David Malcolm for his work on improving GCC diagnostics, JIT,
59743     self-tests and unit testing.
59744
59745   * Bob Manson for his behind the scenes work on dejagnu.
59746
59747   * John Marino for contributing the DragonFly BSD port.
59748
59749   * Philip Martin for lots of libstdc++ string and vector iterator
59750     fixes and improvements, and string clean up and testsuites.
59751
59752   * Michael Matz for his work on dominance tree discovery, the x86-64
59753     port, link-time optimization framework and general optimization
59754     improvements.
59755
59756   * All of the Mauve project contributors for Java test code.
59757
59758   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
59759
59760   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
59761
59762   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
59763     powerpc, haifa, ECOFF debug support, and other assorted hacking.
59764
59765   * Jason Merrill for his direction via the steering committee and
59766     leading the G++ effort.
59767
59768   * Martin Michlmayr for testing GCC on several architectures using the
59769     entire Debian archive.
59770
59771   * David Miller for his direction via the steering committee, lots of
59772     SPARC work, improvements in jump.c and interfacing with the Linux
59773     kernel developers.
59774
59775   * Gary Miller ported GCC to Charles River Data Systems machines.
59776
59777   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
59778     the entire libstdc++ testsuite namespace-compatible.
59779
59780   * Mark Mitchell for his direction via the steering committee,
59781     mountains of C++ work, load/store hoisting out of loops, alias
59782     analysis improvements, ISO C 'restrict' support, and serving as
59783     release manager from 2000 to 2011.
59784
59785   * Alan Modra for various GNU/Linux bits and testing.
59786
59787   * Toon Moene for his direction via the steering committee, Fortran
59788     maintenance, and his ongoing work to make us make Fortran run fast.
59789
59790   * Jason Molenda for major help in the care and feeding of all the
59791     services on the gcc.gnu.org (formerly egcs.cygnus.com)
59792     machine--mail, web services, ftp services, etc etc.  Doing all this
59793     work on scrap paper and the backs of envelopes would have been...
59794     difficult.
59795
59796   * Catherine Moore for fixing various ugly problems we have sent her
59797     way, including the haifa bug which was killing the Alpha & PowerPC
59798     Linux kernels.
59799
59800   * Mike Moreton for his various Java patches.
59801
59802   * David Mosberger-Tang for various Alpha improvements, and for the
59803     initial IA-64 port.
59804
59805   * Stephen Moshier contributed the floating point emulator that
59806     assists in cross-compilation and permits support for floating point
59807     numbers wider than 64 bits and for ISO C99 support.
59808
59809   * Bill Moyer for his behind the scenes work on various issues.
59810
59811   * Philippe De Muyter for his work on the m68k port.
59812
59813   * Joseph S. Myers for his work on the PDP-11 port, format checking
59814     and ISO C99 support, and continuous emphasis on (and contributions
59815     to) documentation.
59816
59817   * Nathan Myers for his work on libstdc++-v3: architecture and
59818     authorship through the first three snapshots, including
59819     implementation of locale infrastructure, string, shadow C headers,
59820     and the initial project documentation (DESIGN, CHECKLIST, and so
59821     forth).  Later, more work on MT-safe string and shadow headers.
59822
59823   * Felix Natter for documentation on porting libstdc++.
59824
59825   * Nathanael Nerode for cleaning up the configuration/build process.
59826
59827   * NeXT, Inc. donated the front end that supports the Objective-C
59828     language.
59829
59830   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
59831     search engine setup, various documentation fixes and other small
59832     fixes.
59833
59834   * Geoff Noer for his work on getting cygwin native builds working.
59835
59836   * Vegard Nossum for running automated regression testing of GCC and
59837     reporting numerous bugs.
59838
59839   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
59840     tracking web pages, GIMPLE tuples, and assorted fixes.
59841
59842   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
59843     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
59844     infrastructure improvements.
59845
59846   * Alexandre Oliva for various build infrastructure improvements,
59847     scripts and amazing testing work, including keeping libtool issues
59848     sane and happy.
59849
59850   * Stefan Olsson for work on mt_alloc.
59851
59852   * Melissa O'Neill for various NeXT fixes.
59853
59854   * Rainer Orth for random MIPS work, including improvements to GCC's
59855     o32 ABI support, improvements to dejagnu's MIPS support, Java
59856     configuration clean-ups and porting work, and maintaining the IRIX,
59857     Solaris 2, and Tru64 UNIX ports.
59858
59859   * Steven Pemberton for his contribution of 'enquire' which allowed
59860     GCC to determine various properties of the floating point unit and
59861     generate 'float.h' in older versions of GCC.
59862
59863   * Hartmut Penner for work on the s390 port.
59864
59865   * Paul Petersen wrote the machine description for the Alliant FX/8.
59866
59867   * Alexandre Petit-Bianco for implementing much of the Java compiler
59868     and continued Java maintainership.
59869
59870   * Matthias Pfaller for major improvements to the NS32k port.
59871
59872   * Gerald Pfeifer for his direction via the steering committee,
59873     pointing out lots of problems we need to solve, maintenance of the
59874     web pages, and taking care of documentation maintenance in general.
59875
59876   * Marek Polacek for his work on the C front end, the sanitizers and
59877     general bug fixing.
59878
59879   * Andrew Pinski for processing bug reports by the dozen.
59880
59881   * Ovidiu Predescu for his work on the Objective-C front end and
59882     runtime libraries.
59883
59884   * Jerry Quinn for major performance improvements in C++ formatted
59885     I/O.
59886
59887   * Ken Raeburn for various improvements to checker, MIPS ports and
59888     various cleanups in the compiler.
59889
59890   * Rolf W. Rasmussen for hacking on AWT.
59891
59892   * David Reese of Sun Microsystems contributed to the Solaris on
59893     PowerPC port.
59894
59895   * John Regehr for running automated regression testing of GCC and
59896     reporting numerous bugs.
59897
59898   * Volker Reichelt for running automated regression testing of GCC and
59899     reporting numerous bugs and for keeping up with the problem
59900     reports.
59901
59902   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
59903     hacking and developing and maintaining the Epiphany port.
59904
59905   * Loren J. Rittle for improvements to libstdc++-v3 including the
59906     FreeBSD port, threading fixes, thread-related configury changes,
59907     critical threading documentation, and solutions to really tricky
59908     I/O problems, as well as keeping GCC properly working on FreeBSD
59909     and continuous testing.
59910
59911   * Craig Rodrigues for processing tons of bug reports.
59912
59913   * Ola Ro"nnerup for work on mt_alloc.
59914
59915   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
59916
59917   * David Ronis inspired and encouraged Craig to rewrite the G77
59918     documentation in texinfo format by contributing a first pass at a
59919     translation of the old 'g77-0.5.16/f/DOC' file.
59920
59921   * Ken Rose for fixes to GCC's delay slot filling code.
59922
59923   * Ira Rosen for her contributions to the auto-vectorizer.
59924
59925   * Paul Rubin wrote most of the preprocessor.
59926
59927   * Pe'tur Runo'lfsson for major performance improvements in C++
59928     formatted I/O and large file support in C++ filebuf.
59929
59930   * Chip Salzenberg for libstdc++ patches and improvements to locales,
59931     traits, Makefiles, libio, libtool hackery, and "long long" support.
59932
59933   * Juha Sarlin for improvements to the H8 code generator.
59934
59935   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
59936     300.
59937
59938   * Roger Sayle for improvements to constant folding and GCC's RTL
59939     optimizers as well as for fixing numerous bugs.
59940
59941   * Bradley Schatz for his work on the GCJ FAQ.
59942
59943   * Peter Schauer wrote the code to allow debugging to work on the
59944     Alpha.
59945
59946   * William Schelter did most of the work on the Intel 80386 support.
59947
59948   * Tobias Schlu"ter for work on GNU Fortran.
59949
59950   * Bernd Schmidt for various code generation improvements and major
59951     work in the reload pass, serving as release manager for GCC 2.95.3,
59952     and work on the Blackfin and C6X ports.
59953
59954   * Peter Schmid for constant testing of libstdc++--especially
59955     application testing, going above and beyond what was requested for
59956     the release criteria--and libstdc++ header file tweaks.
59957
59958   * Jason Schroeder for jcf-dump patches.
59959
59960   * Andreas Schwab for his work on the m68k port.
59961
59962   * Lars Segerlund for work on GNU Fortran.
59963
59964   * Dodji Seketeli for numerous C++ bug fixes and debug info
59965     improvements.
59966
59967   * Tim Shen for major work on '<regex>'.
59968
59969   * Joel Sherrill for his direction via the steering committee, RTEMS
59970     contributions and RTEMS testing.
59971
59972   * Nathan Sidwell for many C++ fixes/improvements.
59973
59974   * Jeffrey Siegal for helping RMS with the original design of GCC,
59975     some code which handles the parse tree and RTL data structures,
59976     constant folding and help with the original VAX & m68k ports.
59977
59978   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
59979     from the LWG (thereby keeping GCC in line with updates from the
59980     ISO).
59981
59982   * Franz Sirl for his ongoing work with making the PPC port stable for
59983     GNU/Linux.
59984
59985   * Andrey Slepuhin for assorted AIX hacking.
59986
59987   * Trevor Smigiel for contributing the SPU port.
59988
59989   * Christopher Smith did the port for Convex machines.
59990
59991   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
59992     Retired from GCC maintainership August 2010, having mentored two
59993     new maintainers into the role.
59994
59995   * Randy Smith finished the Sun FPA support.
59996
59997   * Ed Smith-Rowland for his continuous work on libstdc++-v3, special
59998     functions, '<random>', and various improvements to C++11 features.
59999
60000   * Scott Snyder for queue, iterator, istream, and string fixes and
60001     libstdc++ testsuite entries.  Also for providing the patch to G77
60002     to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and
60003     'LOGICAL*1'.
60004
60005   * Zdenek Sojka for running automated regression testing of GCC and
60006     reporting numerous bugs.
60007
60008   * Arseny Solokha for running automated regression testing of GCC and
60009     reporting numerous bugs.
60010
60011   * Jayant Sonar for contributing the CR16 port.
60012
60013   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
60014
60015   * Richard Stallman, for writing the original GCC and launching the
60016     GNU project.
60017
60018   * Jan Stein of the Chalmers Computer Society provided support for
60019     Genix, as well as part of the 32000 machine description.
60020
60021   * Gerhard Steinmetz for running automated regression testing of GCC
60022     and reporting numerous bugs.
60023
60024   * Nigel Stephens for various mips16 related fixes/improvements.
60025
60026   * Jonathan Stone wrote the machine description for the Pyramid
60027     computer.
60028
60029   * Graham Stott for various infrastructure improvements.
60030
60031   * John Stracke for his Java HTTP protocol fixes.
60032
60033   * Mike Stump for his Elxsi port, G++ contributions over the years and
60034     more recently his vxworks contributions
60035
60036   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
60037
60038   * Zhendong Su for running automated regression testing of GCC and
60039     reporting numerous bugs.
60040
60041   * Chengnian Sun for running automated regression testing of GCC and
60042     reporting numerous bugs.
60043
60044   * Shigeya Suzuki for this fixes for the bsdi platforms.
60045
60046   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
60047     support, general configury hacking, fixincludes, etc.
60048
60049   * Holger Teutsch provided the support for the Clipper CPU.
60050
60051   * Gary Thomas for his ongoing work to make the PPC work for
60052     GNU/Linux.
60053
60054   * Paul Thomas for contributions to GNU Fortran.
60055
60056   * Philipp Thomas for random bug fixes throughout the compiler
60057
60058   * Jason Thorpe for thread support in libstdc++ on NetBSD.
60059
60060   * Kresten Krab Thorup wrote the run time support for the Objective-C
60061     language and the fantastic Java bytecode interpreter.
60062
60063   * Michael Tiemann for random bug fixes, the first instruction
60064     scheduler, initial C++ support, function integration, NS32k, SPARC
60065     and M88k machine description work, delay slot scheduling.
60066
60067   * Andreas Tobler for his work porting libgcj to Darwin.
60068
60069   * Teemu Torma for thread safe exception handling support.
60070
60071   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
60072     definitions, and of the VAX machine description.
60073
60074   * Daniel Towner and Hariharan Sandanagobalane contributed and
60075     maintain the picoChip port.
60076
60077   * Tom Tromey for internationalization support and for his many Java
60078     contributions and libgcj maintainership.
60079
60080   * Lassi Tuura for improvements to config.guess to determine HP
60081     processor types.
60082
60083   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
60084
60085   * Andy Vaught for the design and initial implementation of the GNU
60086     Fortran front end.
60087
60088   * Brent Verner for work with the libstdc++ cshadow files and their
60089     associated configure steps.
60090
60091   * Todd Vierling for contributions for NetBSD ports.
60092
60093   * Andrew Waterman for contributing the RISC-V port, as well as
60094     maintaining it.
60095
60096   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
60097     guidance and maintaining libstdc++.
60098
60099   * Dean Wakerley for converting the install documentation from HTML to
60100     texinfo in time for GCC 3.0.
60101
60102   * Krister Walfridsson for random bug fixes.
60103
60104   * Feng Wang for contributions to GNU Fortran.
60105
60106   * Stephen M. Webb for time and effort on making libstdc++ shadow
60107     files work with the tricky Solaris 8+ headers, and for pushing the
60108     build-time header tree.  Also, for starting and driving the
60109     '<regex>' effort.
60110
60111   * John Wehle for various improvements for the x86 code generator,
60112     related infrastructure improvements to help x86 code generation,
60113     value range propagation and other work, WE32k port.
60114
60115   * Ulrich Weigand for work on the s390 port.
60116
60117   * Janus Weil for contributions to GNU Fortran.
60118
60119   * Zack Weinberg for major work on cpplib and various other bug fixes.
60120
60121   * Matt Welsh for help with Linux Threads support in GCJ.
60122
60123   * Urban Widmark for help fixing java.io.
60124
60125   * Mark Wielaard for new Java library code and his work integrating
60126     with Classpath.
60127
60128   * Dale Wiles helped port GCC to the Tahoe.
60129
60130   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
60131
60132   * Jim Wilson for his direction via the steering committee, tackling
60133     hard problems in various places that nobody else wanted to work on,
60134     strength reduction and other loop optimizations.
60135
60136   * Paul Woegerer and Tal Agmon for the CRX port.
60137
60138   * Carlo Wood for various fixes.
60139
60140   * Tom Wood for work on the m88k port.
60141
60142   * Chung-Ju Wu for his work on the Andes NDS32 port.
60143
60144   * Canqun Yang for work on GNU Fortran.
60145
60146   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
60147     description for the Tron architecture (specifically, the Gmicro).
60148
60149   * Kevin Zachmann helped port GCC to the Tahoe.
60150
60151   * Ayal Zaks for Swing Modulo Scheduling (SMS).
60152
60153   * Qirun Zhang for running automated regression testing of GCC and
60154     reporting numerous bugs.
60155
60156   * Xiaoqiang Zhang for work on GNU Fortran.
60157
60158   * Gilles Zunino for help porting Java to Irix.
60159
60160 The following people are recognized for their contributions to GNAT,
60161the Ada front end of GCC:
60162   * Bernard Banner
60163
60164   * Romain Berrendonner
60165
60166   * Geert Bosch
60167
60168   * Emmanuel Briot
60169
60170   * Joel Brobecker
60171
60172   * Ben Brosgol
60173
60174   * Vincent Celier
60175
60176   * Arnaud Charlet
60177
60178   * Chien Chieng
60179
60180   * Cyrille Comar
60181
60182   * Cyrille Crozes
60183
60184   * Robert Dewar
60185
60186   * Gary Dismukes
60187
60188   * Robert Duff
60189
60190   * Ed Falis
60191
60192   * Ramon Fernandez
60193
60194   * Sam Figueroa
60195
60196   * Vasiliy Fofanov
60197
60198   * Michael Friess
60199
60200   * Franco Gasperoni
60201
60202   * Ted Giering
60203
60204   * Matthew Gingell
60205
60206   * Laurent Guerby
60207
60208   * Jerome Guitton
60209
60210   * Olivier Hainque
60211
60212   * Jerome Hugues
60213
60214   * Hristian Kirtchev
60215
60216   * Jerome Lambourg
60217
60218   * Bruno Leclerc
60219
60220   * Albert Lee
60221
60222   * Sean McNeil
60223
60224   * Javier Miranda
60225
60226   * Laurent Nana
60227
60228   * Pascal Obry
60229
60230   * Dong-Ik Oh
60231
60232   * Laurent Pautet
60233
60234   * Brett Porter
60235
60236   * Thomas Quinot
60237
60238   * Nicolas Roche
60239
60240   * Pat Rogers
60241
60242   * Jose Ruiz
60243
60244   * Douglas Rupp
60245
60246   * Sergey Rybin
60247
60248   * Gail Schenker
60249
60250   * Ed Schonberg
60251
60252   * Nicolas Setton
60253
60254   * Samuel Tardieu
60255
60256 The following people are recognized for their contributions of new
60257features, bug reports, testing and integration of classpath/libgcj for
60258GCC version 4.1:
60259   * Lillian Angel for 'JTree' implementation and lots Free Swing
60260     additions and bug fixes.
60261
60262   * Wolfgang Baer for 'GapContent' bug fixes.
60263
60264   * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse
60265     event fixes, lots of Free Swing work including 'JTable' editing.
60266
60267   * Stuart Ballard for RMI constant fixes.
60268
60269   * Goffredo Baroncelli for 'HTTPURLConnection' fixes.
60270
60271   * Gary Benson for 'MessageFormat' fixes.
60272
60273   * Daniel Bonniot for 'Serialization' fixes.
60274
60275   * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX'
60276     and 'DOM xml:id' support.
60277
60278   * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes.
60279
60280   * Archie Cobbs for build fixes, VM interface updates,
60281     'URLClassLoader' updates.
60282
60283   * Kelley Cook for build fixes.
60284
60285   * Martin Cordova for Suggestions for better 'SocketTimeoutException'.
60286
60287   * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and
60288     improvements.
60289
60290   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
60291     2D support.  Lots of imageio framework additions, lots of AWT and
60292     Free Swing bug fixes.
60293
60294   * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization
60295     fixes, better 'Proxy' support, bug fixes and IKVM integration.
60296
60297   * Santiago Gala for 'AccessControlContext' fixes.
60298
60299   * Nicolas Geoffray for 'VMClassLoader' and 'AccessController'
60300     improvements.
60301
60302   * David Gilbert for 'basic' and 'metal' icon and plaf support and
60303     lots of documenting, Lots of Free Swing and metal theme additions.
60304     'MetalIconFactory' implementation.
60305
60306   * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers.
60307
60308   * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj
60309     build speedups.
60310
60311   * Kim Ho for 'JFileChooser' implementation.
60312
60313   * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates,
60314     'Serialization' fixes, 'Properties' XML support and generic branch
60315     work, VMIntegration guide update.
60316
60317   * Bastiaan Huisman for 'TimeZone' bug fixing.
60318
60319   * Andreas Jaeger for mprec updates.
60320
60321   * Paul Jenner for better '-Werror' support.
60322
60323   * Ito Kazumitsu for 'NetworkInterface' implementation and updates.
60324
60325   * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus
60326     bug fixes all over.  Lots of Free Swing work including styled text.
60327
60328   * Simon Kitching for 'String' cleanups and optimization suggestions.
60329
60330   * Michael Koch for configuration fixes, 'Locale' updates, bug and
60331     build fixes.
60332
60333   * Guilhem Lavaux for configuration, thread and channel fixes and
60334     Kaffe integration.  JCL native 'Pointer' updates.  Logger bug
60335     fixes.
60336
60337   * David Lichteblau for JCL support library global/local reference
60338     cleanups.
60339
60340   * Aaron Luchko for JDWP updates and documentation fixes.
60341
60342   * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex
60343     features.
60344
60345   * Sven de Marothy for BMP imageio support, CSS and 'TextLayout'
60346     fixes.  'GtkImage' rewrite, 2D, awt, free swing and date/time fixes
60347     and implementing the Qt4 peers.
60348
60349   * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock,
60350     'SystemLogger' and 'FileHandler' rotate implementations, NIO
60351     'FileChannel.map' support, security and policy updates.
60352
60353   * Bryce McKinlay for RMI work.
60354
60355   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
60356     testing and documenting.
60357
60358   * Kalle Olavi Niemitalo for build fixes.
60359
60360   * Rainer Orth for build fixes.
60361
60362   * Andrew Overholt for 'File' locking fixes.
60363
60364   * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates.
60365
60366   * Olga Rodimina for 'MenuSelectionManager' implementation.
60367
60368   * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes.
60369
60370   * Julian Scheid for documentation updates and gjdoc support.
60371
60372   * Christian Schlichtherle for zip fixes and cleanups.
60373
60374   * Robert Schuster for documentation updates and beans fixes,
60375     'TreeNode' enumerations and 'ActionCommand' and various fixes, XML
60376     and URL, AWT and Free Swing bug fixes.
60377
60378   * Keith Seitz for lots of JDWP work.
60379
60380   * Christian Thalinger for 64-bit cleanups, Configuration and VM
60381     interface fixes and 'CACAO' integration, 'fdlibm' updates.
60382
60383   * Gael Thomas for 'VMClassLoader' boot packages support suggestions.
60384
60385   * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4'
60386     support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates.
60387
60388   * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe
60389     integration.  'Qt4' build infrastructure, 'SHA1PRNG' and
60390     'GdkPixbugDecoder' updates.
60391
60392   * Tom Tromey for Eclipse integration, generics work, lots of bug
60393     fixes and gcj integration including coordinating The Big Merge.
60394
60395   * Mark Wielaard for bug fixes, packaging and release management,
60396     'Clipboard' implementation, system call interrupts and network
60397     timeouts and 'GdkPixpufDecoder' fixes.
60398
60399 In addition to the above, all of which also contributed time and energy
60400in testing GCC, we would like to thank the following for their
60401contributions to testing:
60402
60403   * Michael Abd-El-Malek
60404
60405   * Thomas Arend
60406
60407   * Bonzo Armstrong
60408
60409   * Steven Ashe
60410
60411   * Chris Baldwin
60412
60413   * David Billinghurst
60414
60415   * Jim Blandy
60416
60417   * Stephane Bortzmeyer
60418
60419   * Horst von Brand
60420
60421   * Frank Braun
60422
60423   * Rodney Brown
60424
60425   * Sidney Cadot
60426
60427   * Bradford Castalia
60428
60429   * Robert Clark
60430
60431   * Jonathan Corbet
60432
60433   * Ralph Doncaster
60434
60435   * Richard Emberson
60436
60437   * Levente Farkas
60438
60439   * Graham Fawcett
60440
60441   * Mark Fernyhough
60442
60443   * Robert A. French
60444
60445   * Jo"rgen Freyh
60446
60447   * Mark K. Gardner
60448
60449   * Charles-Antoine Gauthier
60450
60451   * Yung Shing Gene
60452
60453   * David Gilbert
60454
60455   * Simon Gornall
60456
60457   * Fred Gray
60458
60459   * John Griffin
60460
60461   * Patrik Hagglund
60462
60463   * Phil Hargett
60464
60465   * Amancio Hasty
60466
60467   * Takafumi Hayashi
60468
60469   * Bryan W. Headley
60470
60471   * Kevin B. Hendricks
60472
60473   * Joep Jansen
60474
60475   * Christian Joensson
60476
60477   * Michel Kern
60478
60479   * David Kidd
60480
60481   * Tobias Kuipers
60482
60483   * Anand Krishnaswamy
60484
60485   * A. O. V. Le Blanc
60486
60487   * llewelly
60488
60489   * Damon Love
60490
60491   * Brad Lucier
60492
60493   * Matthias Klose
60494
60495   * Martin Knoblauch
60496
60497   * Rick Lutowski
60498
60499   * Jesse Macnish
60500
60501   * Stefan Morrell
60502
60503   * Anon A. Mous
60504
60505   * Matthias Mueller
60506
60507   * Pekka Nikander
60508
60509   * Rick Niles
60510
60511   * Jon Olson
60512
60513   * Magnus Persson
60514
60515   * Chris Pollard
60516
60517   * Richard Polton
60518
60519   * Derk Reefman
60520
60521   * David Rees
60522
60523   * Paul Reilly
60524
60525   * Tom Reilly
60526
60527   * Torsten Rueger
60528
60529   * Danny Sadinoff
60530
60531   * Marc Schifer
60532
60533   * Erik Schnetter
60534
60535   * Wayne K. Schroll
60536
60537   * David Schuler
60538
60539   * Vin Shelton
60540
60541   * Tim Souder
60542
60543   * Adam Sulmicki
60544
60545   * Bill Thorson
60546
60547   * George Talbot
60548
60549   * Pedro A. M. Vazquez
60550
60551   * Gregory Warnes
60552
60553   * Ian Watson
60554
60555   * David E. Young
60556
60557   * And many others
60558
60559 And finally we'd like to thank everyone who uses the compiler, provides
60560feedback and generally reminds us why we're doing this work in the first
60561place.
60562
60563
60564File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
60565
60566Option Index
60567************
60568
60569GCC's command line options are indexed here without any initial '-' or
60570'--'.  Where an option has both positive and negative forms (such as
60571'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
60572indexed under the most appropriate form; it may sometimes be useful to
60573look up both forms.
60574
60575[index]
60576* Menu:
60577
60578* ###:                                   Overall Options.    (line  214)
60579* 80387:                                 x86 Options.        (line  532)
60580* A:                                     Preprocessor Options.
60581                                                             (line  334)
60582* allowable_client:                      Darwin Options.     (line  196)
60583* all_load:                              Darwin Options.     (line  110)
60584* analyzer:                              Static Analyzer Options.
60585                                                             (line    7)
60586* ansi:                                  Standards.          (line   13)
60587* ansi <1>:                              C Dialect Options.  (line   11)
60588* ansi <2>:                              Other Builtins.     (line   31)
60589* ansi <3>:                              Non-bugs.           (line  107)
60590* arch_errors_fatal:                     Darwin Options.     (line  114)
60591* aux-info:                              C Dialect Options.  (line  229)
60592* B:                                     Directory Options.  (line  122)
60593* Bdynamic:                              VxWorks Options.    (line   22)
60594* bind_at_load:                          Darwin Options.     (line  118)
60595* Bstatic:                               VxWorks Options.    (line   22)
60596* bundle:                                Darwin Options.     (line  123)
60597* bundle_loader:                         Darwin Options.     (line  127)
60598* c:                                     Overall Options.    (line  169)
60599* C:                                     Preprocessor Options.
60600                                                             (line  343)
60601* c <1>:                                 Link Options.       (line   20)
60602* CC:                                    Preprocessor Options.
60603                                                             (line  355)
60604* client_name:                           Darwin Options.     (line  196)
60605* compatibility_version:                 Darwin Options.     (line  196)
60606* coverage:                              Instrumentation Options.
60607                                                             (line   50)
60608* current_version:                       Darwin Options.     (line  196)
60609* D:                                     Preprocessor Options.
60610                                                             (line   19)
60611* d:                                     Preprocessor Options.
60612                                                             (line  409)
60613* d <1>:                                 Developer Options.  (line   52)
60614* da:                                    Developer Options.  (line  246)
60615* dA:                                    Developer Options.  (line  249)
60616* dD:                                    Preprocessor Options.
60617                                                             (line  433)
60618* dD <1>:                                Developer Options.  (line  253)
60619* dead_strip:                            Darwin Options.     (line  196)
60620* dependency-file:                       Darwin Options.     (line  196)
60621* dH:                                    Developer Options.  (line  257)
60622* dI:                                    Preprocessor Options.
60623                                                             (line  443)
60624* dM:                                    Preprocessor Options.
60625                                                             (line  418)
60626* dN:                                    Preprocessor Options.
60627                                                             (line  439)
60628* dp:                                    Developer Options.  (line  260)
60629* dP:                                    Developer Options.  (line  265)
60630* dU:                                    Preprocessor Options.
60631                                                             (line  447)
60632* dump-analyzer-exploded-nodes:          Static Analyzer Options.
60633                                                             (line  290)
60634* dump-analyzer-exploded-nodes-2:        Static Analyzer Options.
60635                                                             (line  294)
60636* dump-analyzer-exploded-nodes-3:        Static Analyzer Options.
60637                                                             (line  298)
60638* dumpfullversion:                       Developer Options.  (line 1025)
60639* dumpmachine:                           Developer Options.  (line 1013)
60640* dumpspecs:                             Developer Options.  (line 1030)
60641* dumpversion:                           Developer Options.  (line 1017)
60642* dx:                                    Developer Options.  (line  269)
60643* dylib_file:                            Darwin Options.     (line  196)
60644* dylinker_install_name:                 Darwin Options.     (line  196)
60645* dynamic:                               Darwin Options.     (line  196)
60646* dynamiclib:                            Darwin Options.     (line  131)
60647* E:                                     Overall Options.    (line  190)
60648* E <1>:                                 Link Options.       (line   20)
60649* e:                                     Link Options.       (line  169)
60650* EB:                                    ARC Options.        (line  597)
60651* EB <1>:                                C-SKY Options.      (line   29)
60652* EB <2>:                                MIPS Options.       (line    7)
60653* EL:                                    ARC Options.        (line  606)
60654* EL <1>:                                C-SKY Options.      (line   31)
60655* EL <2>:                                MIPS Options.       (line   10)
60656* entry:                                 Link Options.       (line  169)
60657* exported_symbols_list:                 Darwin Options.     (line  196)
60658* F:                                     Darwin Options.     (line   31)
60659* fabi-compat-version:                   C++ Dialect Options.
60660                                                             (line   88)
60661* fabi-version:                          C++ Dialect Options.
60662                                                             (line   24)
60663* faccess-control:                       C++ Dialect Options.
60664                                                             (line  104)
60665* fada-spec-parent:                      Overall Options.    (line  397)
60666* faggressive-loop-optimizations:        Optimize Options.   (line  546)
60667* falign-functions:                      Optimize Options.   (line 1668)
60668* falign-jumps:                          Optimize Options.   (line 1750)
60669* falign-labels:                         Optimize Options.   (line 1709)
60670* falign-loops:                          Optimize Options.   (line 1729)
60671* faligned-new:                          C++ Dialect Options.
60672                                                             (line  108)
60673* fallow-parameterless-variadic-functions: C Dialect Options.
60674                                                             (line  245)
60675* fallow-store-data-races:               Optimize Options.   (line 1770)
60676* fanalyzer:                             Static Analyzer Options.
60677                                                             (line    7)
60678* fanalyzer-call-summaries:              Static Analyzer Options.
60679                                                             (line  174)
60680* fanalyzer-checker:                     Static Analyzer Options.
60681                                                             (line  183)
60682* fanalyzer-fine-grained:                Static Analyzer Options.
60683                                                             (line  191)
60684* fanalyzer-show-duplicate-count:        Static Analyzer Options.
60685                                                             (line  201)
60686* fanalyzer-state-merge:                 Static Analyzer Options.
60687                                                             (line  208)
60688* fanalyzer-state-purge:                 Static Analyzer Options.
60689                                                             (line  216)
60690* fanalyzer-transitivity:                Static Analyzer Options.
60691                                                             (line  227)
60692* fasan-shadow-offset:                   Instrumentation Options.
60693                                                             (line  456)
60694* fasm:                                  C Dialect Options.  (line  252)
60695* fassociative-math:                     Optimize Options.   (line 2283)
60696* fasynchronous-unwind-tables:           Code Gen Options.   (line  156)
60697* fauto-inc-dec:                         Optimize Options.   (line  568)
60698* fauto-profile:                         Optimize Options.   (line 2158)
60699* fbranch-count-reg:                     Optimize Options.   (line  420)
60700* fbranch-probabilities:                 Optimize Options.   (line 2429)
60701* fbuiltin:                              C Dialect Options.  (line  266)
60702* fcall-saved:                           Code Gen Options.   (line  448)
60703* fcall-used:                            Code Gen Options.   (line  434)
60704* fcaller-saves:                         Optimize Options.   (line  926)
60705* fcallgraph-info:                       Developer Options.  (line   34)
60706* fcf-protection:                        Instrumentation Options.
60707                                                             (line  529)
60708* fchar8_t:                              C++ Dialect Options.
60709                                                             (line  118)
60710* fcheck-new:                            C++ Dialect Options.
60711                                                             (line  161)
60712* fchecking:                             Developer Options.  (line  705)
60713* fcode-hoisting:                        Optimize Options.   (line  967)
60714* fcombine-stack-adjustments:            Optimize Options.   (line  938)
60715* fcommon:                               Code Gen Options.   (line  231)
60716* fcommon <1>:                           Common Variable Attributes.
60717                                                             (line  176)
60718* fcompare-debug:                        Developer Options.  (line  799)
60719* fcompare-debug-second:                 Developer Options.  (line  825)
60720* fcompare-elim:                         Optimize Options.   (line 2088)
60721* fconcepts:                             C++ Dialect Options.
60722                                                             (line  172)
60723* fconcepts-ts:                          C++ Dialect Options.
60724                                                             (line  172)
60725* fcond-mismatch:                        C Dialect Options.  (line  396)
60726* fconserve-stack:                       Optimize Options.   (line  957)
60727* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
60728                                                             (line   30)
60729* fconstexpr-cache-depth:                C++ Dialect Options.
60730                                                             (line  188)
60731* fconstexpr-depth:                      C++ Dialect Options.
60732                                                             (line  182)
60733* fconstexpr-loop-limit:                 C++ Dialect Options.
60734                                                             (line  198)
60735* fconstexpr-ops-limit:                  C++ Dialect Options.
60736                                                             (line  203)
60737* fcoroutines:                           C++ Dialect Options.
60738                                                             (line  212)
60739* fcprop-registers:                      Optimize Options.   (line 2100)
60740* fcrossjumping:                         Optimize Options.   (line  561)
60741* fcse-follow-jumps:                     Optimize Options.   (line  480)
60742* fcse-skip-blocks:                      Optimize Options.   (line  489)
60743* fcx-fortran-rules:                     Optimize Options.   (line 2416)
60744* fcx-limited-range:                     Optimize Options.   (line 2404)
60745* fdata-sections:                        Optimize Options.   (line 2567)
60746* fdbg-cnt:                              Developer Options.  (line  935)
60747* fdbg-cnt-list:                         Developer Options.  (line  932)
60748* fdce:                                  Optimize Options.   (line  574)
60749* fdebug-cpp:                            Preprocessor Options.
60750                                                             (line  454)
60751* fdebug-prefix-map:                     Debugging Options.  (line  141)
60752* fdebug-types-section:                  Debugging Options.  (line  192)
60753* fdeclone-ctor-dtor:                    Optimize Options.   (line  597)
60754* fdefer-pop:                            Optimize Options.   (line  221)
60755* fdelayed-branch:                       Optimize Options.   (line  750)
60756* fdelete-dead-exceptions:               Code Gen Options.   (line  141)
60757* fdelete-null-pointer-checks:           Optimize Options.   (line  608)
60758* fdevirtualize:                         Optimize Options.   (line  629)
60759* fdevirtualize-at-ltrans:               Optimize Options.   (line  646)
60760* fdevirtualize-speculatively:           Optimize Options.   (line  636)
60761* fdiagnostics-color:                    Diagnostic Message Formatting Options.
60762                                                             (line   40)
60763* fdiagnostics-format:                   Diagnostic Message Formatting Options.
60764                                                             (line  398)
60765* fdiagnostics-generate-patch:           Diagnostic Message Formatting Options.
60766                                                             (line  240)
60767* fdiagnostics-minimum-margin-width:     Diagnostic Message Formatting Options.
60768                                                             (line  209)
60769* fdiagnostics-parseable-fixits:         Diagnostic Message Formatting Options.
60770                                                             (line  213)
60771* fdiagnostics-path-format:              Diagnostic Message Formatting Options.
60772                                                             (line  290)
60773* fdiagnostics-show-caret:               Diagnostic Message Formatting Options.
60774                                                             (line  173)
60775* fdiagnostics-show-cwe:                 Diagnostic Message Formatting Options.
60776                                                             (line  195)
60777* fdiagnostics-show-labels:              Diagnostic Message Formatting Options.
60778                                                             (line  182)
60779* fdiagnostics-show-line-numbers:        Diagnostic Message Formatting Options.
60780                                                             (line  204)
60781* fdiagnostics-show-location:            Diagnostic Message Formatting Options.
60782                                                             (line   25)
60783* fdiagnostics-show-option:              Diagnostic Message Formatting Options.
60784                                                             (line  167)
60785* fdiagnostics-show-path-depths:         Diagnostic Message Formatting Options.
60786                                                             (line  381)
60787* fdiagnostics-show-template-tree:       Diagnostic Message Formatting Options.
60788                                                             (line  258)
60789* fdiagnostics-urls:                     Diagnostic Message Formatting Options.
60790                                                             (line  129)
60791* fdirectives-only:                      Preprocessor Options.
60792                                                             (line  202)
60793* fdisable-:                             Developer Options.  (line  636)
60794* fdollars-in-identifiers:               Preprocessor Options.
60795                                                             (line  223)
60796* fdollars-in-identifiers <1>:           Interoperation.     (line  141)
60797* fdpic:                                 SH Options.         (line  388)
60798* fdse:                                  Optimize Options.   (line  578)
60799* fdump-ada-spec:                        Overall Options.    (line  392)
60800* fdump-analyzer:                        Static Analyzer Options.
60801                                                             (line  272)
60802* fdump-analyzer-callgraph:              Static Analyzer Options.
60803                                                             (line  281)
60804* fdump-analyzer-exploded-graph:         Static Analyzer Options.
60805                                                             (line  285)
60806* fdump-analyzer-state-purge:            Static Analyzer Options.
60807                                                             (line  303)
60808* fdump-analyzer-stderr:                 Static Analyzer Options.
60809                                                             (line  277)
60810* fdump-analyzer-supergraph:             Static Analyzer Options.
60811                                                             (line  309)
60812* fdump-debug:                           Developer Options.  (line  273)
60813* fdump-earlydebug:                      Developer Options.  (line  277)
60814* fdump-final-insns:                     Developer Options.  (line  793)
60815* fdump-go-spec:                         Overall Options.    (line  401)
60816* fdump-ipa:                             Developer Options.  (line  303)
60817* fdump-lang:                            Developer Options.  (line  335)
60818* fdump-lang-all:                        Developer Options.  (line  335)
60819* fdump-noaddr:                          Developer Options.  (line  281)
60820* fdump-passes:                          Developer Options.  (line  353)
60821* fdump-rtl-alignments:                  Developer Options.  (line   65)
60822* fdump-rtl-all:                         Developer Options.  (line  246)
60823* fdump-rtl-asmcons:                     Developer Options.  (line   68)
60824* fdump-rtl-auto_inc_dec:                Developer Options.  (line   72)
60825* fdump-rtl-barriers:                    Developer Options.  (line   76)
60826* fdump-rtl-bbpart:                      Developer Options.  (line   79)
60827* fdump-rtl-bbro:                        Developer Options.  (line   82)
60828* fdump-rtl-btl2:                        Developer Options.  (line   86)
60829* fdump-rtl-btl2 <1>:                    Developer Options.  (line   86)
60830* fdump-rtl-bypass:                      Developer Options.  (line   90)
60831* fdump-rtl-ce1:                         Developer Options.  (line  101)
60832* fdump-rtl-ce2:                         Developer Options.  (line  101)
60833* fdump-rtl-ce3:                         Developer Options.  (line  101)
60834* fdump-rtl-combine:                     Developer Options.  (line   93)
60835* fdump-rtl-compgotos:                   Developer Options.  (line   96)
60836* fdump-rtl-cprop_hardreg:               Developer Options.  (line  105)
60837* fdump-rtl-csa:                         Developer Options.  (line  108)
60838* fdump-rtl-cse1:                        Developer Options.  (line  112)
60839* fdump-rtl-cse2:                        Developer Options.  (line  112)
60840* fdump-rtl-dbr:                         Developer Options.  (line  119)
60841* fdump-rtl-dce:                         Developer Options.  (line  116)
60842* fdump-rtl-dce1:                        Developer Options.  (line  123)
60843* fdump-rtl-dce2:                        Developer Options.  (line  123)
60844* fdump-rtl-dfinish:                     Developer Options.  (line  242)
60845* fdump-rtl-dfinit:                      Developer Options.  (line  242)
60846* fdump-rtl-eh:                          Developer Options.  (line  127)
60847* fdump-rtl-eh_ranges:                   Developer Options.  (line  130)
60848* fdump-rtl-expand:                      Developer Options.  (line  133)
60849* fdump-rtl-fwprop1:                     Developer Options.  (line  137)
60850* fdump-rtl-fwprop2:                     Developer Options.  (line  137)
60851* fdump-rtl-gcse1:                       Developer Options.  (line  142)
60852* fdump-rtl-gcse2:                       Developer Options.  (line  142)
60853* fdump-rtl-init-regs:                   Developer Options.  (line  146)
60854* fdump-rtl-initvals:                    Developer Options.  (line  149)
60855* fdump-rtl-into_cfglayout:              Developer Options.  (line  152)
60856* fdump-rtl-ira:                         Developer Options.  (line  155)
60857* fdump-rtl-jump:                        Developer Options.  (line  158)
60858* fdump-rtl-loop2:                       Developer Options.  (line  161)
60859* fdump-rtl-mach:                        Developer Options.  (line  165)
60860* fdump-rtl-mode_sw:                     Developer Options.  (line  169)
60861* fdump-rtl-outof_cfglayout:             Developer Options.  (line  175)
60862* fdump-rtl-PASS:                        Developer Options.  (line   52)
60863* fdump-rtl-peephole2:                   Developer Options.  (line  178)
60864* fdump-rtl-postreload:                  Developer Options.  (line  181)
60865* fdump-rtl-pro_and_epilogue:            Developer Options.  (line  184)
60866* fdump-rtl-ree:                         Developer Options.  (line  192)
60867* fdump-rtl-regclass:                    Developer Options.  (line  242)
60868* fdump-rtl-rnreg:                       Developer Options.  (line  172)
60869* fdump-rtl-sched1:                      Developer Options.  (line  188)
60870* fdump-rtl-sched2:                      Developer Options.  (line  188)
60871* fdump-rtl-seqabstr:                    Developer Options.  (line  195)
60872* fdump-rtl-shorten:                     Developer Options.  (line  198)
60873* fdump-rtl-sibling:                     Developer Options.  (line  201)
60874* fdump-rtl-sms:                         Developer Options.  (line  212)
60875* fdump-rtl-split1:                      Developer Options.  (line  208)
60876* fdump-rtl-split2:                      Developer Options.  (line  208)
60877* fdump-rtl-split3:                      Developer Options.  (line  208)
60878* fdump-rtl-split4:                      Developer Options.  (line  208)
60879* fdump-rtl-split5:                      Developer Options.  (line  208)
60880* fdump-rtl-stack:                       Developer Options.  (line  216)
60881* fdump-rtl-subreg1:                     Developer Options.  (line  222)
60882* fdump-rtl-subreg2:                     Developer Options.  (line  222)
60883* fdump-rtl-subregs_of_mode_finish:      Developer Options.  (line  242)
60884* fdump-rtl-subregs_of_mode_init:        Developer Options.  (line  242)
60885* fdump-rtl-unshare:                     Developer Options.  (line  226)
60886* fdump-rtl-vartrack:                    Developer Options.  (line  229)
60887* fdump-rtl-vregs:                       Developer Options.  (line  232)
60888* fdump-rtl-web:                         Developer Options.  (line  235)
60889* fdump-statistics:                      Developer Options.  (line  357)
60890* fdump-tree:                            Developer Options.  (line  370)
60891* fdump-tree-all:                        Developer Options.  (line  370)
60892* fdump-unnumbered:                      Developer Options.  (line  291)
60893* fdump-unnumbered-links:                Developer Options.  (line  297)
60894* fdwarf2-cfi-asm:                       Debugging Options.  (line  397)
60895* fearly-inlining:                       Optimize Options.   (line  320)
60896* felide-constructors:                   C++ Dialect Options.
60897                                                             (line  215)
60898* felide-type:                           Diagnostic Message Formatting Options.
60899                                                             (line  278)
60900* feliminate-unused-debug-symbols:       Debugging Options.  (line  121)
60901* feliminate-unused-debug-types:         Debugging Options.  (line  401)
60902* femit-class-debug-always:              Debugging Options.  (line  126)
60903* femit-struct-debug-baseonly:           Debugging Options.  (line  328)
60904* femit-struct-debug-detailed:           Debugging Options.  (line  355)
60905* femit-struct-debug-reduced:            Debugging Options.  (line  341)
60906* fenable-:                              Developer Options.  (line  636)
60907* fenforce-eh-specs:                     C++ Dialect Options.
60908                                                             (line  226)
60909* fexceptions:                           Code Gen Options.   (line  119)
60910* fexcess-precision:                     Optimize Options.   (line 2209)
60911* fexec-charset:                         Preprocessor Options.
60912                                                             (line  270)
60913* fexpensive-optimizations:              Optimize Options.   (line  653)
60914* fext-numeric-literals:                 C++ Dialect Options.
60915                                                             (line  478)
60916* fextended-identifiers:                 Preprocessor Options.
60917                                                             (line  226)
60918* fextern-tls-init:                      C++ Dialect Options.
60919                                                             (line  236)
60920* ffast-math:                            Optimize Options.   (line 2233)
60921* ffat-lto-objects:                      Optimize Options.   (line 2065)
60922* ffile-prefix-map:                      Overall Options.    (line  372)
60923* ffinite-loops:                         Optimize Options.   (line 1207)
60924* ffinite-math-only:                     Optimize Options.   (line 2310)
60925* ffix-and-continue:                     Darwin Options.     (line  104)
60926* ffixed:                                Code Gen Options.   (line  422)
60927* ffloat-store:                          Optimize Options.   (line 2195)
60928* ffloat-store <1>:                      Disappointments.    (line   77)
60929* fforward-propagate:                    Optimize Options.   (line  228)
60930* ffp-contract:                          Optimize Options.   (line  237)
60931* ffp-int-builtin-inexact:               Optimize Options.   (line 2382)
60932* ffreestanding:                         Standards.          (line   99)
60933* ffreestanding <1>:                     C Dialect Options.  (line  314)
60934* ffreestanding <2>:                     Warning Options.    (line  412)
60935* ffreestanding <3>:                     Common Function Attributes.
60936                                                             (line  421)
60937* ffunction-cse:                         Optimize Options.   (line  434)
60938* ffunction-sections:                    Optimize Options.   (line 2567)
60939* fgcse:                                 Optimize Options.   (line  503)
60940* fgcse-after-reload:                    Optimize Options.   (line  539)
60941* fgcse-las:                             Optimize Options.   (line  532)
60942* fgcse-lm:                              Optimize Options.   (line  514)
60943* fgcse-sm:                              Optimize Options.   (line  523)
60944* fgimple:                               C Dialect Options.  (line  300)
60945* fgnu-keywords:                         C++ Dialect Options.
60946                                                             (line  256)
60947* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
60948                                                             (line   39)
60949* fgnu-tm:                               C Dialect Options.  (line  353)
60950* fgnu-unique:                           Code Gen Options.   (line  162)
60951* fgnu89-inline:                         C Dialect Options.  (line  190)
60952* fgraphite-identity:                    Optimize Options.   (line 1249)
60953* fguess-branch-probability:             Optimize Options.   (line 1548)
60954* fhoist-adjacent-loads:                 Optimize Options.   (line  997)
60955* fhosted:                               C Dialect Options.  (line  306)
60956* fident:                                Code Gen Options.   (line  252)
60957* fif-conversion:                        Optimize Options.   (line  582)
60958* fif-conversion2:                       Optimize Options.   (line  591)
60959* fiji:                                  AMD GCN Options.    (line   13)
60960* filelist:                              Darwin Options.     (line  196)
60961* fimplement-inlines:                    C++ Dialect Options.
60962                                                             (line  276)
60963* fimplicit-inline-templates:            C++ Dialect Options.
60964                                                             (line  270)
60965* fimplicit-templates:                   C++ Dialect Options.
60966                                                             (line  262)
60967* findirect-data:                        Darwin Options.     (line  104)
60968* findirect-inlining:                    Optimize Options.   (line  292)
60969* finhibit-size-directive:               Code Gen Options.   (line  255)
60970* finline:                               Optimize Options.   (line  275)
60971* finline-functions:                     Optimize Options.   (line  300)
60972* finline-functions-called-once:         Optimize Options.   (line  312)
60973* finline-limit:                         Optimize Options.   (line  336)
60974* finline-small-functions:               Optimize Options.   (line  283)
60975* finput-charset:                        Preprocessor Options.
60976                                                             (line  285)
60977* finstrument-functions:                 Instrumentation Options.
60978                                                             (line  732)
60979* finstrument-functions <1>:             Common Function Attributes.
60980                                                             (line  696)
60981* finstrument-functions-exclude-file-list: Instrumentation Options.
60982                                                             (line  768)
60983* finstrument-functions-exclude-function-list: Instrumentation Options.
60984                                                             (line  789)
60985* fipa-bit-cp:                           Optimize Options.   (line 1057)
60986* fipa-cp:                               Optimize Options.   (line 1038)
60987* fipa-cp-clone:                         Optimize Options.   (line 1047)
60988* fipa-icf:                              Optimize Options.   (line 1067)
60989* fipa-profile:                          Optimize Options.   (line 1030)
60990* fipa-pta:                              Optimize Options.   (line 1024)
60991* fipa-pure-const:                       Optimize Options.   (line 1008)
60992* fipa-ra:                               Optimize Options.   (line  944)
60993* fipa-reference:                        Optimize Options.   (line 1012)
60994* fipa-reference-addressable:            Optimize Options.   (line 1016)
60995* fipa-sra:                              Optimize Options.   (line  329)
60996* fipa-stack-alignment:                  Optimize Options.   (line 1020)
60997* fipa-vrp:                              Optimize Options.   (line 1062)
60998* fira-algorithm:                        Optimize Options.   (line  687)
60999* fira-hoist-pressure:                   Optimize Options.   (line  716)
61000* fira-loop-pressure:                    Optimize Options.   (line  723)
61001* fira-region:                           Optimize Options.   (line  695)
61002* fira-share-save-slots:                 Optimize Options.   (line  731)
61003* fira-share-spill-slots:                Optimize Options.   (line  737)
61004* fira-verbose:                          Developer Options.  (line  862)
61005* fisolate-erroneous-paths-attribute:    Optimize Options.   (line 1149)
61006* fisolate-erroneous-paths-dereference:  Optimize Options.   (line 1141)
61007* fivar-visibility:                      Objective-C and Objective-C++ Dialect Options.
61008                                                             (line  161)
61009* fivopts:                               Optimize Options.   (line 1374)
61010* fjump-tables:                          Code Gen Options.   (line  414)
61011* fkeep-inline-dllexport:                Optimize Options.   (line  361)
61012* fkeep-inline-functions:                Optimize Options.   (line  367)
61013* fkeep-inline-functions <1>:            Inline.             (line   51)
61014* fkeep-static-consts:                   Optimize Options.   (line  378)
61015* fkeep-static-functions:                Optimize Options.   (line  374)
61016* flat_namespace:                        Darwin Options.     (line  196)
61017* flax-vector-conversions:               C Dialect Options.  (line  401)
61018* fleading-underscore:                   Code Gen Options.   (line  478)
61019* flifetime-dse:                         Optimize Options.   (line  667)
61020* flinker-output:                        Link Options.       (line   25)
61021* flive-patching:                        Optimize Options.   (line 1081)
61022* flive-range-shrinkage:                 Optimize Options.   (line  682)
61023* flocal-ivars:                          Objective-C and Objective-C++ Dialect Options.
61024                                                             (line  152)
61025* floop-block:                           Optimize Options.   (line 1243)
61026* floop-interchange:                     Optimize Options.   (line 1327)
61027* floop-nest-optimize:                   Optimize Options.   (line 1257)
61028* floop-parallelize-all:                 Optimize Options.   (line 1263)
61029* floop-strip-mine:                      Optimize Options.   (line 1243)
61030* floop-unroll-and-jam:                  Optimize Options.   (line 1344)
61031* flra-remat:                            Optimize Options.   (line  743)
61032* flto:                                  Optimize Options.   (line 1817)
61033* flto-compression-level:                Optimize Options.   (line 2039)
61034* flto-partition:                        Optimize Options.   (line 2025)
61035* flto-report:                           Developer Options.  (line  868)
61036* flto-report-wpa:                       Developer Options.  (line  876)
61037* fmacro-prefix-map:                     Preprocessor Options.
61038                                                             (line  261)
61039* fmath-errno:                           Optimize Options.   (line 2247)
61040* fmax-errors:                           Warning Options.    (line   18)
61041* fmax-include-depth:                    Preprocessor Options.
61042                                                             (line  235)
61043* fmem-report:                           Developer Options.  (line  880)
61044* fmem-report-wpa:                       Developer Options.  (line  884)
61045* fmerge-all-constants:                  Optimize Options.   (line  397)
61046* fmerge-constants:                      Optimize Options.   (line  387)
61047* fmerge-debug-strings:                  Debugging Options.  (line  134)
61048* fmessage-length:                       Diagnostic Message Formatting Options.
61049                                                             (line   14)
61050* fmodulo-sched:                         Optimize Options.   (line  408)
61051* fmodulo-sched-allow-regmoves:          Optimize Options.   (line  413)
61052* fmove-loop-invariants:                 Optimize Options.   (line 2527)
61053* fms-extensions:                        C Dialect Options.  (line  368)
61054* fms-extensions <1>:                    C++ Dialect Options.
61055                                                             (line  281)
61056* fms-extensions <2>:                    Unnamed Fields.     (line   36)
61057* fnew-inheriting-ctors:                 C++ Dialect Options.
61058                                                             (line  286)
61059* fnew-ttp-matching:                     C++ Dialect Options.
61060                                                             (line  292)
61061* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
61062                                                             (line   43)
61063* fnil-receivers:                        Objective-C and Objective-C++ Dialect Options.
61064                                                             (line   49)
61065* fno-access-control:                    C++ Dialect Options.
61066                                                             (line  104)
61067* fno-allocation-dce:                    Optimize Options.   (line 1767)
61068* fno-analyzer:                          Static Analyzer Options.
61069                                                             (line    7)
61070* fno-analyzer-call-summaries:           Static Analyzer Options.
61071                                                             (line  174)
61072* fno-analyzer-fine-grained:             Static Analyzer Options.
61073                                                             (line  191)
61074* fno-analyzer-show-duplicate-count:     Static Analyzer Options.
61075                                                             (line  201)
61076* fno-analyzer-state-merge:              Static Analyzer Options.
61077                                                             (line  208)
61078* fno-analyzer-state-purge:              Static Analyzer Options.
61079                                                             (line  216)
61080* fno-analyzer-transitivity:             Static Analyzer Options.
61081                                                             (line  227)
61082* fno-asm:                               C Dialect Options.  (line  252)
61083* fno-branch-count-reg:                  Optimize Options.   (line  420)
61084* fno-builtin:                           C Dialect Options.  (line  266)
61085* fno-builtin <1>:                       Warning Options.    (line  412)
61086* fno-builtin <2>:                       Common Function Attributes.
61087                                                             (line  421)
61088* fno-builtin <3>:                       Other Builtins.     (line   21)
61089* fno-canonical-system-headers:          Preprocessor Options.
61090                                                             (line  231)
61091* fno-char8_t:                           C++ Dialect Options.
61092                                                             (line  118)
61093* fno-checking:                          Developer Options.  (line  705)
61094* fno-common:                            Code Gen Options.   (line  231)
61095* fno-common <1>:                        Common Variable Attributes.
61096                                                             (line  176)
61097* fno-compare-debug:                     Developer Options.  (line  799)
61098* fno-debug-types-section:               Debugging Options.  (line  192)
61099* fno-default-inline:                    Inline.             (line   68)
61100* fno-defer-pop:                         Optimize Options.   (line  221)
61101* fno-diagnostics-show-caret:            Diagnostic Message Formatting Options.
61102                                                             (line  173)
61103* fno-diagnostics-show-cwe:              Diagnostic Message Formatting Options.
61104                                                             (line  195)
61105* fno-diagnostics-show-labels:           Diagnostic Message Formatting Options.
61106                                                             (line  182)
61107* fno-diagnostics-show-line-numbers:     Diagnostic Message Formatting Options.
61108                                                             (line  204)
61109* fno-diagnostics-show-option:           Diagnostic Message Formatting Options.
61110                                                             (line  167)
61111* fno-dwarf2-cfi-asm:                    Debugging Options.  (line  397)
61112* fno-elide-constructors:                C++ Dialect Options.
61113                                                             (line  215)
61114* fno-elide-type:                        Diagnostic Message Formatting Options.
61115                                                             (line  278)
61116* fno-eliminate-unused-debug-symbols:    Debugging Options.  (line  121)
61117* fno-eliminate-unused-debug-types:      Debugging Options.  (line  401)
61118* fno-enforce-eh-specs:                  C++ Dialect Options.
61119                                                             (line  226)
61120* fno-ext-numeric-literals:              C++ Dialect Options.
61121                                                             (line  478)
61122* fno-extern-tls-init:                   C++ Dialect Options.
61123                                                             (line  236)
61124* fno-finite-loops:                      Optimize Options.   (line 1207)
61125* fno-fp-int-builtin-inexact:            Optimize Options.   (line 2382)
61126* fno-function-cse:                      Optimize Options.   (line  434)
61127* fno-gnu-keywords:                      C++ Dialect Options.
61128                                                             (line  256)
61129* fno-gnu-unique:                        Code Gen Options.   (line  162)
61130* fno-guess-branch-probability:          Optimize Options.   (line 1548)
61131* fno-ident:                             Code Gen Options.   (line  252)
61132* fno-implement-inlines:                 C++ Dialect Options.
61133                                                             (line  276)
61134* fno-implement-inlines <1>:             C++ Interface.      (line   66)
61135* fno-implicit-inline-templates:         C++ Dialect Options.
61136                                                             (line  270)
61137* fno-implicit-templates:                C++ Dialect Options.
61138                                                             (line  262)
61139* fno-implicit-templates <1>:            Template Instantiation.
61140                                                             (line   94)
61141* fno-inline:                            Optimize Options.   (line  275)
61142* fno-ira-share-save-slots:              Optimize Options.   (line  731)
61143* fno-ira-share-spill-slots:             Optimize Options.   (line  737)
61144* fno-jump-tables:                       Code Gen Options.   (line  414)
61145* fno-keep-inline-dllexport:             Optimize Options.   (line  361)
61146* fno-lifetime-dse:                      Optimize Options.   (line  667)
61147* fno-local-ivars:                       Objective-C and Objective-C++ Dialect Options.
61148                                                             (line  152)
61149* fno-math-errno:                        Optimize Options.   (line 2247)
61150* fno-merge-debug-strings:               Debugging Options.  (line  134)
61151* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
61152                                                             (line   49)
61153* fno-nonansi-builtins:                  C++ Dialect Options.
61154                                                             (line  299)
61155* fno-operator-names:                    C++ Dialect Options.
61156                                                             (line  315)
61157* fno-optional-diags:                    C++ Dialect Options.
61158                                                             (line  319)
61159* fno-peephole:                          Optimize Options.   (line 1539)
61160* fno-peephole2:                         Optimize Options.   (line 1539)
61161* fno-plt:                               Code Gen Options.   (line  396)
61162* fno-pretty-templates:                  C++ Dialect Options.
61163                                                             (line  329)
61164* fno-printf-return-value:               Optimize Options.   (line 1516)
61165* fno-rtti:                              C++ Dialect Options.
61166                                                             (line  341)
61167* fno-sanitize-recover:                  Instrumentation Options.
61168                                                             (line  465)
61169* fno-sanitize=all:                      Instrumentation Options.
61170                                                             (line  450)
61171* fno-sched-interblock:                  Optimize Options.   (line  776)
61172* fno-sched-spec:                        Optimize Options.   (line  781)
61173* fno-set-stack-executable:              x86 Windows Options.
61174                                                             (line   46)
61175* fno-show-column:                       Diagnostic Message Formatting Options.
61176                                                             (line  393)
61177* fno-signed-bitfields:                  C Dialect Options.  (line  434)
61178* fno-signed-zeros:                      Optimize Options.   (line 2322)
61179* fno-stack-limit:                       Instrumentation Options.
61180                                                             (line  644)
61181* fno-threadsafe-statics:                C++ Dialect Options.
61182                                                             (line  396)
61183* fno-toplevel-reorder:                  Optimize Options.   (line 1782)
61184* fno-trapping-math:                     Optimize Options.   (line 2332)
61185* fno-unsigned-bitfields:                C Dialect Options.  (line  434)
61186* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
61187                                                             (line  409)
61188* fno-var-tracking-assignments:          Debugging Options.  (line  161)
61189* fno-var-tracking-assignments-toggle:   Developer Options.  (line  846)
61190* fno-weak:                              C++ Dialect Options.
61191                                                             (line  471)
61192* fno-working-directory:                 Preprocessor Options.
61193                                                             (line  320)
61194* fno-writable-relocated-rdata:          x86 Windows Options.
61195                                                             (line   53)
61196* fno-zero-initialized-in-bss:           Optimize Options.   (line  445)
61197* fnon-call-exceptions:                  Code Gen Options.   (line  133)
61198* fnonansi-builtins:                     C++ Dialect Options.
61199                                                             (line  299)
61200* fnothrow-opt:                          C++ Dialect Options.
61201                                                             (line  304)
61202* fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
61203                                                             (line   56)
61204* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
61205                                                             (line   67)
61206* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
61207                                                             (line   92)
61208* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
61209                                                             (line   96)
61210* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
61211                                                             (line  104)
61212* fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
61213                                                             (line  110)
61214* fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
61215                                                             (line  119)
61216* fomit-frame-pointer:                   Optimize Options.   (line  248)
61217* fopenacc:                              C Dialect Options.  (line  325)
61218* fopenacc-dim:                          C Dialect Options.  (line  334)
61219* fopenmp:                               C Dialect Options.  (line  340)
61220* fopenmp-simd:                          C Dialect Options.  (line  349)
61221* foperator-names:                       C++ Dialect Options.
61222                                                             (line  315)
61223* fopt-info:                             Developer Options.  (line  476)
61224* foptimize-sibling-calls:               Optimize Options.   (line  263)
61225* foptimize-strlen:                      Optimize Options.   (line  268)
61226* foptional-diags:                       C++ Dialect Options.
61227                                                             (line  319)
61228* force_cpusubtype_ALL:                  Darwin Options.     (line  135)
61229* force_flat_namespace:                  Darwin Options.     (line  196)
61230* fpack-struct:                          Code Gen Options.   (line  465)
61231* fpartial-inlining:                     Optimize Options.   (line 1491)
61232* fpatchable-function-entry:             Instrumentation Options.
61233                                                             (line  801)
61234* fpcc-struct-return:                    Code Gen Options.   (line  175)
61235* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
61236* fpch-deps:                             Preprocessor Options.
61237                                                             (line  295)
61238* fpch-preprocess:                       Preprocessor Options.
61239                                                             (line  303)
61240* fpeel-loops:                           Optimize Options.   (line 2519)
61241* fpeephole:                             Optimize Options.   (line 1539)
61242* fpeephole2:                            Optimize Options.   (line 1539)
61243* fpermissive:                           C++ Dialect Options.
61244                                                             (line  324)
61245* fpermitted-flt-eval-methods:           C Dialect Options.  (line  207)
61246* fpermitted-flt-eval-methods=c11:       C Dialect Options.  (line  207)
61247* fpermitted-flt-eval-methods=ts-18661-3: C Dialect Options. (line  207)
61248* fpic:                                  Code Gen Options.   (line  353)
61249* fPIC:                                  Code Gen Options.   (line  374)
61250* fpie:                                  Code Gen Options.   (line  387)
61251* fPIE:                                  Code Gen Options.   (line  387)
61252* fplan9-extensions:                     C Dialect Options.  (line  386)
61253* fplan9-extensions <1>:                 Unnamed Fields.     (line   43)
61254* fplt:                                  Code Gen Options.   (line  396)
61255* fplugin:                               Overall Options.    (line  381)
61256* fplugin-arg:                           Overall Options.    (line  388)
61257* fpost-ipa-mem-report:                  Developer Options.  (line  889)
61258* fpre-ipa-mem-report:                   Developer Options.  (line  888)
61259* fpredictive-commoning:                 Optimize Options.   (line 1498)
61260* fprefetch-loop-arrays:                 Optimize Options.   (line 1506)
61261* fpreprocessed:                         Preprocessor Options.
61262                                                             (line  189)
61263* fpretty-templates:                     C++ Dialect Options.
61264                                                             (line  329)
61265* fprintf-return-value:                  Optimize Options.   (line 1516)
61266* fprofile-abs-path:                     Instrumentation Options.
61267                                                             (line  106)
61268* fprofile-arcs:                         Instrumentation Options.
61269                                                             (line   30)
61270* fprofile-arcs <1>:                     Other Builtins.     (line  563)
61271* fprofile-correction:                   Optimize Options.   (line 2107)
61272* fprofile-dir:                          Instrumentation Options.
61273                                                             (line  112)
61274* fprofile-exclude-files:                Instrumentation Options.
61275                                                             (line  200)
61276* fprofile-filter-files:                 Instrumentation Options.
61277                                                             (line  192)
61278* fprofile-generate:                     Instrumentation Options.
61279                                                             (line  137)
61280* fprofile-note:                         Instrumentation Options.
61281                                                             (line  154)
61282* fprofile-partial-training:             Optimize Options.   (line 2116)
61283* fprofile-prefix-path:                  Instrumentation Options.
61284                                                             (line  160)
61285* fprofile-reorder-functions:            Optimize Options.   (line 2459)
61286* fprofile-report:                       Developer Options.  (line  893)
61287* fprofile-reproducible:                 Instrumentation Options.
61288                                                             (line  208)
61289* fprofile-update:                       Instrumentation Options.
61290                                                             (line  175)
61291* fprofile-use:                          Optimize Options.   (line 2130)
61292* fprofile-values:                       Optimize Options.   (line 2449)
61293* fpu:                                   RX Options.         (line   17)
61294* frandom-seed:                          Developer Options.  (line  710)
61295* freciprocal-math:                      Optimize Options.   (line 2300)
61296* frecord-gcc-switches:                  Code Gen Options.   (line  341)
61297* free:                                  Optimize Options.   (line  659)
61298* freg-struct-return:                    Code Gen Options.   (line  193)
61299* frename-registers:                     Optimize Options.   (line 2478)
61300* freorder-blocks:                       Optimize Options.   (line 1569)
61301* freorder-blocks-algorithm:             Optimize Options.   (line 1575)
61302* freorder-blocks-and-partition:         Optimize Options.   (line 1586)
61303* freorder-functions:                    Optimize Options.   (line 1603)
61304* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
61305                                                             (line  130)
61306* freport-bug:                           Developer Options.  (line  287)
61307* frerun-cse-after-loop:                 Optimize Options.   (line  497)
61308* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  875)
61309* frounding-math:                        Optimize Options.   (line 2347)
61310* frtti:                                 C++ Dialect Options.
61311                                                             (line  341)
61312* fsanitize-address-use-after-scope:     Instrumentation Options.
61313                                                             (line  501)
61314* fsanitize-coverage=trace-cmp:          Instrumentation Options.
61315                                                             (line  516)
61316* fsanitize-coverage=trace-pc:           Instrumentation Options.
61317                                                             (line  512)
61318* fsanitize-recover:                     Instrumentation Options.
61319                                                             (line  465)
61320* fsanitize-sections:                    Instrumentation Options.
61321                                                             (line  461)
61322* fsanitize-undefined-trap-on-error:     Instrumentation Options.
61323                                                             (line  505)
61324* fsanitize=address:                     Instrumentation Options.
61325                                                             (line  236)
61326* fsanitize=alignment:                   Instrumentation Options.
61327                                                             (line  376)
61328* fsanitize=bool:                        Instrumentation Options.
61329                                                             (line  414)
61330* fsanitize=bounds:                      Instrumentation Options.
61331                                                             (line  363)
61332* fsanitize=bounds-strict:               Instrumentation Options.
61333                                                             (line  369)
61334* fsanitize=builtin:                     Instrumentation Options.
61335                                                             (line  438)
61336* fsanitize=enum:                        Instrumentation Options.
61337                                                             (line  419)
61338* fsanitize=float-cast-overflow:         Instrumentation Options.
61339                                                             (line  394)
61340* fsanitize=float-divide-by-zero:        Instrumentation Options.
61341                                                             (line  388)
61342* fsanitize=integer-divide-by-zero:      Instrumentation Options.
61343                                                             (line  326)
61344* fsanitize=kernel-address:              Instrumentation Options.
61345                                                             (line  250)
61346* fsanitize=leak:                        Instrumentation Options.
61347                                                             (line  288)
61348* fsanitize=nonnull-attribute:           Instrumentation Options.
61349                                                             (line  402)
61350* fsanitize=null:                        Instrumentation Options.
61351                                                             (line  340)
61352* fsanitize=object-size:                 Instrumentation Options.
61353                                                             (line  383)
61354* fsanitize=pointer-compare:             Instrumentation Options.
61355                                                             (line  254)
61356* fsanitize=pointer-overflow:            Instrumentation Options.
61357                                                             (line  432)
61358* fsanitize=pointer-subtract:            Instrumentation Options.
61359                                                             (line  264)
61360* fsanitize=return:                      Instrumentation Options.
61361                                                             (line  348)
61362* fsanitize=returns-nonnull-attribute:   Instrumentation Options.
61363                                                             (line  408)
61364* fsanitize=shift:                       Instrumentation Options.
61365                                                             (line  306)
61366* fsanitize=shift-base:                  Instrumentation Options.
61367                                                             (line  319)
61368* fsanitize=shift-exponent:              Instrumentation Options.
61369                                                             (line  314)
61370* fsanitize=signed-integer-overflow:     Instrumentation Options.
61371                                                             (line  354)
61372* fsanitize=thread:                      Instrumentation Options.
61373                                                             (line  274)
61374* fsanitize=undefined:                   Instrumentation Options.
61375                                                             (line  298)
61376* fsanitize=unreachable:                 Instrumentation Options.
61377                                                             (line  330)
61378* fsanitize=vla-bound:                   Instrumentation Options.
61379                                                             (line  336)
61380* fsanitize=vptr:                        Instrumentation Options.
61381                                                             (line  425)
61382* fsave-optimization-record:             Developer Options.  (line  582)
61383* fsched-critical-path-heuristic:        Optimize Options.   (line  841)
61384* fsched-dep-count-heuristic:            Optimize Options.   (line  868)
61385* fsched-group-heuristic:                Optimize Options.   (line  835)
61386* fsched-interblock:                     Optimize Options.   (line  776)
61387* fsched-last-insn-heuristic:            Optimize Options.   (line  861)
61388* fsched-pressure:                       Optimize Options.   (line  786)
61389* fsched-rank-heuristic:                 Optimize Options.   (line  854)
61390* fsched-spec:                           Optimize Options.   (line  781)
61391* fsched-spec-insn-heuristic:            Optimize Options.   (line  847)
61392* fsched-spec-load:                      Optimize Options.   (line  795)
61393* fsched-spec-load-dangerous:            Optimize Options.   (line  800)
61394* fsched-stalled-insns:                  Optimize Options.   (line  806)
61395* fsched-stalled-insns-dep:              Optimize Options.   (line  816)
61396* fsched-verbose:                        Developer Options.  (line  622)
61397* fsched2-use-superblocks:               Optimize Options.   (line  825)
61398* fschedule-fusion:                      Optimize Options.   (line 2488)
61399* fschedule-insns:                       Optimize Options.   (line  757)
61400* fschedule-insns2:                      Optimize Options.   (line  767)
61401* fsection-anchors:                      Optimize Options.   (line 2600)
61402* fsel-sched-pipelining:                 Optimize Options.   (line  888)
61403* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  893)
61404* fselective-scheduling:                 Optimize Options.   (line  880)
61405* fselective-scheduling2:                Optimize Options.   (line  884)
61406* fsemantic-interposition:               Optimize Options.   (line  898)
61407* fset-stack-executable:                 x86 Windows Options.
61408                                                             (line   46)
61409* fshort-enums:                          Code Gen Options.   (line  211)
61410* fshort-enums <1>:                      Structures unions enumerations and bit-fields implementation.
61411                                                             (line   48)
61412* fshort-enums <2>:                      Common Type Attributes.
61413                                                             (line  288)
61414* fshort-enums <3>:                      Non-bugs.           (line   42)
61415* fshort-wchar:                          Code Gen Options.   (line  221)
61416* fshow-column:                          Diagnostic Message Formatting Options.
61417                                                             (line  393)
61418* fshrink-wrap:                          Optimize Options.   (line  915)
61419* fshrink-wrap-separate:                 Optimize Options.   (line  920)
61420* fsignaling-nans:                       Optimize Options.   (line 2367)
61421* fsigned-bitfields:                     C Dialect Options.  (line  434)
61422* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
61423* fsigned-char:                          C Dialect Options.  (line  424)
61424* fsigned-char <1>:                      Characters implementation.
61425                                                             (line   31)
61426* fsigned-zeros:                         Optimize Options.   (line 2322)
61427* fsimd-cost-model:                      Optimize Options.   (line 1448)
61428* fsingle-precision-constant:            Optimize Options.   (line 2400)
61429* fsized-deallocation:                   C++ Dialect Options.
61430                                                             (line  356)
61431* fsplit-ivs-in-unroller:                Optimize Options.   (line 1469)
61432* fsplit-loops:                          Optimize Options.   (line 2531)
61433* fsplit-paths:                          Optimize Options.   (line 1464)
61434* fsplit-stack:                          Instrumentation Options.
61435                                                             (line  661)
61436* fsplit-stack <1>:                      Common Function Attributes.
61437                                                             (line  746)
61438* fsplit-wide-types:                     Optimize Options.   (line  466)
61439* fsplit-wide-types-early:               Optimize Options.   (line  474)
61440* fssa-backprop:                         Optimize Options.   (line 1173)
61441* fssa-phiopt:                           Optimize Options.   (line 1179)
61442* fsso-struct:                           C Dialect Options.  (line  440)
61443* fstack-check:                          Instrumentation Options.
61444                                                             (line  587)
61445* fstack-clash-protection:               Instrumentation Options.
61446                                                             (line  629)
61447* fstack-limit-register:                 Instrumentation Options.
61448                                                             (line  644)
61449* fstack-limit-symbol:                   Instrumentation Options.
61450                                                             (line  644)
61451* fstack-protector:                      Instrumentation Options.
61452                                                             (line  562)
61453* fstack-protector-all:                  Instrumentation Options.
61454                                                             (line  573)
61455* fstack-protector-explicit:             Instrumentation Options.
61456                                                             (line  583)
61457* fstack-protector-strong:               Instrumentation Options.
61458                                                             (line  576)
61459* fstack-usage:                          Developer Options.  (line  897)
61460* fstack_reuse:                          Code Gen Options.   (line   15)
61461* fstats:                                Developer Options.  (line  926)
61462* fstdarg-opt:                           Optimize Options.   (line 2596)
61463* fstore-merging:                        Optimize Options.   (line 1398)
61464* fstrict-aliasing:                      Optimize Options.   (line 1618)
61465* fstrict-enums:                         C++ Dialect Options.
61466                                                             (line  366)
61467* fstrict-overflow:                      Code Gen Options.   (line  115)
61468* fstrict-volatile-bitfields:            Code Gen Options.   (line  589)
61469* fstrong-eval-order:                    C++ Dialect Options.
61470                                                             (line  375)
61471* fsync-libcalls:                        Code Gen Options.   (line  621)
61472* fsyntax-only:                          Warning Options.    (line   14)
61473* ftabstop:                              Preprocessor Options.
61474                                                             (line  238)
61475* ftemplate-backtrace-limit:             C++ Dialect Options.
61476                                                             (line  383)
61477* ftemplate-depth:                       C++ Dialect Options.
61478                                                             (line  387)
61479* ftest-coverage:                        Instrumentation Options.
61480                                                             (line   97)
61481* fthread-jumps:                         Optimize Options.   (line  457)
61482* fthreadsafe-statics:                   C++ Dialect Options.
61483                                                             (line  396)
61484* ftime-report:                          Developer Options.  (line  854)
61485* ftime-report-details:                  Developer Options.  (line  858)
61486* ftls-model:                            Code Gen Options.   (line  489)
61487* ftoplevel-reorder:                     Optimize Options.   (line 1782)
61488* ftracer:                               Optimize Options.   (line 2496)
61489* ftrack-macro-expansion:                Preprocessor Options.
61490                                                             (line  244)
61491* ftrampolines:                          Code Gen Options.   (line  500)
61492* ftrapping-math:                        Optimize Options.   (line 2332)
61493* ftrapv:                                Code Gen Options.   (line   91)
61494* ftree-bit-ccp:                         Optimize Options.   (line 1161)
61495* ftree-builtin-call-dce:                Optimize Options.   (line 1201)
61496* ftree-ccp:                             Optimize Options.   (line 1168)
61497* ftree-ch:                              Optimize Options.   (line 1230)
61498* ftree-coalesce-vars:                   Optimize Options.   (line 1269)
61499* ftree-copy-prop:                       Optimize Options.   (line 1003)
61500* ftree-dce:                             Optimize Options.   (line 1197)
61501* ftree-dominator-opts:                  Optimize Options.   (line 1216)
61502* ftree-dse:                             Optimize Options.   (line 1223)
61503* ftree-forwprop:                        Optimize Options.   (line  982)
61504* ftree-fre:                             Optimize Options.   (line  986)
61505* ftree-loop-distribute-patterns:        Optimize Options.   (line 1305)
61506* ftree-loop-distribution:               Optimize Options.   (line 1286)
61507* ftree-loop-if-convert:                 Optimize Options.   (line 1279)
61508* ftree-loop-im:                         Optimize Options.   (line 1350)
61509* ftree-loop-ivcanon:                    Optimize Options.   (line 1359)
61510* ftree-loop-linear:                     Optimize Options.   (line 1243)
61511* ftree-loop-optimize:                   Optimize Options.   (line 1237)
61512* ftree-loop-vectorize:                  Optimize Options.   (line 1424)
61513* ftree-parallelize-loops:               Optimize Options.   (line 1379)
61514* ftree-partial-pre:                     Optimize Options.   (line  978)
61515* ftree-phiprop:                         Optimize Options.   (line  993)
61516* ftree-pre:                             Optimize Options.   (line  974)
61517* ftree-pta:                             Optimize Options.   (line 1388)
61518* ftree-reassoc:                         Optimize Options.   (line  963)
61519* ftree-scev-cprop:                      Optimize Options.   (line 1365)
61520* ftree-sink:                            Optimize Options.   (line 1157)
61521* ftree-slp-vectorize:                   Optimize Options.   (line 1429)
61522* ftree-slsr:                            Optimize Options.   (line 1413)
61523* ftree-sra:                             Optimize Options.   (line 1392)
61524* ftree-switch-conversion:               Optimize Options.   (line 1184)
61525* ftree-tail-merge:                      Optimize Options.   (line 1189)
61526* ftree-ter:                             Optimize Options.   (line 1405)
61527* ftree-vectorize:                       Optimize Options.   (line 1419)
61528* ftree-vrp:                             Optimize Options.   (line 1455)
61529* funconstrained-commons:                Optimize Options.   (line  555)
61530* funit-at-a-time:                       Optimize Options.   (line 1775)
61531* funroll-all-loops:                     Optimize Options.   (line 2513)
61532* funroll-loops:                         Optimize Options.   (line 2503)
61533* funsafe-math-optimizations:            Optimize Options.   (line 2265)
61534* funsigned-bitfields:                   C Dialect Options.  (line  434)
61535* funsigned-bitfields <1>:               Structures unions enumerations and bit-fields implementation.
61536                                                             (line   17)
61537* funsigned-bitfields <2>:               Non-bugs.           (line   57)
61538* funsigned-char:                        C Dialect Options.  (line  406)
61539* funsigned-char <1>:                    Characters implementation.
61540                                                             (line   31)
61541* funswitch-loops:                       Optimize Options.   (line 2537)
61542* funwind-tables:                        Code Gen Options.   (line  149)
61543* fuse-cxa-atexit:                       C++ Dialect Options.
61544                                                             (line  402)
61545* fuse-cxa-get-exception-ptr:            C++ Dialect Options.
61546                                                             (line  409)
61547* fuse-ld=bfd:                           Link Options.       (line   74)
61548* fuse-ld=gold:                          Link Options.       (line   77)
61549* fuse-ld=lld:                           Link Options.       (line   80)
61550* fuse-linker-plugin:                    Optimize Options.   (line 2047)
61551* fvar-tracking:                         Debugging Options.  (line  151)
61552* fvar-tracking-assignments:             Debugging Options.  (line  161)
61553* fvar-tracking-assignments-toggle:      Developer Options.  (line  846)
61554* fvariable-expansion-in-unroller:       Optimize Options.   (line 1483)
61555* fvect-cost-model:                      Optimize Options.   (line 1434)
61556* fverbose-asm:                          Code Gen Options.   (line  262)
61557* fversion-loops-for-strides:            Optimize Options.   (line 2544)
61558* fvisibility:                           Code Gen Options.   (line  524)
61559* fvisibility-inlines-hidden:            C++ Dialect Options.
61560                                                             (line  414)
61561* fvisibility-ms-compat:                 C++ Dialect Options.
61562                                                             (line  442)
61563* fvpt:                                  Optimize Options.   (line 2466)
61564* fvtable-verify:                        Instrumentation Options.
61565                                                             (line  679)
61566* fvtv-counts:                           Instrumentation Options.
61567                                                             (line  715)
61568* fvtv-debug:                            Instrumentation Options.
61569                                                             (line  702)
61570* fweak:                                 C++ Dialect Options.
61571                                                             (line  471)
61572* fweb:                                  Optimize Options.   (line 1795)
61573* fwhole-program:                        Optimize Options.   (line 1806)
61574* fwide-exec-charset:                    Preprocessor Options.
61575                                                             (line  275)
61576* fworking-directory:                    Preprocessor Options.
61577                                                             (line  320)
61578* fwrapv:                                Code Gen Options.   (line   99)
61579* fwrapv-pointer:                        Code Gen Options.   (line  109)
61580* fwritable-relocated-rdata:             x86 Windows Options.
61581                                                             (line   53)
61582* fzero-initialized-in-bss:              Optimize Options.   (line  445)
61583* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
61584                                                             (line  140)
61585* g:                                     Debugging Options.  (line   25)
61586* G:                                     ARC Options.        (line  416)
61587* G <1>:                                 M32R/D Options.     (line   57)
61588* G <2>:                                 MIPS Options.       (line  460)
61589* G <3>:                                 Nios II Options.    (line    9)
61590* G <4>:                                 RS/6000 and PowerPC Options.
61591                                                             (line  713)
61592* G <5>:                                 System V Options.   (line   10)
61593* gas-loc-support:                       Debugging Options.  (line  221)
61594* gas-locview-support:                   Debugging Options.  (line  237)
61595* gcolumn-info:                          Debugging Options.  (line  249)
61596* gdescribe-dies:                        Debugging Options.  (line  179)
61597* gdwarf:                                Debugging Options.  (line   45)
61598* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
61599                                                             (line  166)
61600* gfull:                                 Darwin Options.     (line   69)
61601* ggdb:                                  Debugging Options.  (line   38)
61602* ggnu-pubnames:                         Debugging Options.  (line  187)
61603* ginline-points:                        Debugging Options.  (line  308)
61604* ginternal-reset-location-views:        Debugging Options.  (line  297)
61605* gno-as-loc-support:                    Debugging Options.  (line  233)
61606* gno-column-info:                       Debugging Options.  (line  249)
61607* gno-inline-points:                     Debugging Options.  (line  308)
61608* gno-internal-reset-location-views:     Debugging Options.  (line  297)
61609* gno-record-gcc-switches:               Debugging Options.  (line  202)
61610* gno-statement-frontiers:               Debugging Options.  (line  254)
61611* gno-strict-dwarf:                      Debugging Options.  (line  217)
61612* gno-variable-location-views:           Debugging Options.  (line  265)
61613* gpubnames:                             Debugging Options.  (line  184)
61614* grecord-gcc-switches:                  Debugging Options.  (line  202)
61615* gsplit-dwarf:                          Debugging Options.  (line  172)
61616* gstabs:                                Debugging Options.  (line   63)
61617* gstabs+:                               Debugging Options.  (line   71)
61618* gstatement-frontiers:                  Debugging Options.  (line  254)
61619* gstrict-dwarf:                         Debugging Options.  (line  211)
61620* gtoggle:                               Developer Options.  (line  838)
61621* gused:                                 Darwin Options.     (line   64)
61622* gvariable-location-views:              Debugging Options.  (line  265)
61623* gvariable-location-views=incompat5:    Debugging Options.  (line  265)
61624* gvms:                                  Debugging Options.  (line   90)
61625* gxcoff:                                Debugging Options.  (line   77)
61626* gxcoff+:                               Debugging Options.  (line   82)
61627* gz:                                    Debugging Options.  (line  317)
61628* H:                                     Preprocessor Options.
61629                                                             (line  402)
61630* headerpad_max_install_names:           Darwin Options.     (line  196)
61631* help:                                  Overall Options.    (line  220)
61632* I:                                     Directory Options.  (line   13)
61633* I-:                                    Directory Options.  (line   65)
61634* idirafter:                             Directory Options.  (line   13)
61635* iframework:                            Darwin Options.     (line   57)
61636* imacros:                               Preprocessor Options.
61637                                                             (line   57)
61638* image_base:                            Darwin Options.     (line  196)
61639* imultilib:                             Directory Options.  (line   98)
61640* include:                               Preprocessor Options.
61641                                                             (line   46)
61642* init:                                  Darwin Options.     (line  196)
61643* install_name:                          Darwin Options.     (line  196)
61644* iplugindir=:                           Directory Options.  (line  113)
61645* iprefix:                               Directory Options.  (line   80)
61646* iquote:                                Directory Options.  (line   13)
61647* isysroot:                              Directory Options.  (line   92)
61648* isystem:                               Directory Options.  (line   13)
61649* iwithprefix:                           Directory Options.  (line   86)
61650* iwithprefixbefore:                     Directory Options.  (line   86)
61651* keep_private_externs:                  Darwin Options.     (line  196)
61652* l:                                     Link Options.       (line   84)
61653* L:                                     Directory Options.  (line  118)
61654* lobjc:                                 Link Options.       (line  110)
61655* M:                                     Preprocessor Options.
61656                                                             (line   77)
61657* m:                                     RS/6000 and PowerPC Options.
61658                                                             (line  520)
61659* m1:                                    SH Options.         (line    9)
61660* m10:                                   PDP-11 Options.     (line   29)
61661* m128bit-long-double:                   x86 Options.        (line  584)
61662* m16:                                   x86 Options.        (line 1425)
61663* m16-bit:                               CRIS Options.       (line   64)
61664* m16-bit <1>:                           NDS32 Options.      (line   51)
61665* m1reg-:                                Adapteva Epiphany Options.
61666                                                             (line  131)
61667* m2:                                    SH Options.         (line   12)
61668* m210:                                  MCore Options.      (line   43)
61669* m2a:                                   SH Options.         (line   30)
61670* m2a-nofpu:                             SH Options.         (line   18)
61671* m2a-single:                            SH Options.         (line   26)
61672* m2a-single-only:                       SH Options.         (line   22)
61673* m3:                                    SH Options.         (line   34)
61674* m31:                                   S/390 and zSeries Options.
61675                                                             (line   86)
61676* m32:                                   Nvidia PTX Options. (line   10)
61677* m32 <1>:                               RS/6000 and PowerPC Options.
61678                                                             (line  244)
61679* m32 <2>:                               SPARC Options.      (line  315)
61680* m32 <3>:                               TILE-Gx Options.    (line   23)
61681* m32 <4>:                               TILEPro Options.    (line   13)
61682* m32 <5>:                               x86 Options.        (line 1425)
61683* m32-bit:                               CRIS Options.       (line   64)
61684* m32bit-doubles:                        RL78 Options.       (line   73)
61685* m32bit-doubles <1>:                    RX Options.         (line   10)
61686* m32r:                                  M32R/D Options.     (line   15)
61687* m32r2:                                 M32R/D Options.     (line    9)
61688* m32rx:                                 M32R/D Options.     (line   12)
61689* m340:                                  MCore Options.      (line   43)
61690* m3dnow:                                x86 Options.        (line  807)
61691* m3dnowa:                               x86 Options.        (line  808)
61692* m3e:                                   SH Options.         (line   37)
61693* m4:                                    SH Options.         (line   51)
61694* m4-100:                                SH Options.         (line   54)
61695* m4-100-nofpu:                          SH Options.         (line   57)
61696* m4-100-single:                         SH Options.         (line   61)
61697* m4-100-single-only:                    SH Options.         (line   65)
61698* m4-200:                                SH Options.         (line   69)
61699* m4-200-nofpu:                          SH Options.         (line   72)
61700* m4-200-single:                         SH Options.         (line   76)
61701* m4-200-single-only:                    SH Options.         (line   80)
61702* m4-300:                                SH Options.         (line   84)
61703* m4-300-nofpu:                          SH Options.         (line   87)
61704* m4-300-single:                         SH Options.         (line   91)
61705* m4-300-single-only:                    SH Options.         (line   95)
61706* m4-340:                                SH Options.         (line   99)
61707* m4-500:                                SH Options.         (line  102)
61708* m4-nofpu:                              SH Options.         (line   40)
61709* m4-single:                             SH Options.         (line   47)
61710* m4-single-only:                        SH Options.         (line   43)
61711* m40:                                   PDP-11 Options.     (line   23)
61712* m45:                                   PDP-11 Options.     (line   26)
61713* m4a:                                   SH Options.         (line  118)
61714* m4a-nofpu:                             SH Options.         (line  106)
61715* m4a-single:                            SH Options.         (line  114)
61716* m4a-single-only:                       SH Options.         (line  110)
61717* m4al:                                  SH Options.         (line  121)
61718* m4byte-functions:                      MCore Options.      (line   27)
61719* m5200:                                 M680x0 Options.     (line  144)
61720* m5206e:                                M680x0 Options.     (line  153)
61721* m528x:                                 M680x0 Options.     (line  157)
61722* m5307:                                 M680x0 Options.     (line  161)
61723* m5407:                                 M680x0 Options.     (line  165)
61724* m64:                                   Nvidia PTX Options. (line   10)
61725* m64 <1>:                               RS/6000 and PowerPC Options.
61726                                                             (line  244)
61727* m64 <2>:                               S/390 and zSeries Options.
61728                                                             (line   86)
61729* m64 <3>:                               SPARC Options.      (line  315)
61730* m64 <4>:                               TILE-Gx Options.    (line   23)
61731* m64 <5>:                               x86 Options.        (line 1425)
61732* m64bit-doubles:                        RL78 Options.       (line   73)
61733* m64bit-doubles <1>:                    RX Options.         (line   10)
61734* m68000:                                M680x0 Options.     (line   93)
61735* m68010:                                M680x0 Options.     (line  101)
61736* m68020:                                M680x0 Options.     (line  107)
61737* m68020-40:                             M680x0 Options.     (line  175)
61738* m68020-60:                             M680x0 Options.     (line  184)
61739* m68030:                                M680x0 Options.     (line  112)
61740* m68040:                                M680x0 Options.     (line  117)
61741* m68060:                                M680x0 Options.     (line  126)
61742* m68881:                                M680x0 Options.     (line  194)
61743* m8-bit:                                CRIS Options.       (line   64)
61744* m8bit-idiv:                            x86 Options.        (line 1346)
61745* m8byte-align:                          V850 Options.       (line  170)
61746* m96bit-long-double:                    x86 Options.        (line  584)
61747* mA6:                                   ARC Options.        (line   23)
61748* mA7:                                   ARC Options.        (line   30)
61749* mabi:                                  AArch64 Options.    (line    9)
61750* mabi <1>:                              ARM Options.        (line    9)
61751* mabi <2>:                              PRU Options.        (line   28)
61752* mabi <3>:                              RISC-V Options.     (line   17)
61753* mabi <4>:                              RS/6000 and PowerPC Options.
61754                                                             (line  551)
61755* mabi <5>:                              x86 Options.        (line 1039)
61756* mabi=32:                               MIPS Options.       (line  156)
61757* mabi=64:                               MIPS Options.       (line  156)
61758* mabi=eabi:                             MIPS Options.       (line  156)
61759* mabi=elfv1:                            RS/6000 and PowerPC Options.
61760                                                             (line  573)
61761* mabi=elfv2:                            RS/6000 and PowerPC Options.
61762                                                             (line  579)
61763* mabi=gnu:                              MMIX Options.       (line   20)
61764* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
61765                                                             (line  557)
61766* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
61767                                                             (line  565)
61768* mabi=mmixware:                         MMIX Options.       (line   20)
61769* mabi=n32:                              MIPS Options.       (line  156)
61770* mabi=o64:                              MIPS Options.       (line  156)
61771* mabicalls:                             MIPS Options.       (line  192)
61772* mabm:                                  x86 Options.        (line  810)
61773* mabort-on-noreturn:                    ARM Options.        (line  750)
61774* mabs=2008:                             MIPS Options.       (line  300)
61775* mabs=legacy:                           MIPS Options.       (line  300)
61776* mabsdata:                              AVR Options.        (line  163)
61777* mabsdiff:                              MeP Options.        (line    7)
61778* mac0:                                  PDP-11 Options.     (line   16)
61779* macc-4:                                FRV Options.        (line  139)
61780* macc-8:                                FRV Options.        (line  143)
61781* maccumulate-args:                      AVR Options.        (line  170)
61782* maccumulate-outgoing-args:             SH Options.         (line  314)
61783* maccumulate-outgoing-args <1>:         x86 Options.        (line 1083)
61784* maddress-mode=long:                    x86 Options.        (line 1475)
61785* maddress-mode=short:                   x86 Options.        (line 1480)
61786* mads:                                  RS/6000 and PowerPC Options.
61787                                                             (line  613)
61788* madx:                                  x86 Options.        (line  811)
61789* maes:                                  x86 Options.        (line  788)
61790* maix-struct-return:                    RS/6000 and PowerPC Options.
61791                                                             (line  544)
61792* maix32:                                RS/6000 and PowerPC Options.
61793                                                             (line  282)
61794* maix64:                                RS/6000 and PowerPC Options.
61795                                                             (line  282)
61796* malign-300:                            H8/300 Options.     (line   41)
61797* malign-call:                           ARC Options.        (line  435)
61798* malign-data:                           RISC-V Options.     (line  127)
61799* malign-data <1>:                       x86 Options.        (line  624)
61800* malign-double:                         x86 Options.        (line  569)
61801* malign-int:                            M680x0 Options.     (line  261)
61802* malign-labels:                         FRV Options.        (line  128)
61803* malign-loops:                          M32R/D Options.     (line   73)
61804* malign-natural:                        RS/6000 and PowerPC Options.
61805                                                             (line  320)
61806* malign-power:                          RS/6000 and PowerPC Options.
61807                                                             (line  320)
61808* malign-stringops:                      x86 Options.        (line 1219)
61809* mall-opts:                             MeP Options.        (line   11)
61810* malloc-cc:                             FRV Options.        (line   31)
61811* mallow-string-insns:                   RX Options.         (line  150)
61812* mallregs:                              RL78 Options.       (line   66)
61813* maltivec:                              RS/6000 and PowerPC Options.
61814                                                             (line  136)
61815* mam33:                                 MN10300 Options.    (line   17)
61816* mam33-2:                               MN10300 Options.    (line   24)
61817* mam34:                                 MN10300 Options.    (line   27)
61818* manchor:                               C-SKY Options.      (line  110)
61819* mandroid:                              GNU/Linux Options.  (line   26)
61820* mannotate-align:                       ARC Options.        (line  382)
61821* mapcs:                                 ARM Options.        (line   21)
61822* mapcs-frame:                           ARM Options.        (line   13)
61823* mapp-regs:                             SPARC Options.      (line   10)
61824* mapp-regs <1>:                         V850 Options.       (line  181)
61825* mARC600:                               ARC Options.        (line   23)
61826* mARC601:                               ARC Options.        (line   27)
61827* mARC700:                               ARC Options.        (line   30)
61828* march:                                 AArch64 Options.    (line  165)
61829* march <1>:                             AMD GCN Options.    (line    9)
61830* march <2>:                             ARM Options.        (line   80)
61831* march <3>:                             C6X Options.        (line    7)
61832* march <4>:                             CRIS Options.       (line   10)
61833* march <5>:                             HPPA Options.       (line    9)
61834* march <6>:                             HPPA Options.       (line  162)
61835* march <7>:                             M680x0 Options.     (line   12)
61836* march <8>:                             MIPS Options.       (line   14)
61837* march <9>:                             NDS32 Options.      (line   64)
61838* march <10>:                            Nios II Options.    (line   94)
61839* march <11>:                            Nvidia PTX Options. (line   13)
61840* march <12>:                            RISC-V Options.     (line   54)
61841* march <13>:                            S/390 and zSeries Options.
61842                                                             (line  148)
61843* march <14>:                            x86 Options.        (line    9)
61844* march=:                                C-SKY Options.      (line    9)
61845* marclinux:                             ARC Options.        (line  388)
61846* marclinux_prof:                        ARC Options.        (line  395)
61847* margonaut:                             ARC Options.        (line  593)
61848* marm:                                  ARM Options.        (line  822)
61849* mas100-syntax:                         RX Options.         (line   76)
61850* masm-hex:                              MSP430 Options.     (line    9)
61851* masm-syntax-unified:                   ARM Options.        (line  921)
61852* masm=DIALECT:                          x86 Options.        (line  518)
61853* matomic:                               ARC Options.        (line  155)
61854* matomic-model=MODEL:                   SH Options.         (line  193)
61855* mauto-litpools:                        Xtensa Options.     (line   60)
61856* mauto-modify-reg:                      ARC Options.        (line  438)
61857* mauto-pic:                             IA-64 Options.      (line   50)
61858* maverage:                              MeP Options.        (line   16)
61859* mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
61860                                                             (line  359)
61861* mavx:                                  x86 Options.        (line  776)
61862* mavx2:                                 x86 Options.        (line  777)
61863* mavx256-split-unaligned-load:          x86 Options.        (line 1354)
61864* mavx256-split-unaligned-store:         x86 Options.        (line 1354)
61865* mavx5124fmaps:                         x86 Options.        (line  838)
61866* mavx5124vnniw:                         x86 Options.        (line  840)
61867* mavx512bf16:                           x86 Options.        (line  827)
61868* mavx512bitalg:                         x86 Options.        (line  832)
61869* mavx512bw:                             x86 Options.        (line  783)
61870* mavx512cd:                             x86 Options.        (line  781)
61871* mavx512dq:                             x86 Options.        (line  784)
61872* mavx512er:                             x86 Options.        (line  780)
61873* mavx512f:                              x86 Options.        (line  778)
61874* mavx512ifma:                           x86 Options.        (line  785)
61875* mavx512pf:                             x86 Options.        (line  779)
61876* mavx512vbmi:                           x86 Options.        (line  786)
61877* mavx512vbmi2:                          x86 Options.        (line  826)
61878* mavx512vl:                             x86 Options.        (line  782)
61879* mavx512vnni:                           x86 Options.        (line  839)
61880* mavx512vp2intersect:                   x86 Options.        (line  837)
61881* mavx512vpopcntdq:                      x86 Options.        (line  836)
61882* max-vect-align:                        Adapteva Epiphany Options.
61883                                                             (line  119)
61884* mb:                                    SH Options.         (line  126)
61885* mbackchain:                            S/390 and zSeries Options.
61886                                                             (line   35)
61887* mbarrel-shift-enabled:                 LM32 Options.       (line    9)
61888* mbarrel-shifter:                       ARC Options.        (line   10)
61889* mbarrel_shifter:                       ARC Options.        (line  613)
61890* mbase-addresses:                       MMIX Options.       (line   53)
61891* mbased=:                               MeP Options.        (line   20)
61892* mbbit-peephole:                        ARC Options.        (line  441)
61893* mbe8:                                  ARM Options.        (line   72)
61894* mbig:                                  RS/6000 and PowerPC Options.
61895                                                             (line  439)
61896* mbig-endian:                           AArch64 Options.    (line   20)
61897* mbig-endian <1>:                       ARC Options.        (line  596)
61898* mbig-endian <2>:                       ARM Options.        (line   67)
61899* mbig-endian <3>:                       C6X Options.        (line   13)
61900* mbig-endian <4>:                       C-SKY Options.      (line   28)
61901* mbig-endian <5>:                       eBPF Options.       (line   22)
61902* mbig-endian <6>:                       IA-64 Options.      (line    9)
61903* mbig-endian <7>:                       MCore Options.      (line   39)
61904* mbig-endian <8>:                       MicroBlaze Options. (line   56)
61905* mbig-endian <9>:                       NDS32 Options.      (line    9)
61906* mbig-endian <10>:                      RS/6000 and PowerPC Options.
61907                                                             (line  439)
61908* mbig-endian <11>:                      TILE-Gx Options.    (line   29)
61909* mbig-endian-data:                      RX Options.         (line   42)
61910* mbig-switch:                           V850 Options.       (line  176)
61911* mbigtable:                             SH Options.         (line  141)
61912* mbionic:                               GNU/Linux Options.  (line   22)
61913* mbit-align:                            RS/6000 and PowerPC Options.
61914                                                             (line  391)
61915* mbit-ops:                              CR16 Options.       (line   25)
61916* mbitfield:                             M680x0 Options.     (line  231)
61917* mbitops:                               MeP Options.        (line   26)
61918* mbitops <1>:                           SH Options.         (line  145)
61919* mblock-compare-inline-limit:           RS/6000 and PowerPC Options.
61920                                                             (line  693)
61921* mblock-compare-inline-loop-limit:      RS/6000 and PowerPC Options.
61922                                                             (line  699)
61923* mblock-move-inline-limit:              RS/6000 and PowerPC Options.
61924                                                             (line  687)
61925* mbmi:                                  x86 Options.        (line  812)
61926* mbmi2:                                 x86 Options.        (line  813)
61927* mboard:                                OpenRISC Options.   (line    9)
61928* mbranch-cost:                          Adapteva Epiphany Options.
61929                                                             (line   18)
61930* mbranch-cost <1>:                      AVR Options.        (line  185)
61931* mbranch-cost <2>:                      MIPS Options.       (line  785)
61932* mbranch-cost <3>:                      RISC-V Options.     (line    9)
61933* mbranch-cost=:                         C-SKY Options.      (line  143)
61934* mbranch-cost=NUM:                      SH Options.         (line  334)
61935* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
61936* mbranch-index:                         ARC Options.        (line  329)
61937* mbranch-likely:                        MIPS Options.       (line  792)
61938* mbranch-predict:                       MMIX Options.       (line   48)
61939* mbranch-protection:                    AArch64 Options.    (line  296)
61940* mbss-plt:                              RS/6000 and PowerPC Options.
61941                                                             (line  160)
61942* mbuild-constants:                      DEC Alpha Options.  (line  141)
61943* mbwx:                                  DEC Alpha Options.  (line  163)
61944* mbypass-cache:                         Nios II Options.    (line  103)
61945* mc68000:                               M680x0 Options.     (line   93)
61946* mc68020:                               M680x0 Options.     (line  107)
61947* mc=:                                   MeP Options.        (line   31)
61948* mcache:                                C-SKY Options.      (line   77)
61949* mcache-block-size:                     NDS32 Options.      (line   60)
61950* mcache-volatile:                       Nios II Options.    (line  109)
61951* mcall-eabi:                            RS/6000 and PowerPC Options.
61952                                                             (line  514)
61953* mcall-freebsd:                         RS/6000 and PowerPC Options.
61954                                                             (line  528)
61955* mcall-linux:                           RS/6000 and PowerPC Options.
61956                                                             (line  524)
61957* mcall-ms2sysv-xlogues:                 x86 Options.        (line 1059)
61958* mcall-netbsd:                          RS/6000 and PowerPC Options.
61959                                                             (line  532)
61960* mcall-netbsd <1>:                      RS/6000 and PowerPC Options.
61961                                                             (line  536)
61962* mcall-prologues:                       AVR Options.        (line  190)
61963* mcall-sysv:                            RS/6000 and PowerPC Options.
61964                                                             (line  506)
61965* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
61966                                                             (line  514)
61967* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
61968                                                             (line  517)
61969* mcallee-super-interworking:            ARM Options.        (line  851)
61970* mcaller-copies:                        HPPA Options.       (line   23)
61971* mcaller-super-interworking:            ARM Options.        (line  858)
61972* mcallgraph-data:                       MCore Options.      (line   31)
61973* mcase-vector-pcrel:                    ARC Options.        (line  450)
61974* mcbcond:                               SPARC Options.      (line  260)
61975* mcbranch-force-delay-slot:             SH Options.         (line  349)
61976* mcc-init:                              CRIS Options.       (line   42)
61977* mccrt:                                 C-SKY Options.      (line  139)
61978* mcfv4e:                                M680x0 Options.     (line  169)
61979* mcheck-zero-division:                  MIPS Options.       (line  570)
61980* mcix:                                  DEC Alpha Options.  (line  163)
61981* mcld:                                  x86 Options.        (line  892)
61982* mcldemote:                             x86 Options.        (line  841)
61983* mclear-hwcap:                          Solaris 2 Options.  (line    9)
61984* mclflushopt:                           x86 Options.        (line  790)
61985* mclip:                                 MeP Options.        (line   35)
61986* mclwb:                                 x86 Options.        (line  791)
61987* mclzero:                               x86 Options.        (line  824)
61988* mcmodel:                               NDS32 Options.      (line   67)
61989* mcmodel <1>:                           SPARC Options.      (line  320)
61990* mcmodel=kernel:                        x86 Options.        (line 1459)
61991* mcmodel=large:                         AArch64 Options.    (line   45)
61992* mcmodel=large <1>:                     RS/6000 and PowerPC Options.
61993                                                             (line  130)
61994* mcmodel=large <2>:                     TILE-Gx Options.    (line   14)
61995* mcmodel=large <3>:                     x86 Options.        (line 1471)
61996* mcmodel=medany:                        RISC-V Options.     (line  105)
61997* mcmodel=medium:                        RS/6000 and PowerPC Options.
61998                                                             (line  125)
61999* mcmodel=medium <1>:                    x86 Options.        (line 1464)
62000* mcmodel=medlow:                        RISC-V Options.     (line   98)
62001* mcmodel=small:                         AArch64 Options.    (line   39)
62002* mcmodel=small <1>:                     RS/6000 and PowerPC Options.
62003                                                             (line  121)
62004* mcmodel=small <2>:                     TILE-Gx Options.    (line    9)
62005* mcmodel=small <3>:                     x86 Options.        (line 1453)
62006* mcmodel=tiny:                          AArch64 Options.    (line   34)
62007* mcmov:                                 NDS32 Options.      (line   21)
62008* mcmov <1>:                             OpenRISC Options.   (line   45)
62009* mcmove:                                Adapteva Epiphany Options.
62010                                                             (line   23)
62011* mcmpb:                                 RS/6000 and PowerPC Options.
62012                                                             (line   25)
62013* mcmse:                                 ARM Options.        (line  950)
62014* mcode-density:                         ARC Options.        (line  163)
62015* mcode-density-frame:                   ARC Options.        (line  511)
62016* mcode-readable:                        MIPS Options.       (line  530)
62017* mcode-region:                          MSP430 Options.     (line  135)
62018* mcompact-branches=always:              MIPS Options.       (line  804)
62019* mcompact-branches=never:               MIPS Options.       (line  804)
62020* mcompact-branches=optimal:             MIPS Options.       (line  804)
62021* mcompact-casesi:                       ARC Options.        (line  454)
62022* mcompat-align-parm:                    RS/6000 and PowerPC Options.
62023                                                             (line  898)
62024* mcompress:                             FT32 Options.       (line   26)
62025* mcond-exec:                            FRV Options.        (line  187)
62026* mcond-move:                            FRV Options.        (line  159)
62027* mconfig=:                              MeP Options.        (line   39)
62028* mconsole:                              x86 Windows Options.
62029                                                             (line    9)
62030* mconst-align:                          CRIS Options.       (line   55)
62031* mconst16:                              Xtensa Options.     (line   10)
62032* mconstant-gp:                          IA-64 Options.      (line   46)
62033* mconstpool:                            C-SKY Options.      (line  127)
62034* mcop:                                  MeP Options.        (line   48)
62035* mcop32:                                MeP Options.        (line   53)
62036* mcop64:                                MeP Options.        (line   56)
62037* mcorea:                                Blackfin Options.   (line  154)
62038* mcoreb:                                Blackfin Options.   (line  161)
62039* mcp:                                   C-SKY Options.      (line   74)
62040* mcpu:                                  AArch64 Options.    (line  243)
62041* mcpu <1>:                              ARC Options.        (line   18)
62042* mcpu <2>:                              ARM Options.        (line  620)
62043* mcpu <3>:                              CRIS Options.       (line   10)
62044* mcpu <4>:                              DEC Alpha Options.  (line  215)
62045* mcpu <5>:                              FRV Options.        (line  258)
62046* mcpu <6>:                              M680x0 Options.     (line   28)
62047* mcpu <7>:                              picoChip Options.   (line    9)
62048* mcpu <8>:                              RL78 Options.       (line   32)
62049* mcpu <9>:                              RS/6000 and PowerPC Options.
62050                                                             (line   62)
62051* mcpu <10>:                             RX Options.         (line   30)
62052* mcpu <11>:                             SPARC Options.      (line  115)
62053* mcpu <12>:                             TILE-Gx Options.    (line   18)
62054* mcpu <13>:                             TILEPro Options.    (line    9)
62055* mcpu <14>:                             Visium Options.     (line   33)
62056* mcpu <15>:                             x86 Options.        (line  464)
62057* mcpu32:                                M680x0 Options.     (line  135)
62058* mcpu=:                                 Blackfin Options.   (line    7)
62059* mcpu= <1>:                             C-SKY Options.      (line   14)
62060* mcpu= <2>:                             M32C Options.       (line    7)
62061* mcpu= <3>:                             MicroBlaze Options. (line   20)
62062* mcpu= <4>:                             MSP430 Options.     (line   72)
62063* mcr16c:                                CR16 Options.       (line   14)
62064* mcr16cplus:                            CR16 Options.       (line   14)
62065* mcrc:                                  MIPS Options.       (line  416)
62066* mcrc32:                                x86 Options.        (line  960)
62067* mcrypto:                               RS/6000 and PowerPC Options.
62068                                                             (line  177)
62069* mcsync-anomaly:                        Blackfin Options.   (line   57)
62070* mcsync-anomaly <1>:                    Blackfin Options.   (line   63)
62071* mctor-dtor:                            NDS32 Options.      (line   81)
62072* mcustom-fpu-cfg:                       Nios II Options.    (line  259)
62073* mcustom-INSN:                          Nios II Options.    (line  139)
62074* mcx16:                                 x86 Options.        (line  933)
62075* MD:                                    Preprocessor Options.
62076                                                             (line  169)
62077* mdalign:                               SH Options.         (line  132)
62078* mdata-align:                           CRIS Options.       (line   55)
62079* mdata-model:                           CR16 Options.       (line   28)
62080* mdata-region:                          MSP430 Options.     (line  135)
62081* mdc:                                   MeP Options.        (line   62)
62082* mdebug:                                M32R/D Options.     (line   69)
62083* mdebug <1>:                            S/390 and zSeries Options.
62084                                                             (line  144)
62085* mdebug <2>:                            Visium Options.     (line    7)
62086* mdebug-main=PREFIX:                    VMS Options.        (line   13)
62087* mdec-asm:                              PDP-11 Options.     (line   46)
62088* mdisable-callt:                        V850 Options.       (line   92)
62089* mdisable-fpregs:                       HPPA Options.       (line   34)
62090* mdisable-indexing:                     HPPA Options.       (line   40)
62091* mdiv:                                  C-SKY Options.      (line   93)
62092* mdiv <1>:                              M680x0 Options.     (line  206)
62093* mdiv <2>:                              MCore Options.      (line   15)
62094* mdiv <3>:                              MeP Options.        (line   65)
62095* mdiv <4>:                              RISC-V Options.     (line   49)
62096* mdiv-rem:                              ARC Options.        (line  160)
62097* mdiv=STRATEGY:                         SH Options.         (line  284)
62098* mdivide-breaks:                        MIPS Options.       (line  576)
62099* mdivide-enabled:                       LM32 Options.       (line   12)
62100* mdivide-traps:                         MIPS Options.       (line  576)
62101* mdivsi3_libfunc=NAME:                  SH Options.         (line  320)
62102* mdll:                                  x86 Windows Options.
62103                                                             (line   16)
62104* mdlmzb:                                RS/6000 and PowerPC Options.
62105                                                             (line  384)
62106* mdmx:                                  MIPS Options.       (line  376)
62107* mdouble:                               AVR Options.        (line  195)
62108* mdouble <1>:                           FRV Options.        (line   48)
62109* mdouble-float:                         C-SKY Options.      (line   42)
62110* mdouble-float <1>:                     MIPS Options.       (line  288)
62111* mdouble-float <2>:                     OpenRISC Options.   (line   33)
62112* mdpfp:                                 ARC Options.        (line   99)
62113* mdpfp-compact:                         ARC Options.        (line  100)
62114* mdpfp-fast:                            ARC Options.        (line  104)
62115* mdpfp_compact:                         ARC Options.        (line  616)
62116* mdpfp_fast:                            ARC Options.        (line  619)
62117* mdsp:                                  C-SKY Options.      (line   86)
62118* mdsp <1>:                              MIPS Options.       (line  353)
62119* mdsp-packa:                            ARC Options.        (line  335)
62120* mdspr2:                                MIPS Options.       (line  359)
62121* mdsp_packa:                            ARC Options.        (line  622)
62122* mdump-tune-features:                   x86 Options.        (line  874)
62123* mdvbf:                                 ARC Options.        (line  340)
62124* mdwarf2-asm:                           IA-64 Options.      (line   94)
62125* mdword:                                FRV Options.        (line   40)
62126* mdword <1>:                            FRV Options.        (line   44)
62127* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
62128                                                             (line  444)
62129* mea:                                   ARC Options.        (line  112)
62130* mEA:                                   ARC Options.        (line  625)
62131* meabi:                                 RS/6000 and PowerPC Options.
62132                                                             (line  632)
62133* mearly-cbranchsi:                      ARC Options.        (line  476)
62134* mearly-stop-bits:                      IA-64 Options.      (line  100)
62135* meb:                                   MeP Options.        (line   68)
62136* meb <1>:                               Moxie Options.      (line    7)
62137* meb <2>:                               Nios II Options.    (line   90)
62138* meb <3>:                               Score Options.      (line    9)
62139* medsp:                                 C-SKY Options.      (line   87)
62140* mel:                                   MeP Options.        (line   71)
62141* mel <1>:                               Moxie Options.      (line   11)
62142* mel <2>:                               Nios II Options.    (line   90)
62143* mel <3>:                               Score Options.      (line   12)
62144* melf:                                  CRIS Options.       (line   87)
62145* melf <1>:                              MMIX Options.       (line   43)
62146* melrw:                                 C-SKY Options.      (line   60)
62147* memb:                                  RS/6000 and PowerPC Options.
62148                                                             (line  627)
62149* membedded-data:                        MIPS Options.       (line  517)
62150* memregs=:                              M32C Options.       (line   21)
62151* menqcmd:                               x86 Options.        (line  835)
62152* mep:                                   V850 Options.       (line   16)
62153* mepsilon:                              MMIX Options.       (line   15)
62154* mesa:                                  S/390 and zSeries Options.
62155                                                             (line   94)
62156* metrax100:                             CRIS Options.       (line   27)
62157* metrax4:                               CRIS Options.       (line   27)
62158* meva:                                  MIPS Options.       (line  403)
62159* mexpand-adddi:                         ARC Options.        (line  479)
62160* mexplicit-relocs:                      DEC Alpha Options.  (line  176)
62161* mexplicit-relocs <1>:                  MIPS Options.       (line  561)
62162* mexr:                                  H8/300 Options.     (line   28)
62163* mexr <1>:                              H8/300 Options.     (line   33)
62164* mext-perf:                             NDS32 Options.      (line   27)
62165* mext-perf2:                            NDS32 Options.      (line   33)
62166* mext-string:                           NDS32 Options.      (line   39)
62167* mextern-sdata:                         MIPS Options.       (line  480)
62168* MF:                                    Preprocessor Options.
62169                                                             (line  111)
62170* mf16c:                                 x86 Options.        (line  795)
62171* mfancy-math-387:                       x86 Options.        (line  559)
62172* mfast-fp:                              Blackfin Options.   (line  130)
62173* mfast-indirect-calls:                  HPPA Options.       (line   52)
62174* mfast-sw-div:                          Nios II Options.    (line  115)
62175* mfaster-structs:                       SPARC Options.      (line   91)
62176* mfdiv:                                 RISC-V Options.     (line   42)
62177* mfdivdu:                               C-SKY Options.      (line   48)
62178* mfdpic:                                ARM Options.        (line  965)
62179* mfdpic <1>:                            FRV Options.        (line   72)
62180* mfentry:                               x86 Options.        (line 1293)
62181* mfentry-name:                          x86 Options.        (line 1324)
62182* mfentry-section:                       x86 Options.        (line 1328)
62183* mfix:                                  DEC Alpha Options.  (line  163)
62184* mfix-24k:                              MIPS Options.       (line  641)
62185* mfix-and-continue:                     Darwin Options.     (line  104)
62186* mfix-at697f:                           SPARC Options.      (line  294)
62187* mfix-cmse-cve-2021-35465:              ARM Options.        (line  956)
62188* mfix-cortex-a53-835769:                AArch64 Options.    (line  105)
62189* mfix-cortex-a53-843419:                AArch64 Options.    (line  112)
62190* mfix-cortex-m3-ldrd:                   ARM Options.        (line  892)
62191* mfix-gr712rc:                          SPARC Options.      (line  307)
62192* mfix-r10000:                           MIPS Options.       (line  663)
62193* mfix-r4000:                            MIPS Options.       (line  647)
62194* mfix-r4400:                            MIPS Options.       (line  657)
62195* mfix-r5900:                            MIPS Options.       (line  674)
62196* mfix-rm7000:                           MIPS Options.       (line  684)
62197* mfix-sb1:                              MIPS Options.       (line  709)
62198* mfix-ut699:                            SPARC Options.      (line  299)
62199* mfix-ut700:                            SPARC Options.      (line  303)
62200* mfix-vr4120:                           MIPS Options.       (line  689)
62201* mfix-vr4130:                           MIPS Options.       (line  702)
62202* mfixed-cc:                             FRV Options.        (line   35)
62203* mfixed-range:                          HPPA Options.       (line   59)
62204* mfixed-range <1>:                      IA-64 Options.      (line  105)
62205* mfixed-range <2>:                      SH Options.         (line  327)
62206* mflat:                                 SPARC Options.      (line   22)
62207* mflip-mips16:                          MIPS Options.       (line  128)
62208* mflip-thumb:                           ARM Options.        (line  834)
62209* mfloat-abi:                            ARM Options.        (line   41)
62210* mfloat-ieee:                           DEC Alpha Options.  (line  171)
62211* mfloat-vax:                            DEC Alpha Options.  (line  171)
62212* mfloat128:                             RS/6000 and PowerPC Options.
62213                                                             (line  214)
62214* mfloat128-hardware:                    RS/6000 and PowerPC Options.
62215                                                             (line  235)
62216* mflush-func:                           MIPS Options.       (line  776)
62217* mflush-func=NAME:                      M32R/D Options.     (line   93)
62218* mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
62219* mfma:                                  x86 Options.        (line  796)
62220* mfma4:                                 x86 Options.        (line  799)
62221* mfmaf:                                 SPARC Options.      (line  267)
62222* mfmovd:                                SH Options.         (line  148)
62223* mforce-indirect-call:                  x86 Options.        (line 1048)
62224* mforce-no-pic:                         Xtensa Options.     (line   41)
62225* mfp-exceptions:                        MIPS Options.       (line  824)
62226* mfp-mode:                              Adapteva Epiphany Options.
62227                                                             (line   71)
62228* mfp-reg:                               DEC Alpha Options.  (line   25)
62229* mfp-ret-in-387:                        x86 Options.        (line  549)
62230* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
62231* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
62232* mfp16-format:                          ARM Options.        (line  728)
62233* mfp32:                                 MIPS Options.       (line  258)
62234* mfp64:                                 MIPS Options.       (line  261)
62235* mfpmath:                               Optimize Options.   (line 2226)
62236* mfpmath <1>:                           x86 Options.        (line  467)
62237* mfpr-32:                               FRV Options.        (line   15)
62238* mfpr-64:                               FRV Options.        (line   19)
62239* mfprnd:                                RS/6000 and PowerPC Options.
62240                                                             (line   25)
62241* mfpu:                                  ARC Options.        (line  231)
62242* mfpu <1>:                              ARM Options.        (line  700)
62243* mfpu <2>:                              PDP-11 Options.     (line    9)
62244* mfpu <3>:                              SPARC Options.      (line   34)
62245* mfpu <4>:                              Visium Options.     (line   19)
62246* mfpu=:                                 C-SKY Options.      (line   53)
62247* mfpxx:                                 MIPS Options.       (line  264)
62248* mfract-convert-truncate:               AVR Options.        (line  286)
62249* mframe-header-opt:                     MIPS Options.       (line  885)
62250* mfriz:                                 RS/6000 and PowerPC Options.
62251                                                             (line  869)
62252* mfsca:                                 SH Options.         (line  365)
62253* mfsgsbase:                             x86 Options.        (line  792)
62254* mfsmuld:                               SPARC Options.      (line  274)
62255* mfsrra:                                SH Options.         (line  374)
62256* mft32b:                                FT32 Options.       (line   23)
62257* mfull-regs:                            NDS32 Options.      (line   18)
62258* mfull-toc:                             RS/6000 and PowerPC Options.
62259                                                             (line  255)
62260* mfunction-return:                      x86 Options.        (line 1396)
62261* mfused-madd:                           IA-64 Options.      (line   88)
62262* mfused-madd <1>:                       MIPS Options.       (line  624)
62263* mfused-madd <2>:                       RS/6000 and PowerPC Options.
62264                                                             (line  368)
62265* mfused-madd <3>:                       S/390 and zSeries Options.
62266                                                             (line  182)
62267* mfused-madd <4>:                       SH Options.         (line  356)
62268* mfused-madd <5>:                       Xtensa Options.     (line   19)
62269* mfxsr:                                 x86 Options.        (line  815)
62270* MG:                                    Preprocessor Options.
62271                                                             (line  122)
62272* mg:                                    VAX Options.        (line   17)
62273* mg10:                                  RL78 Options.       (line   62)
62274* mg13:                                  RL78 Options.       (line   62)
62275* mg14:                                  RL78 Options.       (line   62)
62276* mgas:                                  HPPA Options.       (line   75)
62277* mgas-isr-prologues:                    AVR Options.        (line  203)
62278* mgcc-abi:                              V850 Options.       (line  148)
62279* mgeneral-regs-only:                    AArch64 Options.    (line   24)
62280* mgeneral-regs-only <1>:                ARM Options.        (line   57)
62281* mgeneral-regs-only <2>:                x86 Options.        (line 1372)
62282* mgfni:                                 x86 Options.        (line  828)
62283* mghs:                                  V850 Options.       (line  127)
62284* mginv:                                 MIPS Options.       (line  421)
62285* mglibc:                                GNU/Linux Options.  (line    9)
62286* mgnu:                                  VAX Options.        (line   13)
62287* mgnu-as:                               IA-64 Options.      (line   18)
62288* mgnu-asm:                              PDP-11 Options.     (line   49)
62289* mgnu-attribute:                        RS/6000 and PowerPC Options.
62290                                                             (line  586)
62291* mgnu-ld:                               HPPA Options.       (line  111)
62292* mgnu-ld <1>:                           IA-64 Options.      (line   23)
62293* mgomp:                                 Nvidia PTX Options. (line   53)
62294* mgotplt:                               CRIS Options.       (line   81)
62295* mgp32:                                 MIPS Options.       (line  252)
62296* mgp64:                                 MIPS Options.       (line  255)
62297* mgpopt:                                MIPS Options.       (line  502)
62298* mgpopt <1>:                            Nios II Options.    (line   16)
62299* mgpr-32:                               FRV Options.        (line    7)
62300* mgpr-64:                               FRV Options.        (line   11)
62301* mgprel-ro:                             FRV Options.        (line   99)
62302* mgprel-sec:                            Nios II Options.    (line   65)
62303* mh:                                    H8/300 Options.     (line   14)
62304* mhal:                                  Nios II Options.    (line  304)
62305* mhalf-reg-file:                        Adapteva Epiphany Options.
62306                                                             (line    9)
62307* mhard-dfp:                             RS/6000 and PowerPC Options.
62308                                                             (line   25)
62309* mhard-dfp <1>:                         S/390 and zSeries Options.
62310                                                             (line   20)
62311* mhard-div:                             OpenRISC Options.   (line   19)
62312* mhard-float:                           C-SKY Options.      (line   35)
62313* mhard-float <1>:                       FRV Options.        (line   23)
62314* mhard-float <2>:                       M680x0 Options.     (line  194)
62315* mhard-float <3>:                       MicroBlaze Options. (line   10)
62316* mhard-float <4>:                       MIPS Options.       (line  267)
62317* mhard-float <5>:                       OpenRISC Options.   (line   29)
62318* mhard-float <6>:                       RS/6000 and PowerPC Options.
62319                                                             (line  332)
62320* mhard-float <7>:                       S/390 and zSeries Options.
62321                                                             (line   11)
62322* mhard-float <8>:                       SPARC Options.      (line   34)
62323* mhard-float <9>:                       V850 Options.       (line  113)
62324* mhard-float <10>:                      Visium Options.     (line   19)
62325* mhard-float <11>:                      x86 Options.        (line  532)
62326* mhard-mul:                             OpenRISC Options.   (line   24)
62327* mhard-quad-float:                      SPARC Options.      (line   55)
62328* mharden-sls:                           AArch64 Options.    (line  309)
62329* mhardlit:                              MCore Options.      (line   10)
62330* mhigh-registers:                       C-SKY Options.      (line  104)
62331* mhle:                                  x86 Options.        (line  821)
62332* mhotpatch:                             S/390 and zSeries Options.
62333                                                             (line  217)
62334* mhp-ld:                                HPPA Options.       (line  123)
62335* mhtm:                                  RS/6000 and PowerPC Options.
62336                                                             (line  183)
62337* mhtm <1>:                              S/390 and zSeries Options.
62338                                                             (line  104)
62339* mhw-div:                               Nios II Options.    (line  124)
62340* mhw-mul:                               Nios II Options.    (line  124)
62341* mhw-mulx:                              Nios II Options.    (line  124)
62342* mhwmult=:                              MSP430 Options.     (line   93)
62343* miamcu:                                x86 Options.        (line 1425)
62344* micplb:                                Blackfin Options.   (line  175)
62345* mid-shared-library:                    Blackfin Options.   (line   78)
62346* mid-shared-library <1>:                Blackfin Options.   (line   85)
62347* mieee:                                 DEC Alpha Options.  (line   39)
62348* mieee <1>:                             SH Options.         (line  165)
62349* mieee-conformant:                      DEC Alpha Options.  (line  134)
62350* mieee-fp:                              x86 Options.        (line  526)
62351* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
62352* milp32:                                IA-64 Options.      (line  121)
62353* mimadd:                                MIPS Options.       (line  617)
62354* mimpure-text:                          Solaris 2 Options.  (line   15)
62355* mincoming-stack-boundary:              x86 Options.        (line  742)
62356* mindexed-loads:                        ARC Options.        (line  483)
62357* mindirect-branch:                      x86 Options.        (line 1377)
62358* mindirect-branch-register:             x86 Options.        (line 1415)
62359* minline-all-stringops:                 x86 Options.        (line 1224)
62360* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
62361* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
62362* minline-ic_invalidate:                 SH Options.         (line  174)
62363* minline-int-divide:                    IA-64 Options.      (line   73)
62364* minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
62365* minline-int-divide-min-latency:        IA-64 Options.      (line   65)
62366* minline-plt:                           Blackfin Options.   (line  135)
62367* minline-plt <1>:                       FRV Options.        (line   81)
62368* minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
62369* minline-sqrt-min-latency:              IA-64 Options.      (line   76)
62370* minline-stringops-dynamically:         x86 Options.        (line 1232)
62371* minrt:                                 MSP430 Options.     (line  115)
62372* minrt <1>:                             PRU Options.        (line    9)
62373* minsert-sched-nops:                    RS/6000 and PowerPC Options.
62374                                                             (line  484)
62375* minstrument-return:                    x86 Options.        (line 1312)
62376* mint-register:                         RX Options.         (line  100)
62377* mint16:                                PDP-11 Options.     (line   33)
62378* mint32:                                CR16 Options.       (line   22)
62379* mint32 <1>:                            H8/300 Options.     (line   38)
62380* mint32 <2>:                            PDP-11 Options.     (line   37)
62381* mint8:                                 AVR Options.        (line  213)
62382* minterlink-compressed:                 MIPS Options.       (line  135)
62383* minterlink-mips16:                     MIPS Options.       (line  147)
62384* mio-volatile:                          MeP Options.        (line   74)
62385* mips1:                                 MIPS Options.       (line   80)
62386* mips16:                                MIPS Options.       (line  120)
62387* mips2:                                 MIPS Options.       (line   83)
62388* mips3:                                 MIPS Options.       (line   86)
62389* mips32:                                MIPS Options.       (line   92)
62390* mips32r3:                              MIPS Options.       (line   95)
62391* mips32r5:                              MIPS Options.       (line   98)
62392* mips32r6:                              MIPS Options.       (line  101)
62393* mips3d:                                MIPS Options.       (line  382)
62394* mips4:                                 MIPS Options.       (line   89)
62395* mips64:                                MIPS Options.       (line  104)
62396* mips64r2:                              MIPS Options.       (line  107)
62397* mips64r3:                              MIPS Options.       (line  110)
62398* mips64r5:                              MIPS Options.       (line  113)
62399* mips64r6:                              MIPS Options.       (line  116)
62400* mirq-ctrl-saved:                       ARC Options.        (line  296)
62401* misel:                                 RS/6000 and PowerPC Options.
62402                                                             (line  166)
62403* misize:                                ARC Options.        (line  379)
62404* misize <1>:                            SH Options.         (line  186)
62405* misr-vector-size:                      NDS32 Options.      (line   57)
62406* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
62407* mistack:                               C-SKY Options.      (line   65)
62408* mivc2:                                 MeP Options.        (line   59)
62409* mjli-alawys:                           ARC Options.        (line   14)
62410* mjsr:                                  RX Options.         (line  169)
62411* mjump-in-delay:                        HPPA Options.       (line   30)
62412* mkernel:                               Darwin Options.     (line   82)
62413* mkernel <1>:                           eBPF Options.       (line   13)
62414* mknuthdiv:                             MMIX Options.       (line   32)
62415* ml:                                    MeP Options.        (line   78)
62416* ml <1>:                                SH Options.         (line  129)
62417* mlarge:                                MSP430 Options.     (line   82)
62418* mlarge-data:                           DEC Alpha Options.  (line  187)
62419* mlarge-data-threshold:                 x86 Options.        (line  631)
62420* mlarge-text:                           DEC Alpha Options.  (line  205)
62421* mleadz:                                MeP Options.        (line   81)
62422* mleaf-id-shared-library:               Blackfin Options.   (line   89)
62423* mleaf-id-shared-library <1>:           Blackfin Options.   (line   95)
62424* mlibfuncs:                             MMIX Options.       (line   10)
62425* mlibrary-pic:                          FRV Options.        (line  135)
62426* mlinked-fp:                            FRV Options.        (line  116)
62427* mlinker-opt:                           HPPA Options.       (line   85)
62428* mlinux:                                CRIS Options.       (line   91)
62429* mlittle:                               RS/6000 and PowerPC Options.
62430                                                             (line  433)
62431* mlittle-endian:                        AArch64 Options.    (line   30)
62432* mlittle-endian <1>:                    ARC Options.        (line  605)
62433* mlittle-endian <2>:                    ARM Options.        (line   63)
62434* mlittle-endian <3>:                    C6X Options.        (line   16)
62435* mlittle-endian <4>:                    C-SKY Options.      (line   30)
62436* mlittle-endian <5>:                    eBPF Options.       (line   25)
62437* mlittle-endian <6>:                    IA-64 Options.      (line   13)
62438* mlittle-endian <7>:                    MCore Options.      (line   39)
62439* mlittle-endian <8>:                    MicroBlaze Options. (line   59)
62440* mlittle-endian <9>:                    NDS32 Options.      (line   12)
62441* mlittle-endian <10>:                   RS/6000 and PowerPC Options.
62442                                                             (line  433)
62443* mlittle-endian <11>:                   TILE-Gx Options.    (line   29)
62444* mlittle-endian-data:                   RX Options.         (line   42)
62445* mliw:                                  MN10300 Options.    (line   54)
62446* mll64:                                 ARC Options.        (line  167)
62447* mllsc:                                 MIPS Options.       (line  339)
62448* mload-store-pairs:                     MIPS Options.       (line  590)
62449* mlocal-sdata:                          MIPS Options.       (line  468)
62450* mlock:                                 ARC Options.        (line  345)
62451* mlong-calls:                           Adapteva Epiphany Options.
62452                                                             (line   55)
62453* mlong-calls <1>:                       ARC Options.        (line  404)
62454* mlong-calls <2>:                       ARM Options.        (line  755)
62455* mlong-calls <3>:                       Blackfin Options.   (line  118)
62456* mlong-calls <4>:                       FRV Options.        (line  122)
62457* mlong-calls <5>:                       HPPA Options.       (line  136)
62458* mlong-calls <6>:                       MIPS Options.       (line  603)
62459* mlong-calls <7>:                       V850 Options.       (line   10)
62460* mlong-double:                          AVR Options.        (line  195)
62461* mlong-double-128:                      S/390 and zSeries Options.
62462                                                             (line   29)
62463* mlong-double-128 <1>:                  x86 Options.        (line  610)
62464* mlong-double-64:                       S/390 and zSeries Options.
62465                                                             (line   29)
62466* mlong-double-64 <1>:                   x86 Options.        (line  610)
62467* mlong-double-80:                       x86 Options.        (line  610)
62468* mlong-jump-table-offsets:              M680x0 Options.     (line  339)
62469* mlong-jumps:                           V850 Options.       (line  108)
62470* mlong-load-store:                      HPPA Options.       (line   66)
62471* mlong32:                               MIPS Options.       (line  443)
62472* mlong64:                               MIPS Options.       (line  438)
62473* mlongcall:                             RS/6000 and PowerPC Options.
62474                                                             (line  727)
62475* mlongcalls:                            Xtensa Options.     (line   87)
62476* mloongson-ext:                         MIPS Options.       (line  430)
62477* mloongson-ext2:                        MIPS Options.       (line  434)
62478* mloongson-mmi:                         MIPS Options.       (line  425)
62479* mloop:                                 PRU Options.        (line   25)
62480* mloop <1>:                             V850 Options.       (line  121)
62481* mlow-precision-div:                    AArch64 Options.    (line  135)
62482* mlow-precision-recip-sqrt:             AArch64 Options.    (line  118)
62483* mlow-precision-sqrt:                   AArch64 Options.    (line  126)
62484* mlow64k:                               Blackfin Options.   (line   67)
62485* mlp64:                                 IA-64 Options.      (line  121)
62486* mlpc-width:                            ARC Options.        (line  313)
62487* mlra:                                  ARC Options.        (line  488)
62488* mlra <1>:                              FT32 Options.       (line   16)
62489* mlra <2>:                              PDP-11 Options.     (line   52)
62490* mlra <3>:                              SPARC Options.      (line  111)
62491* mlra-priority-compact:                 ARC Options.        (line  496)
62492* mlra-priority-noncompact:              ARC Options.        (line  499)
62493* mlra-priority-none:                    ARC Options.        (line  493)
62494* mlwp:                                  x86 Options.        (line  806)
62495* mlxc1-sxc1:                            MIPS Options.       (line  895)
62496* mlzcnt:                                x86 Options.        (line  814)
62497* MM:                                    Preprocessor Options.
62498                                                             (line  102)
62499* mm:                                    MeP Options.        (line   84)
62500* mmac:                                  CR16 Options.       (line    9)
62501* mmac <1>:                              Score Options.      (line   21)
62502* mmac-24:                               ARC Options.        (line  354)
62503* mmac-d16:                              ARC Options.        (line  350)
62504* mmac_24:                               ARC Options.        (line  628)
62505* mmac_d16:                              ARC Options.        (line  631)
62506* mmad:                                  MIPS Options.       (line  612)
62507* mmadd4:                                MIPS Options.       (line  900)
62508* mmain-is-OS_task:                      AVR Options.        (line  219)
62509* mmainkernel:                           Nvidia PTX Options. (line   18)
62510* mmalloc64:                             VMS Options.        (line   17)
62511* mmanual-endbr:                         x86 Options.        (line 1053)
62512* mmax:                                  DEC Alpha Options.  (line  163)
62513* mmax-constant-size:                    RX Options.         (line   82)
62514* mmax-stack-frame:                      CRIS Options.       (line   23)
62515* mmcount-ra-address:                    MIPS Options.       (line  872)
62516* mmcu:                                  AVR Options.        (line    9)
62517* mmcu <1>:                              MIPS Options.       (line  399)
62518* mmcu <2>:                              PRU Options.        (line   17)
62519* mmcu=:                                 MSP430 Options.     (line   14)
62520* MMD:                                   Preprocessor Options.
62521                                                             (line  185)
62522* mmedia:                                FRV Options.        (line   56)
62523* mmedium-calls:                         ARC Options.        (line  408)
62524* mmemcpy:                               MicroBlaze Options. (line   13)
62525* mmemcpy <1>:                           MIPS Options.       (line  597)
62526* mmemcpy-strategy=STRATEGY:             x86 Options.        (line 1254)
62527* mmemory-latency:                       DEC Alpha Options.  (line  268)
62528* mmemory-model:                         SPARC Options.      (line  348)
62529* mmemset-strategy=STRATEGY:             x86 Options.        (line 1266)
62530* mmfcrf:                                RS/6000 and PowerPC Options.
62531                                                             (line   25)
62532* mmicromips:                            MIPS Options.       (line  387)
62533* mmillicode:                            ARC Options.        (line  502)
62534* mminimal-toc:                          RS/6000 and PowerPC Options.
62535                                                             (line  255)
62536* mminmax:                               MeP Options.        (line   87)
62537* mmixed-code:                           ARC Options.        (line  516)
62538* mmma:                                  RS/6000 and PowerPC Options.
62539                                                             (line  943)
62540* mmmx:                                  x86 Options.        (line  767)
62541* mmodel=large:                          M32R/D Options.     (line   33)
62542* mmodel=medium:                         M32R/D Options.     (line   27)
62543* mmodel=small:                          M32R/D Options.     (line   18)
62544* mmovbe:                                x86 Options.        (line  952)
62545* mmovdir64b:                            x86 Options.        (line  834)
62546* mmovdiri:                              x86 Options.        (line  833)
62547* mmp:                                   C-SKY Options.      (line   71)
62548* mmpy:                                  ARC Options.        (line  117)
62549* mmpy-option:                           ARC Options.        (line  173)
62550* mms-bitfields:                         x86 Options.        (line 1099)
62551* mmt:                                   MIPS Options.       (line  395)
62552* mmul:                                  RL78 Options.       (line   15)
62553* mmul-bug-workaround:                   CRIS Options.       (line   32)
62554* mmul.x:                                Moxie Options.      (line   14)
62555* mmul32x16:                             ARC Options.        (line  121)
62556* mmul64:                                ARC Options.        (line  124)
62557* mmuladd:                               FRV Options.        (line   64)
62558* mmulhw:                                RS/6000 and PowerPC Options.
62559                                                             (line  377)
62560* mmult:                                 MeP Options.        (line   90)
62561* mmult-bug:                             MN10300 Options.    (line    9)
62562* mmultcost:                             ARC Options.        (line  578)
62563* mmulti-cond-exec:                      FRV Options.        (line  215)
62564* mmulticore:                            Blackfin Options.   (line  139)
62565* mmultiple:                             RS/6000 and PowerPC Options.
62566                                                             (line  338)
62567* mmultiple-stld:                        C-SKY Options.      (line  121)
62568* mmusl:                                 GNU/Linux Options.  (line   18)
62569* mmvcle:                                S/390 and zSeries Options.
62570                                                             (line  138)
62571* mmvme:                                 RS/6000 and PowerPC Options.
62572                                                             (line  608)
62573* mmwaitx:                               x86 Options.        (line  823)
62574* mn:                                    H8/300 Options.     (line   20)
62575* mn-flash:                              AVR Options.        (line  224)
62576* mnan=2008:                             MIPS Options.       (line  320)
62577* mnan=legacy:                           MIPS Options.       (line  320)
62578* mneon-for-64bits:                      ARM Options.        (line  912)
62579* mnested-cond-exec:                     FRV Options.        (line  230)
62580* mnewlib:                               OpenRISC Options.   (line   13)
62581* mnhwloop:                              Score Options.      (line   15)
62582* mno-16-bit:                            NDS32 Options.      (line   54)
62583* mno-4byte-functions:                   MCore Options.      (line   27)
62584* mno-8byte-align:                       V850 Options.       (line  170)
62585* mno-abicalls:                          MIPS Options.       (line  192)
62586* mno-ac0:                               PDP-11 Options.     (line   20)
62587* mno-align-double:                      x86 Options.        (line  569)
62588* mno-align-int:                         M680x0 Options.     (line  261)
62589* mno-align-loops:                       M32R/D Options.     (line   76)
62590* mno-align-stringops:                   x86 Options.        (line 1219)
62591* mno-allow-string-insns:                RX Options.         (line  150)
62592* mno-altivec:                           RS/6000 and PowerPC Options.
62593                                                             (line  136)
62594* mno-am33:                              MN10300 Options.    (line   20)
62595* mno-app-regs:                          SPARC Options.      (line   10)
62596* mno-app-regs <1>:                      V850 Options.       (line  185)
62597* mno-as100-syntax:                      RX Options.         (line   76)
62598* mno-auto-litpools:                     Xtensa Options.     (line   60)
62599* mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
62600                                                             (line  359)
62601* mno-backchain:                         S/390 and zSeries Options.
62602                                                             (line   35)
62603* mno-base-addresses:                    MMIX Options.       (line   53)
62604* mno-bit-align:                         RS/6000 and PowerPC Options.
62605                                                             (line  391)
62606* mno-bitfield:                          M680x0 Options.     (line  227)
62607* mno-branch-likely:                     MIPS Options.       (line  792)
62608* mno-branch-predict:                    MMIX Options.       (line   48)
62609* mno-brcc:                              ARC Options.        (line  444)
62610* mno-bwx:                               DEC Alpha Options.  (line  163)
62611* mno-bypass-cache:                      Nios II Options.    (line  103)
62612* mno-cache-volatile:                    Nios II Options.    (line  109)
62613* mno-call-ms2sysv-xlogues:              x86 Options.        (line 1059)
62614* mno-callgraph-data:                    MCore Options.      (line   31)
62615* mno-cbcond:                            SPARC Options.      (line  260)
62616* mno-check-zero-division:               MIPS Options.       (line  570)
62617* mno-cix:                               DEC Alpha Options.  (line  163)
62618* mno-clearbss:                          MicroBlaze Options. (line   16)
62619* mno-cmov:                              NDS32 Options.      (line   24)
62620* mno-cmpb:                              RS/6000 and PowerPC Options.
62621                                                             (line   25)
62622* mno-cond-exec:                         ARC Options.        (line  458)
62623* mno-cond-exec <1>:                     FRV Options.        (line  194)
62624* mno-cond-move:                         FRV Options.        (line  166)
62625* mno-const-align:                       CRIS Options.       (line   55)
62626* mno-const16:                           Xtensa Options.     (line   10)
62627* mno-crc:                               MIPS Options.       (line  416)
62628* mno-crt0:                              MN10300 Options.    (line   43)
62629* mno-crt0 <1>:                          Moxie Options.      (line   18)
62630* mno-crypto:                            RS/6000 and PowerPC Options.
62631                                                             (line  177)
62632* mno-csync-anomaly:                     Blackfin Options.   (line   63)
62633* mno-custom-INSN:                       Nios II Options.    (line  139)
62634* mno-data-align:                        CRIS Options.       (line   55)
62635* mno-debug:                             S/390 and zSeries Options.
62636                                                             (line  144)
62637* mno-default:                           x86 Options.        (line  888)
62638* mno-disable-callt:                     V850 Options.       (line   92)
62639* mno-div:                               M680x0 Options.     (line  206)
62640* mno-div <1>:                           MCore Options.      (line   15)
62641* mno-dlmzb:                             RS/6000 and PowerPC Options.
62642                                                             (line  384)
62643* mno-double:                            FRV Options.        (line   52)
62644* mno-dpfp-lrsr:                         ARC Options.        (line  108)
62645* mno-dsp:                               MIPS Options.       (line  353)
62646* mno-dspr2:                             MIPS Options.       (line  359)
62647* mno-dwarf2-asm:                        IA-64 Options.      (line   94)
62648* mno-dword:                             FRV Options.        (line   44)
62649* mno-eabi:                              RS/6000 and PowerPC Options.
62650                                                             (line  632)
62651* mno-early-stop-bits:                   IA-64 Options.      (line  100)
62652* mno-eflags:                            FRV Options.        (line  155)
62653* mno-embedded-data:                     MIPS Options.       (line  517)
62654* mno-ep:                                V850 Options.       (line   16)
62655* mno-epsilon:                           MMIX Options.       (line   15)
62656* mno-eva:                               MIPS Options.       (line  403)
62657* mno-explicit-relocs:                   DEC Alpha Options.  (line  176)
62658* mno-explicit-relocs <1>:               MIPS Options.       (line  561)
62659* mno-exr:                               H8/300 Options.     (line   33)
62660* mno-ext-perf:                          NDS32 Options.      (line   30)
62661* mno-ext-perf2:                         NDS32 Options.      (line   36)
62662* mno-ext-string:                        NDS32 Options.      (line   42)
62663* mno-extern-sdata:                      MIPS Options.       (line  480)
62664* mno-fancy-math-387:                    x86 Options.        (line  559)
62665* mno-fast-sw-div:                       Nios II Options.    (line  115)
62666* mno-faster-structs:                    SPARC Options.      (line   91)
62667* mno-fdpic:                             ARM Options.        (line  965)
62668* mno-fix:                               DEC Alpha Options.  (line  163)
62669* mno-fix-24k:                           MIPS Options.       (line  641)
62670* mno-fix-cortex-a53-835769:             AArch64 Options.    (line  105)
62671* mno-fix-cortex-a53-843419:             AArch64 Options.    (line  112)
62672* mno-fix-r10000:                        MIPS Options.       (line  663)
62673* mno-fix-r4000:                         MIPS Options.       (line  647)
62674* mno-fix-r4400:                         MIPS Options.       (line  657)
62675* mno-flat:                              SPARC Options.      (line   22)
62676* mno-float:                             MIPS Options.       (line  274)
62677* mno-float128:                          RS/6000 and PowerPC Options.
62678                                                             (line  214)
62679* mno-float128-hardware:                 RS/6000 and PowerPC Options.
62680                                                             (line  235)
62681* mno-flush-func:                        M32R/D Options.     (line   98)
62682* mno-flush-trap:                        M32R/D Options.     (line   90)
62683* mno-fmaf:                              SPARC Options.      (line  267)
62684* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
62685                                                             (line  255)
62686* mno-fp-regs:                           DEC Alpha Options.  (line   25)
62687* mno-fp-ret-in-387:                     x86 Options.        (line  549)
62688* mno-fprnd:                             RS/6000 and PowerPC Options.
62689                                                             (line   25)
62690* mno-fpu:                               SPARC Options.      (line   39)
62691* mno-fpu <1>:                           Visium Options.     (line   24)
62692* mno-fsca:                              SH Options.         (line  365)
62693* mno-fsmuld:                            SPARC Options.      (line  274)
62694* mno-fsrra:                             SH Options.         (line  374)
62695* mno-fused-madd:                        IA-64 Options.      (line   88)
62696* mno-fused-madd <1>:                    MIPS Options.       (line  624)
62697* mno-fused-madd <2>:                    RS/6000 and PowerPC Options.
62698                                                             (line  368)
62699* mno-fused-madd <3>:                    S/390 and zSeries Options.
62700                                                             (line  182)
62701* mno-fused-madd <4>:                    SH Options.         (line  356)
62702* mno-fused-madd <5>:                    Xtensa Options.     (line   19)
62703* mno-ginv:                              MIPS Options.       (line  421)
62704* mno-gnu-as:                            IA-64 Options.      (line   18)
62705* mno-gnu-attribute:                     RS/6000 and PowerPC Options.
62706                                                             (line  586)
62707* mno-gnu-ld:                            IA-64 Options.      (line   23)
62708* mno-gotplt:                            CRIS Options.       (line   81)
62709* mno-gpopt:                             MIPS Options.       (line  502)
62710* mno-gpopt <1>:                         Nios II Options.    (line   16)
62711* mno-hard-dfp:                          RS/6000 and PowerPC Options.
62712                                                             (line   25)
62713* mno-hard-dfp <1>:                      S/390 and zSeries Options.
62714                                                             (line   20)
62715* mno-hardlit:                           MCore Options.      (line   10)
62716* mno-htm:                               RS/6000 and PowerPC Options.
62717                                                             (line  183)
62718* mno-htm <1>:                           S/390 and zSeries Options.
62719                                                             (line  104)
62720* mno-hw-div:                            Nios II Options.    (line  124)
62721* mno-hw-mul:                            Nios II Options.    (line  124)
62722* mno-hw-mulx:                           Nios II Options.    (line  124)
62723* mno-id-shared-library:                 Blackfin Options.   (line   85)
62724* mno-ieee:                              SH Options.         (line  165)
62725* mno-ieee-fp:                           x86 Options.        (line  526)
62726* mno-imadd:                             MIPS Options.       (line  617)
62727* mno-inline-float-divide:               IA-64 Options.      (line   62)
62728* mno-inline-int-divide:                 IA-64 Options.      (line   73)
62729* mno-inline-sqrt:                       IA-64 Options.      (line   84)
62730* mno-int16:                             PDP-11 Options.     (line   37)
62731* mno-int32:                             PDP-11 Options.     (line   33)
62732* mno-interlink-compressed:              MIPS Options.       (line  135)
62733* mno-interlink-mips16:                  MIPS Options.       (line  147)
62734* mno-interrupts:                        AVR Options.        (line  227)
62735* mno-isel:                              RS/6000 and PowerPC Options.
62736                                                             (line  166)
62737* mno-jsr:                               RX Options.         (line  169)
62738* mno-knuthdiv:                          MMIX Options.       (line   32)
62739* mno-leaf-id-shared-library:            Blackfin Options.   (line   95)
62740* mno-libfuncs:                          MMIX Options.       (line   10)
62741* mno-liw:                               MN10300 Options.    (line   59)
62742* mno-llsc:                              MIPS Options.       (line  339)
62743* mno-load-store-pairs:                  MIPS Options.       (line  590)
62744* mno-local-sdata:                       MIPS Options.       (line  468)
62745* mno-long-calls:                        ARM Options.        (line  755)
62746* mno-long-calls <1>:                    Blackfin Options.   (line  118)
62747* mno-long-calls <2>:                    HPPA Options.       (line  136)
62748* mno-long-calls <3>:                    MIPS Options.       (line  603)
62749* mno-long-calls <4>:                    V850 Options.       (line   10)
62750* mno-long-jumps:                        V850 Options.       (line  108)
62751* mno-longcall:                          RS/6000 and PowerPC Options.
62752                                                             (line  727)
62753* mno-longcalls:                         Xtensa Options.     (line   87)
62754* mno-loongson-ext:                      MIPS Options.       (line  430)
62755* mno-loongson-ext2:                     MIPS Options.       (line  434)
62756* mno-loongson-mmi:                      MIPS Options.       (line  425)
62757* mno-low-precision-div:                 AArch64 Options.    (line  135)
62758* mno-low-precision-recip-sqrt:          AArch64 Options.    (line  118)
62759* mno-low-precision-sqrt:                AArch64 Options.    (line  126)
62760* mno-low64k:                            Blackfin Options.   (line   71)
62761* mno-lra:                               SPARC Options.      (line  111)
62762* mno-lsim:                              FR30 Options.       (line   14)
62763* mno-lsim <1>:                          MCore Options.      (line   46)
62764* mno-mad:                               MIPS Options.       (line  612)
62765* mno-max:                               DEC Alpha Options.  (line  163)
62766* mno-mcount-ra-address:                 MIPS Options.       (line  872)
62767* mno-mcu:                               MIPS Options.       (line  399)
62768* mno-mdmx:                              MIPS Options.       (line  376)
62769* mno-media:                             FRV Options.        (line   60)
62770* mno-memcpy:                            MIPS Options.       (line  597)
62771* mno-mfcrf:                             RS/6000 and PowerPC Options.
62772                                                             (line   25)
62773* mno-mips16:                            MIPS Options.       (line  120)
62774* mno-mips3d:                            MIPS Options.       (line  382)
62775* mno-mma:                               RS/6000 and PowerPC Options.
62776                                                             (line  943)
62777* mno-mmicromips:                        MIPS Options.       (line  387)
62778* mno-mpy:                               ARC Options.        (line  117)
62779* mno-ms-bitfields:                      x86 Options.        (line 1099)
62780* mno-mt:                                MIPS Options.       (line  395)
62781* mno-mul-bug-workaround:                CRIS Options.       (line   32)
62782* mno-muladd:                            FRV Options.        (line   68)
62783* mno-mulhw:                             RS/6000 and PowerPC Options.
62784                                                             (line  377)
62785* mno-mult-bug:                          MN10300 Options.    (line   13)
62786* mno-multi-cond-exec:                   FRV Options.        (line  223)
62787* mno-multiple:                          RS/6000 and PowerPC Options.
62788                                                             (line  338)
62789* mno-mvcle:                             S/390 and zSeries Options.
62790                                                             (line  138)
62791* mno-nested-cond-exec:                  FRV Options.        (line  237)
62792* mno-odd-spreg:                         MIPS Options.       (line  293)
62793* mno-omit-leaf-frame-pointer:           AArch64 Options.    (line   58)
62794* mno-optimize-membar:                   FRV Options.        (line  249)
62795* mno-opts:                              MeP Options.        (line   93)
62796* mno-pack:                              FRV Options.        (line  151)
62797* mno-packed-stack:                      S/390 and zSeries Options.
62798                                                             (line   54)
62799* mno-paired-single:                     MIPS Options.       (line  370)
62800* mno-pc-relative-literal-loads:         AArch64 Options.    (line  282)
62801* mno-pcrel:                             RS/6000 and PowerPC Options.
62802                                                             (line  931)
62803* mno-pic:                               IA-64 Options.      (line   26)
62804* mno-pid:                               RX Options.         (line  117)
62805* mno-plt:                               MIPS Options.       (line  219)
62806* mno-pltseq:                            RS/6000 and PowerPC Options.
62807                                                             (line  764)
62808* mno-popc:                              SPARC Options.      (line  281)
62809* mno-popcntb:                           RS/6000 and PowerPC Options.
62810                                                             (line   25)
62811* mno-popcntd:                           RS/6000 and PowerPC Options.
62812                                                             (line   25)
62813* mno-postinc:                           Adapteva Epiphany Options.
62814                                                             (line  109)
62815* mno-postmodify:                        Adapteva Epiphany Options.
62816                                                             (line  109)
62817* mno-power8-fusion:                     RS/6000 and PowerPC Options.
62818                                                             (line  189)
62819* mno-power8-vector:                     RS/6000 and PowerPC Options.
62820                                                             (line  195)
62821* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
62822                                                             (line   25)
62823* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
62824                                                             (line   25)
62825* mno-powerpc64:                         RS/6000 and PowerPC Options.
62826                                                             (line   25)
62827* mno-prefixed:                          RS/6000 and PowerPC Options.
62828                                                             (line  937)
62829* mno-prolog-function:                   V850 Options.       (line   23)
62830* mno-prologue-epilogue:                 CRIS Options.       (line   71)
62831* mno-prototype:                         RS/6000 and PowerPC Options.
62832                                                             (line  592)
62833* mno-push-args:                         x86 Options.        (line 1076)
62834* mno-quad-memory:                       RS/6000 and PowerPC Options.
62835                                                             (line  202)
62836* mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
62837                                                             (line  208)
62838* mno-readonly-in-sdata:                 RS/6000 and PowerPC Options.
62839                                                             (line  683)
62840* mno-red-zone:                          x86 Options.        (line 1445)
62841* mno-register-names:                    IA-64 Options.      (line   37)
62842* mno-regnames:                          RS/6000 and PowerPC Options.
62843                                                             (line  721)
62844* mno-relax:                             PRU Options.        (line   21)
62845* mno-relax <1>:                         V850 Options.       (line  103)
62846* mno-relax-immediate:                   MCore Options.      (line   19)
62847* mno-relocatable:                       RS/6000 and PowerPC Options.
62848                                                             (line  407)
62849* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
62850                                                             (line  418)
62851* mno-renesas:                           SH Options.         (line  155)
62852* mno-round-nearest:                     Adapteva Epiphany Options.
62853                                                             (line   51)
62854* mno-save-mduc-in-interrupts:           RL78 Options.       (line   79)
62855* mno-scc:                               FRV Options.        (line  180)
62856* mno-sched-ar-data-spec:                IA-64 Options.      (line  135)
62857* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  157)
62858* mno-sched-br-data-spec:                IA-64 Options.      (line  128)
62859* mno-sched-br-in-data-spec:             IA-64 Options.      (line  150)
62860* mno-sched-control-spec:                IA-64 Options.      (line  142)
62861* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  185)
62862* mno-sched-in-control-spec:             IA-64 Options.      (line  164)
62863* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  178)
62864* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  171)
62865* mno-sched-prolog:                      ARM Options.        (line   32)
62866* mno-sdata:                             ARC Options.        (line  422)
62867* mno-sdata <1>:                         IA-64 Options.      (line   42)
62868* mno-sdata <2>:                         RS/6000 and PowerPC Options.
62869                                                             (line  678)
62870* mno-sep-data:                          Blackfin Options.   (line  113)
62871* mno-serialize-volatile:                Xtensa Options.     (line   35)
62872* mno-setlb:                             MN10300 Options.    (line   69)
62873* mno-short:                             M680x0 Options.     (line  222)
62874* mno-side-effects:                      CRIS Options.       (line   46)
62875* mno-sim:                               RX Options.         (line   71)
62876* mno-single-exit:                       MMIX Options.       (line   65)
62877* mno-slow-bytes:                        MCore Options.      (line   35)
62878* mno-small-exec:                        S/390 and zSeries Options.
62879                                                             (line   79)
62880* mno-smartmips:                         MIPS Options.       (line  366)
62881* mno-soft-cmpsf:                        Adapteva Epiphany Options.
62882                                                             (line   29)
62883* mno-soft-float:                        DEC Alpha Options.  (line   10)
62884* mno-space-regs:                        HPPA Options.       (line   45)
62885* mno-specld-anomaly:                    Blackfin Options.   (line   53)
62886* mno-split-addresses:                   MIPS Options.       (line  555)
62887* mno-split-lohi:                        Adapteva Epiphany Options.
62888                                                             (line  109)
62889* mno-stack-align:                       CRIS Options.       (line   55)
62890* mno-stack-bias:                        SPARC Options.      (line  372)
62891* mno-std-struct-return:                 SPARC Options.      (line  102)
62892* mno-strict-align:                      AArch64 Options.    (line   52)
62893* mno-strict-align <1>:                  M680x0 Options.     (line  280)
62894* mno-strict-align <2>:                  RS/6000 and PowerPC Options.
62895                                                             (line  402)
62896* mno-subxc:                             SPARC Options.      (line  288)
62897* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
62898                                                             (line  255)
62899* mno-sym32:                             MIPS Options.       (line  453)
62900* mno-target-align:                      Xtensa Options.     (line   74)
62901* mno-text-section-literals:             Xtensa Options.     (line   47)
62902* mno-tls-markers:                       RS/6000 and PowerPC Options.
62903                                                             (line  776)
62904* mno-toc:                               RS/6000 and PowerPC Options.
62905                                                             (line  427)
62906* mno-toplevel-symbols:                  MMIX Options.       (line   39)
62907* mno-tpf-trace:                         S/390 and zSeries Options.
62908                                                             (line  168)
62909* mno-tpf-trace-skip:                    S/390 and zSeries Options.
62910                                                             (line  174)
62911* mno-unaligned-access:                  ARM Options.        (line  899)
62912* mno-unaligned-doubles:                 SPARC Options.      (line   73)
62913* mno-uninit-const-in-rodata:            MIPS Options.       (line  525)
62914* mno-update:                            RS/6000 and PowerPC Options.
62915                                                             (line  349)
62916* mno-user-mode:                         SPARC Options.      (line   85)
62917* mno-usermode:                          SH Options.         (line  274)
62918* mno-v3push:                            NDS32 Options.      (line   48)
62919* mno-v8plus:                            SPARC Options.      (line  214)
62920* mno-vect-double:                       Adapteva Epiphany Options.
62921                                                             (line  115)
62922* mno-virt:                              MIPS Options.       (line  407)
62923* mno-vis:                               SPARC Options.      (line  221)
62924* mno-vis2:                              SPARC Options.      (line  227)
62925* mno-vis3:                              SPARC Options.      (line  235)
62926* mno-vis4:                              SPARC Options.      (line  243)
62927* mno-vis4b:                             SPARC Options.      (line  251)
62928* mno-vliw-branch:                       FRV Options.        (line  208)
62929* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
62930* mno-volatile-cache:                    ARC Options.        (line  431)
62931* mno-vrsave:                            RS/6000 and PowerPC Options.
62932                                                             (line  152)
62933* mno-vsx:                               RS/6000 and PowerPC Options.
62934                                                             (line  171)
62935* mno-vx:                                S/390 and zSeries Options.
62936                                                             (line  112)
62937* mno-warn-devices-csv:                  MSP430 Options.     (line  153)
62938* mno-warn-mcu:                          MSP430 Options.     (line   65)
62939* mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
62940* mno-wide-bitfields:                    MCore Options.      (line   23)
62941* mno-xgot:                              M680x0 Options.     (line  312)
62942* mno-xgot <1>:                          MIPS Options.       (line  229)
62943* mno-xl-compat:                         RS/6000 and PowerPC Options.
62944                                                             (line  290)
62945* mno-xpa:                               MIPS Options.       (line  411)
62946* mno-zdcbranch:                         SH Options.         (line  341)
62947* mno-zero-extend:                       MMIX Options.       (line   26)
62948* mno-zvector:                           S/390 and zSeries Options.
62949                                                             (line  123)
62950* mnobitfield:                           M680x0 Options.     (line  227)
62951* mnodiv:                                FT32 Options.       (line   20)
62952* mnomacsave:                            SH Options.         (line  160)
62953* mnop-fun-dllimport:                    x86 Windows Options.
62954                                                             (line   22)
62955* mnop-mcount:                           x86 Options.        (line 1306)
62956* mnopm:                                 FT32 Options.       (line   29)
62957* mnops:                                 Adapteva Epiphany Options.
62958                                                             (line   26)
62959* mnorm:                                 ARC Options.        (line  128)
62960* modd-spreg:                            MIPS Options.       (line  293)
62961* momit-leaf-frame-pointer:              AArch64 Options.    (line   58)
62962* momit-leaf-frame-pointer <1>:          Blackfin Options.   (line   43)
62963* momit-leaf-frame-pointer <2>:          x86 Options.        (line 1270)
62964* mone-byte-bool:                        Darwin Options.     (line   90)
62965* moptimize:                             Nvidia PTX Options. (line   22)
62966* moptimize-membar:                      FRV Options.        (line  244)
62967* moptimize-membar <1>:                  FRV Options.        (line  249)
62968* moverride:                             AArch64 Options.    (line  269)
62969* MP:                                    Preprocessor Options.
62970                                                             (line  132)
62971* mpa-risc-1-0:                          HPPA Options.       (line   19)
62972* mpa-risc-1-1:                          HPPA Options.       (line   19)
62973* mpa-risc-2-0:                          HPPA Options.       (line   19)
62974* mpack:                                 FRV Options.        (line  147)
62975* mpacked-stack:                         S/390 and zSeries Options.
62976                                                             (line   54)
62977* mpadstruct:                            SH Options.         (line  189)
62978* mpaired-single:                        MIPS Options.       (line  370)
62979* mpc-relative-literal-loads:            AArch64 Options.    (line  282)
62980* mpc32:                                 x86 Options.        (line  691)
62981* mpc64:                                 x86 Options.        (line  691)
62982* mpc80:                                 x86 Options.        (line  691)
62983* mpclmul:                               x86 Options.        (line  789)
62984* mpconfig:                              x86 Options.        (line  797)
62985* mpcrel:                                M680x0 Options.     (line  272)
62986* mpcrel <1>:                            RS/6000 and PowerPC Options.
62987                                                             (line  931)
62988* mpdebug:                               CRIS Options.       (line   36)
62989* mpe:                                   RS/6000 and PowerPC Options.
62990                                                             (line  309)
62991* mpe-aligned-commons:                   x86 Windows Options.
62992                                                             (line   59)
62993* mpic-data-is-text-relative:            ARM Options.        (line  792)
62994* mpic-data-is-text-relative <1>:        MicroBlaze Options. (line   70)
62995* mpic-register:                         ARM Options.        (line  785)
62996* mpid:                                  RX Options.         (line  117)
62997* mpku:                                  x86 Options.        (line  825)
62998* mplt:                                  MIPS Options.       (line  219)
62999* mpltseq:                               RS/6000 and PowerPC Options.
63000                                                             (line  764)
63001* mpointer-size=SIZE:                    VMS Options.        (line   20)
63002* mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
63003                                                             (line  877)
63004* mpoke-function-name:                   ARM Options.        (line  800)
63005* mpopc:                                 SPARC Options.      (line  281)
63006* mpopcnt:                               x86 Options.        (line  809)
63007* mpopcntb:                              RS/6000 and PowerPC Options.
63008                                                             (line   25)
63009* mpopcntd:                              RS/6000 and PowerPC Options.
63010                                                             (line   25)
63011* mportable-runtime:                     HPPA Options.       (line   71)
63012* mpostinc:                              Adapteva Epiphany Options.
63013                                                             (line  109)
63014* mpostmodify:                           Adapteva Epiphany Options.
63015                                                             (line  109)
63016* mpower8-fusion:                        RS/6000 and PowerPC Options.
63017                                                             (line  189)
63018* mpower8-vector:                        RS/6000 and PowerPC Options.
63019                                                             (line  195)
63020* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
63021                                                             (line   25)
63022* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
63023                                                             (line   25)
63024* mpowerpc64:                            RS/6000 and PowerPC Options.
63025                                                             (line   25)
63026* mprefer-avx128:                        x86 Options.        (line  912)
63027* mprefer-short-insn-regs:               Adapteva Epiphany Options.
63028                                                             (line   13)
63029* mprefer-vector-width:                  x86 Options.        (line  916)
63030* mprefergot:                            SH Options.         (line  268)
63031* mpreferred-stack-boundary:             RISC-V Options.     (line   73)
63032* mpreferred-stack-boundary <1>:         x86 Options.        (line  721)
63033* mprefetchwt1:                          x86 Options.        (line  802)
63034* mprefixed:                             RS/6000 and PowerPC Options.
63035                                                             (line  937)
63036* mpretend-cmove:                        SH Options.         (line  383)
63037* mprfchw:                               x86 Options.        (line  800)
63038* mprint-tune-info:                      ARM Options.        (line  933)
63039* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
63040                                                             (line  456)
63041* mprolog-function:                      V850 Options.       (line   23)
63042* mprologue-epilogue:                    CRIS Options.       (line   71)
63043* mprototype:                            RS/6000 and PowerPC Options.
63044                                                             (line  592)
63045* mptwrite:                              x86 Options.        (line  793)
63046* mpure-code:                            ARM Options.        (line  943)
63047* mpush-args:                            x86 Options.        (line 1076)
63048* mpushpop:                              C-SKY Options.      (line  114)
63049* MQ:                                    Preprocessor Options.
63050                                                             (line  159)
63051* mq-class:                              ARC Options.        (line  521)
63052* mquad-memory:                          RS/6000 and PowerPC Options.
63053                                                             (line  202)
63054* mquad-memory-atomic:                   RS/6000 and PowerPC Options.
63055                                                             (line  208)
63056* mr0rel-sec:                            Nios II Options.    (line   76)
63057* mr10k-cache-barrier:                   MIPS Options.       (line  714)
63058* mRcq:                                  ARC Options.        (line  525)
63059* mRcw:                                  ARC Options.        (line  529)
63060* mrdpid:                                x86 Options.        (line  801)
63061* mrdrnd:                                x86 Options.        (line  794)
63062* mrdseed:                               x86 Options.        (line  803)
63063* mreadonly-in-sdata:                    RS/6000 and PowerPC Options.
63064                                                             (line  683)
63065* mrecip:                                RS/6000 and PowerPC Options.
63066                                                             (line  784)
63067* mrecip <1>:                            x86 Options.        (line  966)
63068* mrecip-precision:                      RS/6000 and PowerPC Options.
63069                                                             (line  841)
63070* mrecip=opt:                            RS/6000 and PowerPC Options.
63071                                                             (line  797)
63072* mrecip=opt <1>:                        x86 Options.        (line  988)
63073* mrecord-mcount:                        x86 Options.        (line 1300)
63074* mrecord-return:                        x86 Options.        (line 1320)
63075* mred-zone:                             x86 Options.        (line 1445)
63076* mreduced-regs:                         NDS32 Options.      (line   15)
63077* mregister-names:                       IA-64 Options.      (line   37)
63078* mregnames:                             RS/6000 and PowerPC Options.
63079                                                             (line  721)
63080* mregparm:                              x86 Options.        (line  661)
63081* mrelax:                                AVR Options.        (line  231)
63082* mrelax <1>:                            H8/300 Options.     (line    9)
63083* mrelax <2>:                            MN10300 Options.    (line   46)
63084* mrelax <3>:                            MSP430 Options.     (line   88)
63085* mrelax <4>:                            NDS32 Options.      (line   84)
63086* mrelax <5>:                            RX Options.         (line   95)
63087* mrelax <6>:                            SH Options.         (line  137)
63088* mrelax <7>:                            V850 Options.       (line  103)
63089* mrelax-immediate:                      MCore Options.      (line   19)
63090* mrelax-pic-calls:                      MIPS Options.       (line  859)
63091* mrelocatable:                          RS/6000 and PowerPC Options.
63092                                                             (line  407)
63093* mrelocatable-lib:                      RS/6000 and PowerPC Options.
63094                                                             (line  418)
63095* mrenesas:                              SH Options.         (line  152)
63096* mrepeat:                               MeP Options.        (line   96)
63097* mrestrict-it:                          ARM Options.        (line  927)
63098* mreturn-pointer-on-d0:                 MN10300 Options.    (line   36)
63099* mrf16:                                 ARC Options.        (line  324)
63100* mrgf-banked-regs:                      ARC Options.        (line  304)
63101* mrh850-abi:                            V850 Options.       (line  127)
63102* mrl78:                                 RL78 Options.       (line   62)
63103* mrmw:                                  AVR Options.        (line  245)
63104* mror:                                  OpenRISC Options.   (line   49)
63105* mrori:                                 OpenRISC Options.   (line   54)
63106* mround-nearest:                        Adapteva Epiphany Options.
63107                                                             (line   51)
63108* mrtd:                                  M680x0 Options.     (line  236)
63109* mrtd <1>:                              x86 Options.        (line  637)
63110* mrtd <2>:                              x86 Function Attributes.
63111                                                             (line    9)
63112* mrtm:                                  x86 Options.        (line  820)
63113* mrtp:                                  VxWorks Options.    (line   11)
63114* mrtsc:                                 ARC Options.        (line  358)
63115* ms:                                    H8/300 Options.     (line   17)
63116* ms <1>:                                MeP Options.        (line  100)
63117* ms2600:                                H8/300 Options.     (line   24)
63118* msahf:                                 x86 Options.        (line  942)
63119* msatur:                                MeP Options.        (line  105)
63120* msave-acc-in-interrupts:               RX Options.         (line  109)
63121* msave-mduc-in-interrupts:              RL78 Options.       (line   79)
63122* msave-restore:                         RISC-V Options.     (line   87)
63123* msave-toc-indirect:                    RS/6000 and PowerPC Options.
63124                                                             (line  889)
63125* mscc:                                  FRV Options.        (line  173)
63126* msched-ar-data-spec:                   IA-64 Options.      (line  135)
63127* msched-ar-in-data-spec:                IA-64 Options.      (line  157)
63128* msched-br-data-spec:                   IA-64 Options.      (line  128)
63129* msched-br-in-data-spec:                IA-64 Options.      (line  150)
63130* msched-control-spec:                   IA-64 Options.      (line  142)
63131* msched-costly-dep:                     RS/6000 and PowerPC Options.
63132                                                             (line  463)
63133* msched-count-spec-in-critical-path:    IA-64 Options.      (line  185)
63134* msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  202)
63135* msched-in-control-spec:                IA-64 Options.      (line  164)
63136* msched-max-memory-insns:               IA-64 Options.      (line  211)
63137* msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  217)
63138* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  178)
63139* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  171)
63140* msched-prolog:                         ARM Options.        (line   32)
63141* msched-prolog <1>:                     C-SKY Options.      (line  148)
63142* msched-spec-ldc:                       IA-64 Options.      (line  191)
63143* msched-spec-ldc <1>:                   IA-64 Options.      (line  194)
63144* msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  198)
63145* mschedule:                             HPPA Options.       (line   78)
63146* mscore5:                               Score Options.      (line   25)
63147* mscore5u:                              Score Options.      (line   28)
63148* mscore7:                               Score Options.      (line   31)
63149* mscore7d:                              Score Options.      (line   35)
63150* msda:                                  V850 Options.       (line   40)
63151* msdata:                                ARC Options.        (line  422)
63152* msdata <1>:                            IA-64 Options.      (line   42)
63153* msdata <2>:                            RS/6000 and PowerPC Options.
63154                                                             (line  665)
63155* msdata=all:                            C6X Options.        (line   30)
63156* msdata=data:                           RS/6000 and PowerPC Options.
63157                                                             (line  670)
63158* msdata=default:                        C6X Options.        (line   22)
63159* msdata=default <1>:                    RS/6000 and PowerPC Options.
63160                                                             (line  665)
63161* msdata=eabi:                           RS/6000 and PowerPC Options.
63162                                                             (line  646)
63163* msdata=none:                           C6X Options.        (line   35)
63164* msdata=none <1>:                       M32R/D Options.     (line   40)
63165* msdata=none <2>:                       RS/6000 and PowerPC Options.
63166                                                             (line  678)
63167* msdata=sdata:                          M32R/D Options.     (line   49)
63168* msdata=sysv:                           RS/6000 and PowerPC Options.
63169                                                             (line  656)
63170* msdata=use:                            M32R/D Options.     (line   53)
63171* msdram:                                Blackfin Options.   (line  169)
63172* msdram <1>:                            MeP Options.        (line  110)
63173* msecure-plt:                           RS/6000 and PowerPC Options.
63174                                                             (line  155)
63175* msecurity:                             C-SKY Options.      (line   80)
63176* msel-sched-dont-check-control-spec:    IA-64 Options.      (line  207)
63177* msep-data:                             Blackfin Options.   (line  107)
63178* msep-data <1>:                         Blackfin Options.   (line  113)
63179* mserialize-volatile:                   Xtensa Options.     (line   35)
63180* msetlb:                                MN10300 Options.    (line   64)
63181* msext:                                 OpenRISC Options.   (line   59)
63182* msfimm:                                OpenRISC Options.   (line   63)
63183* msgx:                                  x86 Options.        (line  804)
63184* msha:                                  x86 Options.        (line  787)
63185* mshared-library-id:                    Blackfin Options.   (line  100)
63186* mshftimm:                              OpenRISC Options.   (line   68)
63187* mshort:                                M680x0 Options.     (line  216)
63188* mshort-calls:                          AVR Options.        (line  249)
63189* mshstk:                                x86 Options.        (line  956)
63190* mside-effects:                         CRIS Options.       (line   46)
63191* msign-extend-enabled:                  LM32 Options.       (line   18)
63192* msign-return-address:                  AArch64 Options.    (line  288)
63193* msilicon-errata:                       MSP430 Options.     (line  144)
63194* msilicon-errata-warn:                  MSP430 Options.     (line  148)
63195* msim:                                  Blackfin Options.   (line   36)
63196* msim <1>:                              C6X Options.        (line   19)
63197* msim <2>:                              CR16 Options.       (line   18)
63198* msim <3>:                              FT32 Options.       (line    9)
63199* msim <4>:                              M32C Options.       (line   13)
63200* msim <5>:                              MeP Options.        (line  114)
63201* msim <6>:                              MSP430 Options.     (line   77)
63202* msim <7>:                              RL78 Options.       (line    7)
63203* msim <8>:                              RS/6000 and PowerPC Options.
63204                                                             (line  602)
63205* msim <9>:                              RX Options.         (line   71)
63206* msim <10>:                             Visium Options.     (line   13)
63207* msim <11>:                             Xstormy16 Options.  (line    9)
63208* msimd:                                 ARC Options.        (line  141)
63209* msimnovec:                             MeP Options.        (line  117)
63210* msingle-exit:                          MMIX Options.       (line   65)
63211* msingle-float:                         MIPS Options.       (line  284)
63212* msingle-pic-base:                      ARM Options.        (line  779)
63213* msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
63214                                                             (line  450)
63215* msio:                                  HPPA Options.       (line  105)
63216* msize-level:                           ARC Options.        (line  533)
63217* mskip-rax-setup:                       x86 Options.        (line 1333)
63218* mslow-bytes:                           MCore Options.      (line   35)
63219* mslow-flash-data:                      ARM Options.        (line  915)
63220* msmall:                                MSP430 Options.     (line   85)
63221* msmall-data:                           DEC Alpha Options.  (line  187)
63222* msmall-data-limit:                     RISC-V Options.     (line   82)
63223* msmall-data-limit <1>:                 RX Options.         (line   47)
63224* msmall-divides:                        MicroBlaze Options. (line   38)
63225* msmall-exec:                           S/390 and zSeries Options.
63226                                                             (line   79)
63227* msmall-model:                          FR30 Options.       (line    9)
63228* msmall-text:                           DEC Alpha Options.  (line  205)
63229* msmall16:                              Adapteva Epiphany Options.
63230                                                             (line   66)
63231* msmallc:                               Nios II Options.    (line  310)
63232* msmart:                                C-SKY Options.      (line   97)
63233* msmartmips:                            MIPS Options.       (line  366)
63234* msoft-cmpsf:                           Adapteva Epiphany Options.
63235                                                             (line   29)
63236* msoft-div:                             OpenRISC Options.   (line   19)
63237* msoft-float:                           ARC Options.        (line  145)
63238* msoft-float <1>:                       C-SKY Options.      (line   36)
63239* msoft-float <2>:                       DEC Alpha Options.  (line   10)
63240* msoft-float <3>:                       FRV Options.        (line   27)
63241* msoft-float <4>:                       HPPA Options.       (line   91)
63242* msoft-float <5>:                       M680x0 Options.     (line  200)
63243* msoft-float <6>:                       MicroBlaze Options. (line    7)
63244* msoft-float <7>:                       MIPS Options.       (line  270)
63245* msoft-float <8>:                       OpenRISC Options.   (line   29)
63246* msoft-float <9>:                       PDP-11 Options.     (line   13)
63247* msoft-float <10>:                      RS/6000 and PowerPC Options.
63248                                                             (line  332)
63249* msoft-float <11>:                      S/390 and zSeries Options.
63250                                                             (line   11)
63251* msoft-float <12>:                      SPARC Options.      (line   39)
63252* msoft-float <13>:                      V850 Options.       (line  113)
63253* msoft-float <14>:                      Visium Options.     (line   24)
63254* msoft-float <15>:                      x86 Options.        (line  536)
63255* msoft-mul:                             OpenRISC Options.   (line   24)
63256* msoft-quad-float:                      SPARC Options.      (line   59)
63257* msoft-stack:                           Nvidia PTX Options. (line   26)
63258* msp8:                                  AVR Options.        (line  256)
63259* mspace:                                V850 Options.       (line   30)
63260* mspace-regs:                           HPPA Options.       (line   45)
63261* mspecld-anomaly:                       Blackfin Options.   (line   48)
63262* mspecld-anomaly <1>:                   Blackfin Options.   (line   53)
63263* mspfp:                                 ARC Options.        (line  132)
63264* mspfp-compact:                         ARC Options.        (line  133)
63265* mspfp-fast:                            ARC Options.        (line  137)
63266* mspfp_compact:                         ARC Options.        (line  634)
63267* mspfp_fast:                            ARC Options.        (line  637)
63268* msplit:                                PDP-11 Options.     (line   40)
63269* msplit-addresses:                      MIPS Options.       (line  555)
63270* msplit-lohi:                           Adapteva Epiphany Options.
63271                                                             (line  109)
63272* msplit-vecmove-early:                  Adapteva Epiphany Options.
63273                                                             (line  126)
63274* msse:                                  x86 Options.        (line  768)
63275* msse2:                                 x86 Options.        (line  769)
63276* msse2avx:                              x86 Options.        (line 1288)
63277* msse3:                                 x86 Options.        (line  770)
63278* msse4:                                 x86 Options.        (line  772)
63279* msse4.1:                               x86 Options.        (line  774)
63280* msse4.2:                               x86 Options.        (line  775)
63281* msse4a:                                x86 Options.        (line  773)
63282* msseregparm:                           x86 Options.        (line  672)
63283* mssse3:                                x86 Options.        (line  771)
63284* mstack-align:                          CRIS Options.       (line   55)
63285* mstack-bias:                           SPARC Options.      (line  372)
63286* mstack-check-l1:                       Blackfin Options.   (line   74)
63287* mstack-guard:                          S/390 and zSeries Options.
63288                                                             (line  201)
63289* mstack-increment:                      MCore Options.      (line   50)
63290* mstack-offset:                         Adapteva Epiphany Options.
63291                                                             (line   37)
63292* mstack-protector-guard:                AArch64 Options.    (line   64)
63293* mstack-protector-guard <1>:            AArch64 Options.    (line   79)
63294* mstack-protector-guard <2>:            RS/6000 and PowerPC Options.
63295                                                             (line  915)
63296* mstack-protector-guard <3>:            x86 Options.        (line 1359)
63297* mstack-protector-guard-offset:         AArch64 Options.    (line   64)
63298* mstack-protector-guard-offset <1>:     AArch64 Options.    (line   79)
63299* mstack-protector-guard-offset <2>:     RS/6000 and PowerPC Options.
63300                                                             (line  915)
63301* mstack-protector-guard-offset <3>:     x86 Options.        (line 1359)
63302* mstack-protector-guard-reg:            AArch64 Options.    (line   64)
63303* mstack-protector-guard-reg <1>:        AArch64 Options.    (line   79)
63304* mstack-protector-guard-reg <2>:        RS/6000 and PowerPC Options.
63305                                                             (line  915)
63306* mstack-protector-guard-reg <3>:        x86 Options.        (line 1359)
63307* mstack-protector-guard-symbol:         RS/6000 and PowerPC Options.
63308                                                             (line  915)
63309* mstack-size:                           AMD GCN Options.    (line   23)
63310* mstack-size <1>:                       C-SKY Options.      (line  134)
63311* mstack-size <2>:                       S/390 and zSeries Options.
63312                                                             (line  201)
63313* mstackrealign:                         x86 Options.        (line  712)
63314* mstd-struct-return:                    SPARC Options.      (line  102)
63315* mstrict-align:                         AArch64 Options.    (line   52)
63316* mstrict-align <1>:                     M680x0 Options.     (line  280)
63317* mstrict-align <2>:                     RISC-V Options.     (line   93)
63318* mstrict-align <3>:                     RS/6000 and PowerPC Options.
63319                                                             (line  402)
63320* mstrict-X:                             AVR Options.        (line  269)
63321* mstring-compare-inline-limit:          RS/6000 and PowerPC Options.
63322                                                             (line  707)
63323* mstringop-strategy=ALG:                x86 Options.        (line 1236)
63324* mstructure-size-boundary:              ARM Options.        (line  734)
63325* msubxc:                                SPARC Options.      (line  288)
63326* msv-mode:                              Visium Options.     (line   52)
63327* msve-vector-bits:                      AArch64 Options.    (line  317)
63328* msvr4-struct-return:                   RS/6000 and PowerPC Options.
63329                                                             (line  547)
63330* mswap:                                 ARC Options.        (line  152)
63331* mswape:                                ARC Options.        (line  363)
63332* msym32:                                MIPS Options.       (line  453)
63333* msynci:                                MIPS Options.       (line  845)
63334* msys-crt0:                             Nios II Options.    (line  314)
63335* msys-lib:                              Nios II Options.    (line  318)
63336* MT:                                    Preprocessor Options.
63337                                                             (line  144)
63338* mtarget-align:                         Xtensa Options.     (line   74)
63339* mtas:                                  SH Options.         (line  259)
63340* mtbm:                                  x86 Options.        (line  822)
63341* mtda:                                  V850 Options.       (line   34)
63342* mtelephony:                            ARC Options.        (line  368)
63343* mtext-section-literals:                Xtensa Options.     (line   47)
63344* mtf:                                   MeP Options.        (line  121)
63345* mthread:                               x86 Windows Options.
63346                                                             (line   26)
63347* mthreads:                              x86 Options.        (line 1091)
63348* mthumb:                                ARM Options.        (line  822)
63349* mthumb-interwork:                      ARM Options.        (line   24)
63350* mtiny-printf:                          MSP430 Options.     (line  122)
63351* mtiny-stack:                           AVR Options.        (line  283)
63352* mtiny=:                                MeP Options.        (line  125)
63353* mTLS:                                  FRV Options.        (line   90)
63354* mtls:                                  FRV Options.        (line   94)
63355* mtls-dialect:                          ARM Options.        (line  874)
63356* mtls-dialect <1>:                      x86 Options.        (line 1069)
63357* mtls-dialect=desc:                     AArch64 Options.    (line   92)
63358* mtls-dialect=traditional:              AArch64 Options.    (line   96)
63359* mtls-direct-seg-refs:                  x86 Options.        (line 1278)
63360* mtls-markers:                          RS/6000 and PowerPC Options.
63361                                                             (line  776)
63362* mtls-size:                             AArch64 Options.    (line  100)
63363* mtls-size <1>:                         IA-64 Options.      (line  112)
63364* mtoc:                                  RS/6000 and PowerPC Options.
63365                                                             (line  427)
63366* mtomcat-stats:                         FRV Options.        (line  254)
63367* mtoplevel-symbols:                     MMIX Options.       (line   39)
63368* mtp:                                   ARM Options.        (line  866)
63369* mtp-regno:                             ARC Options.        (line  170)
63370* mtpcs-frame:                           ARM Options.        (line  839)
63371* mtpcs-leaf-frame:                      ARM Options.        (line  845)
63372* mtpf-trace:                            S/390 and zSeries Options.
63373                                                             (line  168)
63374* mtpf-trace-skip:                       S/390 and zSeries Options.
63375                                                             (line  174)
63376* mtraceback:                            RS/6000 and PowerPC Options.
63377                                                             (line  540)
63378* mtrap-precision:                       DEC Alpha Options.  (line  109)
63379* mtrust:                                C-SKY Options.      (line   83)
63380* mtune:                                 AArch64 Options.    (line  199)
63381* mtune <1>:                             AMD GCN Options.    (line   10)
63382* mtune <2>:                             ARC Options.        (line  554)
63383* mtune <3>:                             ARC Options.        (line  640)
63384* mtune <4>:                             ARM Options.        (line  571)
63385* mtune <5>:                             CRIS Options.       (line   17)
63386* mtune <6>:                             DEC Alpha Options.  (line  259)
63387* mtune <7>:                             IA-64 Options.      (line  116)
63388* mtune <8>:                             M680x0 Options.     (line   68)
63389* mtune <9>:                             MIPS Options.       (line   66)
63390* mtune <10>:                            MN10300 Options.    (line   30)
63391* mtune <11>:                            RISC-V Options.     (line   59)
63392* mtune <12>:                            RS/6000 and PowerPC Options.
63393                                                             (line  113)
63394* mtune <13>:                            S/390 and zSeries Options.
63395                                                             (line  161)
63396* mtune <14>:                            SPARC Options.      (line  199)
63397* mtune <15>:                            Visium Options.     (line   47)
63398* mtune <16>:                            x86 Options.        (line  410)
63399* mtune-ctrl=FEATURE-LIST:               x86 Options.        (line  879)
63400* muclibc:                               GNU/Linux Options.  (line   14)
63401* muls:                                  Score Options.      (line   18)
63402* multcost:                              ARC Options.        (line  645)
63403* multcost=NUMBER:                       SH Options.         (line  281)
63404* multilib-library-pic:                  FRV Options.        (line  110)
63405* multiply-enabled:                      LM32 Options.       (line   15)
63406* multiply_defined:                      Darwin Options.     (line  196)
63407* multiply_defined_unused:               Darwin Options.     (line  196)
63408* multi_module:                          Darwin Options.     (line  196)
63409* munalign-prob-threshold:               ARC Options.        (line  582)
63410* munaligned-access:                     ARM Options.        (line  899)
63411* munaligned-doubles:                    SPARC Options.      (line   73)
63412* municode:                              x86 Windows Options.
63413                                                             (line   30)
63414* muniform-simt:                         Nvidia PTX Options. (line   38)
63415* muninit-const-in-rodata:               MIPS Options.       (line  525)
63416* munix:                                 VAX Options.        (line    9)
63417* munix-asm:                             PDP-11 Options.     (line   43)
63418* munordered-float:                      OpenRISC Options.   (line   39)
63419* mupdate:                               RS/6000 and PowerPC Options.
63420                                                             (line  349)
63421* muser-enabled:                         LM32 Options.       (line   21)
63422* muser-mode:                            SPARC Options.      (line   85)
63423* muser-mode <1>:                        Visium Options.     (line   57)
63424* musermode:                             SH Options.         (line  274)
63425* mv3push:                               NDS32 Options.      (line   45)
63426* mv850:                                 V850 Options.       (line   49)
63427* mv850e:                                V850 Options.       (line   79)
63428* mv850e1:                               V850 Options.       (line   70)
63429* mv850e2:                               V850 Options.       (line   66)
63430* mv850e2v3:                             V850 Options.       (line   61)
63431* mv850e2v4:                             V850 Options.       (line   57)
63432* mv850e3v5:                             V850 Options.       (line   52)
63433* mv850es:                               V850 Options.       (line   75)
63434* mv8plus:                               SPARC Options.      (line  214)
63435* mvaes:                                 x86 Options.        (line  829)
63436* mvdsp:                                 C-SKY Options.      (line   88)
63437* mveclibabi:                            RS/6000 and PowerPC Options.
63438                                                             (line  850)
63439* mveclibabi <1>:                        x86 Options.        (line 1017)
63440* mvect-double:                          Adapteva Epiphany Options.
63441                                                             (line  115)
63442* mvect8-ret-in-mem:                     x86 Options.        (line  682)
63443* mverbose-cost-dump:                    AArch64 Options.    (line  277)
63444* mverbose-cost-dump <1>:                ARM Options.        (line  939)
63445* mvirt:                                 MIPS Options.       (line  407)
63446* mvis:                                  SPARC Options.      (line  221)
63447* mvis2:                                 SPARC Options.      (line  227)
63448* mvis3:                                 SPARC Options.      (line  235)
63449* mvis4:                                 SPARC Options.      (line  243)
63450* mvis4b:                                SPARC Options.      (line  251)
63451* mvliw-branch:                          FRV Options.        (line  201)
63452* mvms-return-codes:                     VMS Options.        (line    9)
63453* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
63454* mvolatile-cache:                       ARC Options.        (line  427)
63455* mvolatile-cache <1>:                   ARC Options.        (line  431)
63456* mvpclmulqdq:                           x86 Options.        (line  831)
63457* mvr4130-align:                         MIPS Options.       (line  834)
63458* mvrsave:                               RS/6000 and PowerPC Options.
63459                                                             (line  152)
63460* mvsx:                                  RS/6000 and PowerPC Options.
63461                                                             (line  171)
63462* mvx:                                   S/390 and zSeries Options.
63463                                                             (line  112)
63464* mvxworks:                              RS/6000 and PowerPC Options.
63465                                                             (line  623)
63466* mvzeroupper:                           x86 Options.        (line  906)
63467* mwaitpkg:                              x86 Options.        (line  830)
63468* mwarn-devices-csv:                     MSP430 Options.     (line  153)
63469* mwarn-dynamicstack:                    S/390 and zSeries Options.
63470                                                             (line  195)
63471* mwarn-framesize:                       S/390 and zSeries Options.
63472                                                             (line  187)
63473* mwarn-mcu:                             MSP430 Options.     (line   65)
63474* mwarn-multiple-fast-interrupts:        RX Options.         (line  143)
63475* mwbnoinvd:                             x86 Options.        (line  798)
63476* mwide-bitfields:                       MCore Options.      (line   23)
63477* mwin32:                                x86 Windows Options.
63478                                                             (line   35)
63479* mwindows:                              x86 Windows Options.
63480                                                             (line   41)
63481* mword-relocations:                     ARM Options.        (line  885)
63482* mx32:                                  x86 Options.        (line 1425)
63483* mxgot:                                 M680x0 Options.     (line  312)
63484* mxgot <1>:                             MIPS Options.       (line  229)
63485* mxl-barrel-shift:                      MicroBlaze Options. (line   32)
63486* mxl-compat:                            RS/6000 and PowerPC Options.
63487                                                             (line  290)
63488* mxl-float-convert:                     MicroBlaze Options. (line   50)
63489* mxl-float-sqrt:                        MicroBlaze Options. (line   53)
63490* mxl-gp-opt:                            MicroBlaze Options. (line   44)
63491* mxl-multiply-high:                     MicroBlaze Options. (line   47)
63492* mxl-pattern-compare:                   MicroBlaze Options. (line   35)
63493* mxl-reorder:                           MicroBlaze Options. (line   62)
63494* mxl-soft-div:                          MicroBlaze Options. (line   29)
63495* mxl-soft-mul:                          MicroBlaze Options. (line   26)
63496* mxl-stack-check:                       MicroBlaze Options. (line   41)
63497* mxop:                                  x86 Options.        (line  805)
63498* mxpa:                                  MIPS Options.       (line  411)
63499* mxsave:                                x86 Options.        (line  816)
63500* mxsavec:                               x86 Options.        (line  818)
63501* mxsaveopt:                             x86 Options.        (line  817)
63502* mxsaves:                               x86 Options.        (line  819)
63503* mxy:                                   ARC Options.        (line  373)
63504* myellowknife:                          RS/6000 and PowerPC Options.
63505                                                             (line  618)
63506* mzarch:                                S/390 and zSeries Options.
63507                                                             (line   94)
63508* mzda:                                  V850 Options.       (line   45)
63509* mzdcbranch:                            SH Options.         (line  341)
63510* mzero-extend:                          MMIX Options.       (line   26)
63511* mzvector:                              S/390 and zSeries Options.
63512                                                             (line  123)
63513* no-80387:                              x86 Options.        (line  536)
63514* no-canonical-prefixes:                 Directory Options.  (line  164)
63515* no-integrated-cpp:                     Preprocessor Options.
63516                                                             (line  482)
63517* no-pie:                                Link Options.       (line  181)
63518* no-sysroot-suffix:                     Directory Options.  (line  183)
63519* noall_load:                            Darwin Options.     (line  196)
63520* nocpp:                                 MIPS Options.       (line  636)
63521* nodefaultlibs:                         Link Options.       (line  119)
63522* nodevicelib:                           AVR Options.        (line  290)
63523* nodevicespecs:                         AVR Options.        (line  293)
63524* nofixprebinding:                       Darwin Options.     (line  196)
63525* nofpu:                                 RX Options.         (line   17)
63526* nolibc:                                Link Options.       (line  131)
63527* nolibdld:                              HPPA Options.       (line  188)
63528* nomultidefs:                           Darwin Options.     (line  196)
63529* non-static:                            VxWorks Options.    (line   16)
63530* noprebind:                             Darwin Options.     (line  196)
63531* noseglinkedit:                         Darwin Options.     (line  196)
63532* nostartfiles:                          Link Options.       (line  114)
63533* nostdinc:                              Directory Options.  (line  102)
63534* nostdinc++:                            C++ Dialect Options.
63535                                                             (line  487)
63536* nostdinc++ <1>:                        Directory Options.  (line  108)
63537* nostdlib:                              Link Options.       (line  143)
63538* no_dead_strip_inits_and_terms:         Darwin Options.     (line  196)
63539* o:                                     Overall Options.    (line  197)
63540* O:                                     Optimize Options.   (line   39)
63541* O0:                                    Optimize Options.   (line  164)
63542* O1:                                    Optimize Options.   (line   39)
63543* O2:                                    Optimize Options.   (line   95)
63544* O3:                                    Optimize Options.   (line  143)
63545* Ofast:                                 Optimize Options.   (line  180)
63546* Og:                                    Optimize Options.   (line  188)
63547* Os:                                    Optimize Options.   (line  168)
63548* p:                                     Instrumentation Options.
63549                                                             (line   20)
63550* P:                                     Preprocessor Options.
63551                                                             (line  367)
63552* p <1>:                                 Common Function Attributes.
63553                                                             (line  696)
63554* pagezero_size:                         Darwin Options.     (line  196)
63555* param:                                 Optimize Options.   (line 2624)
63556* pass-exit-codes:                       Overall Options.    (line  339)
63557* pedantic:                              Standards.          (line   13)
63558* pedantic <1>:                          Warning Options.    (line   86)
63559* pedantic <2>:                          C Extensions.       (line    6)
63560* pedantic <3>:                          Alternate Keywords. (line   30)
63561* pedantic <4>:                          Warnings and Errors.
63562                                                             (line   25)
63563* pedantic-errors:                       Standards.          (line   13)
63564* pedantic-errors <1>:                   Warning Options.    (line  129)
63565* pedantic-errors <2>:                   Non-bugs.           (line  216)
63566* pedantic-errors <3>:                   Warnings and Errors.
63567                                                             (line   25)
63568* pg:                                    Instrumentation Options.
63569                                                             (line   20)
63570* pg <1>:                                Common Function Attributes.
63571                                                             (line  696)
63572* pie:                                   Link Options.       (line  175)
63573* pipe:                                  Overall Options.    (line  347)
63574* plt:                                   RISC-V Options.     (line   13)
63575* prebind:                               Darwin Options.     (line  196)
63576* prebind_all_twolevel_modules:          Darwin Options.     (line  196)
63577* print-file-name:                       Developer Options.  (line  946)
63578* print-libgcc-file-name:                Developer Options.  (line  980)
63579* print-multi-directory:                 Developer Options.  (line  952)
63580* print-multi-lib:                       Developer Options.  (line  957)
63581* print-multi-os-directory:              Developer Options.  (line  964)
63582* print-multiarch:                       Developer Options.  (line  973)
63583* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
63584                                                             (line  220)
63585* print-prog-name:                       Developer Options.  (line  977)
63586* print-search-dirs:                     Developer Options.  (line  988)
63587* print-sysroot:                         Developer Options.  (line 1001)
63588* print-sysroot-headers-suffix:          Developer Options.  (line 1008)
63589* private_bundle:                        Darwin Options.     (line  196)
63590* pthread:                               Preprocessor Options.
63591                                                             (line   70)
63592* pthread <1>:                           Link Options.       (line  192)
63593* pthreads:                              Solaris 2 Options.  (line   30)
63594* Q:                                     Developer Options.  (line  850)
63595* Qn:                                    System V Options.   (line   18)
63596* Qy:                                    System V Options.   (line   14)
63597* r:                                     Link Options.       (line  199)
63598* rdynamic:                              Link Options.       (line  203)
63599* read_only_relocs:                      Darwin Options.     (line  196)
63600* remap:                                 Preprocessor Options.
63601                                                             (line  398)
63602* S:                                     Overall Options.    (line  180)
63603* S <1>:                                 Link Options.       (line   20)
63604* s:                                     Link Options.       (line  210)
63605* save-temps:                            Developer Options.  (line  725)
63606* save-temps=obj:                        Developer Options.  (line  751)
63607* sectalign:                             Darwin Options.     (line  196)
63608* sectcreate:                            Darwin Options.     (line  196)
63609* sectobjectsymbols:                     Darwin Options.     (line  196)
63610* sectobjectsymbols <1>:                 Darwin Options.     (line  196)
63611* sectorder:                             Darwin Options.     (line  196)
63612* seg1addr:                              Darwin Options.     (line  196)
63613* segaddr:                               Darwin Options.     (line  196)
63614* seglinkedit:                           Darwin Options.     (line  196)
63615* segprot:                               Darwin Options.     (line  196)
63616* segs_read_only_addr:                   Darwin Options.     (line  196)
63617* segs_read_only_addr <1>:               Darwin Options.     (line  196)
63618* segs_read_write_addr:                  Darwin Options.     (line  196)
63619* segs_read_write_addr <1>:              Darwin Options.     (line  196)
63620* seg_addr_table:                        Darwin Options.     (line  196)
63621* seg_addr_table_filename:               Darwin Options.     (line  196)
63622* shared:                                Link Options.       (line  219)
63623* shared-libgcc:                         Link Options.       (line  227)
63624* short-calls:                           Adapteva Epiphany Options.
63625                                                             (line   61)
63626* sim:                                   CRIS Options.       (line   95)
63627* sim2:                                  CRIS Options.       (line  101)
63628* single_module:                         Darwin Options.     (line  196)
63629* specs:                                 Overall Options.    (line  353)
63630* static:                                Link Options.       (line  214)
63631* static <1>:                            Darwin Options.     (line  196)
63632* static <2>:                            HPPA Options.       (line  192)
63633* static-libasan:                        Link Options.       (line  261)
63634* static-libgcc:                         Link Options.       (line  227)
63635* static-liblsan:                        Link Options.       (line  277)
63636* static-libstdc++:                      Link Options.       (line  294)
63637* static-libtsan:                        Link Options.       (line  269)
63638* static-libubsan:                       Link Options.       (line  285)
63639* static-pie:                            Link Options.       (line  184)
63640* std:                                   Standards.          (line   13)
63641* std <1>:                               C Dialect Options.  (line   46)
63642* std <2>:                               Other Builtins.     (line   31)
63643* std <3>:                               Non-bugs.           (line  107)
63644* sub_library:                           Darwin Options.     (line  196)
63645* sub_umbrella:                          Darwin Options.     (line  196)
63646* symbolic:                              Link Options.       (line  305)
63647* sysroot:                               Directory Options.  (line  168)
63648* T:                                     Link Options.       (line  311)
63649* target-help:                           Overall Options.    (line  229)
63650* threads:                               HPPA Options.       (line  205)
63651* time:                                  Developer Options.  (line  766)
63652* tno-android-cc:                        GNU/Linux Options.  (line   36)
63653* tno-android-ld:                        GNU/Linux Options.  (line   40)
63654* traditional:                           Preprocessor Options.
63655                                                             (line  374)
63656* traditional <1>:                       Incompatibilities.  (line    6)
63657* traditional-cpp:                       Preprocessor Options.
63658                                                             (line  374)
63659* trigraphs:                             Preprocessor Options.
63660                                                             (line  384)
63661* twolevel_namespace:                    Darwin Options.     (line  196)
63662* U:                                     Preprocessor Options.
63663                                                             (line   42)
63664* u:                                     Link Options.       (line  343)
63665* umbrella:                              Darwin Options.     (line  196)
63666* undef:                                 Preprocessor Options.
63667                                                             (line   66)
63668* undefined:                             Darwin Options.     (line  196)
63669* unexported_symbols_list:               Darwin Options.     (line  196)
63670* v:                                     Overall Options.    (line  208)
63671* version:                               Overall Options.    (line  336)
63672* w:                                     Warning Options.    (line   25)
63673* W:                                     Warning Options.    (line  212)
63674* W <1>:                                 Warning Options.    (line 2618)
63675* W <2>:                                 Warning Options.    (line 2726)
63676* W <3>:                                 Incompatibilities.  (line   64)
63677* Wa:                                    Assembler Options.  (line    9)
63678* Wabi:                                  Warning Options.    (line  256)
63679* Wabi-tag:                              C++ Dialect Options.
63680                                                             (line  494)
63681* Wabi-tag <1>:                          C++ Dialect Options.
63682                                                             (line  494)
63683* Wabsolute-value:                       Warning Options.    (line 2147)
63684* Waddr-space-convert:                   AVR Options.        (line  308)
63685* Waddress:                              Warning Options.    (line 2488)
63686* Waddress-of-packed-member:             Warning Options.    (line 2501)
63687* Waggregate-return:                     Warning Options.    (line 2529)
63688* Waggressive-loop-optimizations:        Warning Options.    (line 2534)
63689* Waligned-new:                          C++ Dialect Options.
63690                                                             (line  934)
63691* Wall:                                  Warning Options.    (line  138)
63692* Wall <1>:                              Standard Libraries. (line    6)
63693* Walloc-size-larger-than=:              Warning Options.    (line 1616)
63694* Walloc-zero:                           Warning Options.    (line 1606)
63695* Walloca:                               Warning Options.    (line 1631)
63696* Walloca-larger-than=:                  Warning Options.    (line 1634)
63697* Wanalyzer-double-fclose:               Static Analyzer Options.
63698                                                             (line   47)
63699* Wanalyzer-double-free:                 Static Analyzer Options.
63700                                                             (line   54)
63701* Wanalyzer-exposure-through-output-file: Static Analyzer Options.
63702                                                             (line   61)
63703* Wanalyzer-file-leak:                   Static Analyzer Options.
63704                                                             (line   69)
63705* Wanalyzer-free-of-non-heap:            Static Analyzer Options.
63706                                                             (line   76)
63707* Wanalyzer-malloc-leak:                 Static Analyzer Options.
63708                                                             (line   84)
63709* Wanalyzer-null-argument:               Static Analyzer Options.
63710                                                             (line  106)
63711* Wanalyzer-null-dereference:            Static Analyzer Options.
63712                                                             (line  114)
63713* Wanalyzer-possible-null-argument:      Static Analyzer Options.
63714                                                             (line   91)
63715* Wanalyzer-possible-null-dereference:   Static Analyzer Options.
63716                                                             (line   99)
63717* Wanalyzer-stale-setjmp-buffer:         Static Analyzer Options.
63718                                                             (line  121)
63719* Wanalyzer-tainted-array-index:         Static Analyzer Options.
63720                                                             (line  135)
63721* Wanalyzer-too-complex:                 Static Analyzer Options.
63722                                                             (line   37)
63723* Wanalyzer-unsafe-call-within-signal-handler: Static Analyzer Options.
63724                                                             (line  144)
63725* Wanalyzer-use-after-free:              Static Analyzer Options.
63726                                                             (line  152)
63727* Wanalyzer-use-of-pointer-in-stale-stack-frame: Static Analyzer Options.
63728                                                             (line  159)
63729* Warith-conversion:                     Warning Options.    (line 1699)
63730* Warray-bounds:                         Warning Options.    (line 1712)
63731* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
63732                                                             (line  170)
63733* Wattribute-alias:                      Warning Options.    (line 1729)
63734* Wattribute-warning:                    Warning Options.    (line 2697)
63735* Wattributes:                           Warning Options.    (line 2539)
63736* Wbad-function-cast:                    Warning Options.    (line 2216)
63737* Wbool-compare:                         Warning Options.    (line 1761)
63738* Wbool-operation:                       Warning Options.    (line 1770)
63739* Wbuiltin-declaration-mismatch:         Warning Options.    (line 2545)
63740* Wbuiltin-macro-redefined:              Warning Options.    (line 2566)
63741* Wc++-compat:                           Warning Options.    (line 2244)
63742* Wc++11-compat:                         Warning Options.    (line 2249)
63743* Wc++14-compat:                         Warning Options.    (line 2255)
63744* Wc++17-compat:                         Warning Options.    (line 2259)
63745* Wc++20-compat:                         Warning Options.    (line 2263)
63746* Wc11-c2x-compat:                       Warning Options.    (line 2236)
63747* Wc90-c99-compat:                       Warning Options.    (line 2221)
63748* Wc99-c11-compat:                       Warning Options.    (line 2228)
63749* Wcast-align:                           Warning Options.    (line 2283)
63750* Wcast-align=strict:                    Warning Options.    (line 2289)
63751* Wcast-function-type:                   Warning Options.    (line 2294)
63752* Wcast-qual:                            Warning Options.    (line 2267)
63753* Wcatch-value:                          C++ Dialect Options.
63754                                                             (line  981)
63755* Wchar-subscripts:                      Warning Options.    (line  366)
63756* Wclass-conversion:                     C++ Dialect Options.
63757                                                             (line  912)
63758* Wclass-memaccess:                      C++ Dialect Options.
63759                                                             (line  630)
63760* Wclobbered:                            Warning Options.    (line 2320)
63761* Wcomma-subscript:                      C++ Dialect Options.
63762                                                             (line  499)
63763* Wcomment:                              Warning Options.    (line 2158)
63764* Wcomments:                             Warning Options.    (line 2158)
63765* Wconditionally-supported:              C++ Dialect Options.
63766                                                             (line  989)
63767* Wconversion:                           Warning Options.    (line 2324)
63768* Wconversion-null:                      C++ Dialect Options.
63769                                                             (line 1066)
63770* Wcoverage-mismatch:                    Warning Options.    (line  371)
63771* Wcpp:                                  Warning Options.    (line  385)
63772* Wctor-dtor-privacy:                    C++ Dialect Options.
63773                                                             (line  511)
63774* Wdangling-else:                        Warning Options.    (line 2345)
63775* Wdate-time:                            Warning Options.    (line 2379)
63776* Wdeclaration-after-statement:          Warning Options.    (line 1990)
63777* Wdelete-incomplete:                    C++ Dialect Options.
63778                                                             (line  992)
63779* Wdelete-non-virtual-dtor:              C++ Dialect Options.
63780                                                             (line  518)
63781* Wdeprecated:                           Warning Options.    (line 2704)
63782* Wdeprecated-copy:                      C++ Dialect Options.
63783                                                             (line  525)
63784* Wdeprecated-declarations:              Warning Options.    (line 2708)
63785* Wdesignated-init:                      Warning Options.    (line 2959)
63786* Wdisabled-optimization:                Warning Options.    (line 2910)
63787* Wdiscarded-array-qualifiers:           Warning Options.    (line 1809)
63788* Wdiscarded-qualifiers:                 Warning Options.    (line 1803)
63789* Wdiv-by-zero:                          Warning Options.    (line 1850)
63790* Wdouble-promotion:                     Warning Options.    (line  389)
63791* Wduplicate-decl-specifier:             Warning Options.    (line  407)
63792* Wduplicated-branches:                  Warning Options.    (line 1780)
63793* Wduplicated-cond:                      Warning Options.    (line 1791)
63794* weak_reference_mismatches:             Darwin Options.     (line  196)
63795* Weffc++:                               C++ Dialect Options.
63796                                                             (line  767)
63797* Wempty-body:                           Warning Options.    (line 2384)
63798* Wendif-labels:                         Warning Options.    (line 2202)
63799* Wendif-labels <1>:                     Warning Options.    (line 2388)
63800* Wenum-compare:                         Warning Options.    (line 2391)
63801* Wenum-conversion:                      Warning Options.    (line 2397)
63802* Werror:                                Warning Options.    (line   28)
63803* Werror=:                               Warning Options.    (line   31)
63804* Wexpansion-to-defined:                 Warning Options.    (line 2177)
63805* Wextra:                                Warning Options.    (line  212)
63806* Wextra <1>:                            Warning Options.    (line 2618)
63807* Wextra <2>:                            Warning Options.    (line 2726)
63808* Wextra-semi:                           C++ Dialect Options.
63809                                                             (line  997)
63810* Wfatal-errors:                         Warning Options.    (line   48)
63811* Wfloat-conversion:                     Warning Options.    (line 2424)
63812* Wfloat-equal:                          Warning Options.    (line 1890)
63813* Wformat:                               Warning Options.    (line  412)
63814* Wformat <1>:                           Warning Options.    (line  437)
63815* Wformat <2>:                           Warning Options.    (line 1577)
63816* Wformat <3>:                           Common Function Attributes.
63817                                                             (line  381)
63818* Wformat-contains-nul:                  Warning Options.    (line  451)
63819* Wformat-extra-args:                    Warning Options.    (line  455)
63820* Wformat-nonliteral:                    Warning Options.    (line  548)
63821* Wformat-nonliteral <1>:                Common Function Attributes.
63822                                                             (line  446)
63823* Wformat-overflow:                      Warning Options.    (line  469)
63824* Wformat-overflow <1>:                  Warning Options.    (line  480)
63825* Wformat-security:                      Warning Options.    (line  553)
63826* Wformat-signedness:                    Warning Options.    (line  564)
63827* Wformat-truncation:                    Warning Options.    (line  569)
63828* Wformat-truncation <1>:                Warning Options.    (line  581)
63829* Wformat-y2k:                           Warning Options.    (line  592)
63830* Wformat-zero-length:                   Warning Options.    (line  544)
63831* Wformat=:                              Warning Options.    (line  412)
63832* Wformat=1:                             Warning Options.    (line  437)
63833* Wformat=2:                             Warning Options.    (line  446)
63834* Wframe-address:                        Warning Options.    (line 1797)
63835* Wframe-larger-than=:                   Warning Options.    (line 2059)
63836* Wfree-nonheap-object:                  Warning Options.    (line 2076)
63837* whatsloaded:                           Darwin Options.     (line  196)
63838* Whsa:                                  Warning Options.    (line 2964)
63839* whyload:                               Darwin Options.     (line  196)
63840* Wif-not-aligned:                       Warning Options.    (line  765)
63841* Wignored-attributes:                   Warning Options.    (line  780)
63842* Wignored-qualifiers:                   Warning Options.    (line  769)
63843* Wimplicit:                             Warning Options.    (line  643)
63844* Wimplicit-fallthrough:                 Warning Options.    (line  647)
63845* Wimplicit-fallthrough=:                Warning Options.    (line  652)
63846* Wimplicit-function-declaration:        Warning Options.    (line  637)
63847* Wimplicit-int:                         Warning Options.    (line  632)
63848* Winaccessible-base:                    C++ Dialect Options.
63849                                                             (line 1001)
63850* Wincompatible-pointer-types:           Warning Options.    (line 1815)
63851* Winherited-variadic-ctor:              C++ Dialect Options.
63852                                                             (line 1012)
63853* Winit-list-lifetime:                   C++ Dialect Options.
63854                                                             (line  533)
63855* Winit-self:                            Warning Options.    (line  617)
63856* Winline:                               Warning Options.    (line 2819)
63857* Winline <1>:                           Inline.             (line   60)
63858* Wint-conversion:                       Warning Options.    (line 1821)
63859* Wint-in-bool-context:                  Warning Options.    (line 2832)
63860* Wint-to-pointer-cast:                  Warning Options.    (line 2840)
63861* Winvalid-memory-model:                 Warning Options.    (line 1237)
63862* Winvalid-offsetof:                     C++ Dialect Options.
63863                                                             (line 1017)
63864* Winvalid-pch:                          Warning Options.    (line 2849)
63865* Wjump-misses-init:                     Warning Options.    (line 2401)
63866* Wl:                                    Link Options.       (line  335)
63867* Wlarger-than-BYTE-SIZE:                Warning Options.    (line 2049)
63868* Wlarger-than=:                         Warning Options.    (line 2049)
63869* Wliteral-suffix:                       C++ Dialect Options.
63870                                                             (line  568)
63871* Wlogical-not-parentheses:              Warning Options.    (line 2514)
63872* Wlogical-op:                           Warning Options.    (line 2506)
63873* Wlong-long:                            Warning Options.    (line 2853)
63874* Wlto-type-mismatch:                    Warning Options.    (line 2953)
63875* Wmain:                                 Warning Options.    (line  787)
63876* Wmaybe-uninitialized:                  Warning Options.    (line 1254)
63877* Wmemset-elt-size:                      Warning Options.    (line 2469)
63878* Wmemset-transposed-args:               Warning Options.    (line 2477)
63879* Wmisleading-indentation:               Warning Options.    (line  794)
63880* Wmismatched-tags:                      C++ Dialect Options.
63881                                                             (line  853)
63882* Wmissing-attributes:                   Warning Options.    (line  828)
63883* Wmissing-braces:                       Warning Options.    (line  872)
63884* Wmissing-declarations:                 Warning Options.    (line 2608)
63885* Wmissing-field-initializers:           Warning Options.    (line 2618)
63886* Wmissing-format-attribute:             Warning Options.    (line 1577)
63887* Wmissing-include-dirs:                 Warning Options.    (line  882)
63888* Wmissing-noreturn:                     Warning Options.    (line 1563)
63889* Wmissing-parameter-type:               Warning Options.    (line 2590)
63890* Wmissing-profile:                      Warning Options.    (line  885)
63891* Wmissing-prototypes:                   Warning Options.    (line 2598)
63892* Wmisspelled-isr:                       AVR Options.        (line  313)
63893* Wmultichar:                            Warning Options.    (line 2648)
63894* Wmultiple-inheritance:                 C++ Dialect Options.
63895                                                             (line  878)
63896* Wmultistatement-macros:                Warning Options.    (line  901)
63897* Wnamespaces:                           C++ Dialect Options.
63898                                                             (line  901)
63899* Wnarrowing:                            C++ Dialect Options.
63900                                                             (line  594)
63901* Wnested-externs:                       Warning Options.    (line 2816)
63902* Wno-abi:                               Warning Options.    (line  256)
63903* Wno-absolute-value:                    Warning Options.    (line 2147)
63904* Wno-addr-space-convert:                AVR Options.        (line  308)
63905* Wno-address:                           Warning Options.    (line 2488)
63906* Wno-address-of-packed-member:          Warning Options.    (line 2501)
63907* Wno-aggregate-return:                  Warning Options.    (line 2529)
63908* Wno-aggressive-loop-optimizations:     Warning Options.    (line 2534)
63909* Wno-aligned-new:                       C++ Dialect Options.
63910                                                             (line  934)
63911* Wno-all:                               Warning Options.    (line  138)
63912* Wno-alloc-size-larger-than:            Warning Options.    (line 1616)
63913* Wno-alloc-size-larger-than <1>:        Warning Options.    (line 1627)
63914* Wno-alloc-zero:                        Warning Options.    (line 1606)
63915* Wno-alloca:                            Warning Options.    (line 1631)
63916* Wno-alloca-larger-than:                Warning Options.    (line 1634)
63917* Wno-alloca-larger-than <1>:            Warning Options.    (line 1695)
63918* Wno-analyzer-double-fclose:            Static Analyzer Options.
63919                                                             (line   47)
63920* Wno-analyzer-double-free:              Static Analyzer Options.
63921                                                             (line   54)
63922* Wno-analyzer-exposure-through-output-file: Static Analyzer Options.
63923                                                             (line   61)
63924* Wno-analyzer-file-leak:                Static Analyzer Options.
63925                                                             (line   69)
63926* Wno-analyzer-free-of-non-heap:         Static Analyzer Options.
63927                                                             (line   76)
63928* Wno-analyzer-malloc-leak:              Static Analyzer Options.
63929                                                             (line   84)
63930* Wno-analyzer-null-argument:            Static Analyzer Options.
63931                                                             (line  106)
63932* Wno-analyzer-null-dereference:         Static Analyzer Options.
63933                                                             (line  114)
63934* Wno-analyzer-possible-null-argument:   Static Analyzer Options.
63935                                                             (line   91)
63936* Wno-analyzer-possible-null-dereference: Static Analyzer Options.
63937                                                             (line   99)
63938* Wno-analyzer-stale-setjmp-buffer:      Static Analyzer Options.
63939                                                             (line  121)
63940* Wno-analyzer-tainted-array-index:      Static Analyzer Options.
63941                                                             (line  135)
63942* Wno-analyzer-too-complex:              Static Analyzer Options.
63943                                                             (line   37)
63944* Wno-analyzer-unsafe-call-within-signal-handler: Static Analyzer Options.
63945                                                             (line  144)
63946* Wno-analyzer-use-after-free:           Static Analyzer Options.
63947                                                             (line  152)
63948* Wno-analyzer-use-of-pointer-in-stale-stack-frame: Static Analyzer Options.
63949                                                             (line  159)
63950* Wno-arith-conversion:                  Warning Options.    (line 1699)
63951* Wno-array-bounds:                      Warning Options.    (line 1712)
63952* Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
63953                                                             (line  170)
63954* Wno-attribute-alias:                   Warning Options.    (line 1729)
63955* Wno-attribute-warning:                 Warning Options.    (line 2697)
63956* Wno-attributes:                        Warning Options.    (line 2539)
63957* Wno-bad-function-cast:                 Warning Options.    (line 2216)
63958* Wno-bool-compare:                      Warning Options.    (line 1761)
63959* Wno-bool-operation:                    Warning Options.    (line 1770)
63960* Wno-builtin-declaration-mismatch:      Warning Options.    (line 2545)
63961* Wno-builtin-macro-redefined:           Warning Options.    (line 2566)
63962* Wno-c++-compat:                        Warning Options.    (line 2244)
63963* Wno-c++11-compat:                      Warning Options.    (line 2249)
63964* Wno-c++14-compat:                      Warning Options.    (line 2255)
63965* Wno-c++17-compat:                      Warning Options.    (line 2259)
63966* Wno-c++20-compat:                      Warning Options.    (line 2263)
63967* Wno-c11-c2x-compat:                    Warning Options.    (line 2236)
63968* Wno-c90-c99-compat:                    Warning Options.    (line 2221)
63969* Wno-c99-c11-compat:                    Warning Options.    (line 2228)
63970* Wno-cast-align:                        Warning Options.    (line 2283)
63971* Wno-cast-function-type:                Warning Options.    (line 2294)
63972* Wno-cast-qual:                         Warning Options.    (line 2267)
63973* Wno-catch-value:                       C++ Dialect Options.
63974                                                             (line  981)
63975* Wno-char-subscripts:                   Warning Options.    (line  366)
63976* Wno-class-conversion:                  C++ Dialect Options.
63977                                                             (line  912)
63978* Wno-class-memaccess:                   C++ Dialect Options.
63979                                                             (line  630)
63980* Wno-clobbered:                         Warning Options.    (line 2320)
63981* Wno-comma-subscript:                   C++ Dialect Options.
63982                                                             (line  499)
63983* Wno-conditionally-supported:           C++ Dialect Options.
63984                                                             (line  989)
63985* Wno-conversion:                        Warning Options.    (line 2324)
63986* Wno-conversion-null:                   C++ Dialect Options.
63987                                                             (line 1066)
63988* Wno-coverage-mismatch:                 Warning Options.    (line  371)
63989* Wno-cpp:                               Warning Options.    (line  385)
63990* Wno-ctor-dtor-privacy:                 C++ Dialect Options.
63991                                                             (line  511)
63992* Wno-dangling-else:                     Warning Options.    (line 2345)
63993* Wno-date-time:                         Warning Options.    (line 2379)
63994* Wno-declaration-after-statement:       Warning Options.    (line 1990)
63995* Wno-delete-incomplete:                 C++ Dialect Options.
63996                                                             (line  992)
63997* Wno-delete-non-virtual-dtor:           C++ Dialect Options.
63998                                                             (line  518)
63999* Wno-deprecated:                        Warning Options.    (line 2704)
64000* Wno-deprecated-copy:                   C++ Dialect Options.
64001                                                             (line  525)
64002* Wno-deprecated-declarations:           Warning Options.    (line 2708)
64003* Wno-designated-init:                   Warning Options.    (line 2959)
64004* Wno-disabled-optimization:             Warning Options.    (line 2910)
64005* Wno-discarded-array-qualifiers:        Warning Options.    (line 1809)
64006* Wno-discarded-qualifiers:              Warning Options.    (line 1803)
64007* Wno-div-by-zero:                       Warning Options.    (line 1850)
64008* Wno-double-promotion:                  Warning Options.    (line  389)
64009* Wno-duplicate-decl-specifier:          Warning Options.    (line  407)
64010* Wno-duplicated-branches:               Warning Options.    (line 1780)
64011* Wno-duplicated-cond:                   Warning Options.    (line 1791)
64012* Wno-effc++:                            C++ Dialect Options.
64013                                                             (line  767)
64014* Wno-empty-body:                        Warning Options.    (line 2384)
64015* Wno-endif-labels:                      Warning Options.    (line 2202)
64016* Wno-endif-labels <1>:                  Warning Options.    (line 2388)
64017* Wno-enum-compare:                      Warning Options.    (line 2391)
64018* Wno-enum-conversion:                   Warning Options.    (line 2397)
64019* Wno-error:                             Warning Options.    (line   28)
64020* Wno-error=:                            Warning Options.    (line   31)
64021* Wno-extra:                             Warning Options.    (line  212)
64022* Wno-extra <1>:                         Warning Options.    (line 2618)
64023* Wno-extra <2>:                         Warning Options.    (line 2726)
64024* Wno-extra-semi:                        C++ Dialect Options.
64025                                                             (line  997)
64026* Wno-fatal-errors:                      Warning Options.    (line   48)
64027* Wno-float-conversion:                  Warning Options.    (line 2424)
64028* Wno-float-equal:                       Warning Options.    (line 1890)
64029* Wno-format:                            Warning Options.    (line  412)
64030* Wno-format <1>:                        Warning Options.    (line 1577)
64031* Wno-format-contains-nul:               Warning Options.    (line  451)
64032* Wno-format-extra-args:                 Warning Options.    (line  455)
64033* Wno-format-nonliteral:                 Warning Options.    (line  548)
64034* Wno-format-overflow:                   Warning Options.    (line  469)
64035* Wno-format-overflow <1>:               Warning Options.    (line  480)
64036* Wno-format-security:                   Warning Options.    (line  553)
64037* Wno-format-signedness:                 Warning Options.    (line  564)
64038* Wno-format-truncation:                 Warning Options.    (line  569)
64039* Wno-format-truncation <1>:             Warning Options.    (line  581)
64040* Wno-format-y2k:                        Warning Options.    (line  592)
64041* Wno-format-zero-length:                Warning Options.    (line  544)
64042* Wno-frame-address:                     Warning Options.    (line 1797)
64043* Wno-frame-larger-than:                 Warning Options.    (line 2059)
64044* Wno-frame-larger-than <1>:             Warning Options.    (line 2072)
64045* Wno-free-nonheap-object:               Warning Options.    (line 2076)
64046* Wno-hsa:                               Warning Options.    (line 2964)
64047* Wno-if-not-aligned:                    Warning Options.    (line  765)
64048* Wno-ignored-attributes:                Warning Options.    (line  780)
64049* Wno-ignored-qualifiers:                Warning Options.    (line  769)
64050* Wno-implicit:                          Warning Options.    (line  643)
64051* Wno-implicit-fallthrough:              Warning Options.    (line  647)
64052* Wno-implicit-function-declaration:     Warning Options.    (line  637)
64053* Wno-implicit-int:                      Warning Options.    (line  632)
64054* Wno-inaccessible-base:                 C++ Dialect Options.
64055                                                             (line 1001)
64056* Wno-incompatible-pointer-types:        Warning Options.    (line 1815)
64057* Wno-inherited-variadic-ctor:           C++ Dialect Options.
64058                                                             (line 1012)
64059* Wno-init-list-lifetime:                C++ Dialect Options.
64060                                                             (line  533)
64061* Wno-init-self:                         Warning Options.    (line  617)
64062* Wno-inline:                            Warning Options.    (line 2819)
64063* Wno-int-conversion:                    Warning Options.    (line 1821)
64064* Wno-int-in-bool-context:               Warning Options.    (line 2832)
64065* Wno-int-to-pointer-cast:               Warning Options.    (line 2840)
64066* Wno-invalid-memory-model:              Warning Options.    (line 1237)
64067* Wno-invalid-offsetof:                  C++ Dialect Options.
64068                                                             (line 1017)
64069* Wno-invalid-pch:                       Warning Options.    (line 2849)
64070* Wno-jump-misses-init:                  Warning Options.    (line 2401)
64071* Wno-larger-than:                       Warning Options.    (line 2055)
64072* Wno-literal-suffix:                    C++ Dialect Options.
64073                                                             (line  568)
64074* Wno-logical-not-parentheses:           Warning Options.    (line 2514)
64075* Wno-logical-op:                        Warning Options.    (line 2506)
64076* Wno-long-long:                         Warning Options.    (line 2853)
64077* Wno-lto-type-mismatch:                 Warning Options.    (line 2953)
64078* Wno-main:                              Warning Options.    (line  787)
64079* Wno-maybe-uninitialized:               Warning Options.    (line 1254)
64080* Wno-memset-elt-size:                   Warning Options.    (line 2469)
64081* Wno-memset-transposed-args:            Warning Options.    (line 2477)
64082* Wno-misleading-indentation:            Warning Options.    (line  794)
64083* Wno-mismatched-tags:                   C++ Dialect Options.
64084                                                             (line  853)
64085* Wno-missing-attributes:                Warning Options.    (line  828)
64086* Wno-missing-braces:                    Warning Options.    (line  872)
64087* Wno-missing-declarations:              Warning Options.    (line 2608)
64088* Wno-missing-field-initializers:        Warning Options.    (line 2618)
64089* Wno-missing-format-attribute:          Warning Options.    (line 1577)
64090* Wno-missing-include-dirs:              Warning Options.    (line  882)
64091* Wno-missing-noreturn:                  Warning Options.    (line 1563)
64092* Wno-missing-parameter-type:            Warning Options.    (line 2590)
64093* Wno-missing-profile:                   Warning Options.    (line  885)
64094* Wno-missing-prototypes:                Warning Options.    (line 2598)
64095* Wno-misspelled-isr:                    AVR Options.        (line  313)
64096* Wno-multichar:                         Warning Options.    (line 2648)
64097* Wno-multiple-inheritance:              C++ Dialect Options.
64098                                                             (line  878)
64099* Wno-multistatement-macros:             Warning Options.    (line  901)
64100* Wno-namespaces:                        C++ Dialect Options.
64101                                                             (line  901)
64102* Wno-narrowing:                         C++ Dialect Options.
64103                                                             (line  594)
64104* Wno-nested-externs:                    Warning Options.    (line 2816)
64105* Wno-noexcept:                          C++ Dialect Options.
64106                                                             (line  610)
64107* Wno-noexcept-type:                     C++ Dialect Options.
64108                                                             (line  616)
64109* Wno-non-template-friend:               C++ Dialect Options.
64110                                                             (line  802)
64111* Wno-non-virtual-dtor:                  C++ Dialect Options.
64112                                                             (line  650)
64113* Wno-nonnull:                           Warning Options.    (line  596)
64114* Wno-nonnull-compare:                   Warning Options.    (line  603)
64115* Wno-normalized:                        Warning Options.    (line 2654)
64116* Wno-null-dereference:                  Warning Options.    (line  610)
64117* Wno-odr:                               Warning Options.    (line 2717)
64118* Wno-old-style-cast:                    C++ Dialect Options.
64119                                                             (line  811)
64120* Wno-old-style-declaration:             Warning Options.    (line 2577)
64121* Wno-old-style-definition:              Warning Options.    (line 2583)
64122* Wno-openmp-simd:                       Warning Options.    (line 2721)
64123* Wno-overflow:                          Warning Options.    (line 2714)
64124* Wno-overlength-strings:                Warning Options.    (line 2930)
64125* Wno-overloaded-virtual:                C++ Dialect Options.
64126                                                             (line  817)
64127* Wno-override-init:                     Warning Options.    (line 2726)
64128* Wno-override-init-side-effects:        Warning Options.    (line 2734)
64129* Wno-packed:                            Warning Options.    (line 2739)
64130* Wno-packed-bitfield-compat:            Warning Options.    (line 2756)
64131* Wno-packed-not-aligned:                Warning Options.    (line 2773)
64132* Wno-padded:                            Warning Options.    (line 2786)
64133* Wno-parentheses:                       Warning Options.    (line  921)
64134* Wno-pedantic:                          Warning Options.    (line   86)
64135* Wno-pedantic-ms-format:                Warning Options.    (line 2114)
64136* Wno-pessimizing-move:                  C++ Dialect Options.
64137                                                             (line  679)
64138* Wno-placement-new:                     C++ Dialect Options.
64139                                                             (line  945)
64140* Wno-pmf-conversions:                   C++ Dialect Options.
64141                                                             (line  836)
64142* Wno-pmf-conversions <1>:               Bound member functions.
64143                                                             (line   35)
64144* Wno-pointer-arith:                     Warning Options.    (line 2120)
64145* Wno-pointer-compare:                   Warning Options.    (line 2127)
64146* Wno-pointer-sign:                      Warning Options.    (line 2919)
64147* Wno-pointer-to-int-cast:               Warning Options.    (line 2845)
64148* Wno-pragmas:                           Warning Options.    (line 1306)
64149* Wno-prio-ctor-dtor:                    Warning Options.    (line 1311)
64150* Wno-property-assign-default:           Objective-C and Objective-C++ Dialect Options.
64151                                                             (line  174)
64152* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
64153                                                             (line  178)
64154* Wno-redundant-decls:                   Warning Options.    (line 2793)
64155* Wno-redundant-move:                    C++ Dialect Options.
64156                                                             (line  701)
64157* Wno-redundant-tags:                    C++ Dialect Options.
64158                                                             (line  740)
64159* Wno-register:                          C++ Dialect Options.
64160                                                             (line  658)
64161* Wno-reorder:                           C++ Dialect Options.
64162                                                             (line  665)
64163* Wno-restrict:                          Warning Options.    (line 2797)
64164* Wno-return-local-addr:                 Warning Options.    (line 1001)
64165* Wno-return-type:                       Warning Options.    (line 1005)
64166* Wno-scalar-storage-order:              Warning Options.    (line 2430)
64167* Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
64168                                                             (line  188)
64169* Wno-sequence-point:                    Warning Options.    (line  948)
64170* Wno-shadow:                            Warning Options.    (line 1996)
64171* Wno-shadow-ivar:                       Warning Options.    (line 2007)
64172* Wno-shift-count-negative:              Warning Options.    (line 1026)
64173* Wno-shift-count-overflow:              Warning Options.    (line 1030)
64174* Wno-shift-negative-value:              Warning Options.    (line 1034)
64175* Wno-shift-overflow:                    Warning Options.    (line 1039)
64176* Wno-sign-compare:                      Warning Options.    (line 2412)
64177* Wno-sign-conversion:                   Warning Options.    (line 2418)
64178* Wno-sign-promo:                        C++ Dialect Options.
64179                                                             (line  840)
64180* Wno-sized-deallocation:                C++ Dialect Options.
64181                                                             (line 1029)
64182* Wno-sizeof-array-argument:             Warning Options.    (line 2464)
64183* Wno-sizeof-pointer-div:                Warning Options.    (line 2434)
64184* Wno-sizeof-pointer-memaccess:          Warning Options.    (line 2442)
64185* Wno-stack-protector:                   Warning Options.    (line 2925)
64186* Wno-stack-usage:                       Warning Options.    (line 2080)
64187* Wno-stack-usage <1>:                   Warning Options.    (line 2104)
64188* Wno-strict-aliasing:                   Warning Options.    (line 1319)
64189* Wno-strict-null-sentinel:              C++ Dialect Options.
64190                                                             (line  795)
64191* Wno-strict-overflow:                   Warning Options.    (line 1358)
64192* Wno-strict-prototypes:                 Warning Options.    (line 2571)
64193* Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
64194                                                             (line  200)
64195* Wno-string-compare:                    Warning Options.    (line 1406)
64196* Wno-stringop-overflow:                 Warning Options.    (line 1427)
64197* Wno-stringop-overflow <1>:             Warning Options.    (line 1466)
64198* Wno-stringop-truncation:               Warning Options.    (line 1504)
64199* Wno-subobject-linkage:                 C++ Dialect Options.
64200                                                             (line  754)
64201* Wno-suggest-attribute=:                Warning Options.    (line 1555)
64202* Wno-suggest-attribute=cold:            Warning Options.    (line 1598)
64203* Wno-suggest-attribute=const:           Warning Options.    (line 1563)
64204* Wno-suggest-attribute=format:          Warning Options.    (line 1577)
64205* Wno-suggest-attribute=malloc:          Warning Options.    (line 1563)
64206* Wno-suggest-attribute=noreturn:        Warning Options.    (line 1563)
64207* Wno-suggest-attribute=pure:            Warning Options.    (line 1563)
64208* Wno-suggest-final-methods:             C++ Dialect Options.
64209                                                             (line 1049)
64210* Wno-suggest-final-types:               C++ Dialect Options.
64211                                                             (line 1040)
64212* Wno-suggest-override:                  C++ Dialect Options.
64213                                                             (line 1059)
64214* Wno-switch:                            Warning Options.    (line 1055)
64215* Wno-switch-bool:                       Warning Options.    (line 1075)
64216* Wno-switch-default:                    Warning Options.    (line 1063)
64217* Wno-switch-enum:                       Warning Options.    (line 1066)
64218* Wno-switch-outside-range:              Warning Options.    (line 1086)
64219* Wno-switch-unreachable:                Warning Options.    (line 1091)
64220* Wno-sync-nand:                         Warning Options.    (line 1115)
64221* Wno-system-headers:                    Warning Options.    (line 1855)
64222* Wno-tautological-compare:              Warning Options.    (line 1866)
64223* Wno-templates:                         C++ Dialect Options.
64224                                                             (line  846)
64225* Wno-terminate:                         C++ Dialect Options.
64226                                                             (line  908)
64227* Wno-traditional:                       Warning Options.    (line 1905)
64228* Wno-traditional-conversion:            Warning Options.    (line 1982)
64229* Wno-trampolines:                       Warning Options.    (line 1880)
64230* Wno-type-limits:                       Warning Options.    (line 2140)
64231* Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
64232                                                             (line  208)
64233* Wno-undef:                             Warning Options.    (line 2173)
64234* Wno-uninitialized:                     Warning Options.    (line 1216)
64235* Wno-unknown-pragmas:                   Warning Options.    (line 1299)
64236* Wno-unsafe-loop-optimizations:         Warning Options.    (line 2108)
64237* Wno-unsuffixed-float-constants:        Warning Options.    (line 2945)
64238* Wno-unused:                            Warning Options.    (line 1209)
64239* Wno-unused-but-set-parameter:          Warning Options.    (line 1120)
64240* Wno-unused-but-set-variable:           Warning Options.    (line 1129)
64241* Wno-unused-const-variable:             Warning Options.    (line 1176)
64242* Wno-unused-function:                   Warning Options.    (line 1139)
64243* Wno-unused-label:                      Warning Options.    (line 1144)
64244* Wno-unused-local-typedefs:             Warning Options.    (line 1151)
64245* Wno-unused-parameter:                  Warning Options.    (line 1155)
64246* Wno-unused-result:                     Warning Options.    (line 1162)
64247* Wno-unused-value:                      Warning Options.    (line 1199)
64248* Wno-unused-variable:                   Warning Options.    (line 1167)
64249* Wno-useless-cast:                      C++ Dialect Options.
64250                                                             (line 1063)
64251* Wno-varargs:                           Warning Options.    (line 2864)
64252* Wno-variadic-macros:                   Warning Options.    (line 2858)
64253* Wno-vector-operation-performance:      Warning Options.    (line 2869)
64254* Wno-virtual-inheritance:               C++ Dialect Options.
64255                                                             (line  885)
64256* Wno-virtual-move-assign:               C++ Dialect Options.
64257                                                             (line  892)
64258* Wno-vla:                               Warning Options.    (line 2879)
64259* Wno-vla-larger-than:                   Warning Options.    (line 2883)
64260* Wno-vla-larger-than <1>:               Warning Options.    (line 2900)
64261* Wno-volatile:                          C++ Dialect Options.
64262                                                             (line  917)
64263* Wno-volatile-register-var:             Warning Options.    (line 2904)
64264* Wno-write-strings:                     Warning Options.    (line 2307)
64265* Wno-zero-as-null-pointer-constant:     C++ Dialect Options.
64266                                                             (line  930)
64267* Wnoexcept:                             C++ Dialect Options.
64268                                                             (line  610)
64269* Wnoexcept-type:                        C++ Dialect Options.
64270                                                             (line  616)
64271* Wnon-template-friend:                  C++ Dialect Options.
64272                                                             (line  802)
64273* Wnon-virtual-dtor:                     C++ Dialect Options.
64274                                                             (line  650)
64275* Wnonnull:                              Warning Options.    (line  596)
64276* Wnonnull-compare:                      Warning Options.    (line  603)
64277* Wnormalized:                           Warning Options.    (line 2654)
64278* Wnormalized=:                          Warning Options.    (line 2654)
64279* Wnull-dereference:                     Warning Options.    (line  610)
64280* Wodr:                                  Warning Options.    (line 2717)
64281* Wold-style-cast:                       C++ Dialect Options.
64282                                                             (line  811)
64283* Wold-style-declaration:                Warning Options.    (line 2577)
64284* Wold-style-definition:                 Warning Options.    (line 2583)
64285* Wopenmp-simd:                          Warning Options.    (line 2721)
64286* Woverflow:                             Warning Options.    (line 2714)
64287* Woverlength-strings:                   Warning Options.    (line 2930)
64288* Woverloaded-virtual:                   C++ Dialect Options.
64289                                                             (line  817)
64290* Woverride-init:                        Warning Options.    (line 2726)
64291* Woverride-init-side-effects:           Warning Options.    (line 2734)
64292* Wp:                                    Preprocessor Options.
64293                                                             (line  462)
64294* Wpacked:                               Warning Options.    (line 2739)
64295* Wpacked-bitfield-compat:               Warning Options.    (line 2756)
64296* Wpacked-not-aligned:                   Warning Options.    (line 2773)
64297* Wpadded:                               Warning Options.    (line 2786)
64298* Wparentheses:                          Warning Options.    (line  921)
64299* Wpedantic:                             Warning Options.    (line   86)
64300* Wpedantic-ms-format:                   Warning Options.    (line 2114)
64301* Wpessimizing-move:                     C++ Dialect Options.
64302                                                             (line  679)
64303* Wplacement-new:                        C++ Dialect Options.
64304                                                             (line  945)
64305* Wpmf-conversions:                      C++ Dialect Options.
64306                                                             (line  836)
64307* Wpointer-arith:                        Warning Options.    (line 2120)
64308* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
64309* Wpointer-compare:                      Warning Options.    (line 2127)
64310* Wpointer-sign:                         Warning Options.    (line 2919)
64311* Wpointer-to-int-cast:                  Warning Options.    (line 2845)
64312* Wpragmas:                              Warning Options.    (line 1306)
64313* Wprio-ctor-dtor:                       Warning Options.    (line 1311)
64314* Wproperty-assign-default:              Objective-C and Objective-C++ Dialect Options.
64315                                                             (line  174)
64316* Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
64317                                                             (line  178)
64318* wrapper:                               Overall Options.    (line  362)
64319* Wredundant-decls:                      Warning Options.    (line 2793)
64320* Wredundant-move:                       C++ Dialect Options.
64321                                                             (line  701)
64322* Wredundant-tags:                       C++ Dialect Options.
64323                                                             (line  740)
64324* Wregister:                             C++ Dialect Options.
64325                                                             (line  658)
64326* Wreorder:                              C++ Dialect Options.
64327                                                             (line  665)
64328* Wrestrict:                             Warning Options.    (line 2797)
64329* Wreturn-local-addr:                    Warning Options.    (line 1001)
64330* Wreturn-type:                          Warning Options.    (line 1005)
64331* Wscalar-storage-order:                 Warning Options.    (line 2430)
64332* Wselector:                             Objective-C and Objective-C++ Dialect Options.
64333                                                             (line  188)
64334* Wsequence-point:                       Warning Options.    (line  948)
64335* Wshadow:                               Warning Options.    (line 1996)
64336* Wshadow-ivar:                          Warning Options.    (line 2007)
64337* Wshadow=compatible-local:              Warning Options.    (line 2018)
64338* Wshadow=global:                        Warning Options.    (line 2011)
64339* Wshadow=local:                         Warning Options.    (line 2014)
64340* Wshift-count-negative:                 Warning Options.    (line 1026)
64341* Wshift-count-overflow:                 Warning Options.    (line 1030)
64342* Wshift-negative-value:                 Warning Options.    (line 1034)
64343* Wshift-overflow:                       Warning Options.    (line 1039)
64344* Wsign-compare:                         Warning Options.    (line 2412)
64345* Wsign-conversion:                      Warning Options.    (line 2418)
64346* Wsign-promo:                           C++ Dialect Options.
64347                                                             (line  840)
64348* Wsized-deallocation:                   C++ Dialect Options.
64349                                                             (line 1029)
64350* Wsizeof-array-argument:                Warning Options.    (line 2464)
64351* Wsizeof-pointer-div:                   Warning Options.    (line 2434)
64352* Wsizeof-pointer-memaccess:             Warning Options.    (line 2442)
64353* Wstack-protector:                      Warning Options.    (line 2925)
64354* Wstack-usage:                          Warning Options.    (line 2080)
64355* Wstrict-aliasing:                      Warning Options.    (line 1319)
64356* Wstrict-aliasing=n:                    Warning Options.    (line 1326)
64357* Wstrict-null-sentinel:                 C++ Dialect Options.
64358                                                             (line  795)
64359* Wstrict-overflow:                      Warning Options.    (line 1358)
64360* Wstrict-prototypes:                    Warning Options.    (line 2571)
64361* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
64362                                                             (line  200)
64363* Wstring-compare:                       Warning Options.    (line 1406)
64364* Wstringop-overflow:                    Warning Options.    (line 1427)
64365* Wstringop-overflow <1>:                Warning Options.    (line 1466)
64366* Wstringop-truncation:                  Warning Options.    (line 1504)
64367* Wsubobject-linkage:                    C++ Dialect Options.
64368                                                             (line  754)
64369* Wsuggest-attribute=:                   Warning Options.    (line 1555)
64370* Wsuggest-attribute=cold:               Warning Options.    (line 1598)
64371* Wsuggest-attribute=const:              Warning Options.    (line 1563)
64372* Wsuggest-attribute=format:             Warning Options.    (line 1577)
64373* Wsuggest-attribute=malloc:             Warning Options.    (line 1563)
64374* Wsuggest-attribute=noreturn:           Warning Options.    (line 1563)
64375* Wsuggest-attribute=pure:               Warning Options.    (line 1563)
64376* Wsuggest-final-methods:                C++ Dialect Options.
64377                                                             (line 1049)
64378* Wsuggest-final-types:                  C++ Dialect Options.
64379                                                             (line 1040)
64380* Wsuggest-override:                     C++ Dialect Options.
64381                                                             (line 1059)
64382* Wswitch:                               Warning Options.    (line 1055)
64383* Wswitch-bool:                          Warning Options.    (line 1075)
64384* Wswitch-default:                       Warning Options.    (line 1063)
64385* Wswitch-enum:                          Warning Options.    (line 1066)
64386* Wswitch-outside-range:                 Warning Options.    (line 1086)
64387* Wswitch-unreachable:                   Warning Options.    (line 1091)
64388* Wsync-nand:                            Warning Options.    (line 1115)
64389* Wsystem-headers:                       Warning Options.    (line 1855)
64390* Wtautological-compare:                 Warning Options.    (line 1866)
64391* Wtemplates:                            C++ Dialect Options.
64392                                                             (line  846)
64393* Wterminate:                            C++ Dialect Options.
64394                                                             (line  908)
64395* Wtraditional:                          Warning Options.    (line 1905)
64396* Wtraditional-conversion:               Warning Options.    (line 1982)
64397* Wtrampolines:                          Warning Options.    (line 1880)
64398* Wtrigraphs:                            Warning Options.    (line 2163)
64399* Wtype-limits:                          Warning Options.    (line 2140)
64400* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
64401                                                             (line  208)
64402* Wundef:                                Warning Options.    (line 2173)
64403* Wuninitialized:                        Warning Options.    (line 1216)
64404* Wunknown-pragmas:                      Warning Options.    (line 1299)
64405* Wunsafe-loop-optimizations:            Warning Options.    (line 2108)
64406* Wunsuffixed-float-constants:           Warning Options.    (line 2945)
64407* Wunused:                               Warning Options.    (line 1209)
64408* Wunused-but-set-parameter:             Warning Options.    (line 1120)
64409* Wunused-but-set-variable:              Warning Options.    (line 1129)
64410* Wunused-const-variable:                Warning Options.    (line 1176)
64411* Wunused-function:                      Warning Options.    (line 1139)
64412* Wunused-label:                         Warning Options.    (line 1144)
64413* Wunused-local-typedefs:                Warning Options.    (line 1151)
64414* Wunused-macros:                        Warning Options.    (line 2183)
64415* Wunused-parameter:                     Warning Options.    (line 1155)
64416* Wunused-result:                        Warning Options.    (line 1162)
64417* Wunused-value:                         Warning Options.    (line 1199)
64418* Wunused-variable:                      Warning Options.    (line 1167)
64419* Wuseless-cast:                         C++ Dialect Options.
64420                                                             (line 1063)
64421* Wvarargs:                              Warning Options.    (line 2864)
64422* Wvariadic-macros:                      Warning Options.    (line 2858)
64423* Wvector-operation-performance:         Warning Options.    (line 2869)
64424* Wvirtual-inheritance:                  C++ Dialect Options.
64425                                                             (line  885)
64426* Wvirtual-move-assign:                  C++ Dialect Options.
64427                                                             (line  892)
64428* Wvla:                                  Warning Options.    (line 2879)
64429* Wvla-larger-than=:                     Warning Options.    (line 2883)
64430* Wvolatile:                             C++ Dialect Options.
64431                                                             (line  917)
64432* Wvolatile-register-var:                Warning Options.    (line 2904)
64433* Wwrite-strings:                        Warning Options.    (line 2307)
64434* Wzero-as-null-pointer-constant:        C++ Dialect Options.
64435                                                             (line  930)
64436* Wzero-length-bounds:                   Warning Options.    (line 1827)
64437* Wzero-length-bounds <1>:               Warning Options.    (line 1827)
64438* x:                                     Overall Options.    (line  138)
64439* Xassembler:                            Assembler Options.  (line   13)
64440* Xbind-lazy:                            VxWorks Options.    (line   26)
64441* Xbind-now:                             VxWorks Options.    (line   30)
64442* Xlinker:                               Link Options.       (line  317)
64443* Xpreprocessor:                         Preprocessor Options.
64444                                                             (line  473)
64445* Ym:                                    System V Options.   (line   26)
64446* YP:                                    System V Options.   (line   22)
64447* z:                                     Link Options.       (line  348)
64448
64449
64450File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
64451
64452Keyword Index
64453*************
64454
64455[index]
64456* Menu:
64457
64458* #pragma:                               Pragmas.            (line    6)
64459* #pragma implementation:                C++ Interface.      (line   36)
64460* #pragma implementation, implied:       C++ Interface.      (line   43)
64461* #pragma interface:                     C++ Interface.      (line   17)
64462* $:                                     Dollar Signs.       (line    6)
64463* % in constraint:                       Modifiers.          (line   52)
64464* %include:                              Spec Files.         (line   26)
64465* %include_noerr:                        Spec Files.         (line   30)
64466* %rename:                               Spec Files.         (line   34)
64467* & in constraint:                       Modifiers.          (line   25)
64468* ':                                     Incompatibilities.  (line  116)
64469* *__builtin_alloca:                     Other Builtins.     (line  129)
64470* *__builtin_alloca_with_align:          Other Builtins.     (line  166)
64471* *__builtin_alloca_with_align_and_max:  Other Builtins.     (line  211)
64472* + in constraint:                       Modifiers.          (line   12)
64473* -lgcc, use with -nodefaultlibs:        Link Options.       (line  154)
64474* -lgcc, use with -nostdlib:             Link Options.       (line  154)
64475* -march feature modifiers:              AArch64 Options.    (line  339)
64476* -mcpu feature modifiers:               AArch64 Options.    (line  339)
64477* -nodefaultlibs and unresolved references: Link Options.    (line  154)
64478* -nostdlib and unresolved references:   Link Options.       (line  154)
64479* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
64480                                                             (line  713)
64481* //:                                    C++ Comments.       (line    6)
64482* 0 in constraint:                       Simple Constraints. (line  125)
64483* < in constraint:                       Simple Constraints. (line   47)
64484* = in constraint:                       Modifiers.          (line    8)
64485* > in constraint:                       Simple Constraints. (line   59)
64486* ?: extensions:                         Conditionals.       (line    6)
64487* ?: side effect:                        Conditionals.       (line   20)
64488* _ in variables in macros:              Typeof.             (line   46)
64489* _Accum data type:                      Fixed-Point.        (line    6)
64490* _Complex keyword:                      Complex.            (line    6)
64491* _Decimal128 data type:                 Decimal Float.      (line    6)
64492* _Decimal32 data type:                  Decimal Float.      (line    6)
64493* _Decimal64 data type:                  Decimal Float.      (line    6)
64494* _Exit:                                 Other Builtins.     (line    6)
64495* _exit:                                 Other Builtins.     (line    6)
64496* _FloatN data types:                    Floating Types.     (line    6)
64497* _FloatNx data types:                   Floating Types.     (line    6)
64498* _Fract data type:                      Fixed-Point.        (line    6)
64499* _get_ssp:                              x86 control-flow protection intrinsics.
64500                                                             (line    6)
64501* _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
64502                                                             (line   44)
64503* _inc_ssp:                              x86 control-flow protection intrinsics.
64504                                                             (line   12)
64505* _Sat data type:                        Fixed-Point.        (line    6)
64506* _xabort:                               x86 transactional memory intrinsics.
64507                                                             (line   57)
64508* _xbegin:                               x86 transactional memory intrinsics.
64509                                                             (line   19)
64510* _xend:                                 x86 transactional memory intrinsics.
64511                                                             (line   48)
64512* _xtest:                                x86 transactional memory intrinsics.
64513                                                             (line   53)
64514* __atomic_add_fetch:                    __atomic Builtins.  (line  179)
64515* __atomic_always_lock_free:             __atomic Builtins.  (line  267)
64516* __atomic_and_fetch:                    __atomic Builtins.  (line  183)
64517* __atomic_clear:                        __atomic Builtins.  (line  241)
64518* __atomic_compare_exchange:             __atomic Builtins.  (line  171)
64519* __atomic_compare_exchange_n:           __atomic Builtins.  (line  147)
64520* __atomic_exchange:                     __atomic Builtins.  (line  141)
64521* __atomic_exchange_n:                   __atomic Builtins.  (line  131)
64522* __atomic_fetch_add:                    __atomic Builtins.  (line  204)
64523* __atomic_fetch_and:                    __atomic Builtins.  (line  208)
64524* __atomic_fetch_nand:                   __atomic Builtins.  (line  214)
64525* __atomic_fetch_or:                     __atomic Builtins.  (line  212)
64526* __atomic_fetch_sub:                    __atomic Builtins.  (line  206)
64527* __atomic_fetch_xor:                    __atomic Builtins.  (line  210)
64528* __atomic_is_lock_free:                 __atomic Builtins.  (line  281)
64529* __atomic_load:                         __atomic Builtins.  (line  113)
64530* __atomic_load_n:                       __atomic Builtins.  (line  106)
64531* __atomic_nand_fetch:                   __atomic Builtins.  (line  189)
64532* __atomic_or_fetch:                     __atomic Builtins.  (line  187)
64533* __atomic_signal_fence:                 __atomic Builtins.  (line  260)
64534* __atomic_store:                        __atomic Builtins.  (line  126)
64535* __atomic_store_n:                      __atomic Builtins.  (line  118)
64536* __atomic_sub_fetch:                    __atomic Builtins.  (line  181)
64537* __atomic_test_and_set:                 __atomic Builtins.  (line  229)
64538* __atomic_thread_fence:                 __atomic Builtins.  (line  253)
64539* __atomic_xor_fetch:                    __atomic Builtins.  (line  185)
64540* __builtin_addf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
64541                                                             (line   17)
64542* __builtin_add_overflow:                Integer Overflow Builtins.
64543                                                             (line    9)
64544* __builtin_add_overflow_p:              Integer Overflow Builtins.
64545                                                             (line   86)
64546* __builtin_alloca:                      Other Builtins.     (line    6)
64547* __builtin_alloca_with_align:           Other Builtins.     (line    6)
64548* __builtin_alloca_with_align_and_max:   Other Builtins.     (line    6)
64549* __builtin_apply:                       Constructing Calls. (line   29)
64550* __builtin_apply_args:                  Constructing Calls. (line   19)
64551* __builtin_arc_aligned:                 ARC Built-in Functions.
64552                                                             (line   18)
64553* __builtin_arc_brk:                     ARC Built-in Functions.
64554                                                             (line   28)
64555* __builtin_arc_core_read:               ARC Built-in Functions.
64556                                                             (line   32)
64557* __builtin_arc_core_write:              ARC Built-in Functions.
64558                                                             (line   39)
64559* __builtin_arc_divaw:                   ARC Built-in Functions.
64560                                                             (line   46)
64561* __builtin_arc_flag:                    ARC Built-in Functions.
64562                                                             (line   53)
64563* __builtin_arc_lr:                      ARC Built-in Functions.
64564                                                             (line   57)
64565* __builtin_arc_mul64:                   ARC Built-in Functions.
64566                                                             (line   64)
64567* __builtin_arc_mulu64:                  ARC Built-in Functions.
64568                                                             (line   68)
64569* __builtin_arc_nop:                     ARC Built-in Functions.
64570                                                             (line   73)
64571* __builtin_arc_norm:                    ARC Built-in Functions.
64572                                                             (line   77)
64573* __builtin_arc_normw:                   ARC Built-in Functions.
64574                                                             (line   84)
64575* __builtin_arc_rtie:                    ARC Built-in Functions.
64576                                                             (line   91)
64577* __builtin_arc_sleep:                   ARC Built-in Functions.
64578                                                             (line   95)
64579* __builtin_arc_sr:                      ARC Built-in Functions.
64580                                                             (line   99)
64581* __builtin_arc_swap:                    ARC Built-in Functions.
64582                                                             (line  106)
64583* __builtin_arc_swi:                     ARC Built-in Functions.
64584                                                             (line  112)
64585* __builtin_arc_sync:                    ARC Built-in Functions.
64586                                                             (line  116)
64587* __builtin_arc_trap_s:                  ARC Built-in Functions.
64588                                                             (line  120)
64589* __builtin_arc_unimp_s:                 ARC Built-in Functions.
64590                                                             (line  124)
64591* __builtin_assume_aligned:              Other Builtins.     (line  662)
64592* __builtin_bswap16:                     Other Builtins.     (line  983)
64593* __builtin_bswap32:                     Other Builtins.     (line  987)
64594* __builtin_bswap64:                     Other Builtins.     (line  991)
64595* __builtin_call_with_static_chain:      Other Builtins.     (line    6)
64596* __builtin_call_with_static_chain <1>:  Other Builtins.     (line  385)
64597* __builtin_choose_expr:                 Other Builtins.     (line  396)
64598* __builtin_clrsb:                       Other Builtins.     (line  913)
64599* __builtin_clrsbl:                      Other Builtins.     (line  935)
64600* __builtin_clrsbll:                     Other Builtins.     (line  958)
64601* __builtin_clz:                         Other Builtins.     (line  905)
64602* __builtin_clzl:                        Other Builtins.     (line  927)
64603* __builtin_clzll:                       Other Builtins.     (line  950)
64604* __builtin_complex:                     Other Builtins.     (line  490)
64605* __builtin_constant_p:                  Other Builtins.     (line  499)
64606* __builtin_convertvector:               Vector Extensions.  (line  165)
64607* __builtin_cpu_init:                    Basic PowerPC Built-in Functions Available on all Configurations.
64608                                                             (line    6)
64609* __builtin_cpu_init <1>:                x86 Built-in Functions.
64610                                                             (line   68)
64611* __builtin_cpu_is:                      Basic PowerPC Built-in Functions Available on all Configurations.
64612                                                             (line   10)
64613* __builtin_cpu_is <1>:                  x86 Built-in Functions.
64614                                                             (line   96)
64615* __builtin_cpu_supports:                Basic PowerPC Built-in Functions Available on all Configurations.
64616                                                             (line   70)
64617* __builtin_cpu_supports <1>:            x86 Built-in Functions.
64618                                                             (line  240)
64619* __builtin_ctz:                         Other Builtins.     (line  909)
64620* __builtin_ctzl:                        Other Builtins.     (line  931)
64621* __builtin_ctzll:                       Other Builtins.     (line  954)
64622* __builtin_divf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
64623                                                             (line   29)
64624* __builtin_expect:                      Other Builtins.     (line  562)
64625* __builtin_expect_with_probability:     Other Builtins.     (line  597)
64626* __builtin_extend_pointer:              Other Builtins.     (line    6)
64627* __builtin_extend_pointer <1>:          Other Builtins.     (line  995)
64628* __builtin_extract_return_addr:         Return Address.     (line   50)
64629* __builtin_ffs:                         Other Builtins.     (line  901)
64630* __builtin_ffsl:                        Other Builtins.     (line  924)
64631* __builtin_ffsll:                       Other Builtins.     (line  946)
64632* __builtin_FILE:                        Other Builtins.     (line  695)
64633* __builtin_fmaf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
64634                                                             (line   37)
64635* __builtin_fpclassify:                  Other Builtins.     (line    6)
64636* __builtin_fpclassify <1>:              Other Builtins.     (line  797)
64637* __builtin_frame_address:               Return Address.     (line   62)
64638* __builtin_frob_return_addr:            Return Address.     (line   59)
64639* __builtin_FUNCTION:                    Other Builtins.     (line  687)
64640* __builtin_goacc_parlevel_id:           Other Builtins.     (line 1002)
64641* __builtin_goacc_parlevel_size:         Other Builtins.     (line 1006)
64642* __builtin_has_attribute:               Other Builtins.     (line    6)
64643* __builtin_has_attribute <1>:           Other Builtins.     (line  220)
64644* __builtin_huge_val:                    Other Builtins.     (line  777)
64645* __builtin_huge_valf:                   Other Builtins.     (line  782)
64646* __builtin_huge_valfN:                  Other Builtins.     (line  789)
64647* __builtin_huge_valfNx:                 Other Builtins.     (line  793)
64648* __builtin_huge_vall:                   Other Builtins.     (line  785)
64649* __builtin_huge_valq:                   x86 Built-in Functions.
64650                                                             (line   50)
64651* __builtin_inf:                         Other Builtins.     (line  808)
64652* __builtin_infd128:                     Other Builtins.     (line  818)
64653* __builtin_infd32:                      Other Builtins.     (line  812)
64654* __builtin_infd64:                      Other Builtins.     (line  815)
64655* __builtin_inff:                        Other Builtins.     (line  822)
64656* __builtin_inffN:                       Other Builtins.     (line  831)
64657* __builtin_inffNx:                      Other Builtins.     (line  834)
64658* __builtin_infl:                        Other Builtins.     (line  827)
64659* __builtin_infq:                        x86 Built-in Functions.
64660                                                             (line   47)
64661* __builtin_isfinite:                    Other Builtins.     (line    6)
64662* __builtin_isgreater:                   Other Builtins.     (line    6)
64663* __builtin_isgreaterequal:              Other Builtins.     (line    6)
64664* __builtin_isinf_sign:                  Other Builtins.     (line    6)
64665* __builtin_isinf_sign <1>:              Other Builtins.     (line  837)
64666* __builtin_isless:                      Other Builtins.     (line    6)
64667* __builtin_islessequal:                 Other Builtins.     (line    6)
64668* __builtin_islessgreater:               Other Builtins.     (line    6)
64669* __builtin_isnormal:                    Other Builtins.     (line    6)
64670* __builtin_isunordered:                 Other Builtins.     (line    6)
64671* __builtin_is_constant_evaluated:       Other Builtins.     (line  544)
64672* __builtin_LINE:                        Other Builtins.     (line  680)
64673* __builtin_longjmp:                     Nonlocal Gotos.     (line   37)
64674* __builtin_mulf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
64675                                                             (line   25)
64676* __builtin_mul_overflow:                Integer Overflow Builtins.
64677                                                             (line   63)
64678* __builtin_mul_overflow_p:              Integer Overflow Builtins.
64679                                                             (line   90)
64680* __builtin_nan:                         Other Builtins.     (line  845)
64681* __builtin_nand128:                     Other Builtins.     (line  867)
64682* __builtin_nand32:                      Other Builtins.     (line  861)
64683* __builtin_nand64:                      Other Builtins.     (line  864)
64684* __builtin_nanf:                        Other Builtins.     (line  871)
64685* __builtin_nanfN:                       Other Builtins.     (line  878)
64686* __builtin_nanfNx:                      Other Builtins.     (line  881)
64687* __builtin_nanl:                        Other Builtins.     (line  874)
64688* __builtin_nanq:                        x86 Built-in Functions.
64689                                                             (line   54)
64690* __builtin_nans:                        Other Builtins.     (line  884)
64691* __builtin_nansf:                       Other Builtins.     (line  888)
64692* __builtin_nansfN:                      Other Builtins.     (line  895)
64693* __builtin_nansfNx:                     Other Builtins.     (line  898)
64694* __builtin_nansl:                       Other Builtins.     (line  891)
64695* __builtin_nansq:                       x86 Built-in Functions.
64696                                                             (line   57)
64697* __builtin_nds32_isb:                   NDS32 Built-in Functions.
64698                                                             (line   12)
64699* __builtin_nds32_isync:                 NDS32 Built-in Functions.
64700                                                             (line    8)
64701* __builtin_nds32_mfsr:                  NDS32 Built-in Functions.
64702                                                             (line   15)
64703* __builtin_nds32_mfusr:                 NDS32 Built-in Functions.
64704                                                             (line   18)
64705* __builtin_nds32_mtsr:                  NDS32 Built-in Functions.
64706                                                             (line   21)
64707* __builtin_nds32_mtusr:                 NDS32 Built-in Functions.
64708                                                             (line   24)
64709* __builtin_nds32_setgie_dis:            NDS32 Built-in Functions.
64710                                                             (line   30)
64711* __builtin_nds32_setgie_en:             NDS32 Built-in Functions.
64712                                                             (line   27)
64713* __builtin_non_tx_store:                S/390 System z Built-in Functions.
64714                                                             (line   98)
64715* __builtin_object_size:                 Object Size Checking.
64716                                                             (line    6)
64717* __builtin_object_size <1>:             Object Size Checking.
64718                                                             (line   16)
64719* __builtin_object_size <2>:             Other Builtins.     (line    6)
64720* __builtin_object_size <3>:             Other Builtins.     (line  772)
64721* __builtin_offsetof:                    Offsetof.           (line    6)
64722* __builtin_parity:                      Other Builtins.     (line  921)
64723* __builtin_parityl:                     Other Builtins.     (line  942)
64724* __builtin_parityll:                    Other Builtins.     (line  966)
64725* __builtin_popcount:                    Other Builtins.     (line  918)
64726* __builtin_popcountl:                   Other Builtins.     (line  938)
64727* __builtin_popcountll:                  Other Builtins.     (line  962)
64728* __builtin_powi:                        Other Builtins.     (line    6)
64729* __builtin_powi <1>:                    Other Builtins.     (line  970)
64730* __builtin_powif:                       Other Builtins.     (line    6)
64731* __builtin_powif <1>:                   Other Builtins.     (line  975)
64732* __builtin_powil:                       Other Builtins.     (line    6)
64733* __builtin_powil <1>:                   Other Builtins.     (line  979)
64734* __builtin_prefetch:                    Other Builtins.     (line  733)
64735* __builtin_return:                      Constructing Calls. (line   47)
64736* __builtin_return_address:              Return Address.     (line    9)
64737* __builtin_rx_brk:                      RX Built-in Functions.
64738                                                             (line   10)
64739* __builtin_rx_clrpsw:                   RX Built-in Functions.
64740                                                             (line   13)
64741* __builtin_rx_int:                      RX Built-in Functions.
64742                                                             (line   17)
64743* __builtin_rx_machi:                    RX Built-in Functions.
64744                                                             (line   21)
64745* __builtin_rx_maclo:                    RX Built-in Functions.
64746                                                             (line   26)
64747* __builtin_rx_mulhi:                    RX Built-in Functions.
64748                                                             (line   31)
64749* __builtin_rx_mullo:                    RX Built-in Functions.
64750                                                             (line   36)
64751* __builtin_rx_mvfachi:                  RX Built-in Functions.
64752                                                             (line   41)
64753* __builtin_rx_mvfacmi:                  RX Built-in Functions.
64754                                                             (line   45)
64755* __builtin_rx_mvfc:                     RX Built-in Functions.
64756                                                             (line   49)
64757* __builtin_rx_mvtachi:                  RX Built-in Functions.
64758                                                             (line   53)
64759* __builtin_rx_mvtaclo:                  RX Built-in Functions.
64760                                                             (line   57)
64761* __builtin_rx_mvtc:                     RX Built-in Functions.
64762                                                             (line   61)
64763* __builtin_rx_mvtipl:                   RX Built-in Functions.
64764                                                             (line   65)
64765* __builtin_rx_racw:                     RX Built-in Functions.
64766                                                             (line   69)
64767* __builtin_rx_revw:                     RX Built-in Functions.
64768                                                             (line   73)
64769* __builtin_rx_rmpa:                     RX Built-in Functions.
64770                                                             (line   78)
64771* __builtin_rx_round:                    RX Built-in Functions.
64772                                                             (line   82)
64773* __builtin_rx_sat:                      RX Built-in Functions.
64774                                                             (line   87)
64775* __builtin_rx_setpsw:                   RX Built-in Functions.
64776                                                             (line   91)
64777* __builtin_rx_wait:                     RX Built-in Functions.
64778                                                             (line   95)
64779* __builtin_saddll_overflow:             Integer Overflow Builtins.
64780                                                             (line   15)
64781* __builtin_saddl_overflow:              Integer Overflow Builtins.
64782                                                             (line   13)
64783* __builtin_sadd_overflow:               Integer Overflow Builtins.
64784                                                             (line   11)
64785* __builtin_setjmp:                      Nonlocal Gotos.     (line   32)
64786* __builtin_set_thread_pointer:          SH Built-in Functions.
64787                                                             (line    9)
64788* __builtin_shuffle:                     Vector Extensions.  (line  127)
64789* __builtin_sh_get_fpscr:                SH Built-in Functions.
64790                                                             (line   35)
64791* __builtin_sh_set_fpscr:                SH Built-in Functions.
64792                                                             (line   38)
64793* __builtin_smulll_overflow:             Integer Overflow Builtins.
64794                                                             (line   69)
64795* __builtin_smull_overflow:              Integer Overflow Builtins.
64796                                                             (line   67)
64797* __builtin_smul_overflow:               Integer Overflow Builtins.
64798                                                             (line   65)
64799* __builtin_speculation_safe_value:      Other Builtins.     (line    6)
64800* __builtin_speculation_safe_value <1>:  Other Builtins.     (line  261)
64801* __builtin_sqrtf128_round_to_odd:       Basic PowerPC Built-in Functions Available on ISA 3.0.
64802                                                             (line   33)
64803* __builtin_ssubll_overflow:             Integer Overflow Builtins.
64804                                                             (line   49)
64805* __builtin_ssubl_overflow:              Integer Overflow Builtins.
64806                                                             (line   47)
64807* __builtin_ssub_overflow:               Integer Overflow Builtins.
64808                                                             (line   45)
64809* __builtin_subf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
64810                                                             (line   21)
64811* __builtin_sub_overflow:                Integer Overflow Builtins.
64812                                                             (line   43)
64813* __builtin_sub_overflow_p:              Integer Overflow Builtins.
64814                                                             (line   88)
64815* __builtin_tabort:                      S/390 System z Built-in Functions.
64816                                                             (line   82)
64817* __builtin_tbegin:                      S/390 System z Built-in Functions.
64818                                                             (line    6)
64819* __builtin_tbeginc:                     S/390 System z Built-in Functions.
64820                                                             (line   73)
64821* __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
64822                                                             (line   54)
64823* __builtin_tbegin_retry:                S/390 System z Built-in Functions.
64824                                                             (line   60)
64825* __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
64826                                                             (line   67)
64827* __builtin_tend:                        S/390 System z Built-in Functions.
64828                                                             (line   77)
64829* __builtin_tgmath:                      Other Builtins.     (line  436)
64830* __builtin_thread_pointer:              RISC-V Built-in Functions.
64831                                                             (line    9)
64832* __builtin_thread_pointer <1>:          SH Built-in Functions.
64833                                                             (line   18)
64834* __builtin_trap:                        Other Builtins.     (line  606)
64835* __builtin_truncf128_round_to_odd:      Basic PowerPC Built-in Functions Available on ISA 3.0.
64836                                                             (line   41)
64837* __builtin_tx_assist:                   S/390 System z Built-in Functions.
64838                                                             (line   87)
64839* __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
64840                                                             (line   93)
64841* __builtin_types_compatible_p:          Other Builtins.     (line  340)
64842* __builtin_uaddll_overflow:             Integer Overflow Builtins.
64843                                                             (line   21)
64844* __builtin_uaddl_overflow:              Integer Overflow Builtins.
64845                                                             (line   19)
64846* __builtin_uadd_overflow:               Integer Overflow Builtins.
64847                                                             (line   17)
64848* __builtin_umulll_overflow:             Integer Overflow Builtins.
64849                                                             (line   75)
64850* __builtin_umull_overflow:              Integer Overflow Builtins.
64851                                                             (line   73)
64852* __builtin_umul_overflow:               Integer Overflow Builtins.
64853                                                             (line   71)
64854* __builtin_unreachable:                 Other Builtins.     (line  613)
64855* __builtin_usubll_overflow:             Integer Overflow Builtins.
64856                                                             (line   55)
64857* __builtin_usubl_overflow:              Integer Overflow Builtins.
64858                                                             (line   53)
64859* __builtin_usub_overflow:               Integer Overflow Builtins.
64860                                                             (line   51)
64861* __builtin_va_arg_pack:                 Constructing Calls. (line   52)
64862* __builtin_va_arg_pack_len:             Constructing Calls. (line   75)
64863* __builtin___clear_cache:               Other Builtins.     (line  720)
64864* __builtin___fprintf_chk:               Object Size Checking.
64865                                                             (line    6)
64866* __builtin___memcpy_chk:                Object Size Checking.
64867                                                             (line    6)
64868* __builtin___memmove_chk:               Object Size Checking.
64869                                                             (line    6)
64870* __builtin___mempcpy_chk:               Object Size Checking.
64871                                                             (line    6)
64872* __builtin___memset_chk:                Object Size Checking.
64873                                                             (line    6)
64874* __builtin___printf_chk:                Object Size Checking.
64875                                                             (line    6)
64876* __builtin___snprintf_chk:              Object Size Checking.
64877                                                             (line    6)
64878* __builtin___sprintf_chk:               Object Size Checking.
64879                                                             (line    6)
64880* __builtin___stpcpy_chk:                Object Size Checking.
64881                                                             (line    6)
64882* __builtin___strcat_chk:                Object Size Checking.
64883                                                             (line    6)
64884* __builtin___strcpy_chk:                Object Size Checking.
64885                                                             (line    6)
64886* __builtin___strncat_chk:               Object Size Checking.
64887                                                             (line    6)
64888* __builtin___strncpy_chk:               Object Size Checking.
64889                                                             (line    6)
64890* __builtin___vfprintf_chk:              Object Size Checking.
64891                                                             (line    6)
64892* __builtin___vprintf_chk:               Object Size Checking.
64893                                                             (line    6)
64894* __builtin___vsnprintf_chk:             Object Size Checking.
64895                                                             (line    6)
64896* __builtin___vsprintf_chk:              Object Size Checking.
64897                                                             (line    6)
64898* __complex__ keyword:                   Complex.            (line    6)
64899* __declspec(dllexport):                 Microsoft Windows Function Attributes.
64900                                                             (line   10)
64901* __declspec(dllimport):                 Microsoft Windows Function Attributes.
64902                                                             (line   42)
64903* __extension__:                         Alternate Keywords. (line   30)
64904* __far M32C Named Address Spaces:       Named Address Spaces.
64905                                                             (line  153)
64906* __far RL78 Named Address Spaces:       Named Address Spaces.
64907                                                             (line  162)
64908* __flash AVR Named Address Spaces:      Named Address Spaces.
64909                                                             (line   44)
64910* __flash1 AVR Named Address Spaces:     Named Address Spaces.
64911                                                             (line   53)
64912* __flash2 AVR Named Address Spaces:     Named Address Spaces.
64913                                                             (line   53)
64914* __flash3 AVR Named Address Spaces:     Named Address Spaces.
64915                                                             (line   53)
64916* __flash4 AVR Named Address Spaces:     Named Address Spaces.
64917                                                             (line   53)
64918* __flash5 AVR Named Address Spaces:     Named Address Spaces.
64919                                                             (line   53)
64920* __float128 data type:                  Floating Types.     (line    6)
64921* __float80 data type:                   Floating Types.     (line    6)
64922* __fp16 data type:                      Half-Precision.     (line    6)
64923* __FUNCTION__ identifier:               Function Names.     (line    6)
64924* __func__ identifier:                   Function Names.     (line    6)
64925* __ibm128 data type:                    Floating Types.     (line    6)
64926* __imag__ keyword:                      Complex.            (line   31)
64927* __int128 data types:                   __int128.           (line    6)
64928* __memx AVR Named Address Spaces:       Named Address Spaces.
64929                                                             (line   59)
64930* __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
64931* __real__ keyword:                      Complex.            (line   31)
64932* __seg_fs x86 named address space:      Named Address Spaces.
64933                                                             (line  175)
64934* __seg_gs x86 named address space:      Named Address Spaces.
64935                                                             (line  175)
64936* __STDC_HOSTED__:                       Standards.          (line   13)
64937* __sync_add_and_fetch:                  __sync Builtins.    (line   72)
64938* __sync_and_and_fetch:                  __sync Builtins.    (line   72)
64939* __sync_bool_compare_and_swap:          __sync Builtins.    (line   88)
64940* __sync_fetch_and_add:                  __sync Builtins.    (line   50)
64941* __sync_fetch_and_and:                  __sync Builtins.    (line   50)
64942* __sync_fetch_and_nand:                 __sync Builtins.    (line   50)
64943* __sync_fetch_and_or:                   __sync Builtins.    (line   50)
64944* __sync_fetch_and_sub:                  __sync Builtins.    (line   50)
64945* __sync_fetch_and_xor:                  __sync Builtins.    (line   50)
64946* __sync_lock_release:                   __sync Builtins.    (line  118)
64947* __sync_lock_test_and_set:              __sync Builtins.    (line  100)
64948* __sync_nand_and_fetch:                 __sync Builtins.    (line   72)
64949* __sync_or_and_fetch:                   __sync Builtins.    (line   72)
64950* __sync_sub_and_fetch:                  __sync Builtins.    (line   72)
64951* __sync_synchronize:                    __sync Builtins.    (line   97)
64952* __sync_val_compare_and_swap:           __sync Builtins.    (line   88)
64953* __sync_xor_and_fetch:                  __sync Builtins.    (line   72)
64954* __thread:                              Thread-Local.       (line    6)
64955* AArch64 Options:                       AArch64 Options.    (line    6)
64956* ABI:                                   Compatibility.      (line    6)
64957* abi_tag function attribute:            C++ Attributes.     (line    9)
64958* abi_tag type attribute:                C++ Attributes.     (line    9)
64959* abi_tag variable attribute:            C++ Attributes.     (line    9)
64960* abort:                                 Other Builtins.     (line    6)
64961* abs:                                   Other Builtins.     (line    6)
64962* absdata variable attribute, AVR:       AVR Variable Attributes.
64963                                                             (line  104)
64964* accessing volatiles:                   Volatiles.          (line    6)
64965* accessing volatiles <1>:               C++ Volatiles.      (line    6)
64966* acos:                                  Other Builtins.     (line    6)
64967* acosf:                                 Other Builtins.     (line    6)
64968* acosh:                                 Other Builtins.     (line    6)
64969* acoshf:                                Other Builtins.     (line    6)
64970* acoshl:                                Other Builtins.     (line    6)
64971* acosl:                                 Other Builtins.     (line    6)
64972* Ada:                                   G++ and GCC.        (line    6)
64973* Ada <1>:                               G++ and GCC.        (line   29)
64974* additional floating types:             Floating Types.     (line    6)
64975* address constraints:                   Simple Constraints. (line  152)
64976* address of a label:                    Labels as Values.   (line    6)
64977* address variable attribute, AVR:       AVR Variable Attributes.
64978                                                             (line   97)
64979* address_operand:                       Simple Constraints. (line  156)
64980* alias function attribute:              Common Function Attributes.
64981                                                             (line   75)
64982* alias variable attribute:              Common Variable Attributes.
64983                                                             (line    9)
64984* aligned function attribute:            Common Function Attributes.
64985                                                             (line   94)
64986* aligned type attribute:                Common Type Attributes.
64987                                                             (line    8)
64988* aligned variable attribute:            Common Variable Attributes.
64989                                                             (line   31)
64990* alignment:                             Alignment.          (line    6)
64991* alloca:                                Other Builtins.     (line    6)
64992* alloca vs variable-length arrays:      Variable Length.    (line   35)
64993* alloc_align function attribute:        Common Function Attributes.
64994                                                             (line  122)
64995* alloc_size function attribute:         Common Function Attributes.
64996                                                             (line  142)
64997* alloc_size type attribute:             Common Type Attributes.
64998                                                             (line  136)
64999* alloc_size variable attribute:         Common Variable Attributes.
65000                                                             (line  137)
65001* Allow nesting in an interrupt handler on the Blackfin processor: Blackfin Function Attributes.
65002                                                             (line   45)
65003* Altera Nios II options:                Nios II Options.    (line    6)
65004* alternate keywords:                    Alternate Keywords. (line    6)
65005* altivec type attribute, PowerPC:       PowerPC Type Attributes.
65006                                                             (line   12)
65007* altivec variable attribute, PowerPC:   PowerPC Variable Attributes.
65008                                                             (line   12)
65009* always_inline function attribute:      Common Function Attributes.
65010                                                             (line  168)
65011* AMD GCN Options:                       AMD GCN Options.    (line    6)
65012* AMD1:                                  Standards.          (line   13)
65013* amdgpu_hsa_kernel function attribute, AMD GCN: AMD GCN Function Attributes.
65014                                                             (line    9)
65015* ANSI C:                                Standards.          (line   13)
65016* ANSI C standard:                       Standards.          (line   13)
65017* ANSI C89:                              Standards.          (line   13)
65018* ANSI support:                          C Dialect Options.  (line   10)
65019* ANSI X3.159-1989:                      Standards.          (line   13)
65020* apostrophes:                           Incompatibilities.  (line  116)
65021* application binary interface:          Compatibility.      (line    6)
65022* ARC options:                           ARC Options.        (line    6)
65023* arch= function attribute, AArch64:     AArch64 Function Attributes.
65024                                                             (line   53)
65025* arch= function attribute, ARM:         ARM Function Attributes.
65026                                                             (line   98)
65027* ARM options:                           ARM Options.        (line    6)
65028* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
65029                                                             (line    6)
65030* arrays of length zero:                 Zero Length.        (line    6)
65031* arrays of variable length:             Variable Length.    (line    6)
65032* arrays, non-lvalue:                    Subscripting.       (line    6)
65033* artificial function attribute:         Common Function Attributes.
65034                                                             (line  178)
65035* asin:                                  Other Builtins.     (line    6)
65036* asinf:                                 Other Builtins.     (line    6)
65037* asinh:                                 Other Builtins.     (line    6)
65038* asinhf:                                Other Builtins.     (line    6)
65039* asinhl:                                Other Builtins.     (line    6)
65040* asinl:                                 Other Builtins.     (line    6)
65041* asm assembler template:                Extended Asm.       (line  226)
65042* asm clobbers:                          Extended Asm.       (line  693)
65043* asm constraints:                       Constraints.        (line    6)
65044* asm expressions:                       Extended Asm.       (line  598)
65045* asm flag output operands:              Extended Asm.       (line  488)
65046* asm goto labels:                       Extended Asm.       (line  880)
65047* asm inline:                            Size of an asm.     (line   25)
65048* asm input operands:                    Extended Asm.       (line  598)
65049* asm keyword:                           Using Assembly Language with C.
65050                                                             (line    6)
65051* asm output operands:                   Extended Asm.       (line  329)
65052* asm scratch registers:                 Extended Asm.       (line  693)
65053* asm volatile:                          Extended Asm.       (line  116)
65054* assembler names for identifiers:       Asm Labels.         (line    6)
65055* assembly code, invalid:                Bug Criteria.       (line   12)
65056* assembly language in C:                Using Assembly Language with C.
65057                                                             (line    6)
65058* assembly language in C, basic:         Basic Asm.          (line    6)
65059* assembly language in C, extended:      Extended Asm.       (line    6)
65060* assume_aligned function attribute:     Common Function Attributes.
65061                                                             (line  186)
65062* atan:                                  Other Builtins.     (line    6)
65063* atan2:                                 Other Builtins.     (line    6)
65064* atan2f:                                Other Builtins.     (line    6)
65065* atan2l:                                Other Builtins.     (line    6)
65066* atanf:                                 Other Builtins.     (line    6)
65067* atanh:                                 Other Builtins.     (line    6)
65068* atanhf:                                Other Builtins.     (line    6)
65069* atanhl:                                Other Builtins.     (line    6)
65070* atanl:                                 Other Builtins.     (line    6)
65071* attribute of types:                    Type Attributes.    (line    6)
65072* attribute of variables:                Variable Attributes.
65073                                                             (line    6)
65074* attribute syntax:                      Attribute Syntax.   (line    6)
65075* autoincrement/decrement addressing:    Simple Constraints. (line   30)
65076* automatic inline for C++ member fns:   Inline.             (line   68)
65077* aux variable attribute, ARC:           ARC Variable Attributes.
65078                                                             (line    7)
65079* AVR Options:                           AVR Options.        (line    6)
65080* Backwards Compatibility:               Backwards Compatibility.
65081                                                             (line    6)
65082* bank_switch function attribute, M32C:  M32C Function Attributes.
65083                                                             (line    9)
65084* base class members:                    Name lookup.        (line    6)
65085* based type attribute, MeP:             MeP Type Attributes.
65086                                                             (line    6)
65087* based variable attribute, MeP:         MeP Variable Attributes.
65088                                                             (line   16)
65089* basic asm:                             Basic Asm.          (line    6)
65090* bcmp:                                  Other Builtins.     (line    6)
65091* below100 variable attribute, Xstormy16: Xstormy16 Variable Attributes.
65092                                                             (line   10)
65093* binary compatibility:                  Compatibility.      (line    6)
65094* Binary constants using the 0b prefix:  Binary constants.   (line    6)
65095* Blackfin Options:                      Blackfin Options.   (line    6)
65096* bound pointer to member function:      Bound member functions.
65097                                                             (line    6)
65098* branch-protection function attribute, AArch64: AArch64 Function Attributes.
65099                                                             (line   76)
65100* break handler functions:               MicroBlaze Function Attributes.
65101                                                             (line   17)
65102* break_handler function attribute, MicroBlaze: MicroBlaze Function Attributes.
65103                                                             (line   17)
65104* brk_interrupt function attribute, RL78: RL78 Function Attributes.
65105                                                             (line   10)
65106* bug criteria:                          Bug Criteria.       (line    6)
65107* bugs:                                  Bugs.               (line    6)
65108* bugs, known:                           Trouble.            (line    6)
65109* built-in functions:                    C Dialect Options.  (line  266)
65110* built-in functions <1>:                Other Builtins.     (line    6)
65111* bzero:                                 Other Builtins.     (line    6)
65112* C compilation options:                 Invoking GCC.       (line   18)
65113* C intermediate output, nonexistent:    G++ and GCC.        (line   34)
65114* C language extensions:                 C Extensions.       (line    6)
65115* C language, traditional:               Preprocessor Options.
65116                                                             (line  372)
65117* C standard:                            Standards.          (line   13)
65118* C standards:                           Standards.          (line   13)
65119* c++:                                   Invoking G++.       (line   14)
65120* C++:                                   G++ and GCC.        (line   29)
65121* C++ comments:                          C++ Comments.       (line    6)
65122* C++ interface and implementation headers: C++ Interface.   (line    6)
65123* C++ language extensions:               C++ Extensions.     (line    6)
65124* C++ member fns, automatically inline:  Inline.             (line   68)
65125* C++ misunderstandings:                 C++ Misunderstandings.
65126                                                             (line    6)
65127* C++ options, command-line:             C++ Dialect Options.
65128                                                             (line    6)
65129* C++ pragmas, effect on inlining:       C++ Interface.      (line   57)
65130* C++ source file suffixes:              Invoking G++.       (line    6)
65131* C++ static data, declaring and defining: Static Definitions.
65132                                                             (line    6)
65133* C-SKY Options:                         C-SKY Options.      (line    6)
65134* C11:                                   Standards.          (line   13)
65135* C17:                                   Standards.          (line   13)
65136* C1X:                                   Standards.          (line   13)
65137* C2X:                                   Standards.          (line   13)
65138* C6X Options:                           C6X Options.        (line    6)
65139* C89:                                   Standards.          (line   13)
65140* C90:                                   Standards.          (line   13)
65141* C94:                                   Standards.          (line   13)
65142* C95:                                   Standards.          (line   13)
65143* C99:                                   Standards.          (line   13)
65144* C9X:                                   Standards.          (line   13)
65145* cabs:                                  Other Builtins.     (line    6)
65146* cabsf:                                 Other Builtins.     (line    6)
65147* cabsl:                                 Other Builtins.     (line    6)
65148* cacos:                                 Other Builtins.     (line    6)
65149* cacosf:                                Other Builtins.     (line    6)
65150* cacosh:                                Other Builtins.     (line    6)
65151* cacoshf:                               Other Builtins.     (line    6)
65152* cacoshl:                               Other Builtins.     (line    6)
65153* cacosl:                                Other Builtins.     (line    6)
65154* callee_pop_aggregate_return function attribute, x86: x86 Function Attributes.
65155                                                             (line   47)
65156* calling functions through the function vector on SH2A: SH Function Attributes.
65157                                                             (line    9)
65158* calloc:                                Other Builtins.     (line    6)
65159* carg:                                  Other Builtins.     (line    6)
65160* cargf:                                 Other Builtins.     (line    6)
65161* cargl:                                 Other Builtins.     (line    6)
65162* case labels in initializers:           Designated Inits.   (line    6)
65163* case ranges:                           Case Ranges.        (line    6)
65164* casin:                                 Other Builtins.     (line    6)
65165* casinf:                                Other Builtins.     (line    6)
65166* casinh:                                Other Builtins.     (line    6)
65167* casinhf:                               Other Builtins.     (line    6)
65168* casinhl:                               Other Builtins.     (line    6)
65169* casinl:                                Other Builtins.     (line    6)
65170* cast to a union:                       Cast to Union.      (line    6)
65171* catan:                                 Other Builtins.     (line    6)
65172* catanf:                                Other Builtins.     (line    6)
65173* catanh:                                Other Builtins.     (line    6)
65174* catanhf:                               Other Builtins.     (line    6)
65175* catanhl:                               Other Builtins.     (line    6)
65176* catanl:                                Other Builtins.     (line    6)
65177* cb variable attribute, MeP:            MeP Variable Attributes.
65178                                                             (line   46)
65179* cbrt:                                  Other Builtins.     (line    6)
65180* cbrtf:                                 Other Builtins.     (line    6)
65181* cbrtl:                                 Other Builtins.     (line    6)
65182* ccos:                                  Other Builtins.     (line    6)
65183* ccosf:                                 Other Builtins.     (line    6)
65184* ccosh:                                 Other Builtins.     (line    6)
65185* ccoshf:                                Other Builtins.     (line    6)
65186* ccoshl:                                Other Builtins.     (line    6)
65187* ccosl:                                 Other Builtins.     (line    6)
65188* cdecl function attribute, x86-32:      x86 Function Attributes.
65189                                                             (line    9)
65190* ceil:                                  Other Builtins.     (line    6)
65191* ceilf:                                 Other Builtins.     (line    6)
65192* ceill:                                 Other Builtins.     (line    6)
65193* cexp:                                  Other Builtins.     (line    6)
65194* cexpf:                                 Other Builtins.     (line    6)
65195* cexpl:                                 Other Builtins.     (line    6)
65196* cf_check function attribute, x86:      x86 Function Attributes.
65197                                                             (line  625)
65198* character set, execution:              Preprocessor Options.
65199                                                             (line  270)
65200* character set, input:                  Preprocessor Options.
65201                                                             (line  285)
65202* character set, input normalization:    Warning Options.    (line 2654)
65203* character set, wide execution:         Preprocessor Options.
65204                                                             (line  275)
65205* cimag:                                 Other Builtins.     (line    6)
65206* cimagf:                                Other Builtins.     (line    6)
65207* cimagl:                                Other Builtins.     (line    6)
65208* cleanup variable attribute:            Common Variable Attributes.
65209                                                             (line  161)
65210* clog:                                  Other Builtins.     (line    6)
65211* clog10:                                Other Builtins.     (line    6)
65212* clog10f:                               Other Builtins.     (line    6)
65213* clog10l:                               Other Builtins.     (line    6)
65214* clogf:                                 Other Builtins.     (line    6)
65215* clogl:                                 Other Builtins.     (line    6)
65216* cmodel= function attribute, AArch64:   AArch64 Function Attributes.
65217                                                             (line   27)
65218* COBOL:                                 G++ and GCC.        (line   23)
65219* code generation conventions:           Code Gen Options.   (line    6)
65220* code, mixed with declarations:         Mixed Declarations. (line    6)
65221* cold function attribute:               Common Function Attributes.
65222                                                             (line  202)
65223* cold label attribute:                  Label Attributes.   (line   45)
65224* command options:                       Invoking GCC.       (line    6)
65225* comments, C++ style:                   C++ Comments.       (line    6)
65226* common variable attribute:             Common Variable Attributes.
65227                                                             (line  176)
65228* comparison of signed and unsigned values, warning: Warning Options.
65229                                                             (line 2412)
65230* compilation statistics:                Developer Options.  (line    6)
65231* compiler bugs, reporting:              Bug Reporting.      (line    6)
65232* compiler compared to C++ preprocessor: G++ and GCC.        (line   34)
65233* compiler options, C++:                 C++ Dialect Options.
65234                                                             (line    6)
65235* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
65236                                                             (line    6)
65237* compiler version, specifying:          Invoking GCC.       (line   24)
65238* COMPILER_PATH:                         Environment Variables.
65239                                                             (line   91)
65240* complex conjugation:                   Complex.            (line   38)
65241* complex numbers:                       Complex.            (line    6)
65242* compound literals:                     Compound Literals.  (line    6)
65243* computed gotos:                        Labels as Values.   (line    6)
65244* conditional expressions, extensions:   Conditionals.       (line    6)
65245* conflicting types:                     Disappointments.    (line   21)
65246* conj:                                  Other Builtins.     (line    6)
65247* conjf:                                 Other Builtins.     (line    6)
65248* conjl:                                 Other Builtins.     (line    6)
65249* const applied to function:             Function Attributes.
65250                                                             (line    6)
65251* const function attribute:              Common Function Attributes.
65252                                                             (line  218)
65253* const qualifier:                       Pointers to Arrays. (line    6)
65254* constants in constraints:              Simple Constraints. (line   68)
65255* constraint modifier characters:        Modifiers.          (line    6)
65256* constraint, matching:                  Simple Constraints. (line  137)
65257* constraints, asm:                      Constraints.        (line    6)
65258* constraints, machine specific:         Machine Constraints.
65259                                                             (line    6)
65260* constructing calls:                    Constructing Calls. (line    6)
65261* constructor expressions:               Compound Literals.  (line    6)
65262* constructor function attribute:        Common Function Attributes.
65263                                                             (line  259)
65264* contributors:                          Contributors.       (line    6)
65265* copy function attribute:               Common Function Attributes.
65266                                                             (line  287)
65267* copy type attribute:                   Common Type Attributes.
65268                                                             (line  161)
65269* copy variable attribute:               Common Variable Attributes.
65270                                                             (line  185)
65271* copysign:                              Other Builtins.     (line    6)
65272* copysignf:                             Other Builtins.     (line    6)
65273* copysignl:                             Other Builtins.     (line    6)
65274* core dump:                             Bug Criteria.       (line    9)
65275* cos:                                   Other Builtins.     (line    6)
65276* cosf:                                  Other Builtins.     (line    6)
65277* cosh:                                  Other Builtins.     (line    6)
65278* coshf:                                 Other Builtins.     (line    6)
65279* coshl:                                 Other Builtins.     (line    6)
65280* cosl:                                  Other Builtins.     (line    6)
65281* CPATH:                                 Environment Variables.
65282                                                             (line  127)
65283* CPLUS_INCLUDE_PATH:                    Environment Variables.
65284                                                             (line  129)
65285* cpow:                                  Other Builtins.     (line    6)
65286* cpowf:                                 Other Builtins.     (line    6)
65287* cpowl:                                 Other Builtins.     (line    6)
65288* cproj:                                 Other Builtins.     (line    6)
65289* cprojf:                                Other Builtins.     (line    6)
65290* cprojl:                                Other Builtins.     (line    6)
65291* cpu= function attribute, AArch64:      AArch64 Function Attributes.
65292                                                             (line   63)
65293* CR16 Options:                          CR16 Options.       (line    6)
65294* creal:                                 Other Builtins.     (line    6)
65295* crealf:                                Other Builtins.     (line    6)
65296* creall:                                Other Builtins.     (line    6)
65297* CRIS Options:                          CRIS Options.       (line    6)
65298* critical function attribute, MSP430:   MSP430 Function Attributes.
65299                                                             (line    9)
65300* cross compiling:                       Invoking GCC.       (line   24)
65301* csin:                                  Other Builtins.     (line    6)
65302* csinf:                                 Other Builtins.     (line    6)
65303* csinh:                                 Other Builtins.     (line    6)
65304* csinhf:                                Other Builtins.     (line    6)
65305* csinhl:                                Other Builtins.     (line    6)
65306* csinl:                                 Other Builtins.     (line    6)
65307* csqrt:                                 Other Builtins.     (line    6)
65308* csqrtf:                                Other Builtins.     (line    6)
65309* csqrtl:                                Other Builtins.     (line    6)
65310* ctan:                                  Other Builtins.     (line    6)
65311* ctanf:                                 Other Builtins.     (line    6)
65312* ctanh:                                 Other Builtins.     (line    6)
65313* ctanhf:                                Other Builtins.     (line    6)
65314* ctanhl:                                Other Builtins.     (line    6)
65315* ctanl:                                 Other Builtins.     (line    6)
65316* C_INCLUDE_PATH:                        Environment Variables.
65317                                                             (line  128)
65318* D:                                     G++ and GCC.        (line    6)
65319* Darwin options:                        Darwin Options.     (line    6)
65320* dcgettext:                             Other Builtins.     (line    6)
65321* dd integer suffix:                     Decimal Float.      (line    6)
65322* DD integer suffix:                     Decimal Float.      (line    6)
65323* deallocating variable length arrays:   Variable Length.    (line   22)
65324* debug dump options:                    Developer Options.  (line    6)
65325* debugging GCC:                         Developer Options.  (line    6)
65326* debugging information options:         Debugging Options.  (line    6)
65327* decimal floating types:                Decimal Float.      (line    6)
65328* declaration scope:                     Incompatibilities.  (line   80)
65329* declarations inside expressions:       Statement Exprs.    (line    6)
65330* declarations, mixed with code:         Mixed Declarations. (line    6)
65331* declaring attributes of functions:     Function Attributes.
65332                                                             (line    6)
65333* declaring static data in C++:          Static Definitions. (line    6)
65334* defining static data in C++:           Static Definitions. (line    6)
65335* dependencies for make as output:       Environment Variables.
65336                                                             (line  156)
65337* dependencies for make as output <1>:   Environment Variables.
65338                                                             (line  172)
65339* dependencies, make:                    Preprocessor Options.
65340                                                             (line   77)
65341* DEPENDENCIES_OUTPUT:                   Environment Variables.
65342                                                             (line  155)
65343* dependent name lookup:                 Name lookup.        (line    6)
65344* deprecated enumerator attribute:       Enumerator Attributes.
65345                                                             (line   28)
65346* deprecated function attribute:         Common Function Attributes.
65347                                                             (line  319)
65348* deprecated type attribute:             Common Type Attributes.
65349                                                             (line  189)
65350* deprecated variable attribute:         Common Variable Attributes.
65351                                                             (line  201)
65352* designated initializers:               Designated Inits.   (line    6)
65353* designated_init type attribute:        Common Type Attributes.
65354                                                             (line  223)
65355* designator lists:                      Designated Inits.   (line   96)
65356* designators:                           Designated Inits.   (line   64)
65357* destructor function attribute:         Common Function Attributes.
65358                                                             (line  259)
65359* developer options:                     Developer Options.  (line    6)
65360* df integer suffix:                     Decimal Float.      (line    6)
65361* DF integer suffix:                     Decimal Float.      (line    6)
65362* dgettext:                              Other Builtins.     (line    6)
65363* diagnostic messages:                   Diagnostic Message Formatting Options.
65364                                                             (line    6)
65365* dialect options:                       C Dialect Options.  (line    6)
65366* diff-delete GCC_COLORS capability:     Diagnostic Message Formatting Options.
65367                                                             (line  119)
65368* diff-filename GCC_COLORS capability:   Diagnostic Message Formatting Options.
65369                                                             (line  112)
65370* diff-hunk GCC_COLORS capability:       Diagnostic Message Formatting Options.
65371                                                             (line  115)
65372* diff-insert GCC_COLORS capability:     Diagnostic Message Formatting Options.
65373                                                             (line  122)
65374* digits in constraint:                  Simple Constraints. (line  125)
65375* directory options:                     Directory Options.  (line    6)
65376* disinterrupt function attribute, Epiphany: Epiphany Function Attributes.
65377                                                             (line    9)
65378* disinterrupt function attribute, MeP:  MeP Function Attributes.
65379                                                             (line    9)
65380* dl integer suffix:                     Decimal Float.      (line    6)
65381* DL integer suffix:                     Decimal Float.      (line    6)
65382* dllexport function attribute:          Microsoft Windows Function Attributes.
65383                                                             (line   10)
65384* dllexport variable attribute:          Microsoft Windows Variable Attributes.
65385                                                             (line   12)
65386* dllimport function attribute:          Microsoft Windows Function Attributes.
65387                                                             (line   42)
65388* dllimport variable attribute:          Microsoft Windows Variable Attributes.
65389                                                             (line   12)
65390* dollar signs in identifier names:      Dollar Signs.       (line    6)
65391* double-word arithmetic:                Long Long.          (line    6)
65392* downward funargs:                      Nested Functions.   (line    6)
65393* drem:                                  Other Builtins.     (line    6)
65394* dremf:                                 Other Builtins.     (line    6)
65395* dreml:                                 Other Builtins.     (line    6)
65396* dump options:                          Developer Options.  (line    6)
65397* E in constraint:                       Simple Constraints. (line   87)
65398* earlyclobber operand:                  Modifiers.          (line   25)
65399* eBPF Options:                          eBPF Options.       (line    6)
65400* eight-bit data on the H8/300, H8/300H, and H8S: H8/300 Variable Attributes.
65401                                                             (line    9)
65402* eightbit_data variable attribute, H8/300: H8/300 Variable Attributes.
65403                                                             (line    9)
65404* EIND:                                  AVR Options.        (line  319)
65405* either function attribute, MSP430:     MSP430 Function Attributes.
65406                                                             (line   57)
65407* either variable attribute, MSP430:     MSP430 Variable Attributes.
65408                                                             (line   23)
65409* empty structures:                      Empty Structures.   (line    6)
65410* Enumerator Attributes:                 Enumerator Attributes.
65411                                                             (line    6)
65412* environment variables:                 Environment Variables.
65413                                                             (line    6)
65414* erf:                                   Other Builtins.     (line    6)
65415* erfc:                                  Other Builtins.     (line    6)
65416* erfcf:                                 Other Builtins.     (line    6)
65417* erfcl:                                 Other Builtins.     (line    6)
65418* erff:                                  Other Builtins.     (line    6)
65419* erfl:                                  Other Builtins.     (line    6)
65420* error function attribute:              Common Function Attributes.
65421                                                             (line  343)
65422* error GCC_COLORS capability:           Diagnostic Message Formatting Options.
65423                                                             (line   77)
65424* error messages:                        Warnings and Errors.
65425                                                             (line    6)
65426* escaped newlines:                      Escaped Newlines.   (line    6)
65427* exception function attribute:          NDS32 Function Attributes.
65428                                                             (line    9)
65429* exception handler functions, Blackfin: Blackfin Function Attributes.
65430                                                             (line    9)
65431* exception handler functions, NDS32:    NDS32 Function Attributes.
65432                                                             (line    9)
65433* exception_handler function attribute:  Blackfin Function Attributes.
65434                                                             (line    9)
65435* exit:                                  Other Builtins.     (line    6)
65436* exp:                                   Other Builtins.     (line    6)
65437* exp10:                                 Other Builtins.     (line    6)
65438* exp10f:                                Other Builtins.     (line    6)
65439* exp10l:                                Other Builtins.     (line    6)
65440* exp2:                                  Other Builtins.     (line    6)
65441* exp2f:                                 Other Builtins.     (line    6)
65442* exp2l:                                 Other Builtins.     (line    6)
65443* expf:                                  Other Builtins.     (line    6)
65444* expl:                                  Other Builtins.     (line    6)
65445* explicit register variables:           Explicit Register Variables.
65446                                                             (line    6)
65447* expm1:                                 Other Builtins.     (line    6)
65448* expm1f:                                Other Builtins.     (line    6)
65449* expm1l:                                Other Builtins.     (line    6)
65450* expressions containing statements:     Statement Exprs.    (line    6)
65451* expressions, constructor:              Compound Literals.  (line    6)
65452* extended asm:                          Extended Asm.       (line    6)
65453* extensible constraints:                Simple Constraints. (line  161)
65454* extensions, ?::                        Conditionals.       (line    6)
65455* extensions, C language:                C Extensions.       (line    6)
65456* extensions, C++ language:              C++ Extensions.     (line    6)
65457* external declaration scope:            Incompatibilities.  (line   80)
65458* externally_visible function attribute: Common Function Attributes.
65459                                                             (line  360)
65460* extra NOP instructions at the function entry point: Common Function Attributes.
65461                                                             (line  910)
65462* F in constraint:                       Simple Constraints. (line   92)
65463* fabs:                                  Other Builtins.     (line    6)
65464* fabsf:                                 Other Builtins.     (line    6)
65465* fabsl:                                 Other Builtins.     (line    6)
65466* fallthrough statement attribute:       Statement Attributes.
65467                                                             (line   26)
65468* far function attribute, MeP:           MeP Function Attributes.
65469                                                             (line   25)
65470* far function attribute, MIPS:          MIPS Function Attributes.
65471                                                             (line   63)
65472* far type attribute, MeP:               MeP Type Attributes.
65473                                                             (line    6)
65474* far variable attribute, MeP:           MeP Variable Attributes.
65475                                                             (line   30)
65476* fastcall function attribute, x86-32:   x86 Function Attributes.
65477                                                             (line   15)
65478* fast_interrupt function attribute, M32C: M32C Function Attributes.
65479                                                             (line   14)
65480* fast_interrupt function attribute, MicroBlaze: MicroBlaze Function Attributes.
65481                                                             (line   27)
65482* fast_interrupt function attribute, RX: RX Function Attributes.
65483                                                             (line    9)
65484* fatal signal:                          Bug Criteria.       (line    9)
65485* fdim:                                  Other Builtins.     (line    6)
65486* fdimf:                                 Other Builtins.     (line    6)
65487* fdiml:                                 Other Builtins.     (line    6)
65488* FDL, GNU Free Documentation License:   GNU Free Documentation License.
65489                                                             (line    6)
65490* fentry_name function attribute, x86:   x86 Function Attributes.
65491                                                             (line  637)
65492* fentry_section function attribute, x86: x86 Function Attributes.
65493                                                             (line  643)
65494* ffs:                                   Other Builtins.     (line    6)
65495* file name suffix:                      Overall Options.    (line   14)
65496* file names:                            Link Options.       (line   10)
65497* fix-cortex-a53-835769 function attribute, AArch64: AArch64 Function Attributes.
65498                                                             (line   19)
65499* fixed-point types:                     Fixed-Point.        (line    6)
65500* fixit-delete GCC_COLORS capability:    Diagnostic Message Formatting Options.
65501                                                             (line  109)
65502* fixit-insert GCC_COLORS capability:    Diagnostic Message Formatting Options.
65503                                                             (line  105)
65504* flatten function attribute:            Common Function Attributes.
65505                                                             (line  373)
65506* flexible array members:                Zero Length.        (line    6)
65507* float as function value type:          Incompatibilities.  (line  141)
65508* floating point precision:              Disappointments.    (line   68)
65509* floating-point precision:              Optimize Options.   (line 2199)
65510* floor:                                 Other Builtins.     (line    6)
65511* floorf:                                Other Builtins.     (line    6)
65512* floorl:                                Other Builtins.     (line    6)
65513* fma:                                   Other Builtins.     (line    6)
65514* fmaf:                                  Other Builtins.     (line    6)
65515* fmal:                                  Other Builtins.     (line    6)
65516* fmax:                                  Other Builtins.     (line    6)
65517* fmaxf:                                 Other Builtins.     (line    6)
65518* fmaxl:                                 Other Builtins.     (line    6)
65519* fmin:                                  Other Builtins.     (line    6)
65520* fminf:                                 Other Builtins.     (line    6)
65521* fminl:                                 Other Builtins.     (line    6)
65522* fmod:                                  Other Builtins.     (line    6)
65523* fmodf:                                 Other Builtins.     (line    6)
65524* fmodl:                                 Other Builtins.     (line    6)
65525* force_align_arg_pointer function attribute, x86: x86 Function Attributes.
65526                                                             (line  100)
65527* format function attribute:             Common Function Attributes.
65528                                                             (line  381)
65529* format_arg function attribute:         Common Function Attributes.
65530                                                             (line  446)
65531* Fortran:                               G++ and GCC.        (line    6)
65532* forwarder_section function attribute, Epiphany: Epiphany Function Attributes.
65533                                                             (line   13)
65534* forwarding calls:                      Constructing Calls. (line    6)
65535* fprintf:                               Other Builtins.     (line    6)
65536* fprintf_unlocked:                      Other Builtins.     (line    6)
65537* fputs:                                 Other Builtins.     (line    6)
65538* fputs_unlocked:                        Other Builtins.     (line    6)
65539* FR30 Options:                          FR30 Options.       (line    6)
65540* free:                                  Other Builtins.     (line    6)
65541* freestanding environment:              Standards.          (line   13)
65542* freestanding implementation:           Standards.          (line   13)
65543* frexp:                                 Other Builtins.     (line    6)
65544* frexpf:                                Other Builtins.     (line    6)
65545* frexpl:                                Other Builtins.     (line    6)
65546* FRV Options:                           FRV Options.        (line    6)
65547* fscanf:                                Other Builtins.     (line    6)
65548* fscanf, and constant strings:          Incompatibilities.  (line   17)
65549* FT32 Options:                          FT32 Options.       (line    6)
65550* function addressability on the M32R/D: M32R/D Function Attributes.
65551                                                             (line   15)
65552* function attributes:                   Function Attributes.
65553                                                             (line    6)
65554* function pointers, arithmetic:         Pointer Arith.      (line    6)
65555* function prototype declarations:       Function Prototypes.
65556                                                             (line    6)
65557* function versions:                     Function Multiversioning.
65558                                                             (line    6)
65559* function, size of pointer to:          Pointer Arith.      (line    6)
65560* functions in arbitrary sections:       Common Function Attributes.
65561                                                             (line  994)
65562* functions that are dynamically resolved: Common Function Attributes.
65563                                                             (line  547)
65564* functions that are passed arguments in registers on x86-32: x86 Function Attributes.
65565                                                             (line   76)
65566* functions that behave like malloc:     Common Function Attributes.
65567                                                             (line  674)
65568* functions that have no side effects:   Common Function Attributes.
65569                                                             (line  218)
65570* functions that have no side effects <1>: Common Function Attributes.
65571                                                             (line  928)
65572* functions that never return:           Common Function Attributes.
65573                                                             (line  842)
65574* functions that pop the argument stack on x86-32: x86 Function Attributes.
65575                                                             (line    9)
65576* functions that pop the argument stack on x86-32 <1>: x86 Function Attributes.
65577                                                             (line   15)
65578* functions that pop the argument stack on x86-32 <2>: x86 Function Attributes.
65579                                                             (line   23)
65580* functions that pop the argument stack on x86-32 <3>: x86 Function Attributes.
65581                                                             (line  108)
65582* functions that return more than once:  Common Function Attributes.
65583                                                             (line  985)
65584* functions with non-null pointer arguments: Common Function Attributes.
65585                                                             (line  788)
65586* functions with printf, scanf, strftime or strfmon style arguments: Common Function Attributes.
65587                                                             (line  381)
65588* function_return function attribute, x86: x86 Function Attributes.
65589                                                             (line  562)
65590* function_vector function attribute, H8/300: H8/300 Function Attributes.
65591                                                             (line    9)
65592* function_vector function attribute, M16C/M32C: M32C Function Attributes.
65593                                                             (line   20)
65594* function_vector function attribute, SH: SH Function Attributes.
65595                                                             (line    9)
65596* G in constraint:                       Simple Constraints. (line   96)
65597* g in constraint:                       Simple Constraints. (line  118)
65598* g++:                                   Invoking G++.       (line   14)
65599* G++:                                   G++ and GCC.        (line   29)
65600* gamma:                                 Other Builtins.     (line    6)
65601* gammaf:                                Other Builtins.     (line    6)
65602* gammaf_r:                              Other Builtins.     (line    6)
65603* gammal:                                Other Builtins.     (line    6)
65604* gammal_r:                              Other Builtins.     (line    6)
65605* gamma_r:                               Other Builtins.     (line    6)
65606* GCC:                                   G++ and GCC.        (line    6)
65607* GCC command options:                   Invoking GCC.       (line    6)
65608* GCC_COLORS environment variable:       Diagnostic Message Formatting Options.
65609                                                             (line   40)
65610* GCC_COMPARE_DEBUG:                     Environment Variables.
65611                                                             (line   52)
65612* GCC_EXEC_PREFIX:                       Environment Variables.
65613                                                             (line   57)
65614* gcc_struct type attribute, PowerPC:    PowerPC Type Attributes.
65615                                                             (line    9)
65616* gcc_struct type attribute, x86:        x86 Type Attributes.
65617                                                             (line   11)
65618* gcc_struct variable attribute, PowerPC: PowerPC Variable Attributes.
65619                                                             (line    9)
65620* gcc_struct variable attribute, x86:    x86 Variable Attributes.
65621                                                             (line   11)
65622* GCC_URLS environment variable:         Diagnostic Message Formatting Options.
65623                                                             (line  129)
65624* gcov:                                  Instrumentation Options.
65625                                                             (line   49)
65626* general-regs-only function attribute, AArch64: AArch64 Function Attributes.
65627                                                             (line   12)
65628* general-regs-only function attribute, ARM: ARM Function Attributes.
65629                                                             (line    9)
65630* gettext:                               Other Builtins.     (line    6)
65631* global offset table:                   Code Gen Options.   (line  353)
65632* global register after longjmp:         Global Register Variables.
65633                                                             (line   92)
65634* global register variables:             Global Register Variables.
65635                                                             (line    6)
65636* GNAT:                                  G++ and GCC.        (line   29)
65637* GNU C Compiler:                        G++ and GCC.        (line    6)
65638* GNU Compiler Collection:               G++ and GCC.        (line    6)
65639* gnu_inline function attribute:         Common Function Attributes.
65640                                                             (line  501)
65641* Go:                                    G++ and GCC.        (line    6)
65642* goto with computed label:              Labels as Values.   (line    6)
65643* gprof:                                 Instrumentation Options.
65644                                                             (line   18)
65645* grouping options:                      Invoking GCC.       (line   31)
65646* H in constraint:                       Simple Constraints. (line   96)
65647* half-precision floating point:         Half-Precision.     (line    6)
65648* hardware models and configurations, specifying: Submodel Options.
65649                                                             (line    6)
65650* hex floats:                            Hex Floats.         (line    6)
65651* highlight, color:                      Diagnostic Message Formatting Options.
65652                                                             (line   40)
65653* hk fixed-suffix:                       Fixed-Point.        (line    6)
65654* HK fixed-suffix:                       Fixed-Point.        (line    6)
65655* hosted environment:                    Standards.          (line   13)
65656* hosted environment <1>:                C Dialect Options.  (line  306)
65657* hosted environment <2>:                C Dialect Options.  (line  314)
65658* hosted implementation:                 Standards.          (line   13)
65659* hot function attribute:                Common Function Attributes.
65660                                                             (line  537)
65661* hot label attribute:                   Label Attributes.   (line   38)
65662* hotpatch function attribute, S/390:    S/390 Function Attributes.
65663                                                             (line    9)
65664* HPPA Options:                          HPPA Options.       (line    6)
65665* hr fixed-suffix:                       Fixed-Point.        (line    6)
65666* HR fixed-suffix:                       Fixed-Point.        (line    6)
65667* hypot:                                 Other Builtins.     (line    6)
65668* hypotf:                                Other Builtins.     (line    6)
65669* hypotl:                                Other Builtins.     (line    6)
65670* i in constraint:                       Simple Constraints. (line   68)
65671* I in constraint:                       Simple Constraints. (line   79)
65672* IA-64 Options:                         IA-64 Options.      (line    6)
65673* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
65674                                                             (line    6)
65675* identifier names, dollar signs in:     Dollar Signs.       (line    6)
65676* identifiers, names in assembler code:  Asm Labels.         (line    6)
65677* ifunc function attribute:              Common Function Attributes.
65678                                                             (line  547)
65679* ilogb:                                 Other Builtins.     (line    6)
65680* ilogbf:                                Other Builtins.     (line    6)
65681* ilogbl:                                Other Builtins.     (line    6)
65682* imaxabs:                               Other Builtins.     (line    6)
65683* implementation-defined behavior, C language: C Implementation.
65684                                                             (line    6)
65685* implementation-defined behavior, C++ language: C++ Implementation.
65686                                                             (line    6)
65687* implied #pragma implementation:        C++ Interface.      (line   43)
65688* incompatibilities of GCC:              Incompatibilities.  (line    6)
65689* increment operators:                   Bug Criteria.       (line   17)
65690* index:                                 Other Builtins.     (line    6)
65691* indirect calls, ARC:                   ARC Function Attributes.
65692                                                             (line   27)
65693* indirect calls, ARM:                   ARM Function Attributes.
65694                                                             (line   38)
65695* indirect calls, Blackfin:              Blackfin Function Attributes.
65696                                                             (line   38)
65697* indirect calls, Epiphany:              Epiphany Function Attributes.
65698                                                             (line   57)
65699* indirect calls, MIPS:                  MIPS Function Attributes.
65700                                                             (line   63)
65701* indirect calls, PowerPC:               PowerPC Function Attributes.
65702                                                             (line   10)
65703* indirect functions:                    Common Function Attributes.
65704                                                             (line  547)
65705* indirect_branch function attribute, x86: x86 Function Attributes.
65706                                                             (line  552)
65707* indirect_return function attribute, x86: x86 Function Attributes.
65708                                                             (line  631)
65709* initializations in expressions:        Compound Literals.  (line    6)
65710* initializers with labeled elements:    Designated Inits.   (line    6)
65711* initializers, non-constant:            Initializers.       (line    6)
65712* init_priority variable attribute:      C++ Attributes.     (line   50)
65713* inline assembly language:              Using Assembly Language with C.
65714                                                             (line    6)
65715* inline automatic for C++ member fns:   Inline.             (line   68)
65716* inline functions:                      Inline.             (line    6)
65717* inline functions, omission of:         Inline.             (line   51)
65718* inlining and C++ pragmas:              C++ Interface.      (line   57)
65719* installation trouble:                  Trouble.            (line    6)
65720* instrumentation options:               Instrumentation Options.
65721                                                             (line    6)
65722* integrating function code:             Inline.             (line    6)
65723* interface and implementation headers, C++: C++ Interface.  (line    6)
65724* intermediate C version, nonexistent:   G++ and GCC.        (line   34)
65725* interrupt function attribute, ARC:     ARC Function Attributes.
65726                                                             (line    9)
65727* interrupt function attribute, ARM:     ARM Function Attributes.
65728                                                             (line   16)
65729* interrupt function attribute, AVR:     AVR Function Attributes.
65730                                                             (line    9)
65731* interrupt function attribute, C-SKY:   C-SKY Function Attributes.
65732                                                             (line   10)
65733* interrupt function attribute, CR16:    CR16 Function Attributes.
65734                                                             (line    9)
65735* interrupt function attribute, Epiphany: Epiphany Function Attributes.
65736                                                             (line   20)
65737* interrupt function attribute, M32C:    M32C Function Attributes.
65738                                                             (line   53)
65739* interrupt function attribute, M32R/D:  M32R/D Function Attributes.
65740                                                             (line    9)
65741* interrupt function attribute, m68k:    m68k Function Attributes.
65742                                                             (line   10)
65743* interrupt function attribute, MeP:     MeP Function Attributes.
65744                                                             (line   14)
65745* interrupt function attribute, MIPS:    MIPS Function Attributes.
65746                                                             (line    9)
65747* interrupt function attribute, MSP430:  MSP430 Function Attributes.
65748                                                             (line   19)
65749* interrupt function attribute, NDS32:   NDS32 Function Attributes.
65750                                                             (line   14)
65751* interrupt function attribute, RISC-V:  RISC-V Function Attributes.
65752                                                             (line   19)
65753* interrupt function attribute, RL78:    RL78 Function Attributes.
65754                                                             (line   10)
65755* interrupt function attribute, RX:      RX Function Attributes.
65756                                                             (line   15)
65757* interrupt function attribute, V850:    V850 Function Attributes.
65758                                                             (line   10)
65759* interrupt function attribute, Visium:  Visium Function Attributes.
65760                                                             (line    9)
65761* interrupt function attribute, x86:     x86 Function Attributes.
65762                                                             (line  124)
65763* interrupt function attribute, Xstormy16: Xstormy16 Function Attributes.
65764                                                             (line    9)
65765* interrupt_handler function attribute, Blackfin: Blackfin Function Attributes.
65766                                                             (line   15)
65767* interrupt_handler function attribute, H8/300: H8/300 Function Attributes.
65768                                                             (line   17)
65769* interrupt_handler function attribute, m68k: m68k Function Attributes.
65770                                                             (line   10)
65771* interrupt_handler function attribute, MicroBlaze: MicroBlaze Function Attributes.
65772                                                             (line   27)
65773* interrupt_handler function attribute, SH: SH Function Attributes.
65774                                                             (line   28)
65775* interrupt_handler function attribute, V850: V850 Function Attributes.
65776                                                             (line   10)
65777* interrupt_thread function attribute, fido: m68k Function Attributes.
65778                                                             (line   16)
65779* introduction:                          Top.                (line    6)
65780* invalid assembly code:                 Bug Criteria.       (line   12)
65781* invalid input:                         Bug Criteria.       (line   42)
65782* invoking g++:                          Invoking G++.       (line   22)
65783* io variable attribute, AVR:            AVR Variable Attributes.
65784                                                             (line   73)
65785* io variable attribute, MeP:            MeP Variable Attributes.
65786                                                             (line   36)
65787* io_low variable attribute, AVR:        AVR Variable Attributes.
65788                                                             (line   91)
65789* isalnum:                               Other Builtins.     (line    6)
65790* isalpha:                               Other Builtins.     (line    6)
65791* isascii:                               Other Builtins.     (line    6)
65792* isblank:                               Other Builtins.     (line    6)
65793* iscntrl:                               Other Builtins.     (line    6)
65794* isdigit:                               Other Builtins.     (line    6)
65795* isgraph:                               Other Builtins.     (line    6)
65796* islower:                               Other Builtins.     (line    6)
65797* ISO 9899:                              Standards.          (line   13)
65798* ISO C:                                 Standards.          (line   13)
65799* ISO C standard:                        Standards.          (line   13)
65800* ISO C11:                               Standards.          (line   13)
65801* ISO C17:                               Standards.          (line   13)
65802* ISO C1X:                               Standards.          (line   13)
65803* ISO C2X:                               Standards.          (line   13)
65804* ISO C90:                               Standards.          (line   13)
65805* ISO C94:                               Standards.          (line   13)
65806* ISO C95:                               Standards.          (line   13)
65807* ISO C99:                               Standards.          (line   13)
65808* ISO C9X:                               Standards.          (line   13)
65809* ISO support:                           C Dialect Options.  (line   10)
65810* ISO/IEC 9899:                          Standards.          (line   13)
65811* isprint:                               Other Builtins.     (line    6)
65812* ispunct:                               Other Builtins.     (line    6)
65813* isr function attribute, ARM:           ARM Function Attributes.
65814                                                             (line   33)
65815* isr function attribute, C-SKY:         C-SKY Function Attributes.
65816                                                             (line   10)
65817* isspace:                               Other Builtins.     (line    6)
65818* isupper:                               Other Builtins.     (line    6)
65819* iswalnum:                              Other Builtins.     (line    6)
65820* iswalpha:                              Other Builtins.     (line    6)
65821* iswblank:                              Other Builtins.     (line    6)
65822* iswcntrl:                              Other Builtins.     (line    6)
65823* iswdigit:                              Other Builtins.     (line    6)
65824* iswgraph:                              Other Builtins.     (line    6)
65825* iswlower:                              Other Builtins.     (line    6)
65826* iswprint:                              Other Builtins.     (line    6)
65827* iswpunct:                              Other Builtins.     (line    6)
65828* iswspace:                              Other Builtins.     (line    6)
65829* iswupper:                              Other Builtins.     (line    6)
65830* iswxdigit:                             Other Builtins.     (line    6)
65831* isxdigit:                              Other Builtins.     (line    6)
65832* j0:                                    Other Builtins.     (line    6)
65833* j0f:                                   Other Builtins.     (line    6)
65834* j0l:                                   Other Builtins.     (line    6)
65835* j1:                                    Other Builtins.     (line    6)
65836* j1f:                                   Other Builtins.     (line    6)
65837* j1l:                                   Other Builtins.     (line    6)
65838* jli_always function attribute, ARC:    ARC Function Attributes.
65839                                                             (line   44)
65840* jli_fixed function attribute, ARC:     ARC Function Attributes.
65841                                                             (line   50)
65842* jn:                                    Other Builtins.     (line    6)
65843* jnf:                                   Other Builtins.     (line    6)
65844* jnl:                                   Other Builtins.     (line    6)
65845* k fixed-suffix:                        Fixed-Point.        (line    6)
65846* K fixed-suffix:                        Fixed-Point.        (line    6)
65847* keep_interrupts_masked function attribute, MIPS: MIPS Function Attributes.
65848                                                             (line   34)
65849* kernel attribute, Nvidia PTX:          Nvidia PTX Function Attributes.
65850                                                             (line    9)
65851* kernel helper, function attribute, BPF: BPF Function Attributes.
65852                                                             (line    9)
65853* keywords, alternate:                   Alternate Keywords. (line    6)
65854* known causes of trouble:               Trouble.            (line    6)
65855* kspisusp function attribute, Blackfin: Blackfin Function Attributes.
65856                                                             (line   21)
65857* l1_data variable attribute, Blackfin:  Blackfin Variable Attributes.
65858                                                             (line   11)
65859* l1_data_A variable attribute, Blackfin: Blackfin Variable Attributes.
65860                                                             (line   11)
65861* l1_data_B variable attribute, Blackfin: Blackfin Variable Attributes.
65862                                                             (line   11)
65863* l1_text function attribute, Blackfin:  Blackfin Function Attributes.
65864                                                             (line   26)
65865* l2 function attribute, Blackfin:       Blackfin Function Attributes.
65866                                                             (line   32)
65867* l2 variable attribute, Blackfin:       Blackfin Variable Attributes.
65868                                                             (line   19)
65869* Label Attributes:                      Label Attributes.   (line    6)
65870* labeled elements in initializers:      Designated Inits.   (line    6)
65871* labels as values:                      Labels as Values.   (line    6)
65872* labs:                                  Other Builtins.     (line    6)
65873* LANG:                                  Environment Variables.
65874                                                             (line   21)
65875* LANG <1>:                              Environment Variables.
65876                                                             (line  106)
65877* language dialect options:              C Dialect Options.  (line    6)
65878* LC_ALL:                                Environment Variables.
65879                                                             (line   21)
65880* LC_CTYPE:                              Environment Variables.
65881                                                             (line   21)
65882* LC_MESSAGES:                           Environment Variables.
65883                                                             (line   21)
65884* ldexp:                                 Other Builtins.     (line    6)
65885* ldexpf:                                Other Builtins.     (line    6)
65886* ldexpl:                                Other Builtins.     (line    6)
65887* leaf function attribute:               Common Function Attributes.
65888                                                             (line  637)
65889* length-zero arrays:                    Zero Length.        (line    6)
65890* lgamma:                                Other Builtins.     (line    6)
65891* lgammaf:                               Other Builtins.     (line    6)
65892* lgammaf_r:                             Other Builtins.     (line    6)
65893* lgammal:                               Other Builtins.     (line    6)
65894* lgammal_r:                             Other Builtins.     (line    6)
65895* lgamma_r:                              Other Builtins.     (line    6)
65896* Libraries:                             Link Options.       (line   82)
65897* LIBRARY_PATH:                          Environment Variables.
65898                                                             (line   97)
65899* link options:                          Link Options.       (line    6)
65900* linker script:                         Link Options.       (line  311)
65901* lk fixed-suffix:                       Fixed-Point.        (line    6)
65902* LK fixed-suffix:                       Fixed-Point.        (line    6)
65903* LL integer suffix:                     Long Long.          (line    6)
65904* llabs:                                 Other Builtins.     (line    6)
65905* llk fixed-suffix:                      Fixed-Point.        (line    6)
65906* LLK fixed-suffix:                      Fixed-Point.        (line    6)
65907* llr fixed-suffix:                      Fixed-Point.        (line    6)
65908* LLR fixed-suffix:                      Fixed-Point.        (line    6)
65909* llrint:                                Other Builtins.     (line    6)
65910* llrintf:                               Other Builtins.     (line    6)
65911* llrintl:                               Other Builtins.     (line    6)
65912* llround:                               Other Builtins.     (line    6)
65913* llroundf:                              Other Builtins.     (line    6)
65914* llroundl:                              Other Builtins.     (line    6)
65915* LM32 options:                          LM32 Options.       (line    6)
65916* load address instruction:              Simple Constraints. (line  152)
65917* local labels:                          Local Labels.       (line    6)
65918* local variables in macros:             Typeof.             (line   46)
65919* local variables, specifying registers: Local Register Variables.
65920                                                             (line    6)
65921* locale:                                Environment Variables.
65922                                                             (line   21)
65923* locale definition:                     Environment Variables.
65924                                                             (line  106)
65925* locus GCC_COLORS capability:           Diagnostic Message Formatting Options.
65926                                                             (line   98)
65927* log:                                   Other Builtins.     (line    6)
65928* log10:                                 Other Builtins.     (line    6)
65929* log10f:                                Other Builtins.     (line    6)
65930* log10l:                                Other Builtins.     (line    6)
65931* log1p:                                 Other Builtins.     (line    6)
65932* log1pf:                                Other Builtins.     (line    6)
65933* log1pl:                                Other Builtins.     (line    6)
65934* log2:                                  Other Builtins.     (line    6)
65935* log2f:                                 Other Builtins.     (line    6)
65936* log2l:                                 Other Builtins.     (line    6)
65937* logb:                                  Other Builtins.     (line    6)
65938* logbf:                                 Other Builtins.     (line    6)
65939* logbl:                                 Other Builtins.     (line    6)
65940* logf:                                  Other Builtins.     (line    6)
65941* logl:                                  Other Builtins.     (line    6)
65942* long:                                  BPF Built-in Functions.
65943                                                             (line    8)
65944* long <1>:                              BPF Built-in Functions.
65945                                                             (line   13)
65946* long <2>:                              BPF Built-in Functions.
65947                                                             (line   18)
65948* long long data types:                  Long Long.          (line    6)
65949* longcall function attribute, Blackfin: Blackfin Function Attributes.
65950                                                             (line   38)
65951* longcall function attribute, PowerPC:  PowerPC Function Attributes.
65952                                                             (line   10)
65953* longjmp:                               Global Register Variables.
65954                                                             (line   92)
65955* longjmp incompatibilities:             Incompatibilities.  (line   39)
65956* longjmp warnings:                      Warning Options.    (line 1284)
65957* long_call function attribute, ARC:     ARC Function Attributes.
65958                                                             (line   27)
65959* long_call function attribute, ARM:     ARM Function Attributes.
65960                                                             (line   38)
65961* long_call function attribute, Epiphany: Epiphany Function Attributes.
65962                                                             (line   57)
65963* long_call function attribute, MIPS:    MIPS Function Attributes.
65964                                                             (line   63)
65965* lower function attribute, MSP430:      MSP430 Function Attributes.
65966                                                             (line   57)
65967* lower variable attribute, MSP430:      MSP430 Variable Attributes.
65968                                                             (line   27)
65969* lr fixed-suffix:                       Fixed-Point.        (line    6)
65970* LR fixed-suffix:                       Fixed-Point.        (line    6)
65971* lrint:                                 Other Builtins.     (line    6)
65972* lrintf:                                Other Builtins.     (line    6)
65973* lrintl:                                Other Builtins.     (line    6)
65974* lround:                                Other Builtins.     (line    6)
65975* lroundf:                               Other Builtins.     (line    6)
65976* lroundl:                               Other Builtins.     (line    6)
65977* m in constraint:                       Simple Constraints. (line   17)
65978* M32C options:                          M32C Options.       (line    6)
65979* M32R/D options:                        M32R/D Options.     (line    6)
65980* M680x0 options:                        M680x0 Options.     (line    6)
65981* machine specific constraints:          Machine Constraints.
65982                                                             (line    6)
65983* machine-dependent options:             Submodel Options.   (line    6)
65984* macro with variable arguments:         Variadic Macros.    (line    6)
65985* macros, inline alternative:            Inline.             (line    6)
65986* macros, local labels:                  Local Labels.       (line    6)
65987* macros, local variables in:            Typeof.             (line   46)
65988* macros, statements in expressions:     Statement Exprs.    (line    6)
65989* macros, types of arguments:            Typeof.             (line    6)
65990* make:                                  Preprocessor Options.
65991                                                             (line   77)
65992* malloc:                                Other Builtins.     (line    6)
65993* malloc function attribute:             Common Function Attributes.
65994                                                             (line  674)
65995* matching constraint:                   Simple Constraints. (line  137)
65996* may_alias type attribute:              Common Type Attributes.
65997                                                             (line  234)
65998* MCore options:                         MCore Options.      (line    6)
65999* medium_call function attribute, ARC:   ARC Function Attributes.
66000                                                             (line   27)
66001* member fns, automatically inline:      Inline.             (line   68)
66002* memchr:                                Other Builtins.     (line    6)
66003* memcmp:                                Other Builtins.     (line    6)
66004* memcpy:                                Other Builtins.     (line    6)
66005* memory references in constraints:      Simple Constraints. (line   17)
66006* mempcpy:                               Other Builtins.     (line    6)
66007* memset:                                Other Builtins.     (line    6)
66008* MeP options:                           MeP Options.        (line    6)
66009* Mercury:                               G++ and GCC.        (line   23)
66010* message formatting:                    Diagnostic Message Formatting Options.
66011                                                             (line    6)
66012* messages, warning:                     Warning Options.    (line    6)
66013* messages, warning and error:           Warnings and Errors.
66014                                                             (line    6)
66015* MicroBlaze Options:                    MicroBlaze Options. (line    6)
66016* micromips function attribute:          MIPS Function Attributes.
66017                                                             (line   91)
66018* middle-operands, omitted:              Conditionals.       (line    6)
66019* MIPS options:                          MIPS Options.       (line    6)
66020* mips16 function attribute, MIPS:       MIPS Function Attributes.
66021                                                             (line   75)
66022* misunderstandings in C++:              C++ Misunderstandings.
66023                                                             (line    6)
66024* mixed declarations and code:           Mixed Declarations. (line    6)
66025* mixing assembly language and C:        Using Assembly Language with C.
66026                                                             (line    6)
66027* mktemp, and constant strings:          Incompatibilities.  (line   13)
66028* MMIX Options:                          MMIX Options.       (line    6)
66029* MN10300 options:                       MN10300 Options.    (line    6)
66030* mode type attribute:                   Common Type Attributes.
66031                                                             (line  270)
66032* mode variable attribute:               Common Variable Attributes.
66033                                                             (line  225)
66034* model function attribute, M32R/D:      M32R/D Function Attributes.
66035                                                             (line   15)
66036* model variable attribute, IA-64:       IA-64 Variable Attributes.
66037                                                             (line    9)
66038* model-name variable attribute, M32R/D: M32R/D Variable Attributes.
66039                                                             (line    9)
66040* modf:                                  Other Builtins.     (line    6)
66041* modff:                                 Other Builtins.     (line    6)
66042* modfl:                                 Other Builtins.     (line    6)
66043* modifiers in constraints:              Modifiers.          (line    6)
66044* Moxie Options:                         Moxie Options.      (line    6)
66045* MSP430 Options:                        MSP430 Options.     (line    6)
66046* ms_abi function attribute, x86:        x86 Function Attributes.
66047                                                             (line   34)
66048* ms_hook_prologue function attribute, x86: x86 Function Attributes.
66049                                                             (line   59)
66050* ms_struct type attribute, PowerPC:     PowerPC Type Attributes.
66051                                                             (line    9)
66052* ms_struct type attribute, x86:         x86 Type Attributes.
66053                                                             (line   11)
66054* ms_struct variable attribute, PowerPC: PowerPC Variable Attributes.
66055                                                             (line    9)
66056* ms_struct variable attribute, x86:     x86 Variable Attributes.
66057                                                             (line   11)
66058* multiple alternative constraints:      Multi-Alternative.  (line    6)
66059* multiprecision arithmetic:             Long Long.          (line    6)
66060* n in constraint:                       Simple Constraints. (line   73)
66061* naked function attribute, ARC:         ARC Function Attributes.
66062                                                             (line   59)
66063* naked function attribute, ARM:         ARM Function Attributes.
66064                                                             (line   48)
66065* naked function attribute, AVR:         AVR Function Attributes.
66066                                                             (line   23)
66067* naked function attribute, C-SKY:       C-SKY Function Attributes.
66068                                                             (line   20)
66069* naked function attribute, MCORE:       MCORE Function Attributes.
66070                                                             (line    9)
66071* naked function attribute, MSP430:      MSP430 Function Attributes.
66072                                                             (line   34)
66073* naked function attribute, NDS32:       NDS32 Function Attributes.
66074                                                             (line   35)
66075* naked function attribute, RISC-V:      RISC-V Function Attributes.
66076                                                             (line    9)
66077* naked function attribute, RL78:        RL78 Function Attributes.
66078                                                             (line   20)
66079* naked function attribute, RX:          RX Function Attributes.
66080                                                             (line   39)
66081* naked function attribute, x86:         x86 Function Attributes.
66082                                                             (line   66)
66083* Named Address Spaces:                  Named Address Spaces.
66084                                                             (line    6)
66085* names used in assembler code:          Asm Labels.         (line    6)
66086* naming convention, implementation headers: C++ Interface.  (line   43)
66087* NDS32 Options:                         NDS32 Options.      (line    6)
66088* near function attribute, MeP:          MeP Function Attributes.
66089                                                             (line   20)
66090* near function attribute, MIPS:         MIPS Function Attributes.
66091                                                             (line   63)
66092* near type attribute, MeP:              MeP Type Attributes.
66093                                                             (line    6)
66094* near variable attribute, MeP:          MeP Variable Attributes.
66095                                                             (line   24)
66096* nearbyint:                             Other Builtins.     (line    6)
66097* nearbyintf:                            Other Builtins.     (line    6)
66098* nearbyintl:                            Other Builtins.     (line    6)
66099* nested function attribute, NDS32:      NDS32 Function Attributes.
66100                                                             (line   19)
66101* nested functions:                      Nested Functions.   (line    6)
66102* nested_ready function attribute, NDS32: NDS32 Function Attributes.
66103                                                             (line   23)
66104* nesting function attribute, Blackfin:  Blackfin Function Attributes.
66105                                                             (line   45)
66106* newlines (escaped):                    Escaped Newlines.   (line    6)
66107* nextafter:                             Other Builtins.     (line    6)
66108* nextafterf:                            Other Builtins.     (line    6)
66109* nextafterl:                            Other Builtins.     (line    6)
66110* nexttoward:                            Other Builtins.     (line    6)
66111* nexttowardf:                           Other Builtins.     (line    6)
66112* nexttowardl:                           Other Builtins.     (line    6)
66113* NFC:                                   Warning Options.    (line 2654)
66114* NFKC:                                  Warning Options.    (line 2654)
66115* Nios II options:                       Nios II Options.    (line    6)
66116* nmi function attribute, NDS32:         NDS32 Function Attributes.
66117                                                             (line   50)
66118* NMI handler functions on the Blackfin processor: Blackfin Function Attributes.
66119                                                             (line   50)
66120* nmi_handler function attribute, Blackfin: Blackfin Function Attributes.
66121                                                             (line   50)
66122* nocf_check function attribute:         x86 Function Attributes.
66123                                                             (line  571)
66124* noclone function attribute:            Common Function Attributes.
66125                                                             (line  757)
66126* nocommon variable attribute:           Common Variable Attributes.
66127                                                             (line  176)
66128* nocompression function attribute, MIPS: MIPS Function Attributes.
66129                                                             (line  108)
66130* noinit variable attribute:             Common Variable Attributes.
66131                                                             (line  397)
66132* noinit variable attribute, MSP430:     MSP430 Variable Attributes.
66133                                                             (line    7)
66134* noinline function attribute:           Common Function Attributes.
66135                                                             (line  763)
66136* noipa function attribute:              Common Function Attributes.
66137                                                             (line  774)
66138* nomicromips function attribute:        MIPS Function Attributes.
66139                                                             (line   91)
66140* nomips16 function attribute, MIPS:     MIPS Function Attributes.
66141                                                             (line   75)
66142* non-constant initializers:             Initializers.       (line    6)
66143* non-static inline function:            Inline.             (line   82)
66144* nonlocal gotos:                        Nonlocal Gotos.     (line    6)
66145* nonnull function attribute:            Common Function Attributes.
66146                                                             (line  788)
66147* nonstring variable attribute:          Common Variable Attributes.
66148                                                             (line  237)
66149* noplt function attribute:              Common Function Attributes.
66150                                                             (line  818)
66151* noreturn function attribute:           Common Function Attributes.
66152                                                             (line  842)
66153* nosave_low_regs function attribute, SH: SH Function Attributes.
66154                                                             (line   34)
66155* note GCC_COLORS capability:            Diagnostic Message Formatting Options.
66156                                                             (line   83)
66157* nothrow function attribute:            Common Function Attributes.
66158                                                             (line  876)
66159* notshared type attribute, ARM:         ARM Type Attributes.
66160                                                             (line    6)
66161* not_nested function attribute, NDS32:  NDS32 Function Attributes.
66162                                                             (line   21)
66163* no_caller_saved_registers function attribute, x86: x86 Function Attributes.
66164                                                             (line  113)
66165* no_gccisr function attribute, AVR:     AVR Function Attributes.
66166                                                             (line   33)
66167* no_icf function attribute:             Common Function Attributes.
66168                                                             (line  692)
66169* no_instrument_function function attribute: Common Function Attributes.
66170                                                             (line  696)
66171* no_profile_instrument_function function attribute: Common Function Attributes.
66172                                                             (line  702)
66173* no_reorder function attribute:         Common Function Attributes.
66174                                                             (line  707)
66175* no_sanitize function attribute:        Common Function Attributes.
66176                                                             (line  715)
66177* no_sanitize_address function attribute: Common Function Attributes.
66178                                                             (line  727)
66179* no_sanitize_thread function attribute: Common Function Attributes.
66180                                                             (line  735)
66181* no_sanitize_undefined function attribute: Common Function Attributes.
66182                                                             (line  740)
66183* no_split_stack function attribute:     Common Function Attributes.
66184                                                             (line  746)
66185* no_stack_limit function attribute:     Common Function Attributes.
66186                                                             (line  752)
66187* Nvidia PTX options:                    Nvidia PTX Options. (line    6)
66188* nvptx options:                         Nvidia PTX Options. (line    6)
66189* o in constraint:                       Simple Constraints. (line   23)
66190* OBJC_INCLUDE_PATH:                     Environment Variables.
66191                                                             (line  130)
66192* Objective-C:                           G++ and GCC.        (line    6)
66193* Objective-C <1>:                       Standards.          (line  189)
66194* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options.
66195                                                             (line    6)
66196* Objective-C++:                         G++ and GCC.        (line    6)
66197* Objective-C++ <1>:                     Standards.          (line  189)
66198* offsettable address:                   Simple Constraints. (line   23)
66199* old-style function definitions:        Function Prototypes.
66200                                                             (line    6)
66201* omit-leaf-frame-pointer function attribute, AArch64: AArch64 Function Attributes.
66202                                                             (line   41)
66203* omitted middle-operands:               Conditionals.       (line    6)
66204* open coding:                           Inline.             (line    6)
66205* OpenACC accelerator programming:       C Dialect Options.  (line  325)
66206* OpenACC accelerator programming <1>:   C Dialect Options.  (line  334)
66207* OpenMP parallel:                       C Dialect Options.  (line  340)
66208* OpenMP SIMD:                           C Dialect Options.  (line  349)
66209* OpenRISC Options:                      OpenRISC Options.   (line    6)
66210* operand constraints, asm:              Constraints.        (line    6)
66211* optimize function attribute:           Common Function Attributes.
66212                                                             (line  884)
66213* optimize options:                      Optimize Options.   (line    6)
66214* options to control diagnostics formatting: Diagnostic Message Formatting Options.
66215                                                             (line    6)
66216* options to control warnings:           Warning Options.    (line    6)
66217* options, C++:                          C++ Dialect Options.
66218                                                             (line    6)
66219* options, code generation:              Code Gen Options.   (line    6)
66220* options, debugging:                    Debugging Options.  (line    6)
66221* options, dialect:                      C Dialect Options.  (line    6)
66222* options, directory search:             Directory Options.  (line    6)
66223* options, GCC command:                  Invoking GCC.       (line    6)
66224* options, grouping:                     Invoking GCC.       (line   31)
66225* options, linking:                      Link Options.       (line    6)
66226* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
66227                                                             (line    6)
66228* options, optimization:                 Optimize Options.   (line    6)
66229* options, order:                        Invoking GCC.       (line   35)
66230* options, preprocessor:                 Preprocessor Options.
66231                                                             (line    6)
66232* options, profiling:                    Instrumentation Options.
66233                                                             (line    6)
66234* options, program instrumentation:      Instrumentation Options.
66235                                                             (line    6)
66236* options, run-time error checking:      Instrumentation Options.
66237                                                             (line    6)
66238* order of evaluation, side effects:     Non-bugs.           (line  196)
66239* order of options:                      Invoking GCC.       (line   35)
66240* OS_main function attribute, AVR:       AVR Function Attributes.
66241                                                             (line   56)
66242* OS_task function attribute, AVR:       AVR Function Attributes.
66243                                                             (line   56)
66244* other register constraints:            Simple Constraints. (line  161)
66245* outline-atomics function attribute, AArch64: AArch64 Function Attributes.
66246                                                             (line   82)
66247* output file option:                    Overall Options.    (line  196)
66248* overloaded virtual function, warning:  C++ Dialect Options.
66249                                                             (line  817)
66250* p in constraint:                       Simple Constraints. (line  152)
66251* packed type attribute:                 Common Type Attributes.
66252                                                             (line  282)
66253* packed variable attribute:             Common Variable Attributes.
66254                                                             (line  270)
66255* parameter forward declaration:         Variable Length.    (line   66)
66256* partial_save function attribute, NDS32: NDS32 Function Attributes.
66257                                                             (line   31)
66258* patchable_function_entry function attribute: Common Function Attributes.
66259                                                             (line  910)
66260* path GCC_COLORS capability:            Diagnostic Message Formatting Options.
66261                                                             (line   86)
66262* pcs function attribute, ARM:           ARM Function Attributes.
66263                                                             (line   58)
66264* PDP-11 Options:                        PDP-11 Options.     (line    6)
66265* persistent variable attribute, MSP430: MSP430 Variable Attributes.
66266                                                             (line   12)
66267* PIC:                                   Code Gen Options.   (line  353)
66268* picoChip options:                      picoChip Options.   (line    6)
66269* pmf:                                   Bound member functions.
66270                                                             (line    6)
66271* pointer arguments:                     Common Function Attributes.
66272                                                             (line  247)
66273* pointer arguments in variadic functions: Variadic Pointer Args.
66274                                                             (line    6)
66275* pointer to member function:            Bound member functions.
66276                                                             (line    6)
66277* pointers to arrays:                    Pointers to Arrays. (line    6)
66278* portions of temporary objects, pointers to: Temporaries.   (line    6)
66279* pow:                                   Other Builtins.     (line    6)
66280* pow10:                                 Other Builtins.     (line    6)
66281* pow10f:                                Other Builtins.     (line    6)
66282* pow10l:                                Other Builtins.     (line    6)
66283* PowerPC options:                       PowerPC Options.    (line    6)
66284* powf:                                  Other Builtins.     (line    6)
66285* powl:                                  Other Builtins.     (line    6)
66286* pragma GCC ivdep:                      Loop-Specific Pragmas.
66287                                                             (line    7)
66288* pragma GCC optimize:                   Function Specific Option Pragmas.
66289                                                             (line   21)
66290* pragma GCC pop_options:                Function Specific Option Pragmas.
66291                                                             (line   33)
66292* pragma GCC push_options:               Function Specific Option Pragmas.
66293                                                             (line   33)
66294* pragma GCC reset_options:              Function Specific Option Pragmas.
66295                                                             (line   41)
66296* pragma GCC target:                     Function Specific Option Pragmas.
66297                                                             (line    7)
66298* pragma GCC unroll N:                   Loop-Specific Pragmas.
66299                                                             (line   37)
66300* pragma, address:                       M32C Pragmas.       (line   15)
66301* pragma, align:                         Solaris Pragmas.    (line   11)
66302* pragma, call:                          MeP Pragmas.        (line   48)
66303* pragma, coprocessor available:         MeP Pragmas.        (line   13)
66304* pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
66305* pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
66306* pragma, ctable_entry:                  PRU Pragmas.        (line    7)
66307* pragma, custom io_volatile:            MeP Pragmas.        (line    7)
66308* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
66309* pragma, diagnostic <1>:                Diagnostic Pragmas. (line   57)
66310* pragma, diagnostic <2>:                Diagnostic Pragmas. (line   77)
66311* pragma, diagnostic <3>:                Diagnostic Pragmas. (line   99)
66312* pragma, disinterrupt:                  MeP Pragmas.        (line   38)
66313* pragma, fini:                          Solaris Pragmas.    (line   20)
66314* pragma, init:                          Solaris Pragmas.    (line   26)
66315* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
66316                                                             (line   14)
66317* pragma, long_calls:                    ARM Pragmas.        (line   11)
66318* pragma, long_calls_off:                ARM Pragmas.        (line   17)
66319* pragma, mark:                          Darwin Pragmas.     (line   11)
66320* pragma, memregs:                       M32C Pragmas.       (line    7)
66321* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
66322* pragma, options align:                 Darwin Pragmas.     (line   14)
66323* pragma, pop_macro:                     Push/Pop Macro Pragmas.
66324                                                             (line   15)
66325* pragma, push_macro:                    Push/Pop Macro Pragmas.
66326                                                             (line   11)
66327* pragma, redefine_extname:              Symbol-Renaming Pragmas.
66328                                                             (line   13)
66329* pragma, segment:                       Darwin Pragmas.     (line   21)
66330* pragma, unused:                        Darwin Pragmas.     (line   24)
66331* pragma, visibility:                    Visibility Pragmas. (line    8)
66332* pragma, weak:                          Weak Pragmas.       (line   10)
66333* pragmas:                               Pragmas.            (line    6)
66334* pragmas in C++, effect on inlining:    C++ Interface.      (line   57)
66335* pragmas, interface and implementation: C++ Interface.      (line    6)
66336* pragmas, warning of unknown:           Warning Options.    (line 1299)
66337* precompiled headers:                   Precompiled Headers.
66338                                                             (line    6)
66339* preprocessing numbers:                 Incompatibilities.  (line  173)
66340* preprocessing tokens:                  Incompatibilities.  (line  173)
66341* preprocessor options:                  Preprocessor Options.
66342                                                             (line    6)
66343* printf:                                Other Builtins.     (line    6)
66344* printf_unlocked:                       Other Builtins.     (line    6)
66345* prof:                                  Instrumentation Options.
66346                                                             (line   18)
66347* profiling options:                     Instrumentation Options.
66348                                                             (line    6)
66349* progmem variable attribute, AVR:       AVR Variable Attributes.
66350                                                             (line    7)
66351* program instrumentation options:       Instrumentation Options.
66352                                                             (line    6)
66353* promotion of formal parameters:        Function Prototypes.
66354                                                             (line    6)
66355* PRU Options:                           PRU Options.        (line    6)
66356* pure function attribute:               Common Function Attributes.
66357                                                             (line  928)
66358* push address instruction:              Simple Constraints. (line  152)
66359* putchar:                               Other Builtins.     (line    6)
66360* puts:                                  Other Builtins.     (line    6)
66361* q floating point suffix:               Floating Types.     (line    6)
66362* Q floating point suffix:               Floating Types.     (line    6)
66363* qsort, and global register variables:  Global Register Variables.
66364                                                             (line   75)
66365* quote GCC_COLORS capability:           Diagnostic Message Formatting Options.
66366                                                             (line  102)
66367* r fixed-suffix:                        Fixed-Point.        (line    6)
66368* R fixed-suffix:                        Fixed-Point.        (line    6)
66369* r in constraint:                       Simple Constraints. (line   64)
66370* RAMPD:                                 AVR Options.        (line  430)
66371* RAMPX:                                 AVR Options.        (line  430)
66372* RAMPY:                                 AVR Options.        (line  430)
66373* RAMPZ:                                 AVR Options.        (line  430)
66374* range1 GCC_COLORS capability:          Diagnostic Message Formatting Options.
66375                                                             (line   92)
66376* range2 GCC_COLORS capability:          Diagnostic Message Formatting Options.
66377                                                             (line   95)
66378* ranges in case statements:             Case Ranges.        (line    6)
66379* read-only strings:                     Incompatibilities.  (line    9)
66380* realloc:                               Other Builtins.     (line    6)
66381* reentrant function attribute, MSP430:  MSP430 Function Attributes.
66382                                                             (line   44)
66383* register variable after longjmp:       Global Register Variables.
66384                                                             (line   92)
66385* registers for local variables:         Local Register Variables.
66386                                                             (line    6)
66387* registers in constraints:              Simple Constraints. (line   64)
66388* registers, global allocation:          Global Register Variables.
66389                                                             (line    6)
66390* registers, global variables in:        Global Register Variables.
66391                                                             (line    6)
66392* regparm function attribute, x86:       x86 Function Attributes.
66393                                                             (line   76)
66394* relocation truncated to fit (ColdFire): M680x0 Options.    (line  322)
66395* relocation truncated to fit (MIPS):    MIPS Options.       (line  237)
66396* remainder:                             Other Builtins.     (line    6)
66397* remainderf:                            Other Builtins.     (line    6)
66398* remainderl:                            Other Builtins.     (line    6)
66399* remquo:                                Other Builtins.     (line    6)
66400* remquof:                               Other Builtins.     (line    6)
66401* remquol:                               Other Builtins.     (line    6)
66402* renesas function attribute, SH:        SH Function Attributes.
66403                                                             (line   40)
66404* reordering, warning:                   C++ Dialect Options.
66405                                                             (line  665)
66406* reporting bugs:                        Bugs.               (line    6)
66407* resbank function attribute, SH:        SH Function Attributes.
66408                                                             (line   44)
66409* reset function attribute, NDS32:       NDS32 Function Attributes.
66410                                                             (line   45)
66411* reset handler functions:               NDS32 Function Attributes.
66412                                                             (line   45)
66413* rest argument (in macro):              Variadic Macros.    (line    6)
66414* restricted pointers:                   Restricted Pointers.
66415                                                             (line    6)
66416* restricted references:                 Restricted Pointers.
66417                                                             (line    6)
66418* restricted this pointer:               Restricted Pointers.
66419                                                             (line    6)
66420* returns_nonnull function attribute:    Common Function Attributes.
66421                                                             (line  975)
66422* returns_twice function attribute:      Common Function Attributes.
66423                                                             (line  985)
66424* rindex:                                Other Builtins.     (line    6)
66425* rint:                                  Other Builtins.     (line    6)
66426* rintf:                                 Other Builtins.     (line    6)
66427* rintl:                                 Other Builtins.     (line    6)
66428* RISC-V Options:                        RISC-V Options.     (line    6)
66429* RL78 Options:                          RL78 Options.       (line    6)
66430* round:                                 Other Builtins.     (line    6)
66431* roundf:                                Other Builtins.     (line    6)
66432* roundl:                                Other Builtins.     (line    6)
66433* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
66434                                                             (line    6)
66435* RTTI:                                  Vague Linkage.      (line   42)
66436* run-time error checking options:       Instrumentation Options.
66437                                                             (line    6)
66438* run-time options:                      Code Gen Options.   (line    6)
66439* RX Options:                            RX Options.         (line    6)
66440* s in constraint:                       Simple Constraints. (line  100)
66441* S/390 and zSeries Options:             S/390 and zSeries Options.
66442                                                             (line    6)
66443* saddr variable attribute, RL78:        RL78 Variable Attributes.
66444                                                             (line    6)
66445* save all registers on the Blackfin:    Blackfin Function Attributes.
66446                                                             (line   56)
66447* save all registers on the H8/300, H8/300H, and H8S: H8/300 Function Attributes.
66448                                                             (line   23)
66449* saveall function attribute, Blackfin:  Blackfin Function Attributes.
66450                                                             (line   56)
66451* saveall function attribute, H8/300:    H8/300 Function Attributes.
66452                                                             (line   23)
66453* save_all function attribute, NDS32:    NDS32 Function Attributes.
66454                                                             (line   28)
66455* save_volatiles function attribute, MicroBlaze: MicroBlaze Function Attributes.
66456                                                             (line    9)
66457* scalar_storage_order type attribute:   Common Type Attributes.
66458                                                             (line  317)
66459* scalb:                                 Other Builtins.     (line    6)
66460* scalbf:                                Other Builtins.     (line    6)
66461* scalbl:                                Other Builtins.     (line    6)
66462* scalbln:                               Other Builtins.     (line    6)
66463* scalblnf:                              Other Builtins.     (line    6)
66464* scalblnf <1>:                          Other Builtins.     (line    6)
66465* scalbn:                                Other Builtins.     (line    6)
66466* scalbnf:                               Other Builtins.     (line    6)
66467* scanf, and constant strings:           Incompatibilities.  (line   17)
66468* scanfnl:                               Other Builtins.     (line    6)
66469* scope of a variable length array:      Variable Length.    (line   22)
66470* scope of declaration:                  Disappointments.    (line   21)
66471* scope of external declarations:        Incompatibilities.  (line   80)
66472* Score Options:                         Score Options.      (line    6)
66473* sda variable attribute, V850:          V850 Variable Attributes.
66474                                                             (line    9)
66475* search path:                           Directory Options.  (line    6)
66476* section function attribute:            Common Function Attributes.
66477                                                             (line  994)
66478* section variable attribute:            Common Variable Attributes.
66479                                                             (line  292)
66480* secure_call function attribute, ARC:   ARC Function Attributes.
66481                                                             (line   54)
66482* selectany variable attribute:          Microsoft Windows Variable Attributes.
66483                                                             (line   16)
66484* sentinel function attribute:           Common Function Attributes.
66485                                                             (line 1011)
66486* setjmp:                                Global Register Variables.
66487                                                             (line   92)
66488* setjmp incompatibilities:              Incompatibilities.  (line   39)
66489* shared attribute, Nvidia PTX:          Nvidia PTX Variable Attributes.
66490                                                             (line    9)
66491* shared strings:                        Incompatibilities.  (line    9)
66492* shared variable attribute:             Microsoft Windows Variable Attributes.
66493                                                             (line   37)
66494* shortcall function attribute, Blackfin: Blackfin Function Attributes.
66495                                                             (line   38)
66496* shortcall function attribute, PowerPC: PowerPC Function Attributes.
66497                                                             (line   10)
66498* short_call function attribute, ARC:    ARC Function Attributes.
66499                                                             (line   27)
66500* short_call function attribute, ARM:    ARM Function Attributes.
66501                                                             (line   38)
66502* short_call function attribute, Epiphany: Epiphany Function Attributes.
66503                                                             (line   57)
66504* short_call function attribute, MIPS:   MIPS Function Attributes.
66505                                                             (line   63)
66506* side effect in ?::                     Conditionals.       (line   20)
66507* side effects, macro argument:          Statement Exprs.    (line   35)
66508* side effects, order of evaluation:     Non-bugs.           (line  196)
66509* sign-return-address function attribute, AArch64: AArch64 Function Attributes.
66510                                                             (line   69)
66511* signal function attribute, AVR:        AVR Function Attributes.
66512                                                             (line   80)
66513* signbit:                               Other Builtins.     (line    6)
66514* signbitd128:                           Other Builtins.     (line    6)
66515* signbitd32:                            Other Builtins.     (line    6)
66516* signbitd64:                            Other Builtins.     (line    6)
66517* signbitf:                              Other Builtins.     (line    6)
66518* signbitl:                              Other Builtins.     (line    6)
66519* signed and unsigned values, comparison warning: Warning Options.
66520                                                             (line 2412)
66521* significand:                           Other Builtins.     (line    6)
66522* significandf:                          Other Builtins.     (line    6)
66523* significandl:                          Other Builtins.     (line    6)
66524* SIMD:                                  C Dialect Options.  (line  349)
66525* simd function attribute:               Common Function Attributes.
66526                                                             (line 1038)
66527* simple constraints:                    Simple Constraints. (line    6)
66528* sin:                                   Other Builtins.     (line    6)
66529* sincos:                                Other Builtins.     (line    6)
66530* sincosf:                               Other Builtins.     (line    6)
66531* sincosl:                               Other Builtins.     (line    6)
66532* sinf:                                  Other Builtins.     (line    6)
66533* sinh:                                  Other Builtins.     (line    6)
66534* sinhf:                                 Other Builtins.     (line    6)
66535* sinhl:                                 Other Builtins.     (line    6)
66536* sinl:                                  Other Builtins.     (line    6)
66537* sizeof:                                Typeof.             (line    6)
66538* smaller data references:               M32R/D Options.     (line   57)
66539* smaller data references <1>:           Nios II Options.    (line    9)
66540* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
66541                                                             (line  713)
66542* snprintf:                              Other Builtins.     (line    6)
66543* Solaris 2 options:                     Solaris 2 Options.  (line    6)
66544* SOURCE_DATE_EPOCH:                     Environment Variables.
66545                                                             (line  177)
66546* SPARC options:                         SPARC Options.      (line    6)
66547* Spec Files:                            Spec Files.         (line    6)
66548* specified registers:                   Explicit Register Variables.
66549                                                             (line    6)
66550* specifying compiler version and target machine: Invoking GCC.
66551                                                             (line   24)
66552* specifying hardware config:            Submodel Options.   (line    6)
66553* specifying machine version:            Invoking GCC.       (line   24)
66554* specifying registers for local variables: Local Register Variables.
66555                                                             (line    6)
66556* speed of compilation:                  Precompiled Headers.
66557                                                             (line    6)
66558* sprintf:                               Other Builtins.     (line    6)
66559* sp_switch function attribute, SH:      SH Function Attributes.
66560                                                             (line   58)
66561* sqrt:                                  Other Builtins.     (line    6)
66562* sqrtf:                                 Other Builtins.     (line    6)
66563* sqrtl:                                 Other Builtins.     (line    6)
66564* sscanf:                                Other Builtins.     (line    6)
66565* sscanf, and constant strings:          Incompatibilities.  (line   17)
66566* sseregparm function attribute, x86:    x86 Function Attributes.
66567                                                             (line   93)
66568* stack_protect function attribute:      Common Function Attributes.
66569                                                             (line 1057)
66570* Statement Attributes:                  Statement Attributes.
66571                                                             (line    6)
66572* statements inside expressions:         Statement Exprs.    (line    6)
66573* static data in C++, declaring and defining: Static Definitions.
66574                                                             (line    6)
66575* stdcall function attribute, x86-32:    x86 Function Attributes.
66576                                                             (line  108)
66577* stpcpy:                                Other Builtins.     (line    6)
66578* stpncpy:                               Other Builtins.     (line    6)
66579* strcasecmp:                            Other Builtins.     (line    6)
66580* strcat:                                Other Builtins.     (line    6)
66581* strchr:                                Other Builtins.     (line    6)
66582* strcmp:                                Other Builtins.     (line    6)
66583* strcpy:                                Other Builtins.     (line    6)
66584* strcspn:                               Other Builtins.     (line    6)
66585* strdup:                                Other Builtins.     (line    6)
66586* strfmon:                               Other Builtins.     (line    6)
66587* strftime:                              Other Builtins.     (line    6)
66588* strict-align function attribute, AArch64: AArch64 Function Attributes.
66589                                                             (line   33)
66590* string constants:                      Incompatibilities.  (line    9)
66591* strlen:                                Other Builtins.     (line    6)
66592* strncasecmp:                           Other Builtins.     (line    6)
66593* strncat:                               Other Builtins.     (line    6)
66594* strncmp:                               Other Builtins.     (line    6)
66595* strncpy:                               Other Builtins.     (line    6)
66596* strndup:                               Other Builtins.     (line    6)
66597* strnlen:                               Other Builtins.     (line    6)
66598* strpbrk:                               Other Builtins.     (line    6)
66599* strrchr:                               Other Builtins.     (line    6)
66600* strspn:                                Other Builtins.     (line    6)
66601* strstr:                                Other Builtins.     (line    6)
66602* struct:                                Unnamed Fields.     (line    6)
66603* struct __htm_tdb:                      S/390 System z Built-in Functions.
66604                                                             (line   49)
66605* structures:                            Incompatibilities.  (line  146)
66606* structures, constructor expression:    Compound Literals.  (line    6)
66607* submodel options:                      Submodel Options.   (line    6)
66608* subscripting:                          Subscripting.       (line    6)
66609* subscripting and function values:      Subscripting.       (line    6)
66610* suffixes for C++ source:               Invoking G++.       (line    6)
66611* SUNPRO_DEPENDENCIES:                   Environment Variables.
66612                                                             (line  171)
66613* suppressing warnings:                  Warning Options.    (line    6)
66614* surprises in C++:                      C++ Misunderstandings.
66615                                                             (line    6)
66616* symver function attribute:             Common Function Attributes.
66617                                                             (line 1101)
66618* syntax checking:                       Warning Options.    (line   13)
66619* syscall_linkage function attribute, IA-64: IA-64 Function Attributes.
66620                                                             (line    9)
66621* system headers, warnings from:         Warning Options.    (line 1855)
66622* sysv_abi function attribute, x86:      x86 Function Attributes.
66623                                                             (line   34)
66624* tan:                                   Other Builtins.     (line    6)
66625* tanf:                                  Other Builtins.     (line    6)
66626* tanh:                                  Other Builtins.     (line    6)
66627* tanhf:                                 Other Builtins.     (line    6)
66628* tanhl:                                 Other Builtins.     (line    6)
66629* tanl:                                  Other Builtins.     (line    6)
66630* target function attribute:             Common Function Attributes.
66631                                                             (line 1062)
66632* target function attribute <1>:         ARM Function Attributes.
66633                                                             (line   77)
66634* target function attribute <2>:         Nios II Function Attributes.
66635                                                             (line    9)
66636* target function attribute <3>:         PowerPC Function Attributes.
66637                                                             (line   21)
66638* target function attribute <4>:         S/390 Function Attributes.
66639                                                             (line   22)
66640* target function attribute <5>:         x86 Function Attributes.
66641                                                             (line  180)
66642* target machine, specifying:            Invoking GCC.       (line   24)
66643* target("3dnow") function attribute, x86: x86 Function Attributes.
66644                                                             (line  186)
66645* target("3dnowa") function attribute, x86: x86 Function Attributes.
66646                                                             (line  190)
66647* target("abm") function attribute, x86: x86 Function Attributes.
66648                                                             (line  195)
66649* target("adx") function attribute, x86: x86 Function Attributes.
66650                                                             (line  200)
66651* target("aes") function attribute, x86: x86 Function Attributes.
66652                                                             (line  204)
66653* target("align-stringops") function attribute, x86: x86 Function Attributes.
66654                                                             (line  529)
66655* target("altivec") function attribute, PowerPC: PowerPC Function Attributes.
66656                                                             (line   28)
66657* target("arch=ARCH") function attribute, x86: x86 Function Attributes.
66658                                                             (line  538)
66659* target("arm") function attribute, ARM: ARM Function Attributes.
66660                                                             (line   87)
66661* target("avoid-indexed-addresses") function attribute, PowerPC: PowerPC Function Attributes.
66662                                                             (line  142)
66663* target("avx") function attribute, x86: x86 Function Attributes.
66664                                                             (line  208)
66665* target("avx2") function attribute, x86: x86 Function Attributes.
66666                                                             (line  212)
66667* target("avx5124fmaps") function attribute, x86: x86 Function Attributes.
66668                                                             (line  216)
66669* target("avx5124vnniw") function attribute, x86: x86 Function Attributes.
66670                                                             (line  221)
66671* target("avx512bitalg") function attribute, x86: x86 Function Attributes.
66672                                                             (line  226)
66673* target("avx512bw") function attribute, x86: x86 Function Attributes.
66674                                                             (line  231)
66675* target("avx512cd") function attribute, x86: x86 Function Attributes.
66676                                                             (line  235)
66677* target("avx512dq") function attribute, x86: x86 Function Attributes.
66678                                                             (line  239)
66679* target("avx512er") function attribute, x86: x86 Function Attributes.
66680                                                             (line  243)
66681* target("avx512f") function attribute, x86: x86 Function Attributes.
66682                                                             (line  247)
66683* target("avx512ifma") function attribute, x86: x86 Function Attributes.
66684                                                             (line  251)
66685* target("avx512pf") function attribute, x86: x86 Function Attributes.
66686                                                             (line  255)
66687* target("avx512vbmi") function attribute, x86: x86 Function Attributes.
66688                                                             (line  259)
66689* target("avx512vbmi2") function attribute, x86: x86 Function Attributes.
66690                                                             (line  263)
66691* target("avx512vl") function attribute, x86: x86 Function Attributes.
66692                                                             (line  267)
66693* target("avx512vnni") function attribute, x86: x86 Function Attributes.
66694                                                             (line  271)
66695* target("avx512vpopcntdq") function attribute, x86: x86 Function Attributes.
66696                                                             (line  275)
66697* target("bmi") function attribute, x86: x86 Function Attributes.
66698                                                             (line  280)
66699* target("bmi2") function attribute, x86: x86 Function Attributes.
66700                                                             (line  284)
66701* target("cld") function attribute, x86: x86 Function Attributes.
66702                                                             (line  505)
66703* target("cldemote") function attribute, x86: x86 Function Attributes.
66704                                                             (line  288)
66705* target("clflushopt") function attribute, x86: x86 Function Attributes.
66706                                                             (line  292)
66707* target("clwb") function attribute, x86: x86 Function Attributes.
66708                                                             (line  296)
66709* target("clzero") function attribute, x86: x86 Function Attributes.
66710                                                             (line  300)
66711* target("cmpb") function attribute, PowerPC: PowerPC Function Attributes.
66712                                                             (line   34)
66713* target("cpu=CPU") function attribute, PowerPC: PowerPC Function Attributes.
66714                                                             (line  157)
66715* target("crc32") function attribute, x86: x86 Function Attributes.
66716                                                             (line  304)
66717* target("custom-fpu-cfg=NAME") function attribute, Nios II: Nios II Function Attributes.
66718                                                             (line   25)
66719* target("custom-INSN=N") function attribute, Nios II: Nios II Function Attributes.
66720                                                             (line   16)
66721* target("cx16") function attribute, x86: x86 Function Attributes.
66722                                                             (line  308)
66723* target("default") function attribute, x86: x86 Function Attributes.
66724                                                             (line  311)
66725* target("dlmzb") function attribute, PowerPC: PowerPC Function Attributes.
66726                                                             (line   40)
66727* target("f16c") function attribute, x86: x86 Function Attributes.
66728                                                             (line  316)
66729* target("fancy-math-387") function attribute, x86: x86 Function Attributes.
66730                                                             (line  509)
66731* target("fma") function attribute, x86: x86 Function Attributes.
66732                                                             (line  320)
66733* target("fma4") function attribute, x86: x86 Function Attributes.
66734                                                             (line  324)
66735* target("fpmath=FPMATH") function attribute, x86: x86 Function Attributes.
66736                                                             (line  546)
66737* target("fprnd") function attribute, PowerPC: PowerPC Function Attributes.
66738                                                             (line   47)
66739* target("fpu=") function attribute, ARM: ARM Function Attributes.
66740                                                             (line   93)
66741* target("friz") function attribute, PowerPC: PowerPC Function Attributes.
66742                                                             (line  133)
66743* target("fsgsbase") function attribute, x86: x86 Function Attributes.
66744                                                             (line  328)
66745* target("fxsr") function attribute, x86: x86 Function Attributes.
66746                                                             (line  332)
66747* target("gfni") function attribute, x86: x86 Function Attributes.
66748                                                             (line  336)
66749* target("hard-dfp") function attribute, PowerPC: PowerPC Function Attributes.
66750                                                             (line   53)
66751* target("hle") function attribute, x86: x86 Function Attributes.
66752                                                             (line  340)
66753* target("ieee-fp") function attribute, x86: x86 Function Attributes.
66754                                                             (line  514)
66755* target("inline-all-stringops") function attribute, x86: x86 Function Attributes.
66756                                                             (line  519)
66757* target("inline-stringops-dynamically") function attribute, x86: x86 Function Attributes.
66758                                                             (line  523)
66759* target("isel") function attribute, PowerPC: PowerPC Function Attributes.
66760                                                             (line   59)
66761* target("longcall") function attribute, PowerPC: PowerPC Function Attributes.
66762                                                             (line  152)
66763* target("lwp") function attribute, x86: x86 Function Attributes.
66764                                                             (line  344)
66765* target("lzcnt") function attribute, x86: x86 Function Attributes.
66766                                                             (line  348)
66767* target("mfcrf") function attribute, PowerPC: PowerPC Function Attributes.
66768                                                             (line   63)
66769* target("mmx") function attribute, x86: x86 Function Attributes.
66770                                                             (line  352)
66771* target("movbe") function attribute, x86: x86 Function Attributes.
66772                                                             (line  356)
66773* target("movdir64b") function attribute, x86: x86 Function Attributes.
66774                                                             (line  360)
66775* target("movdiri") function attribute, x86: x86 Function Attributes.
66776                                                             (line  364)
66777* target("mulhw") function attribute, PowerPC: PowerPC Function Attributes.
66778                                                             (line   70)
66779* target("multiple") function attribute, PowerPC: PowerPC Function Attributes.
66780                                                             (line   77)
66781* target("mwaitx") function attribute, x86: x86 Function Attributes.
66782                                                             (line  368)
66783* target("no-custom-INSN") function attribute, Nios II: Nios II Function Attributes.
66784                                                             (line   16)
66785* target("paired") function attribute, PowerPC: PowerPC Function Attributes.
66786                                                             (line  147)
66787* target("pclmul") function attribute, x86: x86 Function Attributes.
66788                                                             (line  372)
66789* target("pconfig") function attribute, x86: x86 Function Attributes.
66790                                                             (line  376)
66791* target("pku") function attribute, x86: x86 Function Attributes.
66792                                                             (line  380)
66793* target("popcnt") function attribute, x86: x86 Function Attributes.
66794                                                             (line  384)
66795* target("popcntb") function attribute, PowerPC: PowerPC Function Attributes.
66796                                                             (line   88)
66797* target("popcntd") function attribute, PowerPC: PowerPC Function Attributes.
66798                                                             (line   95)
66799* target("powerpc-gfxopt") function attribute, PowerPC: PowerPC Function Attributes.
66800                                                             (line  101)
66801* target("powerpc-gpopt") function attribute, PowerPC: PowerPC Function Attributes.
66802                                                             (line  107)
66803* target("prefetchwt1") function attribute, x86: x86 Function Attributes.
66804                                                             (line  388)
66805* target("prfchw") function attribute, x86: x86 Function Attributes.
66806                                                             (line  392)
66807* target("ptwrite") function attribute, x86: x86 Function Attributes.
66808                                                             (line  396)
66809* target("rdpid") function attribute, x86: x86 Function Attributes.
66810                                                             (line  400)
66811* target("rdrnd") function attribute, x86: x86 Function Attributes.
66812                                                             (line  404)
66813* target("rdseed") function attribute, x86: x86 Function Attributes.
66814                                                             (line  408)
66815* target("recip") function attribute, x86: x86 Function Attributes.
66816                                                             (line  533)
66817* target("recip-precision") function attribute, PowerPC: PowerPC Function Attributes.
66818                                                             (line  113)
66819* target("rtm") function attribute, x86: x86 Function Attributes.
66820                                                             (line  412)
66821* target("sahf") function attribute, x86: x86 Function Attributes.
66822                                                             (line  416)
66823* target("sgx") function attribute, x86: x86 Function Attributes.
66824                                                             (line  420)
66825* target("sha") function attribute, x86: x86 Function Attributes.
66826                                                             (line  424)
66827* target("shstk") function attribute, x86: x86 Function Attributes.
66828                                                             (line  428)
66829* target("sse") function attribute, x86: x86 Function Attributes.
66830                                                             (line  432)
66831* target("sse2") function attribute, x86: x86 Function Attributes.
66832                                                             (line  436)
66833* target("sse3") function attribute, x86: x86 Function Attributes.
66834                                                             (line  440)
66835* target("sse4") function attribute, x86: x86 Function Attributes.
66836                                                             (line  444)
66837* target("sse4.1") function attribute, x86: x86 Function Attributes.
66838                                                             (line  449)
66839* target("sse4.2") function attribute, x86: x86 Function Attributes.
66840                                                             (line  453)
66841* target("sse4a") function attribute, x86: x86 Function Attributes.
66842                                                             (line  457)
66843* target("ssse3") function attribute, x86: x86 Function Attributes.
66844                                                             (line  461)
66845* target("string") function attribute, PowerPC: PowerPC Function Attributes.
66846                                                             (line  119)
66847* target("tbm") function attribute, x86: x86 Function Attributes.
66848                                                             (line  465)
66849* target("thumb") function attribute, ARM: ARM Function Attributes.
66850                                                             (line   83)
66851* target("tune=TUNE") function attribute, PowerPC: PowerPC Function Attributes.
66852                                                             (line  164)
66853* target("tune=TUNE") function attribute, x86: x86 Function Attributes.
66854                                                             (line  542)
66855* target("update") function attribute, PowerPC: PowerPC Function Attributes.
66856                                                             (line   82)
66857* target("vaes") function attribute, x86: x86 Function Attributes.
66858                                                             (line  469)
66859* target("vpclmulqdq") function attribute, x86: x86 Function Attributes.
66860                                                             (line  473)
66861* target("vsx") function attribute, PowerPC: PowerPC Function Attributes.
66862                                                             (line  125)
66863* target("waitpkg") function attribute, x86: x86 Function Attributes.
66864                                                             (line  477)
66865* target("wbnoinvd") function attribute, x86: x86 Function Attributes.
66866                                                             (line  481)
66867* target("xop") function attribute, x86: x86 Function Attributes.
66868                                                             (line  485)
66869* target("xsave") function attribute, x86: x86 Function Attributes.
66870                                                             (line  489)
66871* target("xsavec") function attribute, x86: x86 Function Attributes.
66872                                                             (line  493)
66873* target("xsaveopt") function attribute, x86: x86 Function Attributes.
66874                                                             (line  497)
66875* target("xsaves") function attribute, x86: x86 Function Attributes.
66876                                                             (line  501)
66877* target-dependent options:              Submodel Options.   (line    6)
66878* target_clones function attribute:      Common Function Attributes.
66879                                                             (line 1131)
66880* TC1:                                   Standards.          (line   13)
66881* TC2:                                   Standards.          (line   13)
66882* TC3:                                   Standards.          (line   13)
66883* tda variable attribute, V850:          V850 Variable Attributes.
66884                                                             (line   13)
66885* Technical Corrigenda:                  Standards.          (line   13)
66886* Technical Corrigendum 1:               Standards.          (line   13)
66887* Technical Corrigendum 2:               Standards.          (line   13)
66888* Technical Corrigendum 3:               Standards.          (line   13)
66889* template instantiation:                Template Instantiation.
66890                                                             (line    6)
66891* temporaries, lifetime of:              Temporaries.        (line    6)
66892* tentative definitions:                 Code Gen Options.   (line  231)
66893* TERM_URLS environment variable:        Diagnostic Message Formatting Options.
66894                                                             (line  129)
66895* tgamma:                                Other Builtins.     (line    6)
66896* tgammaf:                               Other Builtins.     (line    6)
66897* tgammal:                               Other Builtins.     (line    6)
66898* thiscall function attribute, x86-32:   x86 Function Attributes.
66899                                                             (line   23)
66900* Thread-Local Storage:                  Thread-Local.       (line    6)
66901* thunks:                                Nested Functions.   (line    6)
66902* TILE-Gx options:                       TILE-Gx Options.    (line    6)
66903* TILEPro options:                       TILEPro Options.    (line    6)
66904* tiny data section on the H8/300H and H8S: H8/300 Variable Attributes.
66905                                                             (line   19)
66906* tiny type attribute, MeP:              MeP Type Attributes.
66907                                                             (line    6)
66908* tiny variable attribute, MeP:          MeP Variable Attributes.
66909                                                             (line   20)
66910* tiny_data variable attribute, H8/300:  H8/300 Variable Attributes.
66911                                                             (line   19)
66912* TLS:                                   Thread-Local.       (line    6)
66913* tls-dialect= function attribute, AArch64: AArch64 Function Attributes.
66914                                                             (line   48)
66915* tls_model variable attribute:          Common Variable Attributes.
66916                                                             (line  337)
66917* TMPDIR:                                Environment Variables.
66918                                                             (line   45)
66919* toascii:                               Other Builtins.     (line    6)
66920* tolower:                               Other Builtins.     (line    6)
66921* toupper:                               Other Builtins.     (line    6)
66922* towlower:                              Other Builtins.     (line    6)
66923* towupper:                              Other Builtins.     (line    6)
66924* traditional C language:                Preprocessor Options.
66925                                                             (line  372)
66926* transparent_union type attribute:      Common Type Attributes.
66927                                                             (line  357)
66928* trapa_handler function attribute, SH:  SH Function Attributes.
66929                                                             (line   73)
66930* trap_exit function attribute, SH:      SH Function Attributes.
66931                                                             (line   68)
66932* trunc:                                 Other Builtins.     (line    6)
66933* truncf:                                Other Builtins.     (line    6)
66934* truncl:                                Other Builtins.     (line    6)
66935* tune= function attribute, AArch64:     AArch64 Function Attributes.
66936                                                             (line   58)
66937* two-stage name lookup:                 Name lookup.        (line    6)
66938* type alignment:                        Alignment.          (line    6)
66939* type attributes:                       Type Attributes.    (line    6)
66940* type-diff GCC_COLORS capability:       Diagnostic Message Formatting Options.
66941                                                             (line  125)
66942* typedef names as function parameters:  Incompatibilities.  (line   97)
66943* typeof:                                Typeof.             (line    6)
66944* type_info:                             Vague Linkage.      (line   42)
66945* uhk fixed-suffix:                      Fixed-Point.        (line    6)
66946* UHK fixed-suffix:                      Fixed-Point.        (line    6)
66947* uhr fixed-suffix:                      Fixed-Point.        (line    6)
66948* UHR fixed-suffix:                      Fixed-Point.        (line    6)
66949* uk fixed-suffix:                       Fixed-Point.        (line    6)
66950* UK fixed-suffix:                       Fixed-Point.        (line    6)
66951* ulk fixed-suffix:                      Fixed-Point.        (line    6)
66952* ULK fixed-suffix:                      Fixed-Point.        (line    6)
66953* ULL integer suffix:                    Long Long.          (line    6)
66954* ullk fixed-suffix:                     Fixed-Point.        (line    6)
66955* ULLK fixed-suffix:                     Fixed-Point.        (line    6)
66956* ullr fixed-suffix:                     Fixed-Point.        (line    6)
66957* ULLR fixed-suffix:                     Fixed-Point.        (line    6)
66958* ulr fixed-suffix:                      Fixed-Point.        (line    6)
66959* ULR fixed-suffix:                      Fixed-Point.        (line    6)
66960* uncached type attribute, ARC:          ARC Type Attributes.
66961                                                             (line    6)
66962* undefined behavior:                    Bug Criteria.       (line   17)
66963* undefined function value:              Bug Criteria.       (line   17)
66964* underscores in variables in macros:    Typeof.             (line   46)
66965* union:                                 Unnamed Fields.     (line    6)
66966* union, casting to a:                   Cast to Union.      (line    6)
66967* unions:                                Incompatibilities.  (line  146)
66968* unknown pragmas, warning:              Warning Options.    (line 1299)
66969* unresolved references and -nodefaultlibs: Link Options.    (line  154)
66970* unresolved references and -nostdlib:   Link Options.       (line  154)
66971* unused function attribute:             Common Function Attributes.
66972                                                             (line 1158)
66973* unused label attribute:                Label Attributes.   (line   31)
66974* unused type attribute:                 Common Type Attributes.
66975                                                             (line  410)
66976* unused variable attribute:             Common Variable Attributes.
66977                                                             (line  346)
66978* upper function attribute, MSP430:      MSP430 Function Attributes.
66979                                                             (line   57)
66980* upper variable attribute, MSP430:      MSP430 Variable Attributes.
66981                                                             (line   23)
66982* ur fixed-suffix:                       Fixed-Point.        (line    6)
66983* UR fixed-suffix:                       Fixed-Point.        (line    6)
66984* urls:                                  Diagnostic Message Formatting Options.
66985                                                             (line  129)
66986* used function attribute:               Common Function Attributes.
66987                                                             (line 1163)
66988* used variable attribute:               Common Variable Attributes.
66989                                                             (line  351)
66990* User stack pointer in interrupts on the Blackfin: Blackfin Function Attributes.
66991                                                             (line   21)
66992* use_debug_exception_return function attribute, MIPS: MIPS Function Attributes.
66993                                                             (line   39)
66994* use_shadow_register_set function attribute, MIPS: MIPS Function Attributes.
66995                                                             (line   28)
66996* V in constraint:                       Simple Constraints. (line   43)
66997* V850 Options:                          V850 Options.       (line    6)
66998* vague linkage:                         Vague Linkage.      (line    6)
66999* value after longjmp:                   Global Register Variables.
67000                                                             (line   92)
67001* variable addressability on the M32R/D: M32R/D Variable Attributes.
67002                                                             (line    9)
67003* variable alignment:                    Alignment.          (line    6)
67004* variable attributes:                   Variable Attributes.
67005                                                             (line    6)
67006* variable number of arguments:          Variadic Macros.    (line    6)
67007* variable-length array in a structure:  Variable Length.    (line   26)
67008* variable-length array scope:           Variable Length.    (line   22)
67009* variable-length arrays:                Variable Length.    (line    6)
67010* variables in specified registers:      Explicit Register Variables.
67011                                                             (line    6)
67012* variables, local, in macros:           Typeof.             (line   46)
67013* variadic functions, pointer arguments: Variadic Pointer Args.
67014                                                             (line    6)
67015* variadic macros:                       Variadic Macros.    (line    6)
67016* VAX options:                           VAX Options.        (line    6)
67017* vector function attribute, RX:         RX Function Attributes.
67018                                                             (line   49)
67019* vector types, using with x86 intrinsics: Vector Extensions.
67020                                                             (line  188)
67021* vector_size type attribute:            Common Type Attributes.
67022                                                             (line  419)
67023* vector_size variable attribute:        Common Variable Attributes.
67024                                                             (line  360)
67025* version_id function attribute, IA-64:  IA-64 Function Attributes.
67026                                                             (line   16)
67027* vfprintf:                              Other Builtins.     (line    6)
67028* vfscanf:                               Other Builtins.     (line    6)
67029* visibility function attribute:         Common Function Attributes.
67030                                                             (line 1173)
67031* visibility type attribute:             Common Type Attributes.
67032                                                             (line  446)
67033* visibility variable attribute:         Common Variable Attributes.
67034                                                             (line  388)
67035* Visium options:                        Visium Options.     (line    6)
67036* VLAs:                                  Variable Length.    (line    6)
67037* vliw function attribute, MeP:          MeP Function Attributes.
67038                                                             (line   30)
67039* void pointers, arithmetic:             Pointer Arith.      (line    6)
67040* void, size of pointer to:              Pointer Arith.      (line    6)
67041* volatile access:                       Volatiles.          (line    6)
67042* volatile access <1>:                   C++ Volatiles.      (line    6)
67043* volatile applied to function:          Function Attributes.
67044                                                             (line    6)
67045* volatile asm:                          Extended Asm.       (line  116)
67046* volatile read:                         Volatiles.          (line    6)
67047* volatile read <1>:                     C++ Volatiles.      (line    6)
67048* volatile write:                        Volatiles.          (line    6)
67049* volatile write <1>:                    C++ Volatiles.      (line    6)
67050* vprintf:                               Other Builtins.     (line    6)
67051* vscanf:                                Other Builtins.     (line    6)
67052* vsnprintf:                             Other Builtins.     (line    6)
67053* vsprintf:                              Other Builtins.     (line    6)
67054* vsscanf:                               Other Builtins.     (line    6)
67055* vtable:                                Vague Linkage.      (line   27)
67056* VxWorks Options:                       VxWorks Options.    (line    6)
67057* w floating point suffix:               Floating Types.     (line    6)
67058* W floating point suffix:               Floating Types.     (line    6)
67059* wakeup function attribute, MSP430:     MSP430 Function Attributes.
67060                                                             (line   49)
67061* warm function attribute, NDS32:        NDS32 Function Attributes.
67062                                                             (line   52)
67063* warning for comparison of signed and unsigned values: Warning Options.
67064                                                             (line 2412)
67065* warning for overloaded virtual function: C++ Dialect Options.
67066                                                             (line  817)
67067* warning for reordering of member initializers: C++ Dialect Options.
67068                                                             (line  665)
67069* warning for unknown pragmas:           Warning Options.    (line 1299)
67070* warning function attribute:            Common Function Attributes.
67071                                                             (line  343)
67072* warning GCC_COLORS capability:         Diagnostic Message Formatting Options.
67073                                                             (line   80)
67074* warning messages:                      Warning Options.    (line    6)
67075* warnings from system headers:          Warning Options.    (line 1855)
67076* warnings vs errors:                    Warnings and Errors.
67077                                                             (line    6)
67078* warn_if_not_aligned type attribute:    Common Type Attributes.
67079                                                             (line   91)
67080* warn_if_not_aligned variable attribute: Common Variable Attributes.
67081                                                             (line  106)
67082* warn_unused type attribute:            C++ Attributes.     (line   71)
67083* warn_unused_result function attribute: Common Function Attributes.
67084                                                             (line 1273)
67085* weak function attribute:               Common Function Attributes.
67086                                                             (line 1290)
67087* weak variable attribute:               Common Variable Attributes.
67088                                                             (line  393)
67089* weakref function attribute:            Common Function Attributes.
67090                                                             (line 1302)
67091* whitespace:                            Incompatibilities.  (line  112)
67092* Windows Options for x86:               x86 Windows Options.
67093                                                             (line    6)
67094* X in constraint:                       Simple Constraints. (line  122)
67095* X3.159-1989:                           Standards.          (line   13)
67096* x86 named address spaces:              Named Address Spaces.
67097                                                             (line  170)
67098* x86 Options:                           x86 Options.        (line    6)
67099* x86 Windows Options:                   x86 Windows Options.
67100                                                             (line    6)
67101* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
67102* Xtensa Options:                        Xtensa Options.     (line    6)
67103* y0:                                    Other Builtins.     (line    6)
67104* y0f:                                   Other Builtins.     (line    6)
67105* y0l:                                   Other Builtins.     (line    6)
67106* y1:                                    Other Builtins.     (line    6)
67107* y1f:                                   Other Builtins.     (line    6)
67108* y1l:                                   Other Builtins.     (line    6)
67109* yn:                                    Other Builtins.     (line    6)
67110* ynf:                                   Other Builtins.     (line    6)
67111* ynl:                                   Other Builtins.     (line    6)
67112* zda variable attribute, V850:          V850 Variable Attributes.
67113                                                             (line   17)
67114* zero-length arrays:                    Zero Length.        (line    6)
67115* zero-size structures:                  Empty Structures.   (line    6)
67116* zSeries options:                       zSeries Options.    (line    6)
67117
67118
67119
67120Tag Table:
67121Node: Top2135
67122Node: G++ and GCC4093
67123Node: Standards6153
67124Node: Invoking GCC19770
67125Node: Option Summary24946
67126Node: Overall Options80098
67127Node: Invoking G++95426
67128Node: C Dialect Options96949
67129Node: C++ Dialect Options116181
67130Node: Objective-C and Objective-C++ Dialect Options165323
67131Node: Diagnostic Message Formatting Options176719
67132Node: Warning Options202440
67133Ref: Wtrigraphs298518
67134Node: Static Analyzer Options334203
67135Node: Debugging Options346912
67136Node: Optimize Options366161
67137Ref: Type-punning435730
67138Node: Instrumentation Options543211
67139Node: Preprocessor Options583627
67140Ref: dashMF588474
67141Ref: fdollars-in-identifiers593053
67142Node: Assembler Options605553
67143Node: Link Options606244
67144Ref: Link Options-Footnote-1623120
67145Node: Directory Options623456
67146Node: Code Gen Options631859
67147Node: Developer Options660224
67148Node: Submodel Options702138
67149Node: AArch64 Options703948
67150Ref: aarch64-feature-modifiers719788
67151Node: Adapteva Epiphany Options724900
67152Node: AMD GCN Options730852
67153Node: ARC Options731746
67154Node: ARM Options752972
67155Node: AVR Options794095
67156Node: Blackfin Options820617
67157Node: C6X Options828509
67158Node: CRIS Options830052
67159Node: CR16 Options833791
67160Node: C-SKY Options834703
67161Node: Darwin Options839563
67162Node: DEC Alpha Options847004
67163Node: eBPF Options858620
67164Node: FR30 Options859902
67165Node: FT32 Options860462
67166Node: FRV Options861408
67167Node: GNU/Linux Options868172
67168Node: H8/300 Options869553
67169Node: HPPA Options871005
67170Node: IA-64 Options880537
67171Node: LM32 Options888665
67172Node: M32C Options889188
67173Node: M32R/D Options890461
67174Node: M680x0 Options894006
67175Node: MCore Options908081
67176Node: MeP Options909583
67177Node: MicroBlaze Options913543
67178Node: MIPS Options916633
67179Node: MMIX Options953172
67180Node: MN10300 Options955649
67181Node: Moxie Options958192
67182Node: MSP430 Options958679
67183Node: NDS32 Options965775
67184Node: Nios II Options967945
67185Node: Nvidia PTX Options980107
67186Node: OpenRISC Options982576
67187Node: PDP-11 Options985096
67188Node: picoChip Options986345
67189Node: PowerPC Options988483
67190Node: PRU Options988703
67191Node: RISC-V Options990912
67192Node: RL78 Options996416
67193Node: RS/6000 and PowerPC Options1000191
67194Node: RX Options1041174
67195Node: S/390 and zSeries Options1049776
67196Node: Score Options1060555
67197Node: SH Options1061404
67198Node: Solaris 2 Options1076544
67199Node: SPARC Options1077782
67200Node: System V Options1093434
67201Node: TILE-Gx Options1094262
67202Node: TILEPro Options1095280
67203Node: V850 Options1095784
67204Node: VAX Options1102471
67205Node: Visium Options1103009
67206Node: VMS Options1105317
67207Node: VxWorks Options1106133
67208Node: x86 Options1107285
67209Node: x86 Windows Options1170034
67210Node: Xstormy16 Options1172839
67211Node: Xtensa Options1173133
67212Node: zSeries Options1178282
67213Node: Spec Files1178478
67214Node: Environment Variables1200637
67215Node: Precompiled Headers1209363
67216Node: C Implementation1215552
67217Node: Translation implementation1217242
67218Node: Environment implementation1217833
67219Node: Identifiers implementation1218387
67220Node: Characters implementation1219473
67221Node: Integers implementation1223123
67222Node: Floating point implementation1225172
67223Node: Arrays and pointers implementation1228235
67224Ref: Arrays and pointers implementation-Footnote-11229695
67225Node: Hints implementation1229821
67226Node: Structures unions enumerations and bit-fields implementation1231316
67227Node: Qualifiers implementation1233540
67228Node: Declarators implementation1235601
67229Node: Statements implementation1235942
67230Node: Preprocessing directives implementation1236268
67231Node: Library functions implementation1238589
67232Node: Architecture implementation1239238
67233Node: Locale-specific behavior implementation1240883
67234Node: C++ Implementation1241188
67235Node: Conditionally-supported behavior1242471
67236Node: Exception handling1243088
67237Node: C Extensions1243555
67238Node: Statement Exprs1248759
67239Node: Local Labels1254131
67240Node: Labels as Values1257104
67241Ref: Labels as Values-Footnote-11259631
67242Node: Nested Functions1259816
67243Node: Nonlocal Gotos1263770
67244Node: Constructing Calls1266036
67245Node: Typeof1270748
67246Node: Conditionals1274677
67247Node: __int1281275566
67248Node: Long Long1276091
67249Node: Complex1277582
67250Node: Floating Types1280350
67251Node: Half-Precision1283817
67252Node: Decimal Float1286228
67253Node: Hex Floats1288082
67254Node: Fixed-Point1289156
67255Node: Named Address Spaces1292414
67256Ref: AVR Named Address Spaces1293095
67257Node: Zero Length1299707
67258Node: Empty Structures1303888
67259Node: Variable Length1304294
67260Node: Variadic Macros1307012
67261Node: Escaped Newlines1309390
67262Node: Subscripting1310251
67263Node: Pointer Arith1310976
67264Node: Variadic Pointer Args1311553
67265Node: Pointers to Arrays1312278
67266Node: Initializers1313031
67267Node: Compound Literals1313532
67268Node: Designated Inits1317099
67269Node: Case Ranges1321023
67270Node: Cast to Union1321704
67271Node: Mixed Declarations1323427
67272Node: Function Attributes1323937
67273Node: Common Function Attributes1328393
67274Node: AArch64 Function Attributes1393497
67275Node: AMD GCN Function Attributes1399691
67276Node: ARC Function Attributes1402744
67277Node: ARM Function Attributes1405681
67278Node: AVR Function Attributes1410820
67279Node: Blackfin Function Attributes1415355
67280Node: BPF Function Attributes1417852
67281Node: CR16 Function Attributes1418440
67282Node: C-SKY Function Attributes1418959
67283Node: Epiphany Function Attributes1420258
67284Node: H8/300 Function Attributes1423013
67285Node: IA-64 Function Attributes1424211
67286Node: M32C Function Attributes1425253
67287Node: M32R/D Function Attributes1427591
67288Node: m68k Function Attributes1429065
67289Node: MCORE Function Attributes1430009
67290Node: MeP Function Attributes1430820
67291Node: MicroBlaze Function Attributes1432121
67292Node: Microsoft Windows Function Attributes1433628
67293Node: MIPS Function Attributes1438197
67294Node: MSP430 Function Attributes1443815
67295Node: NDS32 Function Attributes1447894
67296Node: Nios II Function Attributes1450318
67297Node: Nvidia PTX Function Attributes1451615
67298Node: PowerPC Function Attributes1452230
67299Node: RISC-V Function Attributes1459004
67300Node: RL78 Function Attributes1460420
67301Node: RX Function Attributes1461659
67302Node: S/390 Function Attributes1464206
67303Node: SH Function Attributes1466034
67304Node: Symbian OS Function Attributes1469462
67305Node: V850 Function Attributes1469798
67306Node: Visium Function Attributes1470343
67307Node: x86 Function Attributes1470871
67308Node: Xstormy16 Function Attributes1493360
67309Node: Variable Attributes1493867
67310Node: Common Variable Attributes1495400
67311Node: ARC Variable Attributes1513530
67312Node: AVR Variable Attributes1513912
67313Node: Blackfin Variable Attributes1519074
67314Node: H8/300 Variable Attributes1519932
67315Node: IA-64 Variable Attributes1521005
67316Node: M32R/D Variable Attributes1521756
67317Node: MeP Variable Attributes1522539
67318Node: Microsoft Windows Variable Attributes1524632
67319Node: MSP430 Variable Attributes1527085
67320Node: Nvidia PTX Variable Attributes1529039
67321Node: PowerPC Variable Attributes1529656
67322Node: RL78 Variable Attributes1530213
67323Node: V850 Variable Attributes1530632
67324Node: x86 Variable Attributes1531265
67325Node: Xstormy16 Variable Attributes1532321
67326Node: Type Attributes1532891
67327Node: Common Type Attributes1534555
67328Node: ARC Type Attributes1556048
67329Node: ARM Type Attributes1556520
67330Node: MeP Type Attributes1557302
67331Node: PowerPC Type Attributes1557704
67332Node: x86 Type Attributes1558693
67333Node: Label Attributes1559685
67334Node: Enumerator Attributes1561618
67335Node: Statement Attributes1562937
67336Node: Attribute Syntax1564420
67337Node: Function Prototypes1575678
67338Node: C++ Comments1577458
67339Node: Dollar Signs1577977
67340Node: Character Escapes1578442
67341Node: Alignment1578726
67342Node: Inline1580379
67343Node: Volatiles1585196
67344Node: Using Assembly Language with C1588095
67345Node: Basic Asm1589332
67346Node: Extended Asm1594782
67347Ref: Volatile1598881
67348Ref: AssemblerTemplate1603001
67349Ref: OutputOperands1607241
67350Ref: FlagOutputOperands1614204
67351Ref: InputOperands1617151
67352Ref: Clobbers and Scratch Registers1621419
67353Ref: GotoLabels1630060
67354Ref: x86Operandmodifiers1632195
67355Ref: x86floatingpointasmoperands1635352
67356Node: Constraints1638681
67357Node: Simple Constraints1639787
67358Node: Multi-Alternative1647101
67359Node: Modifiers1648776
67360Node: Machine Constraints1651574
67361Node: Asm Labels1707799
67362Node: Explicit Register Variables1709419
67363Ref: Explicit Reg Vars1709633
67364Node: Global Register Variables1710242
67365Ref: Global Reg Vars1710450
67366Node: Local Register Variables1715232
67367Ref: Local Reg Vars1715452
67368Node: Size of an asm1719080
67369Node: Alternate Keywords1720558
67370Node: Incomplete Enums1722063
67371Node: Function Names1722820
67372Node: Return Address1724724
67373Node: Vector Extensions1729311
67374Node: Offsetof1739076
67375Node: __sync Builtins1739909
67376Node: __atomic Builtins1746352
67377Node: Integer Overflow Builtins1759977
67378Node: x86 specific memory model extensions for transactional memory1766460
67379Node: Object Size Checking1767726
67380Node: Other Builtins1773982
67381Node: Target Builtins1823433
67382Node: AArch64 Built-in Functions1825181
67383Node: Alpha Built-in Functions1825636
67384Node: Altera Nios II Built-in Functions1828684
67385Node: ARC Built-in Functions1833053
67386Node: ARC SIMD Built-in Functions1838265
67387Node: ARM iWMMXt Built-in Functions1847161
67388Node: ARM C Language Extensions (ACLE)1854157
67389Node: ARM Floating Point Status and Control Intrinsics1855434
67390Node: ARM ARMv8-M Security Extensions1855919
67391Node: AVR Built-in Functions1857199
67392Node: Blackfin Built-in Functions1860960
67393Node: BPF Built-in Functions1861578
67394Node: FR-V Built-in Functions1862478
67395Node: Argument Types1863341
67396Node: Directly-mapped Integer Functions1865095
67397Node: Directly-mapped Media Functions1866179
67398Node: Raw read/write Functions1874385
67399Node: Other Built-in Functions1875293
67400Node: MIPS DSP Built-in Functions1876479
67401Node: MIPS Paired-Single Support1888976
67402Node: MIPS Loongson Built-in Functions1890475
67403Node: Paired-Single Arithmetic1896997
67404Node: Paired-Single Built-in Functions1897945
67405Node: MIPS-3D Built-in Functions1900612
67406Node: MIPS SIMD Architecture (MSA) Support1906006
67407Node: MIPS SIMD Architecture Built-in Functions1908846
67408Node: Other MIPS Built-in Functions1935700
67409Node: MSP430 Built-in Functions1936709
67410Node: NDS32 Built-in Functions1938110
67411Node: picoChip Built-in Functions1939403
67412Node: Basic PowerPC Built-in Functions1940752
67413Node: Basic PowerPC Built-in Functions Available on all Configurations1941552
67414Node: Basic PowerPC Built-in Functions Available on ISA 2.051950061
67415Node: Basic PowerPC Built-in Functions Available on ISA 2.061954896
67416Node: Basic PowerPC Built-in Functions Available on ISA 2.071956976
67417Node: Basic PowerPC Built-in Functions Available on ISA 3.01957830
67418Node: PowerPC AltiVec/VSX Built-in Functions1964746
67419Node: PowerPC AltiVec Built-in Functions on ISA 2.051968428
67420Node: PowerPC AltiVec Built-in Functions Available on ISA 2.062057666
67421Node: PowerPC AltiVec Built-in Functions Available on ISA 2.072082111
67422Node: PowerPC AltiVec Built-in Functions Available on ISA 3.02103315
67423Node: PowerPC Hardware Transactional Memory Built-in Functions2138451
67424Node: PowerPC Atomic Memory Operation Functions2146966
67425Node: PowerPC Matrix-Multiply Assist Built-in Functions2149529
67426Node: RISC-V Built-in Functions2155661
67427Node: RX Built-in Functions2156099
67428Node: S/390 System z Built-in Functions2160101
67429Node: SH Built-in Functions2165331
67430Node: SPARC VIS Built-in Functions2167059
67431Node: TI C6X Built-in Functions2175591
67432Node: TILE-Gx Built-in Functions2176622
67433Node: TILEPro Built-in Functions2177741
67434Node: x86 Built-in Functions2178841
67435Node: x86 transactional memory intrinsics2242750
67436Node: x86 control-flow protection intrinsics2246017
67437Node: Target Format Checks2247788
67438Node: Solaris Format Checks2248220
67439Node: Darwin Format Checks2248646
67440Node: Pragmas2249609
67441Node: AArch64 Pragmas2250550
67442Node: ARM Pragmas2251007
67443Node: M32C Pragmas2251634
67444Node: MeP Pragmas2252706
67445Node: PRU Pragmas2254758
67446Node: RS/6000 and PowerPC Pragmas2255336
67447Node: S/390 Pragmas2256076
67448Node: Darwin Pragmas2256642
67449Node: Solaris Pragmas2257695
67450Node: Symbol-Renaming Pragmas2258859
67451Node: Structure-Layout Pragmas2260496
67452Node: Weak Pragmas2262776
67453Node: Diagnostic Pragmas2263511
67454Node: Visibility Pragmas2267702
67455Node: Push/Pop Macro Pragmas2268387
67456Node: Function Specific Option Pragmas2269360
67457Node: Loop-Specific Pragmas2271326
67458Node: Unnamed Fields2272926
67459Node: Thread-Local2275123
67460Node: C99 Thread-Local Edits2277229
67461Node: C++98 Thread-Local Edits2279227
67462Node: Binary constants2282672
67463Node: C++ Extensions2283343
67464Node: C++ Volatiles2284973
67465Node: Restricted Pointers2287321
67466Node: Vague Linkage2288912
67467Node: C++ Interface2292535
67468Ref: C++ Interface-Footnote-12296332
67469Node: Template Instantiation2296470
67470Node: Bound member functions2302561
67471Node: C++ Attributes2304093
67472Node: Function Multiversioning2308165
67473Node: Type Traits2309972
67474Node: C++ Concepts2316922
67475Node: Deprecated Features2318428
67476Node: Backwards Compatibility2320253
67477Node: Objective-C2321325
67478Node: GNU Objective-C runtime API2321932
67479Node: Modern GNU Objective-C runtime API2322939
67480Node: Traditional GNU Objective-C runtime API2325375
67481Node: Executing code before main2326102
67482Node: What you can and what you cannot do in +load2328846
67483Node: Type encoding2331216
67484Node: Legacy type encoding2336357
67485Node: @encode2337447
67486Node: Method signatures2337992
67487Node: Garbage Collection2339984
67488Node: Constant string objects2342674
67489Node: compatibility_alias2345183
67490Node: Exceptions2345908
67491Node: Synchronization2348618
67492Node: Fast enumeration2349802
67493Node: Using fast enumeration2350114
67494Node: c99-like fast enumeration syntax2351325
67495Node: Fast enumeration details2352028
67496Node: Fast enumeration protocol2354368
67497Node: Messaging with the GNU Objective-C runtime2357520
67498Node: Dynamically registering methods2358892
67499Node: Forwarding hook2360583
67500Node: Compatibility2363623
67501Node: Gcov2370179
67502Node: Gcov Intro2370714
67503Node: Invoking Gcov2373432
67504Node: Gcov and Optimization2396267
67505Node: Gcov Data Files2400010
67506Node: Cross-profiling2401419
67507Node: Gcov-tool2403273
67508Node: Gcov-tool Intro2403698
67509Node: Invoking Gcov-tool2405668
67510Node: Gcov-dump2408246
67511Node: Gcov-dump Intro2408569
67512Node: Invoking Gcov-dump2408836
67513Node: lto-dump2409437
67514Node: lto-dump Intro2409736
67515Node: Invoking lto-dump2409986
67516Node: Trouble2411082
67517Node: Actual Bugs2412499
67518Node: Interoperation2412946
67519Node: Incompatibilities2419837
67520Node: Fixed Headers2427989
67521Node: Standard Libraries2429647
67522Node: Disappointments2431019
67523Node: C++ Misunderstandings2435378
67524Node: Static Definitions2436189
67525Node: Name lookup2437242
67526Ref: Name lookup-Footnote-12442023
67527Node: Temporaries2442212
67528Node: Copy Assignment2444188
67529Node: Non-bugs2446023
67530Node: Warnings and Errors2456529
67531Node: Bugs2458291
67532Node: Bug Criteria2458758
67533Node: Bug Reporting2460968
67534Node: Service2461186
67535Node: Contributing2462006
67536Node: Funding2462747
67537Node: GNU Project2465237
67538Node: Copying2465883
67539Node: GNU Free Documentation License2503391
67540Node: Contributors2528509
67541Node: Option Index2569482
67542Node: Keyword Index2848961
67543
67544End Tag Table
67545