1This is gcc.info, produced by makeinfo version 6.5 from gcc.texi.
2
3Copyright (C) 1988-2022 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-2022 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 12.3.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, and Go.
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<https://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=gnu17'.
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<https://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, 2014, 2017 and mostly 2020 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 that
303specification.  For further details see
304<https://gcc.gnu.org/projects/cxx-status.html#cxx17>.  Use the option
305'-std=c++17' to select this variant of C++.
306
307 Another revised ISO C++ standard was published in 2020 as ISO/IEC
30814882:2020, and is referred to as C++20; before its publication it was
309sometimes referred to as C++2a.  GCC supports most of the changes in the
310new specification.  For further details see
311<https://gcc.gnu.org/projects/cxx-status.html#cxx20>.  To select this
312standard in GCC, use the option '-std=c++20'.
313
314 More information about the C++ standards is available on the ISO C++
315committee's web site at <http://www.open-std.org/jtc1/sc22/wg21/>.
316
317 To obtain all the diagnostics required by any of the standard versions
318described above you should specify '-pedantic' or '-pedantic-errors',
319otherwise GCC will allow some non-ISO C++ features as extensions.  *Note
320Warning Options::.
321
322 By default, GCC also provides some additional extensions to the C++
323language that on rare occasions conflict with the C++ standard.  *Note
324Options Controlling C++ Dialect: C++ Dialect Options.  Use of the '-std'
325options listed above disables these extensions where they they conflict
326with the C++ standard version selected.  You may also select an extended
327version of the C++ language explicitly with '-std=gnu++98' (for C++98
328with GNU extensions), or '-std=gnu++11' (for C++11 with GNU extensions),
329or '-std=gnu++14' (for C++14 with GNU extensions), or '-std=gnu++17'
330(for C++17 with GNU extensions), or '-std=gnu++20' (for C++20 with GNU
331extensions).
332
333 The default, if no C++ language dialect options are given, is
334'-std=gnu++17'.
335
3362.3 Objective-C and Objective-C++ Languages
337===========================================
338
339GCC supports "traditional" Objective-C (also known as "Objective-C 1.0")
340and contains support for the Objective-C exception and synchronization
341syntax.  It has also support for a number of "Objective-C 2.0" language
342extensions, including properties, fast enumeration (only for
343Objective-C), method attributes and the @optional and @required keywords
344in protocols.  GCC supports Objective-C++ and features available in
345Objective-C are also available in Objective-C++.
346
347 GCC by default uses the GNU Objective-C runtime library, which is part
348of GCC and is not the same as the Apple/NeXT Objective-C runtime library
349used on Apple systems.  There are a number of differences documented in
350this manual.  The options '-fgnu-runtime' and '-fnext-runtime' allow you
351to switch between producing output that works with the GNU Objective-C
352runtime library and output that works with the Apple/NeXT Objective-C
353runtime library.
354
355 There is no formal written standard for Objective-C or Objective-C++.
356The authoritative manual on traditional Objective-C (1.0) is
357"Object-Oriented Programming and the Objective-C Language":
358<http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf> is
359the original NeXTstep document.
360
361 The Objective-C exception and synchronization syntax (that is, the
362keywords '@try', '@throw', '@catch', '@finally' and '@synchronized') is
363supported by GCC and is enabled with the option '-fobjc-exceptions'.
364The syntax is briefly documented in this manual and in the Objective-C
3652.0 manuals from Apple.
366
367 The Objective-C 2.0 language extensions and features are automatically
368enabled; they include properties (via the '@property', '@synthesize' and
369'@dynamic keywords'), fast enumeration (not available in Objective-C++),
370attributes for methods (such as 'deprecated', 'noreturn', 'sentinel',
371'format'), the 'unused' attribute for method arguments, the '@package'
372keyword for instance variables and the '@optional' and '@required'
373keywords in protocols.  You can disable all these Objective-C 2.0
374language extensions with the option '-fobjc-std=objc1', which causes the
375compiler to recognize the same Objective-C language syntax recognized by
376GCC 4.0, and to produce an error if one of the new features is used.
377
378 GCC has currently no support for non-fragile instance variables.
379
380 The authoritative manual on Objective-C 2.0 is available from Apple:
381   * 
382     <https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html>
383
384 For more information concerning the history of Objective-C that is
385available online, see <https://gcc.gnu.org/readings.html>
386
3872.4 Go Language
388===============
389
390As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
391described at <https://golang.org/doc/go1>.
392
3932.5 D language
394==============
395
396GCC supports the D 2.0 programming language.  The D language itself is
397currently defined by its reference implementation and supporting
398language specification, described at <https://dlang.org/spec/spec.html>.
399
4002.6 References for Other Languages
401==================================
402
403*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
404conformance and compatibility of the Ada compiler.
405
406 *Note Standards: (gfortran)Standards, for details of standards
407supported by GNU Fortran.
408
409
410File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
411
4123 GCC Command Options
413*********************
414
415When you invoke GCC, it normally does preprocessing, compilation,
416assembly and linking.  The "overall options" allow you to stop this
417process at an intermediate stage.  For example, the '-c' option says not
418to run the linker.  Then the output consists of object files output by
419the assembler.  *Note Options Controlling the Kind of Output: Overall
420Options.
421
422 Other options are passed on to one or more stages of processing.  Some
423options control the preprocessor and others the compiler itself.  Yet
424other options control the assembler and linker; most of these are not
425documented here, since you rarely need to use any of them.
426
427 Most of the command-line options that you can use with GCC are useful
428for C programs; when an option is only useful with another language
429(usually C++), the explanation says so explicitly.  If the description
430for a particular option does not mention a source language, you can use
431that option with all supported languages.
432
433 The usual way to run GCC is to run the executable called 'gcc', or
434'MACHINE-gcc' when cross-compiling, or 'MACHINE-gcc-VERSION' to run a
435specific version of GCC. When you compile C++ programs, you should
436invoke GCC as 'g++' instead.  *Note Compiling C++ Programs: Invoking
437G++, for information about the differences in behavior between 'gcc' and
438'g++' when compiling C++ programs.
439
440 The 'gcc' program accepts options and file names as operands.  Many
441options have multi-letter names; therefore multiple single-letter
442options may _not_ be grouped: '-dv' is very different from '-d -v'.
443
444 You can mix options and other arguments.  For the most part, the order
445you use doesn't matter.  Order does matter when you use several options
446of the same kind; for example, if you specify '-L' more than once, the
447directories are searched in the order specified.  Also, the placement of
448the '-l' option is significant.
449
450 Many options have long names starting with '-f' or with '-W'--for
451example, '-fmove-loop-invariants', '-Wformat' and so on.  Most of these
452have both positive and negative forms; the negative form of '-ffoo' is
453'-fno-foo'.  This manual documents only one of these two forms,
454whichever one is not the default.
455
456 Some options take one or more arguments typically separated either by a
457space or by the equals sign ('=') from the option name.  Unless
458documented otherwise, an argument can be either numeric or a string.
459Numeric arguments must typically be small unsigned decimal or
460hexadecimal integers.  Hexadecimal arguments must begin with the '0x'
461prefix.  Arguments to options that specify a size threshold of some sort
462may be arbitrarily large decimal or hexadecimal integers followed by a
463byte size suffix designating a multiple of bytes such as 'kB' and 'KiB'
464for kilobyte and kibibyte, respectively, 'MB' and 'MiB' for megabyte and
465mebibyte, 'GB' and 'GiB' for gigabyte and gigibyte, and so on.  Such
466arguments are designated by BYTE-SIZE in the following text.  Refer to
467the NIST, IEC, and other relevant national and international standards
468for the full listing and explanation of the binary and decimal byte size
469prefixes.
470
471 *Note Option Index::, for an index to GCC's options.
472
473* Menu:
474
475* Option Summary::      Brief list of all options, without explanations.
476* Overall Options::     Controlling the kind of output:
477                        an executable, object files, assembler files,
478                        or preprocessed source.
479* Invoking G++::        Compiling C++ programs.
480* C Dialect Options::   Controlling the variant of C language compiled.
481* C++ Dialect Options:: Variations on C++.
482* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
483                        and Objective-C++.
484* Diagnostic Message Formatting Options:: Controlling how diagnostics should
485                        be formatted.
486* Warning Options::     How picky should the compiler be?
487* Static Analyzer Options:: More expensive warnings.
488* Debugging Options::   Producing debuggable code.
489* Optimize Options::    How much optimization?
490* Instrumentation Options:: Enabling profiling and extra run-time error checking.
491* Preprocessor Options:: Controlling header files and macro definitions.
492                         Also, getting dependency information for Make.
493* Assembler Options::   Passing options to the assembler.
494* Link Options::        Specifying libraries and so on.
495* Directory Options::   Where to find header files and libraries.
496                        Where to find the compiler executable files.
497* Code Gen Options::    Specifying conventions for function calls, data layout
498                        and register usage.
499* Developer Options::   Printing GCC configuration info, statistics, and
500                        debugging dumps.
501* Submodel Options::    Target-specific options, such as compiling for a
502                        specific processor variant.
503* Spec Files::          How to pass switches to sub-processes.
504* Environment Variables:: Env vars that affect GCC.
505* Precompiled Headers:: Compiling a header once, and using it many times.
506* C++ Modules::		Experimental C++20 module system.
507
508
509File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
510
5113.1 Option Summary
512==================
513
514Here is a summary of all the options, grouped by type.  Explanations are
515in the following sections.
516
517_Overall Options_
518     *Note Options Controlling the Kind of Output: Overall Options.
519          -c  -S  -E  -o FILE
520          -dumpbase DUMPBASE  -dumpbase-ext AUXDROPSUF
521          -dumpdir DUMPPFX  -x LANGUAGE
522          -v  -###  --help[=CLASS[,...]]  --target-help  --version
523          -pass-exit-codes  -pipe  -specs=FILE  -wrapper
524          @FILE  -ffile-prefix-map=OLD=NEW
525          -fplugin=FILE  -fplugin-arg-NAME=ARG
526          -fdump-ada-spec[-slim]  -fada-spec-parent=UNIT  -fdump-go-spec=FILE
527
528_C Language Options_
529     *Note Options Controlling C Dialect: C Dialect Options.
530          -ansi  -std=STANDARD  -aux-info FILENAME
531          -fallow-parameterless-variadic-functions  -fno-asm
532          -fno-builtin  -fno-builtin-FUNCTION  -fcond-mismatch
533          -ffreestanding  -fgimple  -fgnu-tm  -fgnu89-inline  -fhosted
534          -flax-vector-conversions  -fms-extensions
535          -foffload=ARG  -foffload-options=ARG
536          -fopenacc  -fopenacc-dim=GEOM
537          -fopenmp  -fopenmp-simd
538          -fpermitted-flt-eval-methods=STANDARD
539          -fplan9-extensions  -fsigned-bitfields  -funsigned-bitfields
540          -fsigned-char  -funsigned-char  -fsso-struct=ENDIANNESS
541
542_C++ Language Options_
543     *Note Options Controlling C++ Dialect: C++ Dialect Options.
544          -fabi-version=N  -fno-access-control
545          -faligned-new=N  -fargs-in-order=N  -fchar8_t  -fcheck-new
546          -fconstexpr-depth=N  -fconstexpr-cache-depth=N
547          -fconstexpr-loop-limit=N  -fconstexpr-ops-limit=N
548          -fno-elide-constructors
549          -fno-enforce-eh-specs
550          -fno-gnu-keywords
551          -fno-implicit-templates
552          -fno-implicit-inline-templates
553          -fno-implement-inlines
554          -fmodule-header[=KIND] -fmodule-only -fmodules-ts
555          -fmodule-implicit-inline
556          -fno-module-lazy
557          -fmodule-mapper=SPECIFICATION
558          -fmodule-version-ignore
559          -fms-extensions
560          -fnew-inheriting-ctors
561          -fnew-ttp-matching
562          -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
563          -fno-optional-diags  -fpermissive
564          -fno-pretty-templates
565          -fno-rtti  -fsized-deallocation
566          -ftemplate-backtrace-limit=N
567          -ftemplate-depth=N
568          -fno-threadsafe-statics  -fuse-cxa-atexit
569          -fno-weak  -nostdinc++
570          -fvisibility-inlines-hidden
571          -fvisibility-ms-compat
572          -fext-numeric-literals
573          -flang-info-include-translate[=HEADER]
574          -flang-info-include-translate-not
575          -flang-info-module-cmi[=MODULE]
576          -stdlib=LIBSTDC++,LIBC++
577          -Wabi-tag  -Wcatch-value  -Wcatch-value=N
578          -Wno-class-conversion  -Wclass-memaccess
579          -Wcomma-subscript  -Wconditionally-supported
580          -Wno-conversion-null  -Wctad-maybe-unsupported
581          -Wctor-dtor-privacy  -Wno-delete-incomplete
582          -Wdelete-non-virtual-dtor  -Wno-deprecated-array-compare
583          -Wdeprecated-copy -Wdeprecated-copy-dtor
584          -Wno-deprecated-enum-enum-conversion -Wno-deprecated-enum-float-conversion
585          -Weffc++  -Wno-exceptions -Wextra-semi  -Wno-inaccessible-base
586          -Wno-inherited-variadic-ctor  -Wno-init-list-lifetime
587          -Winvalid-imported-macros
588          -Wno-invalid-offsetof  -Wno-literal-suffix
589          -Wmismatched-new-delete -Wmismatched-tags
590          -Wmultiple-inheritance  -Wnamespaces  -Wnarrowing
591          -Wnoexcept  -Wnoexcept-type  -Wnon-virtual-dtor
592          -Wpessimizing-move  -Wno-placement-new  -Wplacement-new=N
593          -Wrange-loop-construct -Wredundant-move -Wredundant-tags
594          -Wreorder  -Wregister
595          -Wstrict-null-sentinel  -Wno-subobject-linkage  -Wtemplates
596          -Wno-non-template-friend  -Wold-style-cast
597          -Woverloaded-virtual  -Wno-pmf-conversions -Wsign-promo
598          -Wsized-deallocation  -Wsuggest-final-methods
599          -Wsuggest-final-types  -Wsuggest-override
600          -Wno-terminate  -Wuseless-cast  -Wno-vexing-parse
601          -Wvirtual-inheritance
602          -Wno-virtual-move-assign  -Wvolatile  -Wzero-as-null-pointer-constant
603
604_Objective-C and Objective-C++ Language Options_
605     *Note Options Controlling Objective-C and Objective-C++ Dialects:
606     Objective-C and Objective-C++ Dialect Options.
607          -fconstant-string-class=CLASS-NAME
608          -fgnu-runtime  -fnext-runtime
609          -fno-nil-receivers
610          -fobjc-abi-version=N
611          -fobjc-call-cxx-cdtors
612          -fobjc-direct-dispatch
613          -fobjc-exceptions
614          -fobjc-gc
615          -fobjc-nilcheck
616          -fobjc-std=objc1
617          -fno-local-ivars
618          -fivar-visibility=[public|protected|private|package]
619          -freplace-objc-classes
620          -fzero-link
621          -gen-decls
622          -Wassign-intercept  -Wno-property-assign-default
623          -Wno-protocol -Wobjc-root-class -Wselector
624          -Wstrict-selector-match
625          -Wundeclared-selector
626
627_Diagnostic Message Formatting Options_
628     *Note Options to Control Diagnostic Messages Formatting: Diagnostic
629     Message Formatting Options.
630          -fmessage-length=N
631          -fdiagnostics-plain-output
632          -fdiagnostics-show-location=[once|every-line]
633          -fdiagnostics-color=[auto|never|always]
634          -fdiagnostics-urls=[auto|never|always]
635          -fdiagnostics-format=[text|json]
636          -fno-diagnostics-show-option  -fno-diagnostics-show-caret
637          -fno-diagnostics-show-labels  -fno-diagnostics-show-line-numbers
638          -fno-diagnostics-show-cwe
639          -fdiagnostics-minimum-margin-width=WIDTH
640          -fdiagnostics-parseable-fixits  -fdiagnostics-generate-patch
641          -fdiagnostics-show-template-tree  -fno-elide-type
642          -fdiagnostics-path-format=[none|separate-events|inline-events]
643          -fdiagnostics-show-path-depths
644          -fno-show-column
645          -fdiagnostics-column-unit=[display|byte]
646          -fdiagnostics-column-origin=ORIGIN
647          -fdiagnostics-escape-format=[unicode|bytes]
648
649_Warning Options_
650     *Note Options to Request or Suppress Warnings: Warning Options.
651          -fsyntax-only  -fmax-errors=N  -Wpedantic
652          -pedantic-errors
653          -w  -Wextra  -Wall  -Wabi=N
654          -Waddress  -Wno-address-of-packed-member  -Waggregate-return
655          -Walloc-size-larger-than=BYTE-SIZE  -Walloc-zero
656          -Walloca  -Walloca-larger-than=BYTE-SIZE
657          -Wno-aggressive-loop-optimizations
658          -Warith-conversion
659          -Warray-bounds  -Warray-bounds=N  -Warray-compare
660          -Wno-attributes  -Wattribute-alias=N -Wno-attribute-alias
661          -Wno-attribute-warning
662          -Wbidi-chars=[none|unpaired|any|ucn]
663          -Wbool-compare  -Wbool-operation
664          -Wno-builtin-declaration-mismatch
665          -Wno-builtin-macro-redefined  -Wc90-c99-compat  -Wc99-c11-compat
666          -Wc11-c2x-compat
667          -Wc++-compat  -Wc++11-compat  -Wc++14-compat  -Wc++17-compat
668          -Wc++20-compat
669          -Wno-c++11-extensions  -Wno-c++14-extensions -Wno-c++17-extensions
670          -Wno-c++20-extensions  -Wno-c++23-extensions
671          -Wcast-align  -Wcast-align=strict  -Wcast-function-type  -Wcast-qual
672          -Wchar-subscripts
673          -Wclobbered  -Wcomment
674          -Wconversion  -Wno-coverage-mismatch  -Wno-cpp
675          -Wdangling-else  -Wdangling-pointer  -Wdangling-pointer=N
676          -Wdate-time
677          -Wno-deprecated  -Wno-deprecated-declarations  -Wno-designated-init
678          -Wdisabled-optimization
679          -Wno-discarded-array-qualifiers  -Wno-discarded-qualifiers
680          -Wno-div-by-zero  -Wdouble-promotion
681          -Wduplicated-branches  -Wduplicated-cond
682          -Wempty-body  -Wno-endif-labels  -Wenum-compare  -Wenum-conversion
683          -Werror  -Werror=*  -Wexpansion-to-defined  -Wfatal-errors
684          -Wfloat-conversion  -Wfloat-equal  -Wformat  -Wformat=2
685          -Wno-format-contains-nul  -Wno-format-extra-args
686          -Wformat-nonliteral  -Wformat-overflow=N
687          -Wformat-security  -Wformat-signedness  -Wformat-truncation=N
688          -Wformat-y2k  -Wframe-address
689          -Wframe-larger-than=BYTE-SIZE  -Wno-free-nonheap-object
690          -Wno-if-not-aligned  -Wno-ignored-attributes
691          -Wignored-qualifiers  -Wno-incompatible-pointer-types
692          -Wimplicit  -Wimplicit-fallthrough  -Wimplicit-fallthrough=N
693          -Wno-implicit-function-declaration  -Wno-implicit-int
694          -Winfinite-recursion
695          -Winit-self  -Winline  -Wno-int-conversion  -Wint-in-bool-context
696          -Wno-int-to-pointer-cast  -Wno-invalid-memory-model
697          -Winvalid-pch  -Wjump-misses-init  -Wlarger-than=BYTE-SIZE
698          -Wlogical-not-parentheses  -Wlogical-op  -Wlong-long
699          -Wno-lto-type-mismatch -Wmain  -Wmaybe-uninitialized
700          -Wmemset-elt-size  -Wmemset-transposed-args
701          -Wmisleading-indentation  -Wmissing-attributes  -Wmissing-braces
702          -Wmissing-field-initializers  -Wmissing-format-attribute
703          -Wmissing-include-dirs  -Wmissing-noreturn  -Wno-missing-profile
704          -Wno-multichar  -Wmultistatement-macros  -Wnonnull  -Wnonnull-compare
705          -Wnormalized=[none|id|nfc|nfkc]
706          -Wnull-dereference  -Wno-odr
707          -Wopenacc-parallelism
708          -Wopenmp-simd
709          -Wno-overflow  -Woverlength-strings  -Wno-override-init-side-effects
710          -Wpacked  -Wno-packed-bitfield-compat  -Wpacked-not-aligned  -Wpadded
711          -Wparentheses  -Wno-pedantic-ms-format
712          -Wpointer-arith  -Wno-pointer-compare  -Wno-pointer-to-int-cast
713          -Wno-pragmas  -Wno-prio-ctor-dtor  -Wredundant-decls
714          -Wrestrict  -Wno-return-local-addr  -Wreturn-type
715          -Wno-scalar-storage-order  -Wsequence-point
716          -Wshadow  -Wshadow=global  -Wshadow=local  -Wshadow=compatible-local
717          -Wno-shadow-ivar
718          -Wno-shift-count-negative  -Wno-shift-count-overflow  -Wshift-negative-value
719          -Wno-shift-overflow  -Wshift-overflow=N
720          -Wsign-compare  -Wsign-conversion
721          -Wno-sizeof-array-argument
722          -Wsizeof-array-div
723          -Wsizeof-pointer-div  -Wsizeof-pointer-memaccess
724          -Wstack-protector  -Wstack-usage=BYTE-SIZE  -Wstrict-aliasing
725          -Wstrict-aliasing=n  -Wstrict-overflow  -Wstrict-overflow=N
726          -Wstring-compare
727          -Wno-stringop-overflow -Wno-stringop-overread
728          -Wno-stringop-truncation
729          -Wsuggest-attribute=[pure|const|noreturn|format|malloc]
730          -Wswitch  -Wno-switch-bool  -Wswitch-default  -Wswitch-enum
731          -Wno-switch-outside-range  -Wno-switch-unreachable  -Wsync-nand
732          -Wsystem-headers  -Wtautological-compare  -Wtrampolines  -Wtrigraphs
733          -Wtrivial-auto-var-init -Wtsan -Wtype-limits  -Wundef
734          -Wuninitialized  -Wunknown-pragmas
735          -Wunsuffixed-float-constants  -Wunused
736          -Wunused-but-set-parameter  -Wunused-but-set-variable
737          -Wunused-const-variable  -Wunused-const-variable=N
738          -Wunused-function  -Wunused-label  -Wunused-local-typedefs
739          -Wunused-macros
740          -Wunused-parameter  -Wno-unused-result
741          -Wunused-value  -Wunused-variable
742          -Wno-varargs  -Wvariadic-macros
743          -Wvector-operation-performance
744          -Wvla  -Wvla-larger-than=BYTE-SIZE  -Wno-vla-larger-than
745          -Wvolatile-register-var  -Wwrite-strings
746          -Wzero-length-bounds
747
748_Static Analyzer Options_
749          -fanalyzer
750          -fanalyzer-call-summaries
751          -fanalyzer-checker=NAME
752          -fno-analyzer-feasibility
753          -fanalyzer-fine-grained
754          -fno-analyzer-state-merge
755          -fno-analyzer-state-purge
756          -fanalyzer-transitivity
757          -fanalyzer-verbose-edges
758          -fanalyzer-verbose-state-changes
759          -fanalyzer-verbosity=LEVEL
760          -fdump-analyzer
761          -fdump-analyzer-callgraph
762          -fdump-analyzer-exploded-graph
763          -fdump-analyzer-exploded-nodes
764          -fdump-analyzer-exploded-nodes-2
765          -fdump-analyzer-exploded-nodes-3
766          -fdump-analyzer-exploded-paths
767          -fdump-analyzer-feasibility
768          -fdump-analyzer-json
769          -fdump-analyzer-state-purge
770          -fdump-analyzer-stderr
771          -fdump-analyzer-supergraph
772          -fdump-analyzer-untracked
773          -Wno-analyzer-double-fclose
774          -Wno-analyzer-double-free
775          -Wno-analyzer-exposure-through-output-file
776          -Wno-analyzer-file-leak
777          -Wno-analyzer-free-of-non-heap
778          -Wno-analyzer-malloc-leak
779          -Wno-analyzer-mismatching-deallocation
780          -Wno-analyzer-null-argument
781          -Wno-analyzer-null-dereference
782          -Wno-analyzer-possible-null-argument
783          -Wno-analyzer-possible-null-dereference
784          -Wno-analyzer-shift-count-negative
785          -Wno-analyzer-shift-count-overflow
786          -Wno-analyzer-stale-setjmp-buffer
787          -Wno-analyzer-tainted-allocation-size
788          -Wno-analyzer-tainted-array-index
789          -Wno-analyzer-tainted-divisor
790          -Wno-analyzer-tainted-offset
791          -Wno-analyzer-tainted-size
792          -Wanalyzer-too-complex
793          -Wno-analyzer-unsafe-call-within-signal-handler
794          -Wno-analyzer-use-after-free
795          -Wno-analyzer-use-of-pointer-in-stale-stack-frame
796          -Wno-analyzer-use-of-uninitialized-value
797          -Wno-analyzer-write-to-const
798          -Wno-analyzer-write-to-string-literal
799
800
801_C and Objective-C-only Warning Options_
802          -Wbad-function-cast  -Wmissing-declarations
803          -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
804          -Wold-style-declaration  -Wold-style-definition
805          -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
806          -Wdeclaration-after-statement  -Wpointer-sign
807
808_Debugging Options_
809     *Note Options for Debugging Your Program: Debugging Options.
810          -g  -gLEVEL  -gdwarf  -gdwarf-VERSION
811          -gbtf -gctf  -gctfLEVEL
812          -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches
813          -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
814          -gas-loc-support  -gno-as-loc-support
815          -gas-locview-support  -gno-as-locview-support
816          -gcolumn-info  -gno-column-info  -gdwarf32  -gdwarf64
817          -gstatement-frontiers  -gno-statement-frontiers
818          -gvariable-location-views  -gno-variable-location-views
819          -ginternal-reset-location-views  -gno-internal-reset-location-views
820          -ginline-points  -gno-inline-points
821          -gvms  -gxcoff  -gxcoff+  -gz[=TYPE]
822          -gsplit-dwarf  -gdescribe-dies  -gno-describe-dies
823          -fdebug-prefix-map=OLD=NEW  -fdebug-types-section
824          -fno-eliminate-unused-debug-types
825          -femit-struct-debug-baseonly  -femit-struct-debug-reduced
826          -femit-struct-debug-detailed[=SPEC-LIST]
827          -fno-eliminate-unused-debug-symbols  -femit-class-debug-always
828          -fno-merge-debug-strings  -fno-dwarf2-cfi-asm
829          -fvar-tracking  -fvar-tracking-assignments
830
831_Optimization Options_
832     *Note Options that Control Optimization: Optimize Options.
833          -faggressive-loop-optimizations
834          -falign-functions[=N[:M:[N2[:M2]]]]
835          -falign-jumps[=N[:M:[N2[:M2]]]]
836          -falign-labels[=N[:M:[N2[:M2]]]]
837          -falign-loops[=N[:M:[N2[:M2]]]]
838          -fno-allocation-dce -fallow-store-data-races
839          -fassociative-math  -fauto-profile  -fauto-profile[=PATH]
840          -fauto-inc-dec  -fbranch-probabilities
841          -fcaller-saves
842          -fcombine-stack-adjustments  -fconserve-stack
843          -fcompare-elim  -fcprop-registers  -fcrossjumping
844          -fcse-follow-jumps  -fcse-skip-blocks  -fcx-fortran-rules
845          -fcx-limited-range
846          -fdata-sections  -fdce  -fdelayed-branch
847          -fdelete-null-pointer-checks  -fdevirtualize  -fdevirtualize-speculatively
848          -fdevirtualize-at-ltrans  -fdse
849          -fearly-inlining  -fipa-sra  -fexpensive-optimizations  -ffat-lto-objects
850          -ffast-math  -ffinite-math-only  -ffloat-store  -fexcess-precision=STYLE
851          -ffinite-loops
852          -fforward-propagate  -ffp-contract=STYLE  -ffunction-sections
853          -fgcse  -fgcse-after-reload  -fgcse-las  -fgcse-lm  -fgraphite-identity
854          -fgcse-sm  -fhoist-adjacent-loads  -fif-conversion
855          -fif-conversion2  -findirect-inlining
856          -finline-functions  -finline-functions-called-once  -finline-limit=N
857          -finline-small-functions -fipa-modref -fipa-cp  -fipa-cp-clone
858          -fipa-bit-cp  -fipa-vrp  -fipa-pta  -fipa-profile  -fipa-pure-const
859          -fipa-reference  -fipa-reference-addressable
860          -fipa-stack-alignment  -fipa-icf  -fira-algorithm=ALGORITHM
861          -flive-patching=LEVEL
862          -fira-region=REGION  -fira-hoist-pressure
863          -fira-loop-pressure  -fno-ira-share-save-slots
864          -fno-ira-share-spill-slots
865          -fisolate-erroneous-paths-dereference  -fisolate-erroneous-paths-attribute
866          -fivopts  -fkeep-inline-functions  -fkeep-static-functions
867          -fkeep-static-consts  -flimit-function-alignment  -flive-range-shrinkage
868          -floop-block  -floop-interchange  -floop-strip-mine
869          -floop-unroll-and-jam  -floop-nest-optimize
870          -floop-parallelize-all  -flra-remat  -flto  -flto-compression-level
871          -flto-partition=ALG  -fmerge-all-constants
872          -fmerge-constants  -fmodulo-sched  -fmodulo-sched-allow-regmoves
873          -fmove-loop-invariants  -fmove-loop-stores  -fno-branch-count-reg
874          -fno-defer-pop  -fno-fp-int-builtin-inexact  -fno-function-cse
875          -fno-guess-branch-probability  -fno-inline  -fno-math-errno  -fno-peephole
876          -fno-peephole2  -fno-printf-return-value  -fno-sched-interblock
877          -fno-sched-spec  -fno-signed-zeros
878          -fno-toplevel-reorder  -fno-trapping-math  -fno-zero-initialized-in-bss
879          -fomit-frame-pointer  -foptimize-sibling-calls
880          -fpartial-inlining  -fpeel-loops  -fpredictive-commoning
881          -fprefetch-loop-arrays
882          -fprofile-correction
883          -fprofile-use  -fprofile-use=PATH -fprofile-partial-training
884          -fprofile-values -fprofile-reorder-functions
885          -freciprocal-math  -free  -frename-registers  -freorder-blocks
886          -freorder-blocks-algorithm=ALGORITHM
887          -freorder-blocks-and-partition  -freorder-functions
888          -frerun-cse-after-loop  -freschedule-modulo-scheduled-loops
889          -frounding-math  -fsave-optimization-record
890          -fsched2-use-superblocks  -fsched-pressure
891          -fsched-spec-load  -fsched-spec-load-dangerous
892          -fsched-stalled-insns-dep[=N]  -fsched-stalled-insns[=N]
893          -fsched-group-heuristic  -fsched-critical-path-heuristic
894          -fsched-spec-insn-heuristic  -fsched-rank-heuristic
895          -fsched-last-insn-heuristic  -fsched-dep-count-heuristic
896          -fschedule-fusion
897          -fschedule-insns  -fschedule-insns2  -fsection-anchors
898          -fselective-scheduling  -fselective-scheduling2
899          -fsel-sched-pipelining  -fsel-sched-pipelining-outer-loops
900          -fsemantic-interposition  -fshrink-wrap  -fshrink-wrap-separate
901          -fsignaling-nans
902          -fsingle-precision-constant  -fsplit-ivs-in-unroller  -fsplit-loops
903          -fsplit-paths
904          -fsplit-wide-types  -fsplit-wide-types-early  -fssa-backprop  -fssa-phiopt
905          -fstdarg-opt  -fstore-merging  -fstrict-aliasing -fipa-strict-aliasing
906          -fthread-jumps  -ftracer  -ftree-bit-ccp
907          -ftree-builtin-call-dce  -ftree-ccp  -ftree-ch
908          -ftree-coalesce-vars  -ftree-copy-prop  -ftree-dce  -ftree-dominator-opts
909          -ftree-dse  -ftree-forwprop  -ftree-fre  -fcode-hoisting
910          -ftree-loop-if-convert  -ftree-loop-im
911          -ftree-phiprop  -ftree-loop-distribution  -ftree-loop-distribute-patterns
912          -ftree-loop-ivcanon  -ftree-loop-linear  -ftree-loop-optimize
913          -ftree-loop-vectorize
914          -ftree-parallelize-loops=N  -ftree-pre  -ftree-partial-pre  -ftree-pta
915          -ftree-reassoc  -ftree-scev-cprop  -ftree-sink  -ftree-slsr  -ftree-sra
916          -ftree-switch-conversion  -ftree-tail-merge
917          -ftree-ter  -ftree-vectorize  -ftree-vrp  -ftrivial-auto-var-init
918          -funconstrained-commons -funit-at-a-time  -funroll-all-loops
919          -funroll-loops -funsafe-math-optimizations  -funswitch-loops
920          -fipa-ra  -fvariable-expansion-in-unroller  -fvect-cost-model  -fvpt
921          -fweb  -fwhole-program  -fwpa  -fuse-linker-plugin -fzero-call-used-regs
922          --param NAME=VALUE
923          -O  -O0  -O1  -O2  -O3  -Os  -Ofast  -Og  -Oz
924
925_Program Instrumentation Options_
926     *Note Program Instrumentation Options: Instrumentation Options.
927          -p  -pg  -fprofile-arcs  --coverage  -ftest-coverage
928          -fprofile-abs-path
929          -fprofile-dir=PATH  -fprofile-generate  -fprofile-generate=PATH
930          -fprofile-info-section  -fprofile-info-section=NAME
931          -fprofile-note=PATH -fprofile-prefix-path=PATH
932          -fprofile-update=METHOD -fprofile-filter-files=REGEX
933          -fprofile-exclude-files=REGEX
934          -fprofile-reproducible=[multithreaded|parallel-runs|serial]
935          -fsanitize=STYLE  -fsanitize-recover  -fsanitize-recover=STYLE
936          -fasan-shadow-offset=NUMBER  -fsanitize-sections=S1,S2,...
937          -fsanitize-undefined-trap-on-error  -fbounds-check
938          -fcf-protection=[full|branch|return|none|check]
939          -fharden-compares -fharden-conditional-branches
940          -fstack-protector  -fstack-protector-all  -fstack-protector-strong
941          -fstack-protector-explicit  -fstack-check
942          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
943          -fno-stack-limit  -fsplit-stack
944          -fvtable-verify=[std|preinit|none]
945          -fvtv-counts  -fvtv-debug
946          -finstrument-functions
947          -finstrument-functions-exclude-function-list=SYM,SYM,...
948          -finstrument-functions-exclude-file-list=FILE,FILE,...
949     -fprofile-prefix-map=OLD=NEW
950
951_Preprocessor Options_
952     *Note Options Controlling the Preprocessor: Preprocessor Options.
953          -AQUESTION=ANSWER
954          -A-QUESTION[=ANSWER]
955          -C  -CC  -DMACRO[=DEFN]
956          -dD  -dI  -dM  -dN  -dU
957          -fdebug-cpp  -fdirectives-only  -fdollars-in-identifiers
958          -fexec-charset=CHARSET  -fextended-identifiers
959          -finput-charset=CHARSET  -flarge-source-files
960          -fmacro-prefix-map=OLD=NEW -fmax-include-depth=DEPTH
961          -fno-canonical-system-headers  -fpch-deps  -fpch-preprocess
962          -fpreprocessed  -ftabstop=WIDTH  -ftrack-macro-expansion
963          -fwide-exec-charset=CHARSET  -fworking-directory
964          -H  -imacros FILE  -include FILE
965          -M  -MD  -MF  -MG  -MM  -MMD  -MP  -MQ  -MT -Mno-modules
966          -no-integrated-cpp  -P  -pthread  -remap
967          -traditional  -traditional-cpp  -trigraphs
968          -UMACRO  -undef
969          -Wp,OPTION  -Xpreprocessor OPTION
970
971_Assembler Options_
972     *Note Passing Options to the Assembler: Assembler Options.
973          -Wa,OPTION  -Xassembler OPTION
974
975_Linker Options_
976     *Note Options for Linking: Link Options.
977          OBJECT-FILE-NAME  -fuse-ld=LINKER  -lLIBRARY
978          -nostartfiles  -nodefaultlibs  -nolibc  -nostdlib
979          -e ENTRY  --entry=ENTRY
980          -pie  -pthread  -r  -rdynamic
981          -s  -static  -static-pie  -static-libgcc  -static-libstdc++
982          -static-libasan  -static-libtsan  -static-liblsan  -static-libubsan
983          -shared  -shared-libgcc  -symbolic
984          -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
985          -u SYMBOL  -z KEYWORD
986
987_Directory Options_
988     *Note Options for Directory Search: Directory Options.
989          -BPREFIX  -IDIR  -I-
990          -idirafter DIR
991          -imacros FILE  -imultilib DIR
992          -iplugindir=DIR  -iprefix FILE
993          -iquote DIR  -isysroot DIR  -isystem DIR
994          -iwithprefix DIR  -iwithprefixbefore DIR
995          -LDIR  -no-canonical-prefixes  --no-sysroot-suffix
996          -nostdinc  -nostdinc++  --sysroot=DIR
997
998_Code Generation Options_
999     *Note Options for Code Generation Conventions: Code Gen Options.
1000          -fcall-saved-REG  -fcall-used-REG
1001          -ffixed-REG  -fexceptions
1002          -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
1003          -fasynchronous-unwind-tables
1004          -fno-gnu-unique
1005          -finhibit-size-directive  -fcommon  -fno-ident
1006          -fpcc-struct-return  -fpic  -fPIC  -fpie  -fPIE  -fno-plt
1007          -fno-jump-tables -fno-bit-tests
1008          -frecord-gcc-switches
1009          -freg-struct-return  -fshort-enums  -fshort-wchar
1010          -fverbose-asm  -fpack-struct[=N]
1011          -fleading-underscore  -ftls-model=MODEL
1012          -fstack-reuse=REUSE_LEVEL
1013          -ftrampolines  -ftrapv  -fwrapv
1014          -fvisibility=[default|internal|hidden|protected]
1015          -fstrict-volatile-bitfields  -fsync-libcalls
1016
1017_Developer Options_
1018     *Note GCC Developer Options: Developer Options.
1019          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
1020          -dumpfullversion  -fcallgraph-info[=su,da]
1021          -fchecking  -fchecking=N
1022          -fdbg-cnt-list   -fdbg-cnt=COUNTER-VALUE-LIST
1023          -fdisable-ipa-PASS_NAME
1024          -fdisable-rtl-PASS_NAME
1025          -fdisable-rtl-PASS-NAME=RANGE-LIST
1026          -fdisable-tree-PASS_NAME
1027          -fdisable-tree-PASS-NAME=RANGE-LIST
1028          -fdump-debug  -fdump-earlydebug
1029          -fdump-noaddr  -fdump-unnumbered  -fdump-unnumbered-links
1030          -fdump-final-insns[=FILE]
1031          -fdump-ipa-all  -fdump-ipa-cgraph  -fdump-ipa-inline
1032          -fdump-lang-all
1033          -fdump-lang-SWITCH
1034          -fdump-lang-SWITCH-OPTIONS
1035          -fdump-lang-SWITCH-OPTIONS=FILENAME
1036          -fdump-passes
1037          -fdump-rtl-PASS  -fdump-rtl-PASS=FILENAME
1038          -fdump-statistics
1039          -fdump-tree-all
1040          -fdump-tree-SWITCH
1041          -fdump-tree-SWITCH-OPTIONS
1042          -fdump-tree-SWITCH-OPTIONS=FILENAME
1043          -fcompare-debug[=OPTS]  -fcompare-debug-second
1044          -fenable-KIND-PASS
1045          -fenable-KIND-PASS=RANGE-LIST
1046          -fira-verbose=N
1047          -flto-report  -flto-report-wpa  -fmem-report-wpa
1048          -fmem-report  -fpre-ipa-mem-report  -fpost-ipa-mem-report
1049          -fopt-info  -fopt-info-OPTIONS[=FILE]
1050          -fprofile-report
1051          -frandom-seed=STRING  -fsched-verbose=N
1052          -fsel-sched-verbose  -fsel-sched-dump-cfg  -fsel-sched-pipelining-verbose
1053          -fstats  -fstack-usage  -ftime-report  -ftime-report-details
1054          -fvar-tracking-assignments-toggle  -gtoggle
1055          -print-file-name=LIBRARY  -print-libgcc-file-name
1056          -print-multi-directory  -print-multi-lib  -print-multi-os-directory
1057          -print-prog-name=PROGRAM  -print-search-dirs  -Q
1058          -print-sysroot  -print-sysroot-headers-suffix
1059          -save-temps  -save-temps=cwd  -save-temps=obj  -time[=FILE]
1060
1061_Machine-Dependent Options_
1062     *Note Machine-Dependent Options: Submodel Options.
1063
1064     _AArch64 Options_
1065          -mabi=NAME  -mbig-endian  -mlittle-endian
1066          -mgeneral-regs-only
1067          -mcmodel=tiny  -mcmodel=small  -mcmodel=large
1068          -mstrict-align  -mno-strict-align
1069          -momit-leaf-frame-pointer
1070          -mtls-dialect=desc  -mtls-dialect=traditional
1071          -mtls-size=SIZE
1072          -mfix-cortex-a53-835769  -mfix-cortex-a53-843419
1073          -mlow-precision-recip-sqrt  -mlow-precision-sqrt  -mlow-precision-div
1074          -mpc-relative-literal-loads
1075          -msign-return-address=SCOPE
1076          -mbranch-protection=NONE|STANDARD|PAC-RET[+LEAF
1077          +B-KEY]|BTI
1078          -mharden-sls=OPTS
1079          -march=NAME  -mcpu=NAME  -mtune=NAME
1080          -moverride=STRING  -mverbose-cost-dump
1081          -mstack-protector-guard=GUARD -mstack-protector-guard-reg=SYSREG
1082          -mstack-protector-guard-offset=OFFSET -mtrack-speculation
1083          -moutline-atomics
1084
1085     _Adapteva Epiphany Options_
1086          -mhalf-reg-file  -mprefer-short-insn-regs
1087          -mbranch-cost=NUM  -mcmove  -mnops=NUM  -msoft-cmpsf
1088          -msplit-lohi  -mpost-inc  -mpost-modify  -mstack-offset=NUM
1089          -mround-nearest  -mlong-calls  -mshort-calls  -msmall16
1090          -mfp-mode=MODE  -mvect-double  -max-vect-align=NUM
1091          -msplit-vecmove-early  -m1reg-REG
1092
1093     _AMD GCN Options_
1094          -march=GPU -mtune=GPU -mstack-size=BYTES
1095
1096     _ARC Options_
1097          -mbarrel-shifter  -mjli-always
1098          -mcpu=CPU  -mA6  -mARC600  -mA7  -mARC700
1099          -mdpfp  -mdpfp-compact  -mdpfp-fast  -mno-dpfp-lrsr
1100          -mea  -mno-mpy  -mmul32x16  -mmul64  -matomic
1101          -mnorm  -mspfp  -mspfp-compact  -mspfp-fast  -msimd  -msoft-float  -mswap
1102          -mcrc  -mdsp-packa  -mdvbf  -mlock  -mmac-d16  -mmac-24  -mrtsc  -mswape
1103          -mtelephony  -mxy  -misize  -mannotate-align  -marclinux  -marclinux_prof
1104          -mlong-calls  -mmedium-calls  -msdata  -mirq-ctrl-saved
1105          -mrgf-banked-regs  -mlpc-width=WIDTH  -G NUM
1106          -mvolatile-cache  -mtp-regno=REGNO
1107          -malign-call  -mauto-modify-reg  -mbbit-peephole  -mno-brcc
1108          -mcase-vector-pcrel  -mcompact-casesi  -mno-cond-exec  -mearly-cbranchsi
1109          -mexpand-adddi  -mindexed-loads  -mlra  -mlra-priority-none
1110          -mlra-priority-compact -mlra-priority-noncompact  -mmillicode
1111          -mmixed-code  -mq-class  -mRcq  -mRcw  -msize-level=LEVEL
1112          -mtune=CPU  -mmultcost=NUM  -mcode-density-frame
1113          -munalign-prob-threshold=PROBABILITY  -mmpy-option=MULTO
1114          -mdiv-rem  -mcode-density  -mll64  -mfpu=FPU  -mrf16  -mbranch-index
1115
1116     _ARM Options_
1117          -mapcs-frame  -mno-apcs-frame
1118          -mabi=NAME
1119          -mapcs-stack-check  -mno-apcs-stack-check
1120          -mapcs-reentrant  -mno-apcs-reentrant
1121          -mgeneral-regs-only
1122          -msched-prolog  -mno-sched-prolog
1123          -mlittle-endian  -mbig-endian
1124          -mbe8  -mbe32
1125          -mfloat-abi=NAME
1126          -mfp16-format=NAME
1127          -mthumb-interwork  -mno-thumb-interwork
1128          -mcpu=NAME  -march=NAME  -mfpu=NAME
1129          -mtune=NAME  -mprint-tune-info
1130          -mstructure-size-boundary=N
1131          -mabort-on-noreturn
1132          -mlong-calls  -mno-long-calls
1133          -msingle-pic-base  -mno-single-pic-base
1134          -mpic-register=REG
1135          -mnop-fun-dllimport
1136          -mpoke-function-name
1137          -mthumb  -marm  -mflip-thumb
1138          -mtpcs-frame  -mtpcs-leaf-frame
1139          -mcaller-super-interworking  -mcallee-super-interworking
1140          -mtp=NAME  -mtls-dialect=DIALECT
1141          -mword-relocations
1142          -mfix-cortex-m3-ldrd
1143          -mfix-cortex-a57-aes-1742098
1144          -mfix-cortex-a72-aes-1655431
1145          -munaligned-access
1146          -mneon-for-64bits
1147          -mslow-flash-data
1148          -masm-syntax-unified
1149          -mrestrict-it
1150          -mverbose-cost-dump
1151          -mpure-code
1152          -mcmse
1153          -mfix-cmse-cve-2021-35465
1154          -mstack-protector-guard=GUARD -mstack-protector-guard-offset=OFFSET
1155          -mfdpic
1156
1157     _AVR Options_
1158          -mmcu=MCU  -mabsdata  -maccumulate-args
1159          -mbranch-cost=COST
1160          -mcall-prologues  -mgas-isr-prologues  -mint8
1161          -mdouble=BITS -mlong-double=BITS
1162          -mn_flash=SIZE  -mno-interrupts
1163          -mmain-is-OS_task  -mrelax  -mrmw  -mstrict-X  -mtiny-stack
1164          -mfract-convert-truncate
1165          -mshort-calls  -nodevicelib  -nodevicespecs
1166          -Waddr-space-convert  -Wmisspelled-isr
1167
1168     _Blackfin Options_
1169          -mcpu=CPU[-SIREVISION]
1170          -msim  -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
1171          -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
1172          -mlow-64k  -mno-low64k  -mstack-check-l1  -mid-shared-library
1173          -mno-id-shared-library  -mshared-library-id=N
1174          -mleaf-id-shared-library  -mno-leaf-id-shared-library
1175          -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
1176          -mfast-fp  -minline-plt  -mmulticore  -mcorea  -mcoreb  -msdram
1177          -micplb
1178
1179     _C6X Options_
1180          -mbig-endian  -mlittle-endian  -march=CPU
1181          -msim  -msdata=SDATA-TYPE
1182
1183     _CRIS Options_
1184          -mcpu=CPU  -march=CPU
1185          -mtune=CPU -mmax-stack-frame=N
1186          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
1187          -mstack-align  -mdata-align  -mconst-align
1188          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue
1189          -melf  -maout  -sim  -sim2
1190          -mmul-bug-workaround  -mno-mul-bug-workaround
1191
1192     _CR16 Options_
1193          -mmac
1194          -mcr16cplus  -mcr16c
1195          -msim  -mint32  -mbit-ops
1196          -mdata-model=MODEL
1197
1198     _C-SKY Options_
1199          -march=ARCH  -mcpu=CPU
1200          -mbig-endian  -EB  -mlittle-endian  -EL
1201          -mhard-float  -msoft-float  -mfpu=FPU  -mdouble-float  -mfdivdu
1202          -mfloat-abi=NAME
1203          -melrw  -mistack  -mmp  -mcp  -mcache  -msecurity  -mtrust
1204          -mdsp  -medsp  -mvdsp
1205          -mdiv  -msmart  -mhigh-registers  -manchor
1206          -mpushpop  -mmultiple-stld  -mconstpool  -mstack-size  -mccrt
1207          -mbranch-cost=N  -mcse-cc  -msched-prolog -msim
1208
1209     _Darwin Options_
1210          -all_load  -allowable_client  -arch  -arch_errors_fatal
1211          -arch_only  -bind_at_load  -bundle  -bundle_loader
1212          -client_name  -compatibility_version  -current_version
1213          -dead_strip
1214          -dependency-file  -dylib_file  -dylinker_install_name
1215          -dynamic  -dynamiclib  -exported_symbols_list
1216          -filelist  -flat_namespace  -force_cpusubtype_ALL
1217          -force_flat_namespace  -headerpad_max_install_names
1218          -iframework
1219          -image_base  -init  -install_name  -keep_private_externs
1220          -multi_module  -multiply_defined  -multiply_defined_unused
1221          -noall_load   -no_dead_strip_inits_and_terms
1222          -nofixprebinding  -nomultidefs  -noprebind  -noseglinkedit
1223          -pagezero_size  -prebind  -prebind_all_twolevel_modules
1224          -private_bundle  -read_only_relocs  -sectalign
1225          -sectobjectsymbols  -whyload  -seg1addr
1226          -sectcreate  -sectobjectsymbols  -sectorder
1227          -segaddr  -segs_read_only_addr  -segs_read_write_addr
1228          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
1229          -segprot  -segs_read_only_addr  -segs_read_write_addr
1230          -single_module  -static  -sub_library  -sub_umbrella
1231          -twolevel_namespace  -umbrella  -undefined
1232          -unexported_symbols_list  -weak_reference_mismatches
1233          -whatsloaded  -F  -gused  -gfull  -mmacosx-version-min=VERSION
1234          -mkernel  -mone-byte-bool
1235
1236     _DEC Alpha Options_
1237          -mno-fp-regs  -msoft-float
1238          -mieee  -mieee-with-inexact  -mieee-conformant
1239          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
1240          -mtrap-precision=MODE  -mbuild-constants
1241          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
1242          -mbwx  -mmax  -mfix  -mcix
1243          -mfloat-vax  -mfloat-ieee
1244          -mexplicit-relocs  -msmall-data  -mlarge-data
1245          -msmall-text  -mlarge-text
1246          -mmemory-latency=TIME
1247
1248     _eBPF Options_
1249          -mbig-endian -mlittle-endian -mkernel=VERSION
1250          -mframe-limit=BYTES -mxbpf -mco-re -mno-co-re
1251          -mjmpext -mjmp32 -malu32 -mcpu=VERSION
1252
1253     _FR30 Options_
1254          -msmall-model  -mno-lsim
1255
1256     _FT32 Options_
1257          -msim  -mlra  -mnodiv  -mft32b  -mcompress  -mnopm
1258
1259     _FRV Options_
1260          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
1261          -mhard-float  -msoft-float
1262          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
1263          -mdouble  -mno-double
1264          -mmedia  -mno-media  -mmuladd  -mno-muladd
1265          -mfdpic  -minline-plt  -mgprel-ro  -multilib-library-pic
1266          -mlinked-fp  -mlong-calls  -malign-labels
1267          -mlibrary-pic  -macc-4  -macc-8
1268          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
1269          -moptimize-membar  -mno-optimize-membar
1270          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
1271          -mvliw-branch  -mno-vliw-branch
1272          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
1273          -mno-nested-cond-exec  -mtomcat-stats
1274          -mTLS  -mtls
1275          -mcpu=CPU
1276
1277     _GNU/Linux Options_
1278          -mglibc  -muclibc  -mmusl  -mbionic  -mandroid
1279          -tno-android-cc  -tno-android-ld
1280
1281     _H8/300 Options_
1282          -mrelax  -mh  -ms  -mn  -mexr  -mno-exr  -mint32  -malign-300
1283
1284     _HPPA Options_
1285          -march=ARCHITECTURE-TYPE
1286          -mcaller-copies  -mdisable-fpregs  -mdisable-indexing
1287          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
1288          -mfixed-range=REGISTER-RANGE
1289          -mjump-in-delay  -mlinker-opt  -mlong-calls
1290          -mlong-load-store  -mno-disable-fpregs
1291          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
1292          -mno-jump-in-delay  -mno-long-load-store
1293          -mno-portable-runtime  -mno-soft-float
1294          -mno-space-regs  -msoft-float  -mpa-risc-1-0
1295          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
1296          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
1297          -munix=UNIX-STD  -nolibdld  -static  -threads
1298
1299     _IA-64 Options_
1300          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
1301          -mvolatile-asm-stop  -mregister-names  -msdata  -mno-sdata
1302          -mconstant-gp  -mauto-pic  -mfused-madd
1303          -minline-float-divide-min-latency
1304          -minline-float-divide-max-throughput
1305          -mno-inline-float-divide
1306          -minline-int-divide-min-latency
1307          -minline-int-divide-max-throughput
1308          -mno-inline-int-divide
1309          -minline-sqrt-min-latency  -minline-sqrt-max-throughput
1310          -mno-inline-sqrt
1311          -mdwarf2-asm  -mearly-stop-bits
1312          -mfixed-range=REGISTER-RANGE  -mtls-size=TLS-SIZE
1313          -mtune=CPU-TYPE  -milp32  -mlp64
1314          -msched-br-data-spec  -msched-ar-data-spec  -msched-control-spec
1315          -msched-br-in-data-spec  -msched-ar-in-data-spec  -msched-in-control-spec
1316          -msched-spec-ldc  -msched-spec-control-ldc
1317          -msched-prefer-non-data-spec-insns  -msched-prefer-non-control-spec-insns
1318          -msched-stop-bits-after-every-cycle  -msched-count-spec-in-critical-path
1319          -msel-sched-dont-check-control-spec  -msched-fp-mem-deps-zero-cost
1320          -msched-max-memory-insns-hard-limit  -msched-max-memory-insns=MAX-INSNS
1321
1322     _LM32 Options_
1323          -mbarrel-shift-enabled  -mdivide-enabled  -mmultiply-enabled
1324          -msign-extend-enabled  -muser-enabled
1325
1326     _LoongArch Options_
1327          -march=CPU-TYPE  -mtune=CPU-TYPE -mabi=BASE-ABI-TYPE
1328          -mfpu=FPU-TYPE -msoft-float -msingle-float -mdouble-float
1329          -mbranch-cost=N  -mcheck-zero-division -mno-check-zero-division
1330          -mcond-move-int  -mno-cond-move-int
1331          -mcond-move-float  -mno-cond-move-float
1332          -memcpy  -mno-memcpy -mstrict-align -mno-strict-align
1333          -mmax-inline-memcpy-size=N
1334          -mcmodel=CODE-MODEL
1335
1336     _M32R/D Options_
1337          -m32r2  -m32rx  -m32r
1338          -mdebug
1339          -malign-loops  -mno-align-loops
1340          -missue-rate=NUMBER
1341          -mbranch-cost=NUMBER
1342          -mmodel=CODE-SIZE-MODEL-TYPE
1343          -msdata=SDATA-TYPE
1344          -mno-flush-func  -mflush-func=NAME
1345          -mno-flush-trap  -mflush-trap=NUMBER
1346          -G NUM
1347
1348     _M32C Options_
1349          -mcpu=CPU  -msim  -memregs=NUMBER
1350
1351     _M680x0 Options_
1352          -march=ARCH  -mcpu=CPU  -mtune=TUNE
1353          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
1354          -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
1355          -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
1356          -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
1357          -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
1358          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
1359          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
1360          -mxgot  -mno-xgot  -mlong-jump-table-offsets
1361
1362     _MCore Options_
1363          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
1364          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
1365          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
1366          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
1367          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
1368
1369     _MeP Options_
1370          -mabsdiff  -mall-opts  -maverage  -mbased=N  -mbitops
1371          -mc=N  -mclip  -mconfig=NAME  -mcop  -mcop32  -mcop64  -mivc2
1372          -mdc  -mdiv  -meb  -mel  -mio-volatile  -ml  -mleadz  -mm  -mminmax
1373          -mmult  -mno-opts  -mrepeat  -ms  -msatur  -msdram  -msim  -msimnovec  -mtf
1374          -mtiny=N
1375
1376     _MicroBlaze Options_
1377          -msoft-float  -mhard-float  -msmall-divides  -mcpu=CPU
1378          -mmemcpy  -mxl-soft-mul  -mxl-soft-div  -mxl-barrel-shift
1379          -mxl-pattern-compare  -mxl-stack-check  -mxl-gp-opt  -mno-clearbss
1380          -mxl-multiply-high  -mxl-float-convert  -mxl-float-sqrt
1381          -mbig-endian  -mlittle-endian  -mxl-reorder  -mxl-mode-APP-MODEL
1382          -mpic-data-is-text-relative
1383
1384     _MIPS Options_
1385          -EL  -EB  -march=ARCH  -mtune=ARCH
1386          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5
1387          -mips32r6  -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6
1388          -mips16  -mno-mips16  -mflip-mips16
1389          -minterlink-compressed  -mno-interlink-compressed
1390          -minterlink-mips16  -mno-interlink-mips16
1391          -mabi=ABI  -mabicalls  -mno-abicalls
1392          -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
1393          -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64  -mhard-float  -msoft-float
1394          -mno-float  -msingle-float  -mdouble-float
1395          -modd-spreg  -mno-odd-spreg
1396          -mabs=MODE  -mnan=ENCODING
1397          -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
1398          -mmcu  -mmno-mcu
1399          -meva  -mno-eva
1400          -mvirt  -mno-virt
1401          -mxpa  -mno-xpa
1402          -mcrc  -mno-crc
1403          -mginv  -mno-ginv
1404          -mmicromips  -mno-micromips
1405          -mmsa  -mno-msa
1406          -mloongson-mmi  -mno-loongson-mmi
1407          -mloongson-ext  -mno-loongson-ext
1408          -mloongson-ext2  -mno-loongson-ext2
1409          -mfpu=FPU-TYPE
1410          -msmartmips  -mno-smartmips
1411          -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
1412          -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
1413          -mlong64  -mlong32  -msym32  -mno-sym32
1414          -GNUM  -mlocal-sdata  -mno-local-sdata
1415          -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
1416          -membedded-data  -mno-embedded-data
1417          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
1418          -mcode-readable=SETTING
1419          -msplit-addresses  -mno-split-addresses
1420          -mexplicit-relocs  -mno-explicit-relocs
1421          -mcheck-zero-division  -mno-check-zero-division
1422          -mdivide-traps  -mdivide-breaks
1423          -mload-store-pairs  -mno-load-store-pairs
1424          -munaligned-access  -mno-unaligned-access
1425          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
1426          -mmad  -mno-mad  -mimadd  -mno-imadd  -mfused-madd  -mno-fused-madd  -nocpp
1427          -mfix-24k  -mno-fix-24k
1428          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
1429          -mfix-r5900  -mno-fix-r5900
1430          -mfix-r10000  -mno-fix-r10000  -mfix-rm7000  -mno-fix-rm7000
1431          -mfix-vr4120  -mno-fix-vr4120
1432          -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
1433          -mflush-func=FUNC  -mno-flush-func
1434          -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
1435          -mcompact-branches=POLICY
1436          -mfp-exceptions  -mno-fp-exceptions
1437          -mvr4130-align  -mno-vr4130-align  -msynci  -mno-synci
1438          -mlxc1-sxc1  -mno-lxc1-sxc1  -mmadd4  -mno-madd4
1439          -mrelax-pic-calls  -mno-relax-pic-calls  -mmcount-ra-address
1440          -mframe-header-opt  -mno-frame-header-opt
1441
1442     _MMIX Options_
1443          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
1444          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
1445          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
1446          -mno-base-addresses  -msingle-exit  -mno-single-exit
1447
1448     _MN10300 Options_
1449          -mmult-bug  -mno-mult-bug
1450          -mno-am33  -mam33  -mam33-2  -mam34
1451          -mtune=CPU-TYPE
1452          -mreturn-pointer-on-d0
1453          -mno-crt0  -mrelax  -mliw  -msetlb
1454
1455     _Moxie Options_
1456          -meb  -mel  -mmul.x  -mno-crt0
1457
1458     _MSP430 Options_
1459          -msim  -masm-hex  -mmcu=  -mcpu=  -mlarge  -msmall  -mrelax
1460          -mwarn-mcu
1461          -mcode-region=  -mdata-region=
1462          -msilicon-errata=  -msilicon-errata-warn=
1463          -mhwmult=  -minrt  -mtiny-printf  -mmax-inline-shift=
1464
1465     _NDS32 Options_
1466          -mbig-endian  -mlittle-endian
1467          -mreduced-regs  -mfull-regs
1468          -mcmov  -mno-cmov
1469          -mext-perf  -mno-ext-perf
1470          -mext-perf2  -mno-ext-perf2
1471          -mext-string  -mno-ext-string
1472          -mv3push  -mno-v3push
1473          -m16bit  -mno-16bit
1474          -misr-vector-size=NUM
1475          -mcache-block-size=NUM
1476          -march=ARCH
1477          -mcmodel=CODE-MODEL
1478          -mctor-dtor  -mrelax
1479
1480     _Nios II Options_
1481          -G NUM  -mgpopt=OPTION  -mgpopt  -mno-gpopt
1482          -mgprel-sec=REGEXP  -mr0rel-sec=REGEXP
1483          -mel  -meb
1484          -mno-bypass-cache  -mbypass-cache
1485          -mno-cache-volatile  -mcache-volatile
1486          -mno-fast-sw-div  -mfast-sw-div
1487          -mhw-mul  -mno-hw-mul  -mhw-mulx  -mno-hw-mulx  -mno-hw-div  -mhw-div
1488          -mcustom-INSN=N  -mno-custom-INSN
1489          -mcustom-fpu-cfg=NAME
1490          -mhal  -msmallc  -msys-crt0=NAME  -msys-lib=NAME
1491          -march=ARCH  -mbmx  -mno-bmx  -mcdx  -mno-cdx
1492
1493     _Nvidia PTX Options_
1494          -m64  -mmainkernel  -moptimize
1495
1496     _OpenRISC Options_
1497          -mboard=NAME  -mnewlib  -mhard-mul  -mhard-div
1498          -msoft-mul  -msoft-div
1499          -msoft-float  -mhard-float  -mdouble-float -munordered-float
1500          -mcmov  -mror  -mrori  -msext  -msfimm  -mshftimm
1501          -mcmodel=CODE-MODEL
1502
1503     _PDP-11 Options_
1504          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
1505          -mint32  -mno-int16  -mint16  -mno-int32
1506          -msplit  -munix-asm  -mdec-asm  -mgnu-asm  -mlra
1507
1508     _picoChip Options_
1509          -mae=AE_TYPE  -mvliw-lookahead=N
1510          -msymbol-as-address  -mno-inefficient-warnings
1511
1512     _PowerPC Options_ See RS/6000 and PowerPC Options.
1513
1514     _PRU Options_
1515          -mmcu=MCU  -minrt  -mno-relax  -mloop
1516          -mabi=VARIANT
1517
1518     _RISC-V Options_
1519          -mbranch-cost=N-INSTRUCTION
1520          -mplt  -mno-plt
1521          -mabi=ABI-STRING
1522          -mfdiv  -mno-fdiv
1523          -mdiv  -mno-div
1524          -misa-spec=ISA-SPEC-STRING
1525          -march=ISA-STRING
1526          -mtune=PROCESSOR-STRING
1527          -mpreferred-stack-boundary=NUM
1528          -msmall-data-limit=N-BYTES
1529          -msave-restore  -mno-save-restore
1530          -mshorten-memrefs  -mno-shorten-memrefs
1531          -mstrict-align  -mno-strict-align
1532          -mcmodel=medlow  -mcmodel=medany
1533          -mexplicit-relocs  -mno-explicit-relocs
1534          -mrelax  -mno-relax
1535          -mriscv-attribute  -mmo-riscv-attribute
1536          -malign-data=TYPE
1537          -mbig-endian  -mlittle-endian
1538          -mstack-protector-guard=GUARD -mstack-protector-guard-reg=REG
1539          -mstack-protector-guard-offset=OFFSET
1540
1541     _RL78 Options_
1542          -msim  -mmul=none  -mmul=g13  -mmul=g14  -mallregs
1543          -mcpu=g10  -mcpu=g13  -mcpu=g14  -mg10  -mg13  -mg14
1544          -m64bit-doubles  -m32bit-doubles  -msave-mduc-in-interrupts
1545
1546     _RS/6000 and PowerPC Options_
1547          -mcpu=CPU-TYPE
1548          -mtune=CPU-TYPE
1549          -mcmodel=CODE-MODEL
1550          -mpowerpc64
1551          -maltivec  -mno-altivec
1552          -mpowerpc-gpopt  -mno-powerpc-gpopt
1553          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
1554          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mpopcntd  -mno-popcntd
1555          -mfprnd  -mno-fprnd
1556          -mcmpb  -mno-cmpb  -mhard-dfp  -mno-hard-dfp
1557          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
1558          -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
1559          -malign-power  -malign-natural
1560          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
1561          -mupdate  -mno-update
1562          -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
1563          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
1564          -mstrict-align  -mno-strict-align  -mrelocatable
1565          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
1566          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
1567          -mdynamic-no-pic  -mswdiv  -msingle-pic-base
1568          -mprioritize-restricted-insns=PRIORITY
1569          -msched-costly-dep=DEPENDENCE_TYPE
1570          -minsert-sched-nops=SCHEME
1571          -mcall-aixdesc  -mcall-eabi  -mcall-freebsd
1572          -mcall-linux  -mcall-netbsd  -mcall-openbsd
1573          -mcall-sysv  -mcall-sysv-eabi  -mcall-sysv-noeabi
1574          -mtraceback=TRACEBACK_TYPE
1575          -maix-struct-return  -msvr4-struct-return
1576          -mabi=ABI-TYPE  -msecure-plt  -mbss-plt
1577          -mlongcall  -mno-longcall  -mpltseq  -mno-pltseq
1578          -mblock-move-inline-limit=NUM
1579          -mblock-compare-inline-limit=NUM
1580          -mblock-compare-inline-loop-limit=NUM
1581          -mno-block-ops-unaligned-vsx
1582          -mstring-compare-inline-limit=NUM
1583          -misel  -mno-isel
1584          -mvrsave  -mno-vrsave
1585          -mmulhw  -mno-mulhw
1586          -mdlmzb  -mno-dlmzb
1587          -mprototype  -mno-prototype
1588          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
1589          -msdata=OPT  -mreadonly-in-sdata  -mvxworks  -G NUM
1590          -mrecip  -mrecip=OPT  -mno-recip  -mrecip-precision
1591          -mno-recip-precision
1592          -mveclibabi=TYPE  -mfriz  -mno-friz
1593          -mpointers-to-nested-functions  -mno-pointers-to-nested-functions
1594          -msave-toc-indirect  -mno-save-toc-indirect
1595          -mpower8-fusion  -mno-mpower8-fusion  -mpower8-vector  -mno-power8-vector
1596          -mcrypto  -mno-crypto  -mhtm  -mno-htm
1597          -mquad-memory  -mno-quad-memory
1598          -mquad-memory-atomic  -mno-quad-memory-atomic
1599          -mcompat-align-parm  -mno-compat-align-parm
1600          -mfloat128  -mno-float128  -mfloat128-hardware  -mno-float128-hardware
1601          -mgnu-attribute  -mno-gnu-attribute
1602          -mstack-protector-guard=GUARD -mstack-protector-guard-reg=REG
1603          -mstack-protector-guard-offset=OFFSET -mprefixed -mno-prefixed
1604          -mpcrel -mno-pcrel -mmma -mno-mmma -mrop-protect -mno-rop-protect
1605          -mprivileged -mno-privileged
1606
1607     _RX Options_
1608          -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
1609          -mcpu=
1610          -mbig-endian-data  -mlittle-endian-data
1611          -msmall-data
1612          -msim  -mno-sim
1613          -mas100-syntax  -mno-as100-syntax
1614          -mrelax
1615          -mmax-constant-size=
1616          -mint-register=
1617          -mpid
1618          -mallow-string-insns  -mno-allow-string-insns
1619          -mjsr
1620          -mno-warn-multiple-fast-interrupts
1621          -msave-acc-in-interrupts
1622
1623     _S/390 and zSeries Options_
1624          -mtune=CPU-TYPE  -march=CPU-TYPE
1625          -mhard-float  -msoft-float  -mhard-dfp  -mno-hard-dfp
1626          -mlong-double-64  -mlong-double-128
1627          -mbackchain  -mno-backchain  -mpacked-stack  -mno-packed-stack
1628          -msmall-exec  -mno-small-exec  -mmvcle  -mno-mvcle
1629          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
1630          -mhtm  -mvx  -mzvector
1631          -mtpf-trace  -mno-tpf-trace  -mtpf-trace-skip  -mno-tpf-trace-skip
1632          -mfused-madd  -mno-fused-madd
1633          -mwarn-framesize  -mwarn-dynamicstack  -mstack-size  -mstack-guard
1634          -mhotpatch=HALFWORDS,HALFWORDS
1635
1636     _Score Options_
1637          -meb  -mel
1638          -mnhwloop
1639          -muls
1640          -mmac
1641          -mscore5  -mscore5u  -mscore7  -mscore7d
1642
1643     _SH Options_
1644          -m1  -m2  -m2e
1645          -m2a-nofpu  -m2a-single-only  -m2a-single  -m2a
1646          -m3  -m3e
1647          -m4-nofpu  -m4-single-only  -m4-single  -m4
1648          -m4a-nofpu  -m4a-single-only  -m4a-single  -m4a  -m4al
1649          -mb  -ml  -mdalign  -mrelax
1650          -mbigtable  -mfmovd  -mrenesas  -mno-renesas  -mnomacsave
1651          -mieee  -mno-ieee  -mbitops  -misize  -minline-ic_invalidate  -mpadstruct
1652          -mprefergot  -musermode  -multcost=NUMBER  -mdiv=STRATEGY
1653          -mdivsi3_libfunc=NAME  -mfixed-range=REGISTER-RANGE
1654          -maccumulate-outgoing-args
1655          -matomic-model=ATOMIC-MODEL
1656          -mbranch-cost=NUM  -mzdcbranch  -mno-zdcbranch
1657          -mcbranch-force-delay-slot
1658          -mfused-madd  -mno-fused-madd  -mfsca  -mno-fsca  -mfsrra  -mno-fsrra
1659          -mpretend-cmove  -mtas
1660
1661     _Solaris 2 Options_
1662          -mclear-hwcap  -mno-clear-hwcap  -mimpure-text  -mno-impure-text
1663          -pthreads
1664
1665     _SPARC Options_
1666          -mcpu=CPU-TYPE
1667          -mtune=CPU-TYPE
1668          -mcmodel=CODE-MODEL
1669          -mmemory-model=MEM-MODEL
1670          -m32  -m64  -mapp-regs  -mno-app-regs
1671          -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat
1672          -mfpu  -mno-fpu  -mhard-float  -msoft-float
1673          -mhard-quad-float  -msoft-quad-float
1674          -mstack-bias  -mno-stack-bias
1675          -mstd-struct-return  -mno-std-struct-return
1676          -munaligned-doubles  -mno-unaligned-doubles
1677          -muser-mode  -mno-user-mode
1678          -mv8plus  -mno-v8plus  -mvis  -mno-vis
1679          -mvis2  -mno-vis2  -mvis3  -mno-vis3
1680          -mvis4  -mno-vis4  -mvis4b  -mno-vis4b
1681          -mcbcond  -mno-cbcond  -mfmaf  -mno-fmaf  -mfsmuld  -mno-fsmuld
1682          -mpopc  -mno-popc  -msubxc  -mno-subxc
1683          -mfix-at697f  -mfix-ut699  -mfix-ut700  -mfix-gr712rc
1684          -mlra  -mno-lra
1685
1686     _System V Options_
1687          -Qy  -Qn  -YP,PATHS  -Ym,DIR
1688
1689     _TILE-Gx Options_
1690          -mcpu=CPU  -m32  -m64  -mbig-endian  -mlittle-endian
1691          -mcmodel=CODE-MODEL
1692
1693     _TILEPro Options_
1694          -mcpu=CPU  -m32
1695
1696     _V850 Options_
1697          -mlong-calls  -mno-long-calls  -mep  -mno-ep
1698          -mprolog-function  -mno-prolog-function  -mspace
1699          -mtda=N  -msda=N  -mzda=N
1700          -mapp-regs  -mno-app-regs
1701          -mdisable-callt  -mno-disable-callt
1702          -mv850e2v3  -mv850e2  -mv850e1  -mv850es
1703          -mv850e  -mv850  -mv850e3v5
1704          -mloop
1705          -mrelax
1706          -mlong-jumps
1707          -msoft-float
1708          -mhard-float
1709          -mgcc-abi
1710          -mrh850-abi
1711          -mbig-switch
1712
1713     _VAX Options_
1714          -mg  -mgnu  -munix  -mlra
1715
1716     _Visium Options_
1717          -mdebug  -msim  -mfpu  -mno-fpu  -mhard-float  -msoft-float
1718          -mcpu=CPU-TYPE  -mtune=CPU-TYPE  -msv-mode  -muser-mode
1719
1720     _VMS Options_
1721          -mvms-return-codes  -mdebug-main=PREFIX  -mmalloc64
1722          -mpointer-size=SIZE
1723
1724     _VxWorks Options_
1725          -mrtp  -non-static  -Bstatic  -Bdynamic
1726          -Xbind-lazy  -Xbind-now
1727
1728     _x86 Options_
1729          -mtune=CPU-TYPE  -march=CPU-TYPE
1730          -mtune-ctrl=FEATURE-LIST  -mdump-tune-features  -mno-default
1731          -mfpmath=UNIT
1732          -masm=DIALECT  -mno-fancy-math-387
1733          -mno-fp-ret-in-387  -m80387  -mhard-float  -msoft-float
1734          -mno-wide-multiply  -mrtd  -malign-double
1735          -mpreferred-stack-boundary=NUM
1736          -mincoming-stack-boundary=NUM
1737          -mcld  -mcx16  -msahf  -mmovbe  -mcrc32 -mmwait
1738          -mrecip  -mrecip=OPT
1739          -mvzeroupper  -mprefer-avx128  -mprefer-vector-width=OPT
1740          -mmove-max=BITS -mstore-max=BITS
1741          -mmmx  -msse  -msse2  -msse3  -mssse3  -msse4.1  -msse4.2  -msse4  -mavx
1742          -mavx2  -mavx512f  -mavx512pf  -mavx512er  -mavx512cd  -mavx512vl
1743          -mavx512bw  -mavx512dq  -mavx512ifma  -mavx512vbmi  -msha  -maes
1744          -mpclmul  -mfsgsbase  -mrdrnd  -mf16c  -mfma  -mpconfig  -mwbnoinvd
1745          -mptwrite  -mprefetchwt1  -mclflushopt  -mclwb  -mxsavec  -mxsaves
1746          -msse4a  -m3dnow  -m3dnowa  -mpopcnt  -mabm  -mbmi  -mtbm  -mfma4  -mxop
1747          -madx  -mlzcnt  -mbmi2  -mfxsr  -mxsave  -mxsaveopt  -mrtm  -mhle  -mlwp
1748          -mmwaitx  -mclzero  -mpku  -mthreads  -mgfni  -mvaes  -mwaitpkg
1749          -mshstk -mmanual-endbr -mforce-indirect-call  -mavx512vbmi2 -mavx512bf16 -menqcmd
1750          -mvpclmulqdq  -mavx512bitalg  -mmovdiri  -mmovdir64b  -mavx512vpopcntdq
1751          -mavx5124fmaps  -mavx512vnni  -mavx5124vnniw  -mprfchw  -mrdpid
1752          -mrdseed  -msgx -mavx512vp2intersect -mserialize -mtsxldtrk
1753          -mamx-tile  -mamx-int8  -mamx-bf16 -muintr -mhreset -mavxvnni
1754          -mavx512fp16
1755          -mcldemote  -mms-bitfields  -mno-align-stringops  -minline-all-stringops
1756          -minline-stringops-dynamically  -mstringop-strategy=ALG
1757          -mkl -mwidekl
1758          -mmemcpy-strategy=STRATEGY  -mmemset-strategy=STRATEGY
1759          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
1760          -m96bit-long-double  -mlong-double-64  -mlong-double-80  -mlong-double-128
1761          -mregparm=NUM  -msseregparm
1762          -mveclibabi=TYPE  -mvect8-ret-in-mem
1763          -mpc32  -mpc64  -mpc80  -mstackrealign
1764          -momit-leaf-frame-pointer  -mno-red-zone  -mno-tls-direct-seg-refs
1765          -mcmodel=CODE-MODEL  -mabi=NAME  -maddress-mode=MODE
1766          -m32  -m64  -mx32  -m16  -miamcu  -mlarge-data-threshold=NUM
1767          -msse2avx  -mfentry  -mrecord-mcount  -mnop-mcount  -m8bit-idiv
1768          -minstrument-return=TYPE -mfentry-name=NAME -mfentry-section=NAME
1769          -mavx256-split-unaligned-load  -mavx256-split-unaligned-store
1770          -malign-data=TYPE  -mstack-protector-guard=GUARD
1771          -mstack-protector-guard-reg=REG
1772          -mstack-protector-guard-offset=OFFSET
1773          -mstack-protector-guard-symbol=SYMBOL
1774          -mgeneral-regs-only  -mcall-ms2sysv-xlogues -mrelax-cmpxchg-loop
1775          -mindirect-branch=CHOICE  -mfunction-return=CHOICE
1776          -mindirect-branch-register -mharden-sls=CHOICE
1777          -mindirect-branch-cs-prefix -mneeded -mno-direct-extern-access
1778
1779     _x86 Windows Options_
1780          -mconsole  -mcygwin  -mno-cygwin  -mdll
1781          -mnop-fun-dllimport  -mthread
1782          -municode  -mwin32  -mwindows  -fno-set-stack-executable
1783
1784     _Xstormy16 Options_
1785          -msim
1786
1787     _Xtensa Options_
1788          -mconst16  -mno-const16
1789          -mfused-madd  -mno-fused-madd
1790          -mforce-no-pic
1791          -mserialize-volatile  -mno-serialize-volatile
1792          -mtext-section-literals  -mno-text-section-literals
1793          -mauto-litpools  -mno-auto-litpools
1794          -mtarget-align  -mno-target-align
1795          -mlongcalls  -mno-longcalls
1796          -mabi=ABI-TYPE
1797
1798     _zSeries Options_ See S/390 and zSeries Options.
1799
1800
1801File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1802
18033.2 Options Controlling the Kind of Output
1804==========================================
1805
1806Compilation can involve up to four stages: preprocessing, compilation
1807proper, assembly and linking, always in that order.  GCC is capable of
1808preprocessing and compiling several files either into several assembler
1809input files, or into one assembler input file; then each assembler input
1810file produces an object file, and linking combines all the object files
1811(those newly compiled, and those specified as input) into an executable
1812file.
1813
1814 For any given input file, the file name suffix determines what kind of
1815compilation is done:
1816
1817'FILE.c'
1818     C source code that must be preprocessed.
1819
1820'FILE.i'
1821     C source code that should not be preprocessed.
1822
1823'FILE.ii'
1824     C++ source code that should not be preprocessed.
1825
1826'FILE.m'
1827     Objective-C source code.  Note that you must link with the
1828     'libobjc' library to make an Objective-C program work.
1829
1830'FILE.mi'
1831     Objective-C source code that should not be preprocessed.
1832
1833'FILE.mm'
1834'FILE.M'
1835     Objective-C++ source code.  Note that you must link with the
1836     'libobjc' library to make an Objective-C++ program work.  Note that
1837     '.M' refers to a literal capital M.
1838
1839'FILE.mii'
1840     Objective-C++ source code that should not be preprocessed.
1841
1842'FILE.h'
1843     C, C++, Objective-C or Objective-C++ header file to be turned into
1844     a precompiled header (default), or C, C++ header file to be turned
1845     into an Ada spec (via the '-fdump-ada-spec' switch).
1846
1847'FILE.cc'
1848'FILE.cp'
1849'FILE.cxx'
1850'FILE.cpp'
1851'FILE.CPP'
1852'FILE.c++'
1853'FILE.C'
1854     C++ source code that must be preprocessed.  Note that in '.cxx',
1855     the last two letters must both be literally 'x'.  Likewise, '.C'
1856     refers to a literal capital C.
1857
1858'FILE.mm'
1859'FILE.M'
1860     Objective-C++ source code that must be preprocessed.
1861
1862'FILE.mii'
1863     Objective-C++ source code that should not be preprocessed.
1864
1865'FILE.hh'
1866'FILE.H'
1867'FILE.hp'
1868'FILE.hxx'
1869'FILE.hpp'
1870'FILE.HPP'
1871'FILE.h++'
1872'FILE.tcc'
1873     C++ header file to be turned into a precompiled header or Ada spec.
1874
1875'FILE.f'
1876'FILE.for'
1877'FILE.ftn'
1878     Fixed form Fortran source code that should not be preprocessed.
1879
1880'FILE.F'
1881'FILE.FOR'
1882'FILE.fpp'
1883'FILE.FPP'
1884'FILE.FTN'
1885     Fixed form Fortran source code that must be preprocessed (with the
1886     traditional preprocessor).
1887
1888'FILE.f90'
1889'FILE.f95'
1890'FILE.f03'
1891'FILE.f08'
1892     Free form Fortran source code that should not be preprocessed.
1893
1894'FILE.F90'
1895'FILE.F95'
1896'FILE.F03'
1897'FILE.F08'
1898     Free form Fortran source code that must be preprocessed (with the
1899     traditional preprocessor).
1900
1901'FILE.go'
1902     Go source code.
1903
1904'FILE.d'
1905     D source code.
1906
1907'FILE.di'
1908     D interface file.
1909
1910'FILE.dd'
1911     D documentation code (Ddoc).
1912
1913'FILE.ads'
1914     Ada source code file that contains a library unit declaration (a
1915     declaration of a package, subprogram, or generic, or a generic
1916     instantiation), or a library unit renaming declaration (a package,
1917     generic, or subprogram renaming declaration).  Such files are also
1918     called "specs".
1919
1920'FILE.adb'
1921     Ada source code file containing a library unit body (a subprogram
1922     or package body).  Such files are also called "bodies".
1923
1924'FILE.s'
1925     Assembler code.
1926
1927'FILE.S'
1928'FILE.sx'
1929     Assembler code that must be preprocessed.
1930
1931'OTHER'
1932     An object file to be fed straight into linking.  Any file name with
1933     no recognized suffix is treated this way.
1934
1935 You can specify the input language explicitly with the '-x' option:
1936
1937'-x LANGUAGE'
1938     Specify explicitly the LANGUAGE for the following input files
1939     (rather than letting the compiler choose a default based on the
1940     file name suffix).  This option applies to all following input
1941     files until the next '-x' option.  Possible values for LANGUAGE
1942     are:
1943          c  c-header  cpp-output
1944          c++  c++-header  c++-system-header c++-user-header c++-cpp-output
1945          objective-c  objective-c-header  objective-c-cpp-output
1946          objective-c++ objective-c++-header objective-c++-cpp-output
1947          assembler  assembler-with-cpp
1948          ada
1949          d
1950          f77  f77-cpp-input f95  f95-cpp-input
1951          go
1952
1953'-x none'
1954     Turn off any specification of a language, so that subsequent files
1955     are handled according to their file name suffixes (as they are if
1956     '-x' has not been used at all).
1957
1958 If you only want some of the stages of compilation, you can use '-x'
1959(or filename suffixes) to tell 'gcc' where to start, and one of the
1960options '-c', '-S', or '-E' to say where 'gcc' is to stop.  Note that
1961some combinations (for example, '-x cpp-output -E') instruct 'gcc' to do
1962nothing at all.
1963
1964'-c'
1965     Compile or assemble the source files, but do not link.  The linking
1966     stage simply is not done.  The ultimate output is in the form of an
1967     object file for each source file.
1968
1969     By default, the object file name for a source file is made by
1970     replacing the suffix '.c', '.i', '.s', etc., with '.o'.
1971
1972     Unrecognized input files, not requiring compilation or assembly,
1973     are ignored.
1974
1975'-S'
1976     Stop after the stage of compilation proper; do not assemble.  The
1977     output is in the form of an assembler code file for each
1978     non-assembler input file specified.
1979
1980     By default, the assembler file name for a source file is made by
1981     replacing the suffix '.c', '.i', etc., with '.s'.
1982
1983     Input files that don't require compilation are ignored.
1984
1985'-E'
1986     Stop after the preprocessing stage; do not run the compiler proper.
1987     The output is in the form of preprocessed source code, which is
1988     sent to the standard output.
1989
1990     Input files that don't require preprocessing are ignored.
1991
1992'-o FILE'
1993     Place the primary output in file FILE.  This applies to whatever
1994     sort of output is being produced, whether it be an executable file,
1995     an object file, an assembler file or preprocessed C code.
1996
1997     If '-o' is not specified, the default is to put an executable file
1998     in 'a.out', the object file for 'SOURCE.SUFFIX' in 'SOURCE.o', its
1999     assembler file in 'SOURCE.s', a precompiled header file in
2000     'SOURCE.SUFFIX.gch', and all preprocessed C source on standard
2001     output.
2002
2003     Though '-o' names only the primary output, it also affects the
2004     naming of auxiliary and dump outputs.  See the examples below.
2005     Unless overridden, both auxiliary outputs and dump outputs are
2006     placed in the same directory as the primary output.  In auxiliary
2007     outputs, the suffix of the input file is replaced with that of the
2008     auxiliary output file type; in dump outputs, the suffix of the dump
2009     file is appended to the input file suffix.  In compilation
2010     commands, the base name of both auxiliary and dump outputs is that
2011     of the primary output; in compile and link commands, the primary
2012     output name, minus the executable suffix, is combined with the
2013     input file name.  If both share the same base name, disregarding
2014     the suffix, the result of the combination is that base name,
2015     otherwise, they are concatenated, separated by a dash.
2016
2017          gcc -c foo.c ...
2018
2019     will use 'foo.o' as the primary output, and place aux outputs and
2020     dumps next to it, e.g., aux file 'foo.dwo' for '-gsplit-dwarf', and
2021     dump file 'foo.c.???r.final' for '-fdump-rtl-final'.
2022
2023     If a non-linker output file is explicitly specified, aux and dump
2024     files by default take the same base name:
2025
2026          gcc -c foo.c -o dir/foobar.o ...
2027
2028     will name aux outputs 'dir/foobar.*' and dump outputs
2029     'dir/foobar.c.*'.
2030
2031     A linker output will instead prefix aux and dump outputs:
2032
2033          gcc foo.c bar.c -o dir/foobar ...
2034
2035     will generally name aux outputs 'dir/foobar-foo.*' and
2036     'dir/foobar-bar.*', and dump outputs 'dir/foobar-foo.c.*' and
2037     'dir/foobar-bar.c.*'.
2038
2039     The one exception to the above is when the executable shares the
2040     base name with the single input:
2041
2042          gcc foo.c -o dir/foo ...
2043
2044     in which case aux outputs are named 'dir/foo.*' and dump outputs
2045     named 'dir/foo.c.*'.
2046
2047     The location and the names of auxiliary and dump outputs can be
2048     adjusted by the options '-dumpbase', '-dumpbase-ext', '-dumpdir',
2049     '-save-temps=cwd', and '-save-temps=obj'.
2050
2051'-dumpbase DUMPBASE'
2052     This option sets the base name for auxiliary and dump output files.
2053     It does not affect the name of the primary output file.
2054     Intermediate outputs, when preserved, are not regarded as primary
2055     outputs, but as auxiliary outputs:
2056
2057          gcc -save-temps -S foo.c
2058
2059     saves the (no longer) temporary preprocessed file in 'foo.i', and
2060     then compiles to the (implied) output file 'foo.s', whereas:
2061
2062          gcc -save-temps -dumpbase save-foo -c foo.c
2063
2064     preprocesses to in 'save-foo.i', compiles to 'save-foo.s' (now an
2065     intermediate, thus auxiliary output), and then assembles to the
2066     (implied) output file 'foo.o'.
2067
2068     Absent this option, dump and aux files take their names from the
2069     input file, or from the (non-linker) output file, if one is
2070     explicitly specified: dump output files (e.g.  those requested by
2071     '-fdump-*' options) with the input name suffix, and aux output
2072     files (those requested by other non-dump options, e.g.
2073     '-save-temps', '-gsplit-dwarf', '-fcallgraph-info') without it.
2074
2075     Similar suffix differentiation of dump and aux outputs can be
2076     attained for explicitly-given '-dumpbase basename.suf' by also
2077     specifying '-dumpbase-ext .suf'.
2078
2079     If DUMPBASE is explicitly specified with any directory component,
2080     any DUMPPFX specification (e.g.  '-dumpdir' or '-save-temps=*') is
2081     ignored, and instead of appending to it, DUMPBASE fully overrides
2082     it:
2083
2084          gcc foo.c -c -o dir/foo.o -dumpbase alt/foo \
2085            -dumpdir pfx- -save-temps=cwd ...
2086
2087     creates auxiliary and dump outputs named 'alt/foo.*', disregarding
2088     'dir/' in '-o', the './' prefix implied by '-save-temps=cwd', and
2089     'pfx-' in '-dumpdir'.
2090
2091     When '-dumpbase' is specified in a command that compiles multiple
2092     inputs, or that compiles and then links, it may be combined with
2093     DUMPPFX, as specified under '-dumpdir'.  Then, each input file is
2094     compiled using the combined DUMPPFX, and default values for
2095     DUMPBASE and AUXDROPSUF are computed for each input file:
2096
2097          gcc foo.c bar.c -c -dumpbase main ...
2098
2099     creates 'foo.o' and 'bar.o' as primary outputs, and avoids
2100     overwriting the auxiliary and dump outputs by using the DUMPBASE as
2101     a prefix, creating auxiliary and dump outputs named 'main-foo.*'
2102     and 'main-bar.*'.
2103
2104     An empty string specified as DUMPBASE avoids the influence of the
2105     output basename in the naming of auxiliary and dump outputs during
2106     compilation, computing default values :
2107
2108          gcc -c foo.c -o dir/foobar.o -dumpbase '' ...
2109
2110     will name aux outputs 'dir/foo.*' and dump outputs 'dir/foo.c.*'.
2111     Note how their basenames are taken from the input name, but the
2112     directory still defaults to that of the output.
2113
2114     The empty-string dumpbase does not prevent the use of the output
2115     basename for outputs during linking:
2116
2117          gcc foo.c bar.c -o dir/foobar -dumpbase '' -flto ...
2118
2119     The compilation of the source files will name auxiliary outputs
2120     'dir/foo.*' and 'dir/bar.*', and dump outputs 'dir/foo.c.*' and
2121     'dir/bar.c.*'.  LTO recompilation during linking will use
2122     'dir/foobar.' as the prefix for dumps and auxiliary files.
2123
2124'-dumpbase-ext AUXDROPSUF'
2125     When forming the name of an auxiliary (but not a dump) output file,
2126     drop trailing AUXDROPSUF from DUMPBASE before appending any
2127     suffixes.  If not specified, this option defaults to the suffix of
2128     a default DUMPBASE, i.e., the suffix of the input file when
2129     '-dumpbase' is not present in the command line, or DUMPBASE is
2130     combined with DUMPPFX.
2131
2132          gcc foo.c -c -o dir/foo.o -dumpbase x-foo.c -dumpbase-ext .c ...
2133
2134     creates 'dir/foo.o' as the main output, and generates auxiliary
2135     outputs in 'dir/x-foo.*', taking the location of the primary
2136     output, and dropping the '.c' suffix from the DUMPBASE.  Dump
2137     outputs retain the suffix: 'dir/x-foo.c.*'.
2138
2139     This option is disregarded if it does not match the suffix of a
2140     specified DUMPBASE, except as an alternative to the executable
2141     suffix when appending the linker output base name to DUMPPFX, as
2142     specified below:
2143
2144          gcc foo.c bar.c -o main.out -dumpbase-ext .out ...
2145
2146     creates 'main.out' as the primary output, and avoids overwriting
2147     the auxiliary and dump outputs by using the executable name minus
2148     AUXDROPSUF as a prefix, creating auxiliary outputs named
2149     'main-foo.*' and 'main-bar.*' and dump outputs named 'main-foo.c.*'
2150     and 'main-bar.c.*'.
2151
2152'-dumpdir DUMPPFX'
2153     When forming the name of an auxiliary or dump output file, use
2154     DUMPPFX as a prefix:
2155
2156          gcc -dumpdir pfx- -c foo.c ...
2157
2158     creates 'foo.o' as the primary output, and auxiliary outputs named
2159     'pfx-foo.*', combining the given DUMPPFX with the default DUMPBASE
2160     derived from the default primary output, derived in turn from the
2161     input name.  Dump outputs also take the input name suffix:
2162     'pfx-foo.c.*'.
2163
2164     If DUMPPFX is to be used as a directory name, it must end with a
2165     directory separator:
2166
2167          gcc -dumpdir dir/ -c foo.c -o obj/bar.o ...
2168
2169     creates 'obj/bar.o' as the primary output, and auxiliary outputs
2170     named 'dir/bar.*', combining the given DUMPPFX with the default
2171     DUMPBASE derived from the primary output name.  Dump outputs also
2172     take the input name suffix: 'dir/bar.c.*'.
2173
2174     It defaults to the location of the output file, unless the output
2175     file is a special file like '/dev/null'.  Options '-save-temps=cwd'
2176     and '-save-temps=obj' override this default, just like an explicit
2177     '-dumpdir' option.  In case multiple such options are given, the
2178     last one prevails:
2179
2180          gcc -dumpdir pfx- -c foo.c -save-temps=obj ...
2181
2182     outputs 'foo.o', with auxiliary outputs named 'foo.*' because
2183     '-save-temps=*' overrides the DUMPPFX given by the earlier
2184     '-dumpdir' option.  It does not matter that '=obj' is the default
2185     for '-save-temps', nor that the output directory is implicitly the
2186     current directory.  Dump outputs are named 'foo.c.*'.
2187
2188     When compiling from multiple input files, if '-dumpbase' is
2189     specified, DUMPBASE, minus a AUXDROPSUF suffix, and a dash are
2190     appended to (or override, if containing any directory components)
2191     an explicit or defaulted DUMPPFX, so that each of the multiple
2192     compilations gets differently-named aux and dump outputs.
2193
2194          gcc foo.c bar.c -c -dumpdir dir/pfx- -dumpbase main ...
2195
2196     outputs auxiliary dumps to 'dir/pfx-main-foo.*' and
2197     'dir/pfx-main-bar.*', appending DUMPBASE- to DUMPPFX.  Dump outputs
2198     retain the input file suffix: 'dir/pfx-main-foo.c.*' and
2199     'dir/pfx-main-bar.c.*', respectively.  Contrast with the
2200     single-input compilation:
2201
2202          gcc foo.c -c -dumpdir dir/pfx- -dumpbase main ...
2203
2204     that, applying '-dumpbase' to a single source, does not compute and
2205     append a separate DUMPBASE per input file.  Its auxiliary and dump
2206     outputs go in 'dir/pfx-main.*'.
2207
2208     When compiling and then linking from multiple input files, a
2209     defaulted or explicitly specified DUMPPFX also undergoes the
2210     DUMPBASE- transformation above (e.g.  the compilation of 'foo.c'
2211     and 'bar.c' above, but without '-c').  If neither '-dumpdir' nor
2212     '-dumpbase' are given, the linker output base name, minus
2213     AUXDROPSUF, if specified, or the executable suffix otherwise, plus
2214     a dash is appended to the default DUMPPFX instead.  Note, however,
2215     that unlike earlier cases of linking:
2216
2217          gcc foo.c bar.c -dumpdir dir/pfx- -o main ...
2218
2219     does not append the output name 'main' to DUMPPFX, because
2220     '-dumpdir' is explicitly specified.  The goal is that the
2221     explicitly-specified DUMPPFX may contain the specified output name
2222     as part of the prefix, if desired; only an explicitly-specified
2223     '-dumpbase' would be combined with it, in order to avoid simply
2224     discarding a meaningful option.
2225
2226     When compiling and then linking from a single input file, the
2227     linker output base name will only be appended to the default
2228     DUMPPFX as above if it does not share the base name with the single
2229     input file name.  This has been covered in single-input linking
2230     cases above, but not with an explicit '-dumpdir' that inhibits the
2231     combination, even if overridden by '-save-temps=*':
2232
2233          gcc foo.c -dumpdir alt/pfx- -o dir/main.exe -save-temps=cwd ...
2234
2235     Auxiliary outputs are named 'foo.*', and dump outputs 'foo.c.*', in
2236     the current working directory as ultimately requested by
2237     '-save-temps=cwd'.
2238
2239     Summing it all up for an intuitive though slightly imprecise data
2240     flow: the primary output name is broken into a directory part and a
2241     basename part; DUMPPFX is set to the former, unless overridden by
2242     '-dumpdir' or '-save-temps=*', and DUMPBASE is set to the latter,
2243     unless overriden by '-dumpbase'.  If there are multiple inputs or
2244     linking, this DUMPBASE may be combined with DUMPPFX and taken from
2245     each input file.  Auxiliary output names for each input are formed
2246     by combining DUMPPFX, DUMPBASE minus suffix, and the auxiliary
2247     output suffix; dump output names are only different in that the
2248     suffix from DUMPBASE is retained.
2249
2250     When it comes to auxiliary and dump outputs created during LTO
2251     recompilation, a combination of DUMPPFX and DUMPBASE, as given or
2252     as derived from the linker output name but not from inputs, even in
2253     cases in which this combination would not otherwise be used as
2254     such, is passed down with a trailing period replacing the
2255     compiler-added dash, if any, as a '-dumpdir' option to
2256     'lto-wrapper'; being involved in linking, this program does not
2257     normally get any '-dumpbase' and '-dumpbase-ext', and it ignores
2258     them.
2259
2260     When running sub-compilers, 'lto-wrapper' appends LTO stage names
2261     to the received DUMPPFX, ensures it contains a directory component
2262     so that it overrides any '-dumpdir', and passes that as '-dumpbase'
2263     to sub-compilers.
2264
2265'-v'
2266     Print (on standard error output) the commands executed to run the
2267     stages of compilation.  Also print the version number of the
2268     compiler driver program and of the preprocessor and the compiler
2269     proper.
2270
2271'-###'
2272     Like '-v' except the commands are not executed and arguments are
2273     quoted unless they contain only alphanumeric characters or './-_'.
2274     This is useful for shell scripts to capture the driver-generated
2275     command lines.
2276
2277'--help'
2278     Print (on the standard output) a description of the command-line
2279     options understood by 'gcc'.  If the '-v' option is also specified
2280     then '--help' is also passed on to the various processes invoked by
2281     'gcc', so that they can display the command-line options they
2282     accept.  If the '-Wextra' option has also been specified (prior to
2283     the '--help' option), then command-line options that have no
2284     documentation associated with them are also displayed.
2285
2286'--target-help'
2287     Print (on the standard output) a description of target-specific
2288     command-line options for each tool.  For some targets extra
2289     target-specific information may also be printed.
2290
2291'--help={CLASS|[^]QUALIFIER}[,...]'
2292     Print (on the standard output) a description of the command-line
2293     options understood by the compiler that fit into all specified
2294     classes and qualifiers.  These are the supported classes:
2295
2296     'optimizers'
2297          Display all of the optimization options supported by the
2298          compiler.
2299
2300     'warnings'
2301          Display all of the options controlling warning messages
2302          produced by the compiler.
2303
2304     'target'
2305          Display target-specific options.  Unlike the '--target-help'
2306          option however, target-specific options of the linker and
2307          assembler are not displayed.  This is because those tools do
2308          not currently support the extended '--help=' syntax.
2309
2310     'params'
2311          Display the values recognized by the '--param' option.
2312
2313     LANGUAGE
2314          Display the options supported for LANGUAGE, where LANGUAGE is
2315          the name of one of the languages supported in this version of
2316          GCC.  If an option is supported by all languages, one needs to
2317          select 'common' class.
2318
2319     'common'
2320          Display the options that are common to all languages.
2321
2322     These are the supported qualifiers:
2323
2324     'undocumented'
2325          Display only those options that are undocumented.
2326
2327     'joined'
2328          Display options taking an argument that appears after an equal
2329          sign in the same continuous piece of text, such as:
2330          '--help=target'.
2331
2332     'separate'
2333          Display options taking an argument that appears as a separate
2334          word following the original option, such as: '-o output-file'.
2335
2336     Thus for example to display all the undocumented target-specific
2337     switches supported by the compiler, use:
2338
2339          --help=target,undocumented
2340
2341     The sense of a qualifier can be inverted by prefixing it with the
2342     '^' character, so for example to display all binary warning options
2343     (i.e., ones that are either on or off and that do not take an
2344     argument) that have a description, use:
2345
2346          --help=warnings,^joined,^undocumented
2347
2348     The argument to '--help=' should not consist solely of inverted
2349     qualifiers.
2350
2351     Combining several classes is possible, although this usually
2352     restricts the output so much that there is nothing to display.  One
2353     case where it does work, however, is when one of the classes is
2354     TARGET.  For example, to display all the target-specific
2355     optimization options, use:
2356
2357          --help=target,optimizers
2358
2359     The '--help=' option can be repeated on the command line.  Each
2360     successive use displays its requested class of options, skipping
2361     those that have already been displayed.  If '--help' is also
2362     specified anywhere on the command line then this takes precedence
2363     over any '--help=' option.
2364
2365     If the '-Q' option appears on the command line before the '--help='
2366     option, then the descriptive text displayed by '--help=' is
2367     changed.  Instead of describing the displayed options, an
2368     indication is given as to whether the option is enabled, disabled
2369     or set to a specific value (assuming that the compiler knows this
2370     at the point where the '--help=' option is used).
2371
2372     Here is a truncated example from the ARM port of 'gcc':
2373
2374            % gcc -Q -mabi=2 --help=target -c
2375            The following options are target specific:
2376            -mabi=                                2
2377            -mabort-on-noreturn                   [disabled]
2378            -mapcs                                [disabled]
2379
2380     The output is sensitive to the effects of previous command-line
2381     options, so for example it is possible to find out which
2382     optimizations are enabled at '-O2' by using:
2383
2384          -Q -O2 --help=optimizers
2385
2386     Alternatively you can discover which binary optimizations are
2387     enabled by '-O3' by using:
2388
2389          gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
2390          gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
2391          diff /tmp/O2-opts /tmp/O3-opts | grep enabled
2392
2393'--version'
2394     Display the version number and copyrights of the invoked GCC.
2395
2396'-pass-exit-codes'
2397     Normally the 'gcc' program exits with the code of 1 if any phase of
2398     the compiler returns a non-success return code.  If you specify
2399     '-pass-exit-codes', the 'gcc' program instead returns with the
2400     numerically highest error produced by any phase returning an error
2401     indication.  The C, C++, and Fortran front ends return 4 if an
2402     internal compiler error is encountered.
2403
2404'-pipe'
2405     Use pipes rather than temporary files for communication between the
2406     various stages of compilation.  This fails to work on some systems
2407     where the assembler is unable to read from a pipe; but the GNU
2408     assembler has no trouble.
2409
2410'-specs=FILE'
2411     Process FILE after the compiler reads in the standard 'specs' file,
2412     in order to override the defaults which the 'gcc' driver program
2413     uses when determining what switches to pass to 'cc1', 'cc1plus',
2414     'as', 'ld', etc.  More than one '-specs=FILE' can be specified on
2415     the command line, and they are processed in order, from left to
2416     right.  *Note Spec Files::, for information about the format of the
2417     FILE.
2418
2419'-wrapper'
2420     Invoke all subcommands under a wrapper program.  The name of the
2421     wrapper program and its parameters are passed as a comma separated
2422     list.
2423
2424          gcc -c t.c -wrapper gdb,--args
2425
2426     This invokes all subprograms of 'gcc' under 'gdb --args', thus the
2427     invocation of 'cc1' is 'gdb --args cc1 ...'.
2428
2429'-ffile-prefix-map=OLD=NEW'
2430     When compiling files residing in directory 'OLD', record any
2431     references to them in the result of the compilation as if the files
2432     resided in directory 'NEW' instead.  Specifying this option is
2433     equivalent to specifying all the individual '-f*-prefix-map'
2434     options.  This can be used to make reproducible builds that are
2435     location independent.  See also '-fmacro-prefix-map',
2436     '-fdebug-prefix-map' and '-fprofile-prefix-map'.
2437
2438'-fplugin=NAME.so'
2439     Load the plugin code in file NAME.so, assumed to be a shared object
2440     to be dlopen'd by the compiler.  The base name of the shared object
2441     file is used to identify the plugin for the purposes of argument
2442     parsing (See '-fplugin-arg-NAME-KEY=VALUE' below).  Each plugin
2443     should define the callback functions specified in the Plugins API.
2444
2445'-fplugin-arg-NAME-KEY=VALUE'
2446     Define an argument called KEY with a value of VALUE for the plugin
2447     called NAME.
2448
2449'-fdump-ada-spec[-slim]'
2450     For C and C++ source and include files, generate corresponding Ada
2451     specs.  *Note (gnat_ugn)Generating Ada Bindings for C and C++
2452     headers::, which provides detailed documentation on this feature.
2453
2454'-fada-spec-parent=UNIT'
2455     In conjunction with '-fdump-ada-spec[-slim]' above, generate Ada
2456     specs as child units of parent UNIT.
2457
2458'-fdump-go-spec=FILE'
2459     For input files in any language, generate corresponding Go
2460     declarations in FILE.  This generates Go 'const', 'type', 'var',
2461     and 'func' declarations which may be a useful way to start writing
2462     a Go interface to code written in some other language.
2463
2464'@FILE'
2465     Read command-line options from FILE.  The options read are inserted
2466     in place of the original @FILE option.  If FILE does not exist, or
2467     cannot be read, then the option will be treated literally, and not
2468     removed.
2469
2470     Options in FILE are separated by whitespace.  A whitespace
2471     character may be included in an option by surrounding the entire
2472     option in either single or double quotes.  Any character (including
2473     a backslash) may be included by prefixing the character to be
2474     included with a backslash.  The FILE may itself contain additional
2475     @FILE options; any such options will be processed recursively.
2476
2477
2478File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
2479
24803.3 Compiling C++ Programs
2481==========================
2482
2483C++ source files conventionally use one of the suffixes '.C', '.cc',
2484'.cpp', '.CPP', '.c++', '.cp', or '.cxx'; C++ header files often use
2485'.hh', '.hpp', '.H', or (for shared template code) '.tcc'; and
2486preprocessed C++ files use the suffix '.ii'.  GCC recognizes files with
2487these names and compiles them as C++ programs even if you call the
2488compiler the same way as for compiling C programs (usually with the name
2489'gcc').
2490
2491 However, the use of 'gcc' does not add the C++ library.  'g++' is a
2492program that calls GCC and automatically specifies linking against the
2493C++ library.  It treats '.c', '.h' and '.i' files as C++ source files
2494instead of C source files unless '-x' is used.  This program is also
2495useful when precompiling a C header file with a '.h' extension for use
2496in C++ compilations.  On many systems, 'g++' is also installed with the
2497name 'c++'.
2498
2499 When you compile C++ programs, you may specify many of the same
2500command-line options that you use for compiling programs in any
2501language; or command-line options meaningful for C and related
2502languages; or options that are meaningful only for C++ programs.  *Note
2503Options Controlling C Dialect: C Dialect Options, for explanations of
2504options for languages related to C.  *Note Options Controlling C++
2505Dialect: C++ Dialect Options, for explanations of options that are
2506meaningful only for C++ programs.
2507
2508
2509File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
2510
25113.4 Options Controlling C Dialect
2512=================================
2513
2514The following options control the dialect of C (or languages derived
2515from C, such as C++, Objective-C and Objective-C++) that the compiler
2516accepts:
2517
2518'-ansi'
2519     In C mode, this is equivalent to '-std=c90'.  In C++ mode, it is
2520     equivalent to '-std=c++98'.
2521
2522     This turns off certain features of GCC that are incompatible with
2523     ISO C90 (when compiling C code), or of standard C++ (when compiling
2524     C++ code), such as the 'asm' and 'typeof' keywords, and predefined
2525     macros such as 'unix' and 'vax' that identify the type of system
2526     you are using.  It also enables the undesirable and rarely used ISO
2527     trigraph feature.  For the C compiler, it disables recognition of
2528     C++ style '//' comments as well as the 'inline' keyword.
2529
2530     The alternate keywords '__asm__', '__extension__', '__inline__' and
2531     '__typeof__' continue to work despite '-ansi'.  You would not want
2532     to use them in an ISO C program, of course, but it is useful to put
2533     them in header files that might be included in compilations done
2534     with '-ansi'.  Alternate predefined macros such as '__unix__' and
2535     '__vax__' are also available, with or without '-ansi'.
2536
2537     The '-ansi' option does not cause non-ISO programs to be rejected
2538     gratuitously.  For that, '-Wpedantic' is required in addition to
2539     '-ansi'.  *Note Warning Options::.
2540
2541     The macro '__STRICT_ANSI__' is predefined when the '-ansi' option
2542     is used.  Some header files may notice this macro and refrain from
2543     declaring certain functions or defining certain macros that the ISO
2544     standard doesn't call for; this is to avoid interfering with any
2545     programs that might use these names for other things.
2546
2547     Functions that are normally built in but do not have semantics
2548     defined by ISO C (such as 'alloca' and 'ffs') are not built-in
2549     functions when '-ansi' is used.  *Note Other built-in functions
2550     provided by GCC: Other Builtins, for details of the functions
2551     affected.
2552
2553'-std='
2554     Determine the language standard.  *Note Language Standards
2555     Supported by GCC: Standards, for details of these standard
2556     versions.  This option is currently only supported when compiling C
2557     or C++.
2558
2559     The compiler can accept several base standards, such as 'c90' or
2560     'c++98', and GNU dialects of those standards, such as 'gnu90' or
2561     'gnu++98'.  When a base standard is specified, the compiler accepts
2562     all programs following that standard plus those using GNU
2563     extensions that do not contradict it.  For example, '-std=c90'
2564     turns off certain features of GCC that are incompatible with ISO
2565     C90, such as the 'asm' and 'typeof' keywords, but not other GNU
2566     extensions that do not have a meaning in ISO C90, such as omitting
2567     the middle term of a '?:' expression.  On the other hand, when a
2568     GNU dialect of a standard is specified, all features supported by
2569     the compiler are enabled, even when those features change the
2570     meaning of the base standard.  As a result, some strict-conforming
2571     programs may be rejected.  The particular standard is used by
2572     '-Wpedantic' to identify which features are GNU extensions given
2573     that version of the standard.  For example '-std=gnu90 -Wpedantic'
2574     warns about C++ style '//' comments, while '-std=gnu99 -Wpedantic'
2575     does not.
2576
2577     A value for this option must be provided; possible values are
2578
2579     'c90'
2580     'c89'
2581     'iso9899:1990'
2582          Support all ISO C90 programs (certain GNU extensions that
2583          conflict with ISO C90 are disabled).  Same as '-ansi' for C
2584          code.
2585
2586     'iso9899:199409'
2587          ISO C90 as modified in amendment 1.
2588
2589     'c99'
2590     'c9x'
2591     'iso9899:1999'
2592     'iso9899:199x'
2593          ISO C99.  This standard is substantially completely supported,
2594          modulo bugs and floating-point issues (mainly but not entirely
2595          relating to optional C99 features from Annexes F and G). See
2596          <https://gcc.gnu.org/c99status.html> for more information.
2597          The names 'c9x' and 'iso9899:199x' are deprecated.
2598
2599     'c11'
2600     'c1x'
2601     'iso9899:2011'
2602          ISO C11, the 2011 revision of the ISO C standard.  This
2603          standard is substantially completely supported, modulo bugs,
2604          floating-point issues (mainly but not entirely relating to
2605          optional C11 features from Annexes F and G) and the optional
2606          Annexes K (Bounds-checking interfaces) and L (Analyzability).
2607          The name 'c1x' is deprecated.
2608
2609     'c17'
2610     'c18'
2611     'iso9899:2017'
2612     'iso9899:2018'
2613          ISO C17, the 2017 revision of the ISO C standard (published in
2614          2018).  This standard is same as C11 except for corrections of
2615          defects (all of which are also applied with '-std=c11') and a
2616          new value of '__STDC_VERSION__', and so is supported to the
2617          same extent as C11.
2618
2619     'c2x'
2620          The next version of the ISO C standard, still under
2621          development.  The support for this version is experimental and
2622          incomplete.
2623
2624     'gnu90'
2625     'gnu89'
2626          GNU dialect of ISO C90 (including some C99 features).
2627
2628     'gnu99'
2629     'gnu9x'
2630          GNU dialect of ISO C99.  The name 'gnu9x' is deprecated.
2631
2632     'gnu11'
2633     'gnu1x'
2634          GNU dialect of ISO C11.  The name 'gnu1x' is deprecated.
2635
2636     'gnu17'
2637     'gnu18'
2638          GNU dialect of ISO C17.  This is the default for C code.
2639
2640     'gnu2x'
2641          The next version of the ISO C standard, still under
2642          development, plus GNU extensions.  The support for this
2643          version is experimental and incomplete.
2644
2645     'c++98'
2646     'c++03'
2647          The 1998 ISO C++ standard plus the 2003 technical corrigendum
2648          and some additional defect reports.  Same as '-ansi' for C++
2649          code.
2650
2651     'gnu++98'
2652     'gnu++03'
2653          GNU dialect of '-std=c++98'.
2654
2655     'c++11'
2656     'c++0x'
2657          The 2011 ISO C++ standard plus amendments.  The name 'c++0x'
2658          is deprecated.
2659
2660     'gnu++11'
2661     'gnu++0x'
2662          GNU dialect of '-std=c++11'.  The name 'gnu++0x' is
2663          deprecated.
2664
2665     'c++14'
2666     'c++1y'
2667          The 2014 ISO C++ standard plus amendments.  The name 'c++1y'
2668          is deprecated.
2669
2670     'gnu++14'
2671     'gnu++1y'
2672          GNU dialect of '-std=c++14'.  The name 'gnu++1y' is
2673          deprecated.
2674
2675     'c++17'
2676     'c++1z'
2677          The 2017 ISO C++ standard plus amendments.  The name 'c++1z'
2678          is deprecated.
2679
2680     'gnu++17'
2681     'gnu++1z'
2682          GNU dialect of '-std=c++17'.  This is the default for C++
2683          code.  The name 'gnu++1z' is deprecated.
2684
2685     'c++20'
2686     'c++2a'
2687          The 2020 ISO C++ standard plus amendments.  Support is
2688          experimental, and could change in incompatible ways in future
2689          releases.  The name 'c++2a' is deprecated.
2690
2691     'gnu++20'
2692     'gnu++2a'
2693          GNU dialect of '-std=c++20'.  Support is experimental, and
2694          could change in incompatible ways in future releases.  The
2695          name 'gnu++2a' is deprecated.
2696
2697     'c++2b'
2698     'c++23'
2699          The next revision of the ISO C++ standard, planned for 2023.
2700          Support is highly experimental, and will almost certainly
2701          change in incompatible ways in future releases.
2702
2703     'gnu++2b'
2704     'gnu++23'
2705          GNU dialect of '-std=c++2b'.  Support is highly experimental,
2706          and will almost certainly change in incompatible ways in
2707          future releases.
2708
2709'-aux-info FILENAME'
2710     Output to the given filename prototyped declarations for all
2711     functions declared and/or defined in a translation unit, including
2712     those in header files.  This option is silently ignored in any
2713     language other than C.
2714
2715     Besides declarations, the file indicates, in comments, the origin
2716     of each declaration (source file and line), whether the declaration
2717     was implicit, prototyped or unprototyped ('I', 'N' for new or 'O'
2718     for old, respectively, in the first character after the line number
2719     and the colon), and whether it came from a declaration or a
2720     definition ('C' or 'F', respectively, in the following character).
2721     In the case of function definitions, a K&R-style list of arguments
2722     followed by their declarations is also provided, inside comments,
2723     after the declaration.
2724
2725'-fallow-parameterless-variadic-functions'
2726     Accept variadic functions without named parameters.
2727
2728     Although it is possible to define such a function, this is not very
2729     useful as it is not possible to read the arguments.  This is only
2730     supported for C as this construct is allowed by C++.
2731
2732'-fno-asm'
2733     Do not recognize 'asm', 'inline' or 'typeof' as a keyword, so that
2734     code can use these words as identifiers.  You can use the keywords
2735     '__asm__', '__inline__' and '__typeof__' instead.  In C, '-ansi'
2736     implies '-fno-asm'.
2737
2738     In C++, 'inline' is a standard keyword and is not affected by this
2739     switch.  You may want to use the '-fno-gnu-keywords' flag instead,
2740     which disables 'typeof' but not 'asm' and 'inline'.  In C99 mode
2741     ('-std=c99' or '-std=gnu99'), this switch only affects the 'asm'
2742     and 'typeof' keywords, since 'inline' is a standard keyword in ISO
2743     C99.
2744
2745'-fno-builtin'
2746'-fno-builtin-FUNCTION'
2747     Don't recognize built-in functions that do not begin with
2748     '__builtin_' as prefix.  *Note Other built-in functions provided by
2749     GCC: Other Builtins, for details of the functions affected,
2750     including those which are not built-in functions when '-ansi' or
2751     '-std' options for strict ISO C conformance are used because they
2752     do not have an ISO standard meaning.
2753
2754     GCC normally generates special code to handle certain built-in
2755     functions more efficiently; for instance, calls to 'alloca' may
2756     become single instructions which adjust the stack directly, and
2757     calls to 'memcpy' may become inline copy loops.  The resulting code
2758     is often both smaller and faster, but since the function calls no
2759     longer appear as such, you cannot set a breakpoint on those calls,
2760     nor can you change the behavior of the functions by linking with a
2761     different library.  In addition, when a function is recognized as a
2762     built-in function, GCC may use information about that function to
2763     warn about problems with calls to that function, or to generate
2764     more efficient code, even if the resulting code still contains
2765     calls to that function.  For example, warnings are given with
2766     '-Wformat' for bad calls to 'printf' when 'printf' is built in and
2767     'strlen' is known not to modify global memory.
2768
2769     With the '-fno-builtin-FUNCTION' option only the built-in function
2770     FUNCTION is disabled.  FUNCTION must not begin with '__builtin_'.
2771     If a function is named that is not built-in in this version of GCC,
2772     this option is ignored.  There is no corresponding
2773     '-fbuiltin-FUNCTION' option; if you wish to enable built-in
2774     functions selectively when using '-fno-builtin' or
2775     '-ffreestanding', you may define macros such as:
2776
2777          #define abs(n)          __builtin_abs ((n))
2778          #define strcpy(d, s)    __builtin_strcpy ((d), (s))
2779
2780'-fcond-mismatch'
2781     Allow conditional expressions with mismatched types in the second
2782     and third arguments.  The value of such an expression is void.
2783     This option is not supported for C++.
2784
2785'-ffreestanding'
2786
2787     Assert that compilation targets a freestanding environment.  This
2788     implies '-fno-builtin'.  A freestanding environment is one in which
2789     the standard library may not exist, and program startup may not
2790     necessarily be at 'main'.  The most obvious example is an OS
2791     kernel.  This is equivalent to '-fno-hosted'.
2792
2793     *Note Language Standards Supported by GCC: Standards, for details
2794     of freestanding and hosted environments.
2795
2796'-fgimple'
2797
2798     Enable parsing of function definitions marked with '__GIMPLE'.
2799     This is an experimental feature that allows unit testing of GIMPLE
2800     passes.
2801
2802'-fgnu-tm'
2803     When the option '-fgnu-tm' is specified, the compiler generates
2804     code for the Linux variant of Intel's current Transactional Memory
2805     ABI specification document (Revision 1.1, May 6 2009).  This is an
2806     experimental feature whose interface may change in future versions
2807     of GCC, as the official specification changes.  Please note that
2808     not all architectures are supported for this feature.
2809
2810     For more information on GCC's support for transactional memory,
2811     *Note The GNU Transactional Memory Library: (libitm)Enabling
2812     libitm.
2813
2814     Note that the transactional memory feature is not supported with
2815     non-call exceptions ('-fnon-call-exceptions').
2816
2817'-fgnu89-inline'
2818     The option '-fgnu89-inline' tells GCC to use the traditional GNU
2819     semantics for 'inline' functions when in C99 mode.  *Note An Inline
2820     Function is As Fast As a Macro: Inline.  Using this option is
2821     roughly equivalent to adding the 'gnu_inline' function attribute to
2822     all inline functions (*note Function Attributes::).
2823
2824     The option '-fno-gnu89-inline' explicitly tells GCC to use the C99
2825     semantics for 'inline' when in C99 or gnu99 mode (i.e., it
2826     specifies the default behavior).  This option is not supported in
2827     '-std=c90' or '-std=gnu90' mode.
2828
2829     The preprocessor macros '__GNUC_GNU_INLINE__' and
2830     '__GNUC_STDC_INLINE__' may be used to check which semantics are in
2831     effect for 'inline' functions.  *Note (cpp)Common Predefined
2832     Macros::.
2833
2834'-fhosted'
2835
2836     Assert that compilation targets a hosted environment.  This implies
2837     '-fbuiltin'.  A hosted environment is one in which the entire
2838     standard library is available, and in which 'main' has a return
2839     type of 'int'.  Examples are nearly everything except a kernel.
2840     This is equivalent to '-fno-freestanding'.
2841
2842'-flax-vector-conversions'
2843     Allow implicit conversions between vectors with differing numbers
2844     of elements and/or incompatible element types.  This option should
2845     not be used for new code.
2846
2847'-fms-extensions'
2848     Accept some non-standard constructs used in Microsoft header files.
2849
2850     In C++ code, this allows member names in structures to be similar
2851     to previous types declarations.
2852
2853          typedef int UOW;
2854          struct ABC {
2855            UOW UOW;
2856          };
2857
2858     Some cases of unnamed fields in structures and unions are only
2859     accepted with this option.  *Note Unnamed struct/union fields
2860     within structs/unions: Unnamed Fields, for details.
2861
2862     Note that this option is off for all targets except for x86 targets
2863     using ms-abi.
2864
2865'-foffload=disable'
2866'-foffload=default'
2867'-foffload=TARGET-LIST'
2868     Specify for which OpenMP and OpenACC offload targets code should be
2869     generated.  The default behavior, equivalent to
2870     '-foffload=default', is to generate code for all supported offload
2871     targets.  The '-foffload=disable' form generates code only for the
2872     host fallback, while '-foffload=TARGET-LIST' generates code only
2873     for the specified comma-separated list of offload targets.
2874
2875     Offload targets are specified in GCC's internal target-triplet
2876     format.  You can run the compiler with '-v' to show the list of
2877     configured offload targets under 'OFFLOAD_TARGET_NAMES'.
2878
2879'-foffload-options=OPTIONS'
2880'-foffload-options=TARGET-TRIPLET-LIST=OPTIONS'
2881
2882     With '-foffload-options=OPTIONS', GCC passes the specified OPTIONS
2883     to the compilers for all enabled offloading targets.  You can
2884     specify options that apply only to a specific target or targets by
2885     using the '-foffload-options=TARGET-LIST=OPTIONS' form.  The
2886     TARGET-LIST is a comma-separated list in the same format as for the
2887     '-foffload=' option.
2888
2889     Typical command lines are
2890
2891          -foffload-options=-lgfortran -foffload-options=-lm
2892          -foffload-options="-lgfortran -lm" -foffload-options=nvptx-none=-latomic
2893          -foffload-options=amdgcn-amdhsa=-march=gfx906 -foffload-options=-lm
2894
2895'-fopenacc'
2896     Enable handling of OpenACC directives '#pragma acc' in C/C++ and
2897     '!$acc' in Fortran.  When '-fopenacc' is specified, the compiler
2898     generates accelerated code according to the OpenACC Application
2899     Programming Interface v2.6 <https://www.openacc.org>.  This option
2900     implies '-pthread', and thus is only supported on targets that have
2901     support for '-pthread'.
2902
2903'-fopenacc-dim=GEOM'
2904     Specify default compute dimensions for parallel offload regions
2905     that do not explicitly specify.  The GEOM value is a triple of
2906     ':'-separated sizes, in order 'gang', 'worker' and, 'vector'.  A
2907     size can be omitted, to use a target-specific default value.
2908
2909'-fopenmp'
2910     Enable handling of OpenMP directives '#pragma omp' in C/C++ and
2911     '!$omp' in Fortran.  When '-fopenmp' is specified, the compiler
2912     generates parallel code according to the OpenMP Application Program
2913     Interface v4.5 <https://www.openmp.org>.  This option implies
2914     '-pthread', and thus is only supported on targets that have support
2915     for '-pthread'.  '-fopenmp' implies '-fopenmp-simd'.
2916
2917'-fopenmp-simd'
2918     Enable handling of OpenMP's SIMD directives with '#pragma omp' in
2919     C/C++ and '!$omp' in Fortran.  Other OpenMP directives are ignored.
2920
2921'-fpermitted-flt-eval-methods=STYLE'
2922     ISO/IEC TS 18661-3 defines new permissible values for
2923     'FLT_EVAL_METHOD' that indicate that operations and constants with
2924     a semantic type that is an interchange or extended format should be
2925     evaluated to the precision and range of that type.  These new
2926     values are a superset of those permitted under C99/C11, which does
2927     not specify the meaning of other positive values of
2928     'FLT_EVAL_METHOD'.  As such, code conforming to C11 may not have
2929     been written expecting the possibility of the new values.
2930
2931     '-fpermitted-flt-eval-methods' specifies whether the compiler
2932     should allow only the values of 'FLT_EVAL_METHOD' specified in
2933     C99/C11, or the extended set of values specified in ISO/IEC TS
2934     18661-3.
2935
2936     STYLE is either 'c11' or 'ts-18661-3' as appropriate.
2937
2938     The default when in a standards compliant mode ('-std=c11' or
2939     similar) is '-fpermitted-flt-eval-methods=c11'.  The default when
2940     in a GNU dialect ('-std=gnu11' or similar) is
2941     '-fpermitted-flt-eval-methods=ts-18661-3'.
2942
2943'-fplan9-extensions'
2944     Accept some non-standard constructs used in Plan 9 code.
2945
2946     This enables '-fms-extensions', permits passing pointers to
2947     structures with anonymous fields to functions that expect pointers
2948     to elements of the type of the field, and permits referring to
2949     anonymous fields declared using a typedef.  *Note Unnamed
2950     struct/union fields within structs/unions: Unnamed Fields, for
2951     details.  This is only supported for C, not C++.
2952
2953'-fsigned-bitfields'
2954'-funsigned-bitfields'
2955'-fno-signed-bitfields'
2956'-fno-unsigned-bitfields'
2957     These options control whether a bit-field is signed or unsigned,
2958     when the declaration does not use either 'signed' or 'unsigned'.
2959     By default, such a bit-field is signed, because this is consistent:
2960     the basic integer types such as 'int' are signed types.
2961
2962'-fsigned-char'
2963     Let the type 'char' be signed, like 'signed char'.
2964
2965     Note that this is equivalent to '-fno-unsigned-char', which is the
2966     negative form of '-funsigned-char'.  Likewise, the option
2967     '-fno-signed-char' is equivalent to '-funsigned-char'.
2968
2969'-funsigned-char'
2970     Let the type 'char' be unsigned, like 'unsigned char'.
2971
2972     Each kind of machine has a default for what 'char' should be.  It
2973     is either like 'unsigned char' by default or like 'signed char' by
2974     default.
2975
2976     Ideally, a portable program should always use 'signed char' or
2977     'unsigned char' when it depends on the signedness of an object.
2978     But many programs have been written to use plain 'char' and expect
2979     it to be signed, or expect it to be unsigned, depending on the
2980     machines they were written for.  This option, and its inverse, let
2981     you make such a program work with the opposite default.
2982
2983     The type 'char' is always a distinct type from each of 'signed
2984     char' or 'unsigned char', even though its behavior is always just
2985     like one of those two.
2986
2987'-fsso-struct=ENDIANNESS'
2988     Set the default scalar storage order of structures and unions to
2989     the specified endianness.  The accepted values are 'big-endian',
2990     'little-endian' and 'native' for the native endianness of the
2991     target (the default).  This option is not supported for C++.
2992
2993     *Warning:* the '-fsso-struct' switch causes GCC to generate code
2994     that is not binary compatible with code generated without it if the
2995     specified endianness is not the native endianness of the target.
2996
2997
2998File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
2999
30003.5 Options Controlling C++ Dialect
3001===================================
3002
3003This section describes the command-line options that are only meaningful
3004for C++ programs.  You can also use most of the GNU compiler options
3005regardless of what language your program is in.  For example, you might
3006compile a file 'firstClass.C' like this:
3007
3008     g++ -g -fstrict-enums -O -c firstClass.C
3009
3010In this example, only '-fstrict-enums' is an option meant only for C++
3011programs; you can use the other options with any language supported by
3012GCC.
3013
3014 Some options for compiling C programs, such as '-std', are also
3015relevant for C++ programs.  *Note Options Controlling C Dialect: C
3016Dialect Options.
3017
3018 Here is a list of options that are _only_ for compiling C++ programs:
3019
3020'-fabi-version=N'
3021     Use version N of the C++ ABI.  The default is version 0.
3022
3023     Version 0 refers to the version conforming most closely to the C++
3024     ABI specification.  Therefore, the ABI obtained using version 0
3025     will change in different versions of G++ as ABI bugs are fixed.
3026
3027     Version 1 is the version of the C++ ABI that first appeared in G++
3028     3.2.
3029
3030     Version 2 is the version of the C++ ABI that first appeared in G++
3031     3.4, and was the default through G++ 4.9.
3032
3033     Version 3 corrects an error in mangling a constant address as a
3034     template argument.
3035
3036     Version 4, which first appeared in G++ 4.5, implements a standard
3037     mangling for vector types.
3038
3039     Version 5, which first appeared in G++ 4.6, corrects the mangling
3040     of attribute const/volatile on function pointer types, decltype of
3041     a plain decl, and use of a function parameter in the declaration of
3042     another parameter.
3043
3044     Version 6, which first appeared in G++ 4.7, corrects the promotion
3045     behavior of C++11 scoped enums and the mangling of template
3046     argument packs, const/static_cast, prefix ++ and -, and a class
3047     scope function used as a template argument.
3048
3049     Version 7, which first appeared in G++ 4.8, that treats nullptr_t
3050     as a builtin type and corrects the mangling of lambdas in default
3051     argument scope.
3052
3053     Version 8, which first appeared in G++ 4.9, corrects the
3054     substitution behavior of function types with
3055     function-cv-qualifiers.
3056
3057     Version 9, which first appeared in G++ 5.2, corrects the alignment
3058     of 'nullptr_t'.
3059
3060     Version 10, which first appeared in G++ 6.1, adds mangling of
3061     attributes that affect type identity, such as ia32 calling
3062     convention attributes (e.g. 'stdcall').
3063
3064     Version 11, which first appeared in G++ 7, corrects the mangling of
3065     sizeof...  expressions and operator names.  For multiple entities
3066     with the same name within a function, that are declared in
3067     different scopes, the mangling now changes starting with the
3068     twelfth occurrence.  It also implies '-fnew-inheriting-ctors'.
3069
3070     Version 12, which first appeared in G++ 8, corrects the calling
3071     conventions for empty classes on the x86_64 target and for classes
3072     with only deleted copy/move constructors.  It accidentally changes
3073     the calling convention for classes with a deleted copy constructor
3074     and a trivial move constructor.
3075
3076     Version 13, which first appeared in G++ 8.2, fixes the accidental
3077     change in version 12.
3078
3079     Version 14, which first appeared in G++ 10, corrects the mangling
3080     of the nullptr expression.
3081
3082     Version 15, which first appeared in G++ 11, changes the mangling of
3083     '__alignof__' to be distinct from that of 'alignof', and dependent
3084     operator names.
3085
3086     See also '-Wabi'.
3087
3088'-fabi-compat-version=N'
3089     On targets that support strong aliases, G++ works around mangling
3090     changes by creating an alias with the correct mangled name when
3091     defining a symbol with an incorrect mangled name.  This switch
3092     specifies which ABI version to use for the alias.
3093
3094     With '-fabi-version=0' (the default), this defaults to 11 (GCC 7
3095     compatibility).  If another ABI version is explicitly selected,
3096     this defaults to 0.  For compatibility with GCC versions 3.2
3097     through 4.9, use '-fabi-compat-version=2'.
3098
3099     If this option is not provided but '-Wabi=N' is, that version is
3100     used for compatibility aliases.  If this option is provided along
3101     with '-Wabi' (without the version), the version from this option is
3102     used for the warning.
3103
3104'-fno-access-control'
3105     Turn off all access checking.  This switch is mainly useful for
3106     working around bugs in the access control code.
3107
3108'-faligned-new'
3109     Enable support for C++17 'new' of types that require more alignment
3110     than 'void* ::operator new(std::size_t)' provides.  A numeric
3111     argument such as '-faligned-new=32' can be used to specify how much
3112     alignment (in bytes) is provided by that function, but few users
3113     will need to override the default of 'alignof(std::max_align_t)'.
3114
3115     This flag is enabled by default for '-std=c++17'.
3116
3117'-fchar8_t'
3118'-fno-char8_t'
3119     Enable support for 'char8_t' as adopted for C++20.  This includes
3120     the addition of a new 'char8_t' fundamental type, changes to the
3121     types of UTF-8 string and character literals, new signatures for
3122     user-defined literals, associated standard library updates, and new
3123     '__cpp_char8_t' and '__cpp_lib_char8_t' feature test macros.
3124
3125     This option enables functions to be overloaded for ordinary and
3126     UTF-8 strings:
3127
3128          int f(const char *);    // #1
3129          int f(const char8_t *); // #2
3130          int v1 = f("text");     // Calls #1
3131          int v2 = f(u8"text");   // Calls #2
3132
3133     and introduces new signatures for user-defined literals:
3134
3135          int operator""_udl1(char8_t);
3136          int v3 = u8'x'_udl1;
3137          int operator""_udl2(const char8_t*, std::size_t);
3138          int v4 = u8"text"_udl2;
3139          template<typename T, T...> int operator""_udl3();
3140          int v5 = u8"text"_udl3;
3141
3142     The change to the types of UTF-8 string and character literals
3143     introduces incompatibilities with ISO C++11 and later standards.
3144     For example, the following code is well-formed under ISO C++11, but
3145     is ill-formed when '-fchar8_t' is specified.
3146
3147          char ca[] = u8"xx";     // error: char-array initialized from wide
3148                                  //        string
3149          const char *cp = u8"xx";// error: invalid conversion from
3150                                  //        `const char8_t*' to `const char*'
3151          int f(const char*);
3152          auto v = f(u8"xx");     // error: invalid conversion from
3153                                  //        `const char8_t*' to `const char*'
3154          std::string s{u8"xx"};  // error: no matching function for call to
3155                                  //        `std::basic_string<char>::basic_string()'
3156          using namespace std::literals;
3157          s = u8"xx"s;            // error: conversion from
3158                                  //        `basic_string<char8_t>' to non-scalar
3159                                  //        type `basic_string<char>' requested
3160
3161'-fcheck-new'
3162     Check that the pointer returned by 'operator new' is non-null
3163     before attempting to modify the storage allocated.  This check is
3164     normally unnecessary because the C++ standard specifies that
3165     'operator new' only returns '0' if it is declared 'throw()', in
3166     which case the compiler always checks the return value even without
3167     this option.  In all other cases, when 'operator new' has a
3168     non-empty exception specification, memory exhaustion is signalled
3169     by throwing 'std::bad_alloc'.  See also 'new (nothrow)'.
3170
3171'-fconcepts'
3172'-fconcepts-ts'
3173     Below '-std=c++20', '-fconcepts' enables support for the C++
3174     Extensions for Concepts Technical Specification, ISO 19217 (2015).
3175
3176     With '-std=c++20' and above, Concepts are part of the language
3177     standard, so '-fconcepts' defaults to on.  But the standard
3178     specification of Concepts differs significantly from the TS, so
3179     some constructs that were allowed in the TS but didn't make it into
3180     the standard can still be enabled by '-fconcepts-ts'.
3181
3182'-fconstexpr-depth=N'
3183     Set the maximum nested evaluation depth for C++11 constexpr
3184     functions to N.  A limit is needed to detect endless recursion
3185     during constant expression evaluation.  The minimum specified by
3186     the standard is 512.
3187
3188'-fconstexpr-cache-depth=N'
3189     Set the maximum level of nested evaluation depth for C++11
3190     constexpr functions that will be cached to N.  This is a heuristic
3191     that trades off compilation speed (when the cache avoids repeated
3192     calculations) against memory consumption (when the cache grows very
3193     large from highly recursive evaluations).  The default is 8.  Very
3194     few users are likely to want to adjust it, but if your code does
3195     heavy constexpr calculations you might want to experiment to find
3196     which value works best for you.
3197
3198'-fconstexpr-fp-except'
3199     Annex F of the C standard specifies that IEC559 floating point
3200     exceptions encountered at compile time should not stop compilation.
3201     C++ compilers have historically not followed this guidance, instead
3202     treating floating point division by zero as non-constant even
3203     though it has a well defined value.  This flag tells the compiler
3204     to give Annex F priority over other rules saying that a particular
3205     operation is undefined.
3206
3207          constexpr float inf = 1./0.; // OK with -fconstexpr-fp-except
3208
3209'-fconstexpr-loop-limit=N'
3210     Set the maximum number of iterations for a loop in C++14 constexpr
3211     functions to N.  A limit is needed to detect infinite loops during
3212     constant expression evaluation.  The default is 262144 (1<<18).
3213
3214'-fconstexpr-ops-limit=N'
3215     Set the maximum number of operations during a single constexpr
3216     evaluation.  Even when number of iterations of a single loop is
3217     limited with the above limit, if there are several nested loops and
3218     each of them has many iterations but still smaller than the above
3219     limit, or if in a body of some loop or even outside of a loop too
3220     many expressions need to be evaluated, the resulting constexpr
3221     evaluation might take too long.  The default is 33554432 (1<<25).
3222
3223'-fcoroutines'
3224     Enable support for the C++ coroutines extension (experimental).
3225
3226'-fno-elide-constructors'
3227     The C++ standard allows an implementation to omit creating a
3228     temporary that is only used to initialize another object of the
3229     same type.  Specifying this option disables that optimization, and
3230     forces G++ to call the copy constructor in all cases.  This option
3231     also causes G++ to call trivial member functions which otherwise
3232     would be expanded inline.
3233
3234     In C++17, the compiler is required to omit these temporaries, but
3235     this option still affects trivial member functions.
3236
3237'-fno-enforce-eh-specs'
3238     Don't generate code to check for violation of exception
3239     specifications at run time.  This option violates the C++ standard,
3240     but may be useful for reducing code size in production builds, much
3241     like defining 'NDEBUG'.  This does not give user code permission to
3242     throw exceptions in violation of the exception specifications; the
3243     compiler still optimizes based on the specifications, so throwing
3244     an unexpected exception results in undefined behavior at run time.
3245
3246'-fextern-tls-init'
3247'-fno-extern-tls-init'
3248     The C++11 and OpenMP standards allow 'thread_local' and
3249     'threadprivate' variables to have dynamic (runtime) initialization.
3250     To support this, any use of such a variable goes through a wrapper
3251     function that performs any necessary initialization.  When the use
3252     and definition of the variable are in the same translation unit,
3253     this overhead can be optimized away, but when the use is in a
3254     different translation unit there is significant overhead even if
3255     the variable doesn't actually need dynamic initialization.  If the
3256     programmer can be sure that no use of the variable in a
3257     non-defining TU needs to trigger dynamic initialization (either
3258     because the variable is statically initialized, or a use of the
3259     variable in the defining TU will be executed before any uses in
3260     another TU), they can avoid this overhead with the
3261     '-fno-extern-tls-init' option.
3262
3263     On targets that support symbol aliases, the default is
3264     '-fextern-tls-init'.  On targets that do not support symbol
3265     aliases, the default is '-fno-extern-tls-init'.
3266
3267'-ffold-simple-inlines'
3268'-fno-fold-simple-inlines'
3269     Permit the C++ frontend to fold calls to 'std::move',
3270     'std::forward', 'std::addressof' and 'std::as_const'.  In contrast
3271     to inlining, this means no debug information will be generated for
3272     such calls.  Since these functions are rarely interesting to debug,
3273     this flag is enabled by default unless '-fno-inline' is active.
3274
3275'-fno-gnu-keywords'
3276     Do not recognize 'typeof' as a keyword, so that code can use this
3277     word as an identifier.  You can use the keyword '__typeof__'
3278     instead.  This option is implied by the strict ISO C++ dialects:
3279     '-ansi', '-std=c++98', '-std=c++11', etc.
3280
3281'-fimplicit-constexpr'
3282     Make inline functions implicitly constexpr, if they satisfy the
3283     requirements for a constexpr function.  This option can be used in
3284     C++14 mode or later.  This can result in initialization changing
3285     from dynamic to static and other optimizations.
3286
3287'-fno-implicit-templates'
3288     Never emit code for non-inline templates that are instantiated
3289     implicitly (i.e. by use); only emit code for explicit
3290     instantiations.  If you use this option, you must take care to
3291     structure your code to include all the necessary explicit
3292     instantiations to avoid getting undefined symbols at link time.
3293     *Note Template Instantiation::, for more information.
3294
3295'-fno-implicit-inline-templates'
3296     Don't emit code for implicit instantiations of inline templates,
3297     either.  The default is to handle inlines differently so that
3298     compiles with and without optimization need the same set of
3299     explicit instantiations.
3300
3301'-fno-implement-inlines'
3302     To save space, do not emit out-of-line copies of inline functions
3303     controlled by '#pragma implementation'.  This causes linker errors
3304     if these functions are not inlined everywhere they are called.
3305
3306'-fmodules-ts'
3307'-fno-modules-ts'
3308     Enable support for C++20 modules (*note C++ Modules::).  The
3309     '-fno-modules-ts' is usually not needed, as that is the default.
3310     Even though this is a C++20 feature, it is not currently implicitly
3311     enabled by selecting that standard version.
3312
3313'-fmodule-header'
3314'-fmodule-header=user'
3315'-fmodule-header=system'
3316     Compile a header file to create an importable header unit.
3317
3318'-fmodule-implicit-inline'
3319     Member functions defined in their class definitions are not
3320     implicitly inline for modular code.  This is different to
3321     traditional C++ behavior, for good reasons.  However, it may result
3322     in a difficulty during code porting.  This option makes such
3323     function definitions implicitly inline.  It does however generate
3324     an ABI incompatibility, so you must use it everywhere or nowhere.
3325     (Such definitions outside of a named module remain implicitly
3326     inline, regardless.)
3327
3328'-fno-module-lazy'
3329     Disable lazy module importing and module mapper creation.
3330
3331'-fmodule-mapper=[HOSTNAME]:PORT[?IDENT]'
3332'-fmodule-mapper=|PROGRAM[?IDENT] ARGS...'
3333'-fmodule-mapper==SOCKET[?IDENT]'
3334'-fmodule-mapper=<>[INOUT][?IDENT]'
3335'-fmodule-mapper=<IN>OUT[?IDENT]'
3336'-fmodule-mapper=FILE[?IDENT]'
3337     An oracle to query for module name to filename mappings.  If
3338     unspecified the 'CXX_MODULE_MAPPER' environment variable is used,
3339     and if that is unset, an in-process default is provided.
3340
3341'-fmodule-only'
3342     Only emit the Compiled Module Interface, inhibiting any object
3343     file.
3344
3345'-fms-extensions'
3346     Disable Wpedantic warnings about constructs used in MFC, such as
3347     implicit int and getting a pointer to member function via
3348     non-standard syntax.
3349
3350'-fnew-inheriting-ctors'
3351     Enable the P0136 adjustment to the semantics of C++11 constructor
3352     inheritance.  This is part of C++17 but also considered to be a
3353     Defect Report against C++11 and C++14.  This flag is enabled by
3354     default unless '-fabi-version=10' or lower is specified.
3355
3356'-fnew-ttp-matching'
3357     Enable the P0522 resolution to Core issue 150, template template
3358     parameters and default arguments: this allows a template with
3359     default template arguments as an argument for a template template
3360     parameter with fewer template parameters.  This flag is enabled by
3361     default for '-std=c++17'.
3362
3363'-fno-nonansi-builtins'
3364     Disable built-in declarations of functions that are not mandated by
3365     ANSI/ISO C.  These include 'ffs', 'alloca', '_exit', 'index',
3366     'bzero', 'conjf', and other related functions.
3367
3368'-fnothrow-opt'
3369     Treat a 'throw()' exception specification as if it were a
3370     'noexcept' specification to reduce or eliminate the text size
3371     overhead relative to a function with no exception specification.
3372     If the function has local variables of types with non-trivial
3373     destructors, the exception specification actually makes the
3374     function smaller because the EH cleanups for those variables can be
3375     optimized away.  The semantic effect is that an exception thrown
3376     out of a function with such an exception specification results in a
3377     call to 'terminate' rather than 'unexpected'.
3378
3379'-fno-operator-names'
3380     Do not treat the operator name keywords 'and', 'bitand', 'bitor',
3381     'compl', 'not', 'or' and 'xor' as synonyms as keywords.
3382
3383'-fno-optional-diags'
3384     Disable diagnostics that the standard says a compiler does not need
3385     to issue.  Currently, the only such diagnostic issued by G++ is the
3386     one for a name having multiple meanings within a class.
3387
3388'-fpermissive'
3389     Downgrade some diagnostics about nonconformant code from errors to
3390     warnings.  Thus, using '-fpermissive' allows some nonconforming
3391     code to compile.
3392
3393'-fno-pretty-templates'
3394     When an error message refers to a specialization of a function
3395     template, the compiler normally prints the signature of the
3396     template followed by the template arguments and any typedefs or
3397     typenames in the signature (e.g. 'void f(T) [with T = int]' rather
3398     than 'void f(int)') so that it's clear which template is involved.
3399     When an error message refers to a specialization of a class
3400     template, the compiler omits any template arguments that match the
3401     default template arguments for that template.  If either of these
3402     behaviors make it harder to understand the error message rather
3403     than easier, you can use '-fno-pretty-templates' to disable them.
3404
3405'-fno-rtti'
3406     Disable generation of information about every class with virtual
3407     functions for use by the C++ run-time type identification features
3408     ('dynamic_cast' and 'typeid').  If you don't use those parts of the
3409     language, you can save some space by using this flag.  Note that
3410     exception handling uses the same information, but G++ generates it
3411     as needed.  The 'dynamic_cast' operator can still be used for casts
3412     that do not require run-time type information, i.e. casts to 'void
3413     *' or to unambiguous base classes.
3414
3415     Mixing code compiled with '-frtti' with that compiled with
3416     '-fno-rtti' may not work.  For example, programs may fail to link
3417     if a class compiled with '-fno-rtti' is used as a base for a class
3418     compiled with '-frtti'.
3419
3420'-fsized-deallocation'
3421     Enable the built-in global declarations
3422          void operator delete (void *, std::size_t) noexcept;
3423          void operator delete[] (void *, std::size_t) noexcept;
3424     as introduced in C++14.  This is useful for user-defined
3425     replacement deallocation functions that, for example, use the size
3426     of the object to make deallocation faster.  Enabled by default
3427     under '-std=c++14' and above.  The flag '-Wsized-deallocation'
3428     warns about places that might want to add a definition.
3429
3430'-fstrict-enums'
3431     Allow the compiler to optimize using the assumption that a value of
3432     enumerated type can only be one of the values of the enumeration
3433     (as defined in the C++ standard; basically, a value that can be
3434     represented in the minimum number of bits needed to represent all
3435     the enumerators).  This assumption may not be valid if the program
3436     uses a cast to convert an arbitrary integer value to the enumerated
3437     type.
3438
3439'-fstrong-eval-order'
3440     Evaluate member access, array subscripting, and shift expressions
3441     in left-to-right order, and evaluate assignment in right-to-left
3442     order, as adopted for C++17.  Enabled by default with '-std=c++17'.
3443     '-fstrong-eval-order=some' enables just the ordering of member
3444     access and shift expressions, and is the default without
3445     '-std=c++17'.
3446
3447'-ftemplate-backtrace-limit=N'
3448     Set the maximum number of template instantiation notes for a single
3449     warning or error to N.  The default value is 10.
3450
3451'-ftemplate-depth=N'
3452     Set the maximum instantiation depth for template classes to N.  A
3453     limit on the template instantiation depth is needed to detect
3454     endless recursions during template class instantiation.  ANSI/ISO
3455     C++ conforming programs must not rely on a maximum depth greater
3456     than 17 (changed to 1024 in C++11).  The default value is 900, as
3457     the compiler can run out of stack space before hitting 1024 in some
3458     situations.
3459
3460'-fno-threadsafe-statics'
3461     Do not emit the extra code to use the routines specified in the C++
3462     ABI for thread-safe initialization of local statics.  You can use
3463     this option to reduce code size slightly in code that doesn't need
3464     to be thread-safe.
3465
3466'-fuse-cxa-atexit'
3467     Register destructors for objects with static storage duration with
3468     the '__cxa_atexit' function rather than the 'atexit' function.
3469     This option is required for fully standards-compliant handling of
3470     static destructors, but only works if your C library supports
3471     '__cxa_atexit'.
3472
3473'-fno-use-cxa-get-exception-ptr'
3474     Don't use the '__cxa_get_exception_ptr' runtime routine.  This
3475     causes 'std::uncaught_exception' to be incorrect, but is necessary
3476     if the runtime routine is not available.
3477
3478'-fvisibility-inlines-hidden'
3479     This switch declares that the user does not attempt to compare
3480     pointers to inline functions or methods where the addresses of the
3481     two functions are taken in different shared objects.
3482
3483     The effect of this is that GCC may, effectively, mark inline
3484     methods with '__attribute__ ((visibility ("hidden")))' so that they
3485     do not appear in the export table of a DSO and do not require a PLT
3486     indirection when used within the DSO.  Enabling this option can
3487     have a dramatic effect on load and link times of a DSO as it
3488     massively reduces the size of the dynamic export table when the
3489     library makes heavy use of templates.
3490
3491     The behavior of this switch is not quite the same as marking the
3492     methods as hidden directly, because it does not affect static
3493     variables local to the function or cause the compiler to deduce
3494     that the function is defined in only one shared object.
3495
3496     You may mark a method as having a visibility explicitly to negate
3497     the effect of the switch for that method.  For example, if you do
3498     want to compare pointers to a particular inline method, you might
3499     mark it as having default visibility.  Marking the enclosing class
3500     with explicit visibility has no effect.
3501
3502     Explicitly instantiated inline methods are unaffected by this
3503     option as their linkage might otherwise cross a shared library
3504     boundary.  *Note Template Instantiation::.
3505
3506'-fvisibility-ms-compat'
3507     This flag attempts to use visibility settings to make GCC's C++
3508     linkage model compatible with that of Microsoft Visual Studio.
3509
3510     The flag makes these changes to GCC's linkage model:
3511
3512       1. It sets the default visibility to 'hidden', like
3513          '-fvisibility=hidden'.
3514
3515       2. Types, but not their members, are not hidden by default.
3516
3517       3. The One Definition Rule is relaxed for types without explicit
3518          visibility specifications that are defined in more than one
3519          shared object: those declarations are permitted if they are
3520          permitted when this option is not used.
3521
3522     In new code it is better to use '-fvisibility=hidden' and export
3523     those classes that are intended to be externally visible.
3524     Unfortunately it is possible for code to rely, perhaps
3525     accidentally, on the Visual Studio behavior.
3526
3527     Among the consequences of these changes are that static data
3528     members of the same type with the same name but defined in
3529     different shared objects are different, so changing one does not
3530     change the other; and that pointers to function members defined in
3531     different shared objects may not compare equal.  When this flag is
3532     given, it is a violation of the ODR to define types with the same
3533     name differently.
3534
3535'-fno-weak'
3536     Do not use weak symbol support, even if it is provided by the
3537     linker.  By default, G++ uses weak symbols if they are available.
3538     This option exists only for testing, and should not be used by
3539     end-users; it results in inferior code and has no benefits.  This
3540     option may be removed in a future release of G++.
3541
3542'-fext-numeric-literals (C++ and Objective-C++ only)'
3543     Accept imaginary, fixed-point, or machine-defined literal number
3544     suffixes as GNU extensions.  When this option is turned off these
3545     suffixes are treated as C++11 user-defined literal numeric
3546     suffixes.  This is on by default for all pre-C++11 dialects and all
3547     GNU dialects: '-std=c++98', '-std=gnu++98', '-std=gnu++11',
3548     '-std=gnu++14'.  This option is off by default for ISO C++11
3549     onwards ('-std=c++11', ...).
3550
3551'-nostdinc++'
3552     Do not search for header files in the standard directories specific
3553     to C++, but do still search the other standard directories.  (This
3554     option is used when building the C++ library.)
3555
3556'-flang-info-include-translate'
3557'-flang-info-include-translate-not'
3558'-flang-info-include-translate=HEADER'
3559     Inform of include translation events.  The first will note accepted
3560     include translations, the second will note declined include
3561     translations.  The HEADER form will inform of include translations
3562     relating to that specific header.  If HEADER is of the form
3563     '"user"' or '<system>' it will be resolved to a specific user or
3564     system header using the include path.
3565
3566'-flang-info-module-cmi'
3567'-flang-info-module-cmi=MODULE'
3568     Inform of Compiled Module Interface pathnames.  The first will note
3569     all read CMI pathnames.  The MODULE form will not reading a
3570     specific module's CMI. MODULE may be a named module or a
3571     header-unit (the latter indicated by either being a pathname
3572     containing directory separators or enclosed in '<>' or '""').
3573
3574'-stdlib=LIBSTDC++,LIBC++'
3575     When G++ is configured to support this option, it allows
3576     specification of alternate C++ runtime libraries.  Two options are
3577     available: LIBSTDC++ (the default, native C++ runtime for G++) and
3578     LIBC++ which is the C++ runtime installed on some operating systems
3579     (e.g.  Darwin versions from Darwin11 onwards).  The option switches
3580     G++ to use the headers from the specified library and to emit
3581     '-lstdc++' or '-lc++' respectively, when a C++ runtime is required
3582     for linking.
3583
3584 In addition, these warning options have meanings only for C++ programs:
3585
3586'-Wabi-tag (C++ and Objective-C++ only)'
3587     Warn when a type with an ABI tag is used in a context that does not
3588     have that ABI tag.  See *note C++ Attributes:: for more information
3589     about ABI tags.
3590
3591'-Wcomma-subscript (C++ and Objective-C++ only)'
3592     Warn about uses of a comma expression within a subscripting
3593     expression.  This usage was deprecated in C++20 and is going to be
3594     removed in C++23.  However, a comma expression wrapped in '( )' is
3595     not deprecated.  Example:
3596
3597          void f(int *a, int b, int c) {
3598              a[b,c];     // deprecated in C++20, invalid in C++23
3599              a[(b,c)];   // OK
3600          }
3601
3602     In C++23 it is valid to have comma separated expressions in a
3603     subscript when an overloaded subscript operator is found and
3604     supports the right number and types of arguments.  G++ will accept
3605     the formerly valid syntax for code that is not valid in C++23 but
3606     used to be valid but deprecated in C++20 with a pedantic warning
3607     that can be disabled with '-Wno-comma-subscript'.
3608
3609     Enabled by default with '-std=c++20' unless '-Wno-deprecated', and
3610     with '-std=c++23' regardless of '-Wno-deprecated'.
3611
3612'-Wctad-maybe-unsupported (C++ and Objective-C++ only)'
3613     Warn when performing class template argument deduction (CTAD) on a
3614     type with no explicitly written deduction guides.  This warning
3615     will point out cases where CTAD succeeded only because the compiler
3616     synthesized the implicit deduction guides, which might not be what
3617     the programmer intended.  Certain style guides allow CTAD only on
3618     types that specifically "opt-in"; i.e., on types that are designed
3619     to support CTAD. This warning can be suppressed with the following
3620     pattern:
3621
3622          struct allow_ctad_t; // any name works
3623          template <typename T> struct S {
3624            S(T) { }
3625          };
3626          S(allow_ctad_t) -> S<void>; // guide with incomplete parameter type will never be considered
3627
3628'-Wctor-dtor-privacy (C++ and Objective-C++ only)'
3629     Warn when a class seems unusable because all the constructors or
3630     destructors in that class are private, and it has neither friends
3631     nor public static member functions.  Also warn if there are no
3632     non-private methods, and there's at least one private member
3633     function that isn't a constructor or destructor.
3634
3635'-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
3636     Warn when 'delete' is used to destroy an instance of a class that
3637     has virtual functions and non-virtual destructor.  It is unsafe to
3638     delete an instance of a derived class through a pointer to a base
3639     class if the base class does not have a virtual destructor.  This
3640     warning is enabled by '-Wall'.
3641
3642'-Wdeprecated-copy (C++ and Objective-C++ only)'
3643     Warn that the implicit declaration of a copy constructor or copy
3644     assignment operator is deprecated if the class has a user-provided
3645     copy constructor or copy assignment operator, in C++11 and up.
3646     This warning is enabled by '-Wextra'.  With
3647     '-Wdeprecated-copy-dtor', also deprecate if the class has a
3648     user-provided destructor.
3649
3650'-Wno-deprecated-enum-enum-conversion (C++ and Objective-C++ only)'
3651     Disable the warning about the case when the usual arithmetic
3652     conversions are applied on operands where one is of enumeration
3653     type and the other is of a different enumeration type.  This
3654     conversion was deprecated in C++20.  For example:
3655
3656          enum E1 { e };
3657          enum E2 { f };
3658          int k = f - e;
3659
3660     '-Wdeprecated-enum-enum-conversion' is enabled by default with
3661     '-std=c++20'.  In pre-C++20 dialects, this warning can be enabled
3662     by '-Wenum-conversion'.
3663
3664'-Wno-deprecated-enum-float-conversion (C++ and Objective-C++ only)'
3665     Disable the warning about the case when the usual arithmetic
3666     conversions are applied on operands where one is of enumeration
3667     type and the other is of a floating-point type.  This conversion
3668     was deprecated in C++20.  For example:
3669
3670          enum E1 { e };
3671          enum E2 { f };
3672          bool b = e <= 3.7;
3673
3674     '-Wdeprecated-enum-float-conversion' is enabled by default with
3675     '-std=c++20'.  In pre-C++20 dialects, this warning can be enabled
3676     by '-Wenum-conversion'.
3677
3678'-Wno-init-list-lifetime (C++ and Objective-C++ only)'
3679     Do not warn about uses of 'std::initializer_list' that are likely
3680     to result in dangling pointers.  Since the underlying array for an
3681     'initializer_list' is handled like a normal C++ temporary object,
3682     it is easy to inadvertently keep a pointer to the array past the
3683     end of the array's lifetime.  For example:
3684
3685        * If a function returns a temporary 'initializer_list', or a
3686          local 'initializer_list' variable, the array's lifetime ends
3687          at the end of the return statement, so the value returned has
3688          a dangling pointer.
3689
3690        * If a new-expression creates an 'initializer_list', the array
3691          only lives until the end of the enclosing full-expression, so
3692          the 'initializer_list' in the heap has a dangling pointer.
3693
3694        * When an 'initializer_list' variable is assigned from a
3695          brace-enclosed initializer list, the temporary array created
3696          for the right side of the assignment only lives until the end
3697          of the full-expression, so at the next statement the
3698          'initializer_list' variable has a dangling pointer.
3699
3700               // li's initial underlying array lives as long as li
3701               std::initializer_list<int> li = { 1,2,3 };
3702               // assignment changes li to point to a temporary array
3703               li = { 4, 5 };
3704               // now the temporary is gone and li has a dangling pointer
3705               int i = li.begin()[0] // undefined behavior
3706
3707        * When a list constructor stores the 'begin' pointer from the
3708          'initializer_list' argument, this doesn't extend the lifetime
3709          of the array, so if a class variable is constructed from a
3710          temporary 'initializer_list', the pointer is left dangling by
3711          the end of the variable declaration statement.
3712
3713'-Winvalid-imported-macros'
3714     Verify all imported macro definitions are valid at the end of
3715     compilation.  This is not enabled by default, as it requires
3716     additional processing to determine.  It may be useful when
3717     preparing sets of header-units to ensure consistent macros.
3718
3719'-Wno-literal-suffix (C++ and Objective-C++ only)'
3720     Do not warn when a string or character literal is followed by a
3721     ud-suffix which does not begin with an underscore.  As a conforming
3722     extension, GCC treats such suffixes as separate preprocessing
3723     tokens in order to maintain backwards compatibility with code that
3724     uses formatting macros from '<inttypes.h>'.  For example:
3725
3726          #define __STDC_FORMAT_MACROS
3727          #include <inttypes.h>
3728          #include <stdio.h>
3729
3730          int main() {
3731            int64_t i64 = 123;
3732            printf("My int64: %" PRId64"\n", i64);
3733          }
3734
3735     In this case, 'PRId64' is treated as a separate preprocessing
3736     token.
3737
3738     This option also controls warnings when a user-defined literal
3739     operator is declared with a literal suffix identifier that doesn't
3740     begin with an underscore.  Literal suffix identifiers that don't
3741     begin with an underscore are reserved for future standardization.
3742
3743     These warnings are enabled by default.
3744
3745'-Wno-narrowing (C++ and Objective-C++ only)'
3746     For C++11 and later standards, narrowing conversions are diagnosed
3747     by default, as required by the standard.  A narrowing conversion
3748     from a constant produces an error, and a narrowing conversion from
3749     a non-constant produces a warning, but '-Wno-narrowing' suppresses
3750     the diagnostic.  Note that this does not affect the meaning of
3751     well-formed code; narrowing conversions are still considered
3752     ill-formed in SFINAE contexts.
3753
3754     With '-Wnarrowing' in C++98, warn when a narrowing conversion
3755     prohibited by C++11 occurs within '{ }', e.g.
3756
3757          int i = { 2.2 }; // error: narrowing from double to int
3758
3759     This flag is included in '-Wall' and '-Wc++11-compat'.
3760
3761'-Wnoexcept (C++ and Objective-C++ only)'
3762     Warn when a noexcept-expression evaluates to false because of a
3763     call to a function that does not have a non-throwing exception
3764     specification (i.e.  'throw()' or 'noexcept') but is known by the
3765     compiler to never throw an exception.
3766
3767'-Wnoexcept-type (C++ and Objective-C++ only)'
3768     Warn if the C++17 feature making 'noexcept' part of a function type
3769     changes the mangled name of a symbol relative to C++14.  Enabled by
3770     '-Wabi' and '-Wc++17-compat'.
3771
3772     As an example:
3773
3774          template <class T> void f(T t) { t(); };
3775          void g() noexcept;
3776          void h() { f(g); }
3777
3778     In C++14, 'f' calls 'f<void(*)()>', but in C++17 it calls
3779     'f<void(*)()noexcept>'.
3780
3781'-Wclass-memaccess (C++ and Objective-C++ only)'
3782     Warn when the destination of a call to a raw memory function such
3783     as 'memset' or 'memcpy' is an object of class type, and when
3784     writing into such an object might bypass the class non-trivial or
3785     deleted constructor or copy assignment, violate const-correctness
3786     or encapsulation, or corrupt virtual table pointers.  Modifying the
3787     representation of such objects may violate invariants maintained by
3788     member functions of the class.  For example, the call to 'memset'
3789     below is undefined because it modifies a non-trivial class object
3790     and is, therefore, diagnosed.  The safe way to either initialize or
3791     clear the storage of objects of such types is by using the
3792     appropriate constructor or assignment operator, if one is
3793     available.
3794          std::string str = "abc";
3795          memset (&str, 0, sizeof str);
3796     The '-Wclass-memaccess' option is enabled by '-Wall'.  Explicitly
3797     casting the pointer to the class object to 'void *' or to a type
3798     that can be safely accessed by the raw memory function suppresses
3799     the warning.
3800
3801'-Wnon-virtual-dtor (C++ and Objective-C++ only)'
3802     Warn when a class has virtual functions and an accessible
3803     non-virtual destructor itself or in an accessible polymorphic base
3804     class, in which case it is possible but unsafe to delete an
3805     instance of a derived class through a pointer to the class itself
3806     or base class.  This warning is automatically enabled if '-Weffc++'
3807     is specified.
3808
3809'-Wregister (C++ and Objective-C++ only)'
3810     Warn on uses of the 'register' storage class specifier, except when
3811     it is part of the GNU *note Explicit Register Variables::
3812     extension.  The use of the 'register' keyword as storage class
3813     specifier has been deprecated in C++11 and removed in C++17.
3814     Enabled by default with '-std=c++17'.
3815
3816'-Wreorder (C++ and Objective-C++ only)'
3817     Warn when the order of member initializers given in the code does
3818     not match the order in which they must be executed.  For instance:
3819
3820          struct A {
3821            int i;
3822            int j;
3823            A(): j (0), i (1) { }
3824          };
3825
3826     The compiler rearranges the member initializers for 'i' and 'j' to
3827     match the declaration order of the members, emitting a warning to
3828     that effect.  This warning is enabled by '-Wall'.
3829
3830'-Wno-pessimizing-move (C++ and Objective-C++ only)'
3831     This warning warns when a call to 'std::move' prevents copy
3832     elision.  A typical scenario when copy elision can occur is when
3833     returning in a function with a class return type, when the
3834     expression being returned is the name of a non-volatile automatic
3835     object, and is not a function parameter, and has the same type as
3836     the function return type.
3837
3838          struct T {
3839          ...
3840          };
3841          T fn()
3842          {
3843            T t;
3844            ...
3845            return std::move (t);
3846          }
3847
3848     But in this example, the 'std::move' call prevents copy elision.
3849
3850     This warning is enabled by '-Wall'.
3851
3852'-Wno-redundant-move (C++ and Objective-C++ only)'
3853     This warning warns about redundant calls to 'std::move'; that is,
3854     when a move operation would have been performed even without the
3855     'std::move' call.  This happens because the compiler is forced to
3856     treat the object as if it were an rvalue in certain situations such
3857     as returning a local variable, where copy elision isn't applicable.
3858     Consider:
3859
3860          struct T {
3861          ...
3862          };
3863          T fn(T t)
3864          {
3865            ...
3866            return std::move (t);
3867          }
3868
3869     Here, the 'std::move' call is redundant.  Because G++ implements
3870     Core Issue 1579, another example is:
3871
3872          struct T { // convertible to U
3873          ...
3874          };
3875          struct U {
3876          ...
3877          };
3878          U fn()
3879          {
3880            T t;
3881            ...
3882            return std::move (t);
3883          }
3884     In this example, copy elision isn't applicable because the type of
3885     the expression being returned and the function return type differ,
3886     yet G++ treats the return value as if it were designated by an
3887     rvalue.
3888
3889     This warning is enabled by '-Wextra'.
3890
3891'-Wrange-loop-construct (C++ and Objective-C++ only)'
3892     This warning warns when a C++ range-based for-loop is creating an
3893     unnecessary copy.  This can happen when the range declaration is
3894     not a reference, but probably should be.  For example:
3895
3896          struct S { char arr[128]; };
3897          void fn () {
3898            S arr[5];
3899            for (const auto x : arr) { ... }
3900          }
3901
3902     It does not warn when the type being copied is a trivially-copyable
3903     type whose size is less than 64 bytes.
3904
3905     This warning also warns when a loop variable in a range-based
3906     for-loop is initialized with a value of a different type resulting
3907     in a copy.  For example:
3908
3909          void fn() {
3910            int arr[10];
3911            for (const double &x : arr) { ... }
3912          }
3913
3914     In the example above, in every iteration of the loop a temporary
3915     value of type 'double' is created and destroyed, to which the
3916     reference 'const double &' is bound.
3917
3918     This warning is enabled by '-Wall'.
3919
3920'-Wredundant-tags (C++ and Objective-C++ only)'
3921     Warn about redundant class-key and enum-key in references to class
3922     types and enumerated types in contexts where the key can be
3923     eliminated without causing an ambiguity.  For example:
3924
3925          struct foo;
3926          struct foo *p;   // warn that keyword struct can be eliminated
3927
3928     On the other hand, in this example there is no warning:
3929
3930          struct foo;
3931          void foo ();   // "hides" struct foo
3932          void bar (struct foo&);  // no warning, keyword struct is necessary
3933
3934'-Wno-subobject-linkage (C++ and Objective-C++ only)'
3935     Do not warn if a class type has a base or a field whose type uses
3936     the anonymous namespace or depends on a type with no linkage.  If a
3937     type A depends on a type B with no or internal linkage, defining it
3938     in multiple translation units would be an ODR violation because the
3939     meaning of B is different in each translation unit.  If A only
3940     appears in a single translation unit, the best way to silence the
3941     warning is to give it internal linkage by putting it in an
3942     anonymous namespace as well.  The compiler doesn't give this
3943     warning for types defined in the main .C file, as those are
3944     unlikely to have multiple definitions.  '-Wsubobject-linkage' is
3945     enabled by default.
3946
3947'-Weffc++ (C++ and Objective-C++ only)'
3948     Warn about violations of the following style guidelines from Scott
3949     Meyers' 'Effective C++' series of books:
3950
3951        * Define a copy constructor and an assignment operator for
3952          classes with dynamically-allocated memory.
3953
3954        * Prefer initialization to assignment in constructors.
3955
3956        * Have 'operator=' return a reference to '*this'.
3957
3958        * Don't try to return a reference when you must return an
3959          object.
3960
3961        * Distinguish between prefix and postfix forms of increment and
3962          decrement operators.
3963
3964        * Never overload '&&', '||', or ','.
3965
3966     This option also enables '-Wnon-virtual-dtor', which is also one of
3967     the effective C++ recommendations.  However, the check is extended
3968     to warn about the lack of virtual destructor in accessible
3969     non-polymorphic bases classes too.
3970
3971     When selecting this option, be aware that the standard library
3972     headers do not obey all of these guidelines; use 'grep -v' to
3973     filter out those warnings.
3974
3975'-Wno-exceptions (C++ and Objective-C++ only)'
3976     Disable the warning about the case when an exception handler is
3977     shadowed by another handler, which can point out a wrong ordering
3978     of exception handlers.
3979
3980'-Wstrict-null-sentinel (C++ and Objective-C++ only)'
3981     Warn about the use of an uncasted 'NULL' as sentinel.  When
3982     compiling only with GCC this is a valid sentinel, as 'NULL' is
3983     defined to '__null'.  Although it is a null pointer constant rather
3984     than a null pointer, it is guaranteed to be of the same size as a
3985     pointer.  But this use is not portable across different compilers.
3986
3987'-Wno-non-template-friend (C++ and Objective-C++ only)'
3988     Disable warnings when non-template friend functions are declared
3989     within a template.  In very old versions of GCC that predate
3990     implementation of the ISO standard, declarations such as 'friend
3991     int foo(int)', where the name of the friend is an unqualified-id,
3992     could be interpreted as a particular specialization of a template
3993     function; the warning exists to diagnose compatibility problems,
3994     and is enabled by default.
3995
3996'-Wold-style-cast (C++ and Objective-C++ only)'
3997     Warn if an old-style (C-style) cast to a non-void type is used
3998     within a C++ program.  The new-style casts ('dynamic_cast',
3999     'static_cast', 'reinterpret_cast', and 'const_cast') are less
4000     vulnerable to unintended effects and much easier to search for.
4001
4002'-Woverloaded-virtual (C++ and Objective-C++ only)'
4003     Warn when a function declaration hides virtual functions from a
4004     base class.  For example, in:
4005
4006          struct A {
4007            virtual void f();
4008          };
4009
4010          struct B: public A {
4011            void f(int);
4012          };
4013
4014     the 'A' class version of 'f' is hidden in 'B', and code like:
4015
4016          B* b;
4017          b->f();
4018
4019     fails to compile.
4020
4021'-Wno-pmf-conversions (C++ and Objective-C++ only)'
4022     Disable the diagnostic for converting a bound pointer to member
4023     function to a plain pointer.
4024
4025'-Wsign-promo (C++ and Objective-C++ only)'
4026     Warn when overload resolution chooses a promotion from unsigned or
4027     enumerated type to a signed type, over a conversion to an unsigned
4028     type of the same size.  Previous versions of G++ tried to preserve
4029     unsignedness, but the standard mandates the current behavior.
4030
4031'-Wtemplates (C++ and Objective-C++ only)'
4032     Warn when a primary template declaration is encountered.  Some
4033     coding rules disallow templates, and this may be used to enforce
4034     that rule.  The warning is inactive inside a system header file,
4035     such as the STL, so one can still use the STL. One may also
4036     instantiate or specialize templates.
4037
4038'-Wmismatched-new-delete (C++ and Objective-C++ only)'
4039     Warn for mismatches between calls to 'operator new' or 'operator
4040     delete' and the corresponding call to the allocation or
4041     deallocation function.  This includes invocations of C++ 'operator
4042     delete' with pointers returned from either mismatched forms of
4043     'operator new', or from other functions that allocate objects for
4044     which the 'operator delete' isn't a suitable deallocator, as well
4045     as calls to other deallocation functions with pointers returned
4046     from 'operator new' for which the deallocation function isn't
4047     suitable.
4048
4049     For example, the 'delete' expression in the function below is
4050     diagnosed because it doesn't match the array form of the 'new'
4051     expression the pointer argument was returned from.  Similarly, the
4052     call to 'free' is also diagnosed.
4053
4054          void f ()
4055          {
4056            int *a = new int[n];
4057            delete a;   // warning: mismatch in array forms of expressions
4058
4059            char *p = new char[n];
4060            free (p);   // warning: mismatch between new and free
4061          }
4062
4063     The related option '-Wmismatched-dealloc' diagnoses mismatches
4064     involving allocation and deallocation functions other than
4065     'operator new' and 'operator delete'.
4066
4067     '-Wmismatched-new-delete' is included in '-Wall'.
4068
4069'-Wmismatched-tags (C++ and Objective-C++ only)'
4070     Warn for declarations of structs, classes, and class templates and
4071     their specializations with a class-key that does not match either
4072     the definition or the first declaration if no definition is
4073     provided.
4074
4075     For example, the declaration of 'struct Object' in the argument
4076     list of 'draw' triggers the warning.  To avoid it, either remove
4077     the redundant class-key 'struct' or replace it with 'class' to
4078     match its definition.
4079          class Object {
4080          public:
4081            virtual ~Object () = 0;
4082          };
4083          void draw (struct Object*);
4084
4085     It is not wrong to declare a class with the class-key 'struct' as
4086     the example above shows.  The '-Wmismatched-tags' option is
4087     intended to help achieve a consistent style of class declarations.
4088     In code that is intended to be portable to Windows-based compilers
4089     the warning helps prevent unresolved references due to the
4090     difference in the mangling of symbols declared with different
4091     class-keys.  The option can be used either on its own or in
4092     conjunction with '-Wredundant-tags'.
4093
4094'-Wmultiple-inheritance (C++ and Objective-C++ only)'
4095     Warn when a class is defined with multiple direct base classes.
4096     Some coding rules disallow multiple inheritance, and this may be
4097     used to enforce that rule.  The warning is inactive inside a system
4098     header file, such as the STL, so one can still use the STL. One may
4099     also define classes that indirectly use multiple inheritance.
4100
4101'-Wvirtual-inheritance'
4102     Warn when a class is defined with a virtual direct base class.
4103     Some coding rules disallow multiple inheritance, and this may be
4104     used to enforce that rule.  The warning is inactive inside a system
4105     header file, such as the STL, so one can still use the STL. One may
4106     also define classes that indirectly use virtual inheritance.
4107
4108'-Wno-virtual-move-assign'
4109     Suppress warnings about inheriting from a virtual base with a
4110     non-trivial C++11 move assignment operator.  This is dangerous
4111     because if the virtual base is reachable along more than one path,
4112     it is moved multiple times, which can mean both objects end up in
4113     the moved-from state.  If the move assignment operator is written
4114     to avoid moving from a moved-from object, this warning can be
4115     disabled.
4116
4117'-Wnamespaces'
4118     Warn when a namespace definition is opened.  Some coding rules
4119     disallow namespaces, and this may be used to enforce that rule.
4120     The warning is inactive inside a system header file, such as the
4121     STL, so one can still use the STL. One may also use using
4122     directives and qualified names.
4123
4124'-Wno-terminate (C++ and Objective-C++ only)'
4125     Disable the warning about a throw-expression that will immediately
4126     result in a call to 'terminate'.
4127
4128'-Wno-vexing-parse (C++ and Objective-C++ only)'
4129     Warn about the most vexing parse syntactic ambiguity.  This warns
4130     about the cases when a declaration looks like a variable
4131     definition, but the C++ language requires it to be interpreted as a
4132     function declaration.  For instance:
4133
4134          void f(double a) {
4135            int i();        // extern int i (void);
4136            int n(int(a));  // extern int n (int);
4137          }
4138
4139     Another example:
4140
4141          struct S { S(int); };
4142          void f(double a) {
4143            S x(int(a));   // extern struct S x (int);
4144            S y(int());    // extern struct S y (int (*) (void));
4145            S z();         // extern struct S z (void);
4146          }
4147
4148     The warning will suggest options how to deal with such an
4149     ambiguity; e.g., it can suggest removing the parentheses or using
4150     braces instead.
4151
4152     This warning is enabled by default.
4153
4154'-Wno-class-conversion (C++ and Objective-C++ only)'
4155     Do not warn when a conversion function converts an object to the
4156     same type, to a base class of that type, or to void; such a
4157     conversion function will never be called.
4158
4159'-Wvolatile (C++ and Objective-C++ only)'
4160     Warn about deprecated uses of the 'volatile' qualifier.  This
4161     includes postfix and prefix '++' and '--' expressions of
4162     'volatile'-qualified types, using simple assignments where the left
4163     operand is a 'volatile'-qualified non-class type for their value,
4164     compound assignments where the left operand is a
4165     'volatile'-qualified non-class type, 'volatile'-qualified function
4166     return type, 'volatile'-qualified parameter type, and structured
4167     bindings of a 'volatile'-qualified type.  This usage was deprecated
4168     in C++20.
4169
4170     Enabled by default with '-std=c++20'.
4171
4172'-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
4173     Warn when a literal '0' is used as null pointer constant.  This can
4174     be useful to facilitate the conversion to 'nullptr' in C++11.
4175
4176'-Waligned-new'
4177     Warn about a new-expression of a type that requires greater
4178     alignment than the 'alignof(std::max_align_t)' but uses an
4179     allocation function without an explicit alignment parameter.  This
4180     option is enabled by '-Wall'.
4181
4182     Normally this only warns about global allocation functions, but
4183     '-Waligned-new=all' also warns about class member allocation
4184     functions.
4185
4186'-Wno-placement-new'
4187'-Wplacement-new=N'
4188     Warn about placement new expressions with undefined behavior, such
4189     as constructing an object in a buffer that is smaller than the type
4190     of the object.  For example, the placement new expression below is
4191     diagnosed because it attempts to construct an array of 64 integers
4192     in a buffer only 64 bytes large.
4193          char buf [64];
4194          new (buf) int[64];
4195     This warning is enabled by default.
4196
4197     '-Wplacement-new=1'
4198          This is the default warning level of '-Wplacement-new'.  At
4199          this level the warning is not issued for some strictly
4200          undefined constructs that GCC allows as extensions for
4201          compatibility with legacy code.  For example, the following
4202          'new' expression is not diagnosed at this level even though it
4203          has undefined behavior according to the C++ standard because
4204          it writes past the end of the one-element array.
4205               struct S { int n, a[1]; };
4206               S *s = (S *)malloc (sizeof *s + 31 * sizeof s->a[0]);
4207               new (s->a)int [32]();
4208
4209     '-Wplacement-new=2'
4210          At this level, in addition to diagnosing all the same
4211          constructs as at level 1, a diagnostic is also issued for
4212          placement new expressions that construct an object in the last
4213          member of structure whose type is an array of a single element
4214          and whose size is less than the size of the object being
4215          constructed.  While the previous example would be diagnosed,
4216          the following construct makes use of the flexible member array
4217          extension to avoid the warning at level 2.
4218               struct S { int n, a[]; };
4219               S *s = (S *)malloc (sizeof *s + 32 * sizeof s->a[0]);
4220               new (s->a)int [32]();
4221
4222'-Wcatch-value'
4223'-Wcatch-value=N (C++ and Objective-C++ only)'
4224     Warn about catch handlers that do not catch via reference.  With
4225     '-Wcatch-value=1' (or '-Wcatch-value' for short) warn about
4226     polymorphic class types that are caught by value.  With
4227     '-Wcatch-value=2' warn about all class types that are caught by
4228     value.  With '-Wcatch-value=3' warn about all types that are not
4229     caught by reference.  '-Wcatch-value' is enabled by '-Wall'.
4230
4231'-Wconditionally-supported (C++ and Objective-C++ only)'
4232     Warn for conditionally-supported (C++11 [intro.defs]) constructs.
4233
4234'-Wno-delete-incomplete (C++ and Objective-C++ only)'
4235     Do not warn when deleting a pointer to incomplete type, which may
4236     cause undefined behavior at runtime.  This warning is enabled by
4237     default.
4238
4239'-Wextra-semi (C++, Objective-C++ only)'
4240     Warn about redundant semicolons after in-class function
4241     definitions.
4242
4243'-Wno-inaccessible-base (C++, Objective-C++ only)'
4244     This option controls warnings when a base class is inaccessible in
4245     a class derived from it due to ambiguity.  The warning is enabled
4246     by default.  Note that the warning for ambiguous virtual bases is
4247     enabled by the '-Wextra' option.
4248          struct A { int a; };
4249
4250          struct B : A { };
4251
4252          struct C : B, A { };
4253
4254'-Wno-inherited-variadic-ctor'
4255     Suppress warnings about use of C++11 inheriting constructors when
4256     the base class inherited from has a C variadic constructor; the
4257     warning is on by default because the ellipsis is not inherited.
4258
4259'-Wno-invalid-offsetof (C++ and Objective-C++ only)'
4260     Suppress warnings from applying the 'offsetof' macro to a non-POD
4261     type.  According to the 2014 ISO C++ standard, applying 'offsetof'
4262     to a non-standard-layout type is undefined.  In existing C++
4263     implementations, however, 'offsetof' typically gives meaningful
4264     results.  This flag is for users who are aware that they are
4265     writing nonportable code and who have deliberately chosen to ignore
4266     the warning about it.
4267
4268     The restrictions on 'offsetof' may be relaxed in a future version
4269     of the C++ standard.
4270
4271'-Wsized-deallocation (C++ and Objective-C++ only)'
4272     Warn about a definition of an unsized deallocation function
4273          void operator delete (void *) noexcept;
4274          void operator delete[] (void *) noexcept;
4275     without a definition of the corresponding sized deallocation
4276     function
4277          void operator delete (void *, std::size_t) noexcept;
4278          void operator delete[] (void *, std::size_t) noexcept;
4279     or vice versa.  Enabled by '-Wextra' along with
4280     '-fsized-deallocation'.
4281
4282'-Wsuggest-final-types'
4283     Warn about types with virtual methods where code quality would be
4284     improved if the type were declared with the C++11 'final'
4285     specifier, or, if possible, declared in an anonymous namespace.
4286     This allows GCC to more aggressively devirtualize the polymorphic
4287     calls.  This warning is more effective with link-time optimization,
4288     where the information about the class hierarchy graph is more
4289     complete.
4290
4291'-Wsuggest-final-methods'
4292     Warn about virtual methods where code quality would be improved if
4293     the method were declared with the C++11 'final' specifier, or, if
4294     possible, its type were declared in an anonymous namespace or with
4295     the 'final' specifier.  This warning is more effective with
4296     link-time optimization, where the information about the class
4297     hierarchy graph is more complete.  It is recommended to first
4298     consider suggestions of '-Wsuggest-final-types' and then rebuild
4299     with new annotations.
4300
4301'-Wsuggest-override'
4302     Warn about overriding virtual functions that are not marked with
4303     the 'override' keyword.
4304
4305'-Wuse-after-free'
4306'-Wuse-after-free=N'
4307     Warn about uses of pointers to dynamically allocated objects that
4308     have been rendered indeterminate by a call to a deallocation
4309     function.  The warning is enabled at all optimization levels but
4310     may yield different results with optimization than without.
4311
4312     '-Wuse-after-free=1'
4313          At level 1 the warning attempts to diagnose only unconditional
4314          uses of pointers made indeterminate by a deallocation call or
4315          a successful call to 'realloc', regardless of whether or not
4316          the call resulted in an actual reallocatio of memory.  This
4317          includes double-'free' calls as well as uses in arithmetic and
4318          relational expressions.  Although undefined, uses of
4319          indeterminate pointers in equality (or inequality) expressions
4320          are not diagnosed at this level.
4321     '-Wuse-after-free=2'
4322          At level 2, in addition to unconditional uses, the warning
4323          also diagnoses conditional uses of pointers made indeterminate
4324          by a deallocation call.  As at level 2, uses in equality (or
4325          inequality) expressions are not diagnosed.  For example, the
4326          second call to 'free' in the following function is diagnosed
4327          at this level:
4328               struct A { int refcount; void *data; };
4329
4330               void release (struct A *p)
4331               {
4332                 int refcount = --p->refcount;
4333                 free (p);
4334                 if (refcount == 0)
4335                   free (p->data);   // warning: p may be used after free
4336               }
4337     '-Wuse-after-free=3'
4338          At level 3, the warning also diagnoses uses of indeterminate
4339          pointers in equality expressions.  All uses of indeterminate
4340          pointers are undefined but equality tests sometimes appear
4341          after calls to 'realloc' as an attempt to determine whether
4342          the call resulted in relocating the object to a different
4343          address.  They are diagnosed at a separate level to aid legacy
4344          code gradually transition to safe alternatives.  For example,
4345          the equality test in the function below is diagnosed at this
4346          level:
4347               void adjust_pointers (int**, int);
4348
4349               void grow (int **p, int n)
4350               {
4351                 int **q = (int**)realloc (p, n *= 2);
4352                 if (q == p)
4353                   return;
4354                 adjust_pointers ((int**)q, n);
4355               }
4356          To avoid the warning at this level, store offsets into
4357          allocated memory instead of pointers.  This approach obviates
4358          needing to adjust the stored pointers after reallocation.
4359
4360     '-Wuse-after-free=2' is included in '-Wall'.
4361
4362'-Wuseless-cast (C++ and Objective-C++ only)'
4363     Warn when an expression is casted to its own type.
4364
4365'-Wno-conversion-null (C++ and Objective-C++ only)'
4366     Do not warn for conversions between 'NULL' and non-pointer types.
4367     '-Wconversion-null' is enabled by default.
4368
4369
4370File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Diagnostic Message Formatting Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
4371
43723.6 Options Controlling Objective-C and Objective-C++ Dialects
4373==============================================================
4374
4375(NOTE: This manual does not describe the Objective-C and Objective-C++
4376languages themselves.  *Note Language Standards Supported by GCC:
4377Standards, for references.)
4378
4379 This section describes the command-line options that are only
4380meaningful for Objective-C and Objective-C++ programs.  You can also use
4381most of the language-independent GNU compiler options.  For example, you
4382might compile a file 'some_class.m' like this:
4383
4384     gcc -g -fgnu-runtime -O -c some_class.m
4385
4386In this example, '-fgnu-runtime' is an option meant only for Objective-C
4387and Objective-C++ programs; you can use the other options with any
4388language supported by GCC.
4389
4390 Note that since Objective-C is an extension of the C language,
4391Objective-C compilations may also use options specific to the C
4392front-end (e.g., '-Wtraditional').  Similarly, Objective-C++
4393compilations may use C++-specific options (e.g., '-Wabi').
4394
4395 Here is a list of options that are _only_ for compiling Objective-C and
4396Objective-C++ programs:
4397
4398'-fconstant-string-class=CLASS-NAME'
4399     Use CLASS-NAME as the name of the class to instantiate for each
4400     literal string specified with the syntax '@"..."'.  The default
4401     class name is 'NXConstantString' if the GNU runtime is being used,
4402     and 'NSConstantString' if the NeXT runtime is being used (see
4403     below).  The '-fconstant-cfstrings' option, if also present,
4404     overrides the '-fconstant-string-class' setting and cause '@"..."'
4405     literals to be laid out as constant CoreFoundation strings.
4406
4407'-fgnu-runtime'
4408     Generate object code compatible with the standard GNU Objective-C
4409     runtime.  This is the default for most types of systems.
4410
4411'-fnext-runtime'
4412     Generate output compatible with the NeXT runtime.  This is the
4413     default for NeXT-based systems, including Darwin and Mac OS X.  The
4414     macro '__NEXT_RUNTIME__' is predefined if (and only if) this option
4415     is used.
4416
4417'-fno-nil-receivers'
4418     Assume that all Objective-C message dispatches ('[receiver
4419     message:arg]') in this translation unit ensure that the receiver is
4420     not 'nil'.  This allows for more efficient entry points in the
4421     runtime to be used.  This option is only available in conjunction
4422     with the NeXT runtime and ABI version 0 or 1.
4423
4424'-fobjc-abi-version=N'
4425     Use version N of the Objective-C ABI for the selected runtime.
4426     This option is currently supported only for the NeXT runtime.  In
4427     that case, Version 0 is the traditional (32-bit) ABI without
4428     support for properties and other Objective-C 2.0 additions.
4429     Version 1 is the traditional (32-bit) ABI with support for
4430     properties and other Objective-C 2.0 additions.  Version 2 is the
4431     modern (64-bit) ABI. If nothing is specified, the default is
4432     Version 0 on 32-bit target machines, and Version 2 on 64-bit target
4433     machines.
4434
4435'-fobjc-call-cxx-cdtors'
4436     For each Objective-C class, check if any of its instance variables
4437     is a C++ object with a non-trivial default constructor.  If so,
4438     synthesize a special '- (id) .cxx_construct' instance method which
4439     runs non-trivial default constructors on any such instance
4440     variables, in order, and then return 'self'.  Similarly, check if
4441     any instance variable is a C++ object with a non-trivial
4442     destructor, and if so, synthesize a special '- (void)
4443     .cxx_destruct' method which runs all such default destructors, in
4444     reverse order.
4445
4446     The '- (id) .cxx_construct' and '- (void) .cxx_destruct' methods
4447     thusly generated only operate on instance variables declared in the
4448     current Objective-C class, and not those inherited from
4449     superclasses.  It is the responsibility of the Objective-C runtime
4450     to invoke all such methods in an object's inheritance hierarchy.
4451     The '- (id) .cxx_construct' methods are invoked by the runtime
4452     immediately after a new object instance is allocated; the '- (void)
4453     .cxx_destruct' methods are invoked immediately before the runtime
4454     deallocates an object instance.
4455
4456     As of this writing, only the NeXT runtime on Mac OS X 10.4 and
4457     later has support for invoking the '- (id) .cxx_construct' and '-
4458     (void) .cxx_destruct' methods.
4459
4460'-fobjc-direct-dispatch'
4461     Allow fast jumps to the message dispatcher.  On Darwin this is
4462     accomplished via the comm page.
4463
4464'-fobjc-exceptions'
4465     Enable syntactic support for structured exception handling in
4466     Objective-C, similar to what is offered by C++.  This option is
4467     required to use the Objective-C keywords '@try', '@throw',
4468     '@catch', '@finally' and '@synchronized'.  This option is available
4469     with both the GNU runtime and the NeXT runtime (but not available
4470     in conjunction with the NeXT runtime on Mac OS X 10.2 and earlier).
4471
4472'-fobjc-gc'
4473     Enable garbage collection (GC) in Objective-C and Objective-C++
4474     programs.  This option is only available with the NeXT runtime; the
4475     GNU runtime has a different garbage collection implementation that
4476     does not require special compiler flags.
4477
4478'-fobjc-nilcheck'
4479     For the NeXT runtime with version 2 of the ABI, check for a nil
4480     receiver in method invocations before doing the actual method call.
4481     This is the default and can be disabled using '-fno-objc-nilcheck'.
4482     Class methods and super calls are never checked for nil in this way
4483     no matter what this flag is set to.  Currently this flag does
4484     nothing when the GNU runtime, or an older version of the NeXT
4485     runtime ABI, is used.
4486
4487'-fobjc-std=objc1'
4488     Conform to the language syntax of Objective-C 1.0, the language
4489     recognized by GCC 4.0.  This only affects the Objective-C additions
4490     to the C/C++ language; it does not affect conformance to C/C++
4491     standards, which is controlled by the separate C/C++ dialect option
4492     flags.  When this option is used with the Objective-C or
4493     Objective-C++ compiler, any Objective-C syntax that is not
4494     recognized by GCC 4.0 is rejected.  This is useful if you need to
4495     make sure that your Objective-C code can be compiled with older
4496     versions of GCC.
4497
4498'-freplace-objc-classes'
4499     Emit a special marker instructing 'ld(1)' not to statically link in
4500     the resulting object file, and allow 'dyld(1)' to load it in at run
4501     time instead.  This is used in conjunction with the
4502     Fix-and-Continue debugging mode, where the object file in question
4503     may be recompiled and dynamically reloaded in the course of program
4504     execution, without the need to restart the program itself.
4505     Currently, Fix-and-Continue functionality is only available in
4506     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
4507
4508'-fzero-link'
4509     When compiling for the NeXT runtime, the compiler ordinarily
4510     replaces calls to 'objc_getClass("...")' (when the name of the
4511     class is known at compile time) with static class references that
4512     get initialized at load time, which improves run-time performance.
4513     Specifying the '-fzero-link' flag suppresses this behavior and
4514     causes calls to 'objc_getClass("...")' to be retained.  This is
4515     useful in Zero-Link debugging mode, since it allows for individual
4516     class implementations to be modified during program execution.  The
4517     GNU runtime currently always retains calls to
4518     'objc_get_class("...")' regardless of command-line options.
4519
4520'-fno-local-ivars'
4521     By default instance variables in Objective-C can be accessed as if
4522     they were local variables from within the methods of the class
4523     they're declared in.  This can lead to shadowing between instance
4524     variables and other variables declared either locally inside a
4525     class method or globally with the same name.  Specifying the
4526     '-fno-local-ivars' flag disables this behavior thus avoiding
4527     variable shadowing issues.
4528
4529'-fivar-visibility=[public|protected|private|package]'
4530     Set the default instance variable visibility to the specified
4531     option so that instance variables declared outside the scope of any
4532     access modifier directives default to the specified visibility.
4533
4534'-gen-decls'
4535     Dump interface declarations for all classes seen in the source file
4536     to a file named 'SOURCENAME.decl'.
4537
4538'-Wassign-intercept (Objective-C and Objective-C++ only)'
4539     Warn whenever an Objective-C assignment is being intercepted by the
4540     garbage collector.
4541
4542'-Wno-property-assign-default (Objective-C and Objective-C++ only)'
4543     Do not warn if a property for an Objective-C object has no assign
4544     semantics specified.
4545
4546'-Wno-protocol (Objective-C and Objective-C++ only)'
4547     If a class is declared to implement a protocol, a warning is issued
4548     for every method in the protocol that is not implemented by the
4549     class.  The default behavior is to issue a warning for every method
4550     not explicitly implemented in the class, even if a method
4551     implementation is inherited from the superclass.  If you use the
4552     '-Wno-protocol' option, then methods inherited from the superclass
4553     are considered to be implemented, and no warning is issued for
4554     them.
4555
4556'-Wobjc-root-class (Objective-C and Objective-C++ only)'
4557     Warn if a class interface lacks a superclass.  Most classes will
4558     inherit from 'NSObject' (or 'Object') for example.  When declaring
4559     classes intended to be root classes, the warning can be suppressed
4560     by marking their interfaces with
4561     '__attribute__((objc_root_class))'.
4562
4563'-Wselector (Objective-C and Objective-C++ only)'
4564     Warn if multiple methods of different types for the same selector
4565     are found during compilation.  The check is performed on the list
4566     of methods in the final stage of compilation.  Additionally, a
4567     check is performed for each selector appearing in a
4568     '@selector(...)' expression, and a corresponding method for that
4569     selector has been found during compilation.  Because these checks
4570     scan the method table only at the end of compilation, these
4571     warnings are not produced if the final stage of compilation is not
4572     reached, for example because an error is found during compilation,
4573     or because the '-fsyntax-only' option is being used.
4574
4575'-Wstrict-selector-match (Objective-C and Objective-C++ only)'
4576     Warn if multiple methods with differing argument and/or return
4577     types are found for a given selector when attempting to send a
4578     message using this selector to a receiver of type 'id' or 'Class'.
4579     When this flag is off (which is the default behavior), the compiler
4580     omits such warnings if any differences found are confined to types
4581     that share the same size and alignment.
4582
4583'-Wundeclared-selector (Objective-C and Objective-C++ only)'
4584     Warn if a '@selector(...)' expression referring to an undeclared
4585     selector is found.  A selector is considered undeclared if no
4586     method with that name has been declared before the '@selector(...)'
4587     expression, either explicitly in an '@interface' or '@protocol'
4588     declaration, or implicitly in an '@implementation' section.  This
4589     option always performs its checks as soon as a '@selector(...)'
4590     expression is found, while '-Wselector' only performs its checks in
4591     the final stage of compilation.  This also enforces the coding
4592     style convention that methods and selectors must be declared before
4593     being used.
4594
4595'-print-objc-runtime-info'
4596     Generate C header describing the largest structure that is passed
4597     by value, if any.
4598
4599
4600File: gcc.info,  Node: Diagnostic Message Formatting Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
4601
46023.7 Options to Control Diagnostic Messages Formatting
4603=====================================================
4604
4605Traditionally, diagnostic messages have been formatted irrespective of
4606the output device's aspect (e.g. its width, ...).  You can use the
4607options described below to control the formatting algorithm for
4608diagnostic messages, e.g. how many characters per line, how often source
4609location information should be reported.  Note that some language front
4610ends may not honor these options.
4611
4612'-fmessage-length=N'
4613     Try to format error messages so that they fit on lines of about N
4614     characters.  If N is zero, then no line-wrapping is done; each
4615     error message appears on a single line.  This is the default for
4616     all front ends.
4617
4618     Note - this option also affects the display of the '#error' and
4619     '#warning' pre-processor directives, and the 'deprecated'
4620     function/type/variable attribute.  It does not however affect the
4621     'pragma GCC warning' and 'pragma GCC error' pragmas.
4622
4623'-fdiagnostics-plain-output'
4624     This option requests that diagnostic output look as plain as
4625     possible, which may be useful when running 'dejagnu' or other
4626     utilities that need to parse diagnostics output and prefer that it
4627     remain more stable over time.  '-fdiagnostics-plain-output' is
4628     currently equivalent to the following options:
4629          -fno-diagnostics-show-caret
4630          -fno-diagnostics-show-line-numbers
4631          -fdiagnostics-color=never
4632          -fdiagnostics-urls=never
4633          -fdiagnostics-path-format=separate-events
4634     In the future, if GCC changes the default appearance of its
4635     diagnostics, the corresponding option to disable the new behavior
4636     will be added to this list.
4637
4638'-fdiagnostics-show-location=once'
4639     Only meaningful in line-wrapping mode.  Instructs the diagnostic
4640     messages reporter to emit source location information _once_; that
4641     is, in case the message is too long to fit on a single physical
4642     line and has to be wrapped, the source location won't be emitted
4643     (as prefix) again, over and over, in subsequent continuation lines.
4644     This is the default behavior.
4645
4646'-fdiagnostics-show-location=every-line'
4647     Only meaningful in line-wrapping mode.  Instructs the diagnostic
4648     messages reporter to emit the same source location information (as
4649     prefix) for physical lines that result from the process of breaking
4650     a message which is too long to fit on a single line.
4651
4652'-fdiagnostics-color[=WHEN]'
4653'-fno-diagnostics-color'
4654     Use color in diagnostics.  WHEN is 'never', 'always', or 'auto'.
4655     The default depends on how the compiler has been configured, it can
4656     be any of the above WHEN options or also 'never' if 'GCC_COLORS'
4657     environment variable isn't present in the environment, and 'auto'
4658     otherwise.  'auto' makes GCC use color only when the standard error
4659     is a terminal, and when not executing in an emacs shell.  The forms
4660     '-fdiagnostics-color' and '-fno-diagnostics-color' are aliases for
4661     '-fdiagnostics-color=always' and '-fdiagnostics-color=never',
4662     respectively.
4663
4664     The colors are defined by the environment variable 'GCC_COLORS'.
4665     Its value is a colon-separated list of capabilities and Select
4666     Graphic Rendition (SGR) substrings.  SGR commands are interpreted
4667     by the terminal or terminal emulator.  (See the section in the
4668     documentation of your text terminal for permitted values and their
4669     meanings as character attributes.)  These substring values are
4670     integers in decimal representation and can be concatenated with
4671     semicolons.  Common values to concatenate include '1' for bold, '4'
4672     for underline, '5' for blink, '7' for inverse, '39' for default
4673     foreground color, '30' to '37' for foreground colors, '90' to '97'
4674     for 16-color mode foreground colors, '38;5;0' to '38;5;255' for
4675     88-color and 256-color modes foreground colors, '49' for default
4676     background color, '40' to '47' for background colors, '100' to
4677     '107' for 16-color mode background colors, and '48;5;0' to
4678     '48;5;255' for 88-color and 256-color modes background colors.
4679
4680     The default 'GCC_COLORS' is
4681          error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
4682          quote=01:path=01;36:fixit-insert=32:fixit-delete=31:\
4683          diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
4684          type-diff=01;32
4685     where '01;31' is bold red, '01;35' is bold magenta, '01;36' is bold
4686     cyan, '32' is green, '34' is blue, '01' is bold, and '31' is red.
4687     Setting 'GCC_COLORS' to the empty string disables colors.
4688     Supported capabilities are as follows.
4689
4690     'error='
4691          SGR substring for error: markers.
4692
4693     'warning='
4694          SGR substring for warning: markers.
4695
4696     'note='
4697          SGR substring for note: markers.
4698
4699     'path='
4700          SGR substring for colorizing paths of control-flow events as
4701          printed via '-fdiagnostics-path-format=', such as the
4702          identifiers of individual events and lines indicating
4703          interprocedural calls and returns.
4704
4705     'range1='
4706          SGR substring for first additional range.
4707
4708     'range2='
4709          SGR substring for second additional range.
4710
4711     'locus='
4712          SGR substring for location information, 'file:line' or
4713          'file:line:column' etc.
4714
4715     'quote='
4716          SGR substring for information printed within quotes.
4717
4718     'fixit-insert='
4719          SGR substring for fix-it hints suggesting text to be inserted
4720          or replaced.
4721
4722     'fixit-delete='
4723          SGR substring for fix-it hints suggesting text to be deleted.
4724
4725     'diff-filename='
4726          SGR substring for filename headers within generated patches.
4727
4728     'diff-hunk='
4729          SGR substring for the starts of hunks within generated
4730          patches.
4731
4732     'diff-delete='
4733          SGR substring for deleted lines within generated patches.
4734
4735     'diff-insert='
4736          SGR substring for inserted lines within generated patches.
4737
4738     'type-diff='
4739          SGR substring for highlighting mismatching types within
4740          template arguments in the C++ frontend.
4741
4742'-fdiagnostics-urls[=WHEN]'
4743     Use escape sequences to embed URLs in diagnostics.  For example,
4744     when '-fdiagnostics-show-option' emits text showing the
4745     command-line option controlling a diagnostic, embed a URL for
4746     documentation of that option.
4747
4748     WHEN is 'never', 'always', or 'auto'.  'auto' makes GCC use URL
4749     escape sequences only when the standard error is a terminal, and
4750     when not executing in an emacs shell or any graphical terminal
4751     which is known to be incompatible with this feature, see below.
4752
4753     The default depends on how the compiler has been configured.  It
4754     can be any of the above WHEN options.
4755
4756     GCC can also be configured (via the
4757     '--with-diagnostics-urls=auto-if-env' configure-time option) so
4758     that the default is affected by environment variables.  Under such
4759     a configuration, GCC defaults to using 'auto' if either 'GCC_URLS'
4760     or 'TERM_URLS' environment variables are present and non-empty in
4761     the environment of the compiler, or 'never' if neither are.
4762
4763     However, even with '-fdiagnostics-urls=always' the behavior is
4764     dependent on those environment variables: If 'GCC_URLS' is set to
4765     empty or 'no', do not embed URLs in diagnostics.  If set to 'st',
4766     URLs use ST escape sequences.  If set to 'bel', the default, URLs
4767     use BEL escape sequences.  Any other non-empty value enables the
4768     feature.  If 'GCC_URLS' is not set, use 'TERM_URLS' as a fallback.
4769     Note: ST is an ANSI escape sequence, string terminator 'ESC \', BEL
4770     is an ASCII character, CTRL-G that usually sounds like a beep.
4771
4772     At this time GCC tries to detect also a few terminals that are
4773     known to not implement the URL feature, and have bugs or at least
4774     had bugs in some versions that are still in use, where the URL
4775     escapes are likely to misbehave, i.e.  print garbage on the screen.
4776     That list is currently xfce4-terminal, certain known to be buggy
4777     gnome-terminal versions, the linux console, and mingw.  This check
4778     can be skipped with the '-fdiagnostics-urls=always'.
4779
4780'-fno-diagnostics-show-option'
4781     By default, each diagnostic emitted includes text indicating the
4782     command-line option that directly controls the diagnostic (if such
4783     an option is known to the diagnostic machinery).  Specifying the
4784     '-fno-diagnostics-show-option' flag suppresses that behavior.
4785
4786'-fno-diagnostics-show-caret'
4787     By default, each diagnostic emitted includes the original source
4788     line and a caret '^' indicating the column.  This option suppresses
4789     this information.  The source line is truncated to N characters, if
4790     the '-fmessage-length=n' option is given.  When the output is done
4791     to the terminal, the width is limited to the width given by the
4792     'COLUMNS' environment variable or, if not set, to the terminal
4793     width.
4794
4795'-fno-diagnostics-show-labels'
4796     By default, when printing source code (via
4797     '-fdiagnostics-show-caret'), diagnostics can label ranges of source
4798     code with pertinent information, such as the types of expressions:
4799
4800              printf ("foo %s bar", long_i + long_j);
4801                           ~^       ~~~~~~~~~~~~~~~
4802                            |              |
4803                            char *         long int
4804
4805     This option suppresses the printing of these labels (in the example
4806     above, the vertical bars and the "char *" and "long int" text).
4807
4808'-fno-diagnostics-show-cwe'
4809     Diagnostic messages can optionally have an associated CWE
4810     (https://cwe.mitre.org/index.html) identifier.  GCC itself only
4811     provides such metadata for some of the '-fanalyzer' diagnostics.
4812     GCC plugins may also provide diagnostics with such metadata.  By
4813     default, if this information is present, it will be printed with
4814     the diagnostic.  This option suppresses the printing of this
4815     metadata.
4816
4817'-fno-diagnostics-show-line-numbers'
4818     By default, when printing source code (via
4819     '-fdiagnostics-show-caret'), a left margin is printed, showing line
4820     numbers.  This option suppresses this left margin.
4821
4822'-fdiagnostics-minimum-margin-width=WIDTH'
4823     This option controls the minimum width of the left margin printed
4824     by '-fdiagnostics-show-line-numbers'.  It defaults to 6.
4825
4826'-fdiagnostics-parseable-fixits'
4827     Emit fix-it hints in a machine-parseable format, suitable for
4828     consumption by IDEs.  For each fix-it, a line will be printed after
4829     the relevant diagnostic, starting with the string "fix-it:".  For
4830     example:
4831
4832          fix-it:"test.c":{45:3-45:21}:"gtk_widget_show_all"
4833
4834     The location is expressed as a half-open range, expressed as a
4835     count of bytes, starting at byte 1 for the initial column.  In the
4836     above example, bytes 3 through 20 of line 45 of "test.c" are to be
4837     replaced with the given string:
4838
4839          00000000011111111112222222222
4840          12345678901234567890123456789
4841            gtk_widget_showall (dlg);
4842            ^^^^^^^^^^^^^^^^^^
4843            gtk_widget_show_all
4844
4845     The filename and replacement string escape backslash as "\\", tab
4846     as "\t", newline as "\n", double quotes as "\"", non-printable
4847     characters as octal (e.g.  vertical tab as "\013").
4848
4849     An empty replacement string indicates that the given range is to be
4850     removed.  An empty range (e.g.  "45:3-45:3") indicates that the
4851     string is to be inserted at the given position.
4852
4853'-fdiagnostics-generate-patch'
4854     Print fix-it hints to stderr in unified diff format, after any
4855     diagnostics are printed.  For example:
4856
4857          --- test.c
4858          +++ test.c
4859          @ -42,5 +42,5 @
4860
4861           void show_cb(GtkDialog *dlg)
4862           {
4863          -  gtk_widget_showall(dlg);
4864          +  gtk_widget_show_all(dlg);
4865           }
4866
4867
4868     The diff may or may not be colorized, following the same rules as
4869     for diagnostics (see '-fdiagnostics-color').
4870
4871'-fdiagnostics-show-template-tree'
4872
4873     In the C++ frontend, when printing diagnostics showing mismatching
4874     template types, such as:
4875
4876            could not convert 'std::map<int, std::vector<double> >()'
4877              from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
4878
4879     the '-fdiagnostics-show-template-tree' flag enables printing a
4880     tree-like structure showing the common and differing parts of the
4881     types, such as:
4882
4883            map<
4884              [...],
4885              vector<
4886                [double != float]>>
4887
4888     The parts that differ are highlighted with color ("double" and
4889     "float" in this case).
4890
4891'-fno-elide-type'
4892     By default when the C++ frontend prints diagnostics showing
4893     mismatching template types, common parts of the types are printed
4894     as "[...]"  to simplify the error message.  For example:
4895
4896            could not convert 'std::map<int, std::vector<double> >()'
4897              from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
4898
4899     Specifying the '-fno-elide-type' flag suppresses that behavior.
4900     This flag also affects the output of the
4901     '-fdiagnostics-show-template-tree' flag.
4902
4903'-fdiagnostics-path-format=KIND'
4904     Specify how to print paths of control-flow events for diagnostics
4905     that have such a path associated with them.
4906
4907     KIND is 'none', 'separate-events', or 'inline-events', the default.
4908
4909     'none' means to not print diagnostic paths.
4910
4911     'separate-events' means to print a separate "note" diagnostic for
4912     each event within the diagnostic.  For example:
4913
4914          test.c:29:5: error: passing NULL as argument 1 to 'PyList_Append' which requires a non-NULL parameter
4915          test.c:25:10: note: (1) when 'PyList_New' fails, returning NULL
4916          test.c:27:3: note: (2) when 'i < count'
4917          test.c:29:5: note: (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
4918
4919     'inline-events' means to print the events "inline" within the
4920     source code.  This view attempts to consolidate the events into
4921     runs of sufficiently-close events, printing them as labelled ranges
4922     within the source.
4923
4924     For example, the same events as above might be printed as:
4925
4926            'test': events 1-3
4927              |
4928              |   25 |   list = PyList_New(0);
4929              |      |          ^~~~~~~~~~~~~
4930              |      |          |
4931              |      |          (1) when 'PyList_New' fails, returning NULL
4932              |   26 |
4933              |   27 |   for (i = 0; i < count; i++) {
4934              |      |   ~~~
4935              |      |   |
4936              |      |   (2) when 'i < count'
4937              |   28 |     item = PyLong_FromLong(random());
4938              |   29 |     PyList_Append(list, item);
4939              |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~
4940              |      |     |
4941              |      |     (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
4942              |
4943
4944     Interprocedural control flow is shown by grouping the events by
4945     stack frame, and using indentation to show how stack frames are
4946     nested, pushed, and popped.
4947
4948     For example:
4949
4950            'test': events 1-2
4951              |
4952              |  133 | {
4953              |      | ^
4954              |      | |
4955              |      | (1) entering 'test'
4956              |  134 |   boxed_int *obj = make_boxed_int (i);
4957              |      |                    ~~~~~~~~~~~~~~~~~~
4958              |      |                    |
4959              |      |                    (2) calling 'make_boxed_int'
4960              |
4961              +--> 'make_boxed_int': events 3-4
4962                     |
4963                     |  120 | {
4964                     |      | ^
4965                     |      | |
4966                     |      | (3) entering 'make_boxed_int'
4967                     |  121 |   boxed_int *result = (boxed_int *)wrapped_malloc (sizeof (boxed_int));
4968                     |      |                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4969                     |      |                                    |
4970                     |      |                                    (4) calling 'wrapped_malloc'
4971                     |
4972                     +--> 'wrapped_malloc': events 5-6
4973                            |
4974                            |    7 | {
4975                            |      | ^
4976                            |      | |
4977                            |      | (5) entering 'wrapped_malloc'
4978                            |    8 |   return malloc (size);
4979                            |      |          ~~~~~~~~~~~~~
4980                            |      |          |
4981                            |      |          (6) calling 'malloc'
4982                            |
4983              <-------------+
4984              |
4985           'test': event 7
4986              |
4987              |  138 |   free_boxed_int (obj);
4988              |      |   ^~~~~~~~~~~~~~~~~~~~
4989              |      |   |
4990              |      |   (7) calling 'free_boxed_int'
4991              |
4992          (etc)
4993
4994'-fdiagnostics-show-path-depths'
4995     This option provides additional information when printing
4996     control-flow paths associated with a diagnostic.
4997
4998     If this is option is provided then the stack depth will be printed
4999     for each run of events within
5000     '-fdiagnostics-path-format=separate-events'.
5001
5002     This is intended for use by GCC developers and plugin developers
5003     when debugging diagnostics that report interprocedural control
5004     flow.
5005
5006'-fno-show-column'
5007     Do not print column numbers in diagnostics.  This may be necessary
5008     if diagnostics are being scanned by a program that does not
5009     understand the column numbers, such as 'dejagnu'.
5010
5011'-fdiagnostics-column-unit=UNIT'
5012     Select the units for the column number.  This affects traditional
5013     diagnostics (in the absence of '-fno-show-column'), as well as JSON
5014     format diagnostics if requested.
5015
5016     The default UNIT, 'display', considers the number of display
5017     columns occupied by each character.  This may be larger than the
5018     number of bytes required to encode the character, in the case of
5019     tab characters, or it may be smaller, in the case of multibyte
5020     characters.  For example, the character "GREEK SMALL LETTER PI
5021     (U+03C0)" occupies one display column, and its UTF-8 encoding
5022     requires two bytes; the character "SLIGHTLY SMILING FACE (U+1F642)"
5023     occupies two display columns, and its UTF-8 encoding requires four
5024     bytes.
5025
5026     Setting UNIT to 'byte' changes the column number to the raw byte
5027     count in all cases, as was traditionally output by GCC prior to
5028     version 11.1.0.
5029
5030'-fdiagnostics-column-origin=ORIGIN'
5031     Select the origin for column numbers, i.e.  the column number
5032     assigned to the first column.  The default value of 1 corresponds
5033     to traditional GCC behavior and to the GNU style guide.  Some
5034     utilities may perform better with an origin of 0; any non-negative
5035     value may be specified.
5036
5037'-fdiagnostics-escape-format=FORMAT'
5038     When GCC prints pertinent source lines for a diagnostic it normally
5039     attempts to print the source bytes directly.  However, some
5040     diagnostics relate to encoding issues in the source file, such as
5041     malformed UTF-8, or issues with Unicode normalization.  These
5042     diagnostics are flagged so that GCC will escape bytes that are not
5043     printable ASCII when printing their pertinent source lines.
5044
5045     This option controls how such bytes should be escaped.
5046
5047     The default FORMAT, 'unicode' displays Unicode characters that are
5048     not printable ASCII in the form '<U+XXXX>', and bytes that do not
5049     correspond to a Unicode character validly-encoded in UTF-8-encoded
5050     will be displayed as hexadecimal in the form '<XX>'.
5051
5052     For example, a source line containing the string 'before' followed
5053     by the Unicode character U+03C0 ("GREEK SMALL LETTER PI", with
5054     UTF-8 encoding 0xCF 0x80) followed by the byte 0xBF (a stray UTF-8
5055     trailing byte), followed by the string 'after' will be printed for
5056     such a diagnostic as:
5057
5058           before<U+03C0><BF>after
5059
5060     Setting FORMAT to 'bytes' will display all non-printable-ASCII
5061     bytes in the form '<XX>', thus showing the underlying encoding of
5062     non-ASCII Unicode characters.  For the example above, the following
5063     will be printed:
5064
5065           before<CF><80><BF>after
5066
5067'-fdiagnostics-format=FORMAT'
5068     Select a different format for printing diagnostics.  FORMAT is
5069     'text' or 'json'.  The default is 'text'.
5070
5071     The 'json' format consists of a top-level JSON array containing
5072     JSON objects representing the diagnostics.
5073
5074     The JSON is emitted as one line, without formatting; the examples
5075     below have been formatted for clarity.
5076
5077     Diagnostics can have child diagnostics.  For example, this error
5078     and note:
5079
5080          misleading-indentation.c:15:3: warning: this 'if' clause does not
5081            guard... [-Wmisleading-indentation]
5082             15 |   if (flag)
5083                |   ^~
5084          misleading-indentation.c:17:5: note: ...this statement, but the latter
5085            is misleadingly indented as if it were guarded by the 'if'
5086             17 |     y = 2;
5087                |     ^
5088
5089     might be printed in JSON form (after formatting) like this:
5090
5091          [
5092              {
5093                  "kind": "warning",
5094                  "locations": [
5095                      {
5096                          "caret": {
5097          		    "display-column": 3,
5098          		    "byte-column": 3,
5099                              "column": 3,
5100                              "file": "misleading-indentation.c",
5101                              "line": 15
5102                          },
5103                          "finish": {
5104          		    "display-column": 4,
5105          		    "byte-column": 4,
5106                              "column": 4,
5107                              "file": "misleading-indentation.c",
5108                              "line": 15
5109                          }
5110                      }
5111                  ],
5112                  "message": "this \u2018if\u2019 clause does not guard...",
5113                  "option": "-Wmisleading-indentation",
5114                  "option_url": "https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmisleading-indentation",
5115                  "children": [
5116                      {
5117                          "kind": "note",
5118                          "locations": [
5119                              {
5120                                  "caret": {
5121          			    "display-column": 5,
5122          			    "byte-column": 5,
5123                                      "column": 5,
5124                                      "file": "misleading-indentation.c",
5125                                      "line": 17
5126                                  }
5127                              }
5128                          ],
5129                          "escape-source": false,
5130                          "message": "...this statement, but the latter is ..."
5131                      }
5132                  ]
5133          	"escape-source": false,
5134          	"column-origin": 1,
5135              }
5136          ]
5137
5138     where the 'note' is a child of the 'warning'.
5139
5140     A diagnostic has a 'kind'.  If this is 'warning', then there is an
5141     'option' key describing the command-line option controlling the
5142     warning.
5143
5144     A diagnostic can contain zero or more locations.  Each location has
5145     an optional 'label' string and up to three positions within it: a
5146     'caret' position and optional 'start' and 'finish' positions.  A
5147     position is described by a 'file' name, a 'line' number, and three
5148     numbers indicating a column position:
5149
5150        * 'display-column' counts display columns, accounting for tabs
5151          and multibyte characters.
5152
5153        * 'byte-column' counts raw bytes.
5154
5155        * 'column' is equal to one of the previous two, as dictated by
5156          the '-fdiagnostics-column-unit' option.
5157
5158     All three columns are relative to the origin specified by
5159     '-fdiagnostics-column-origin', which is typically equal to 1 but
5160     may be set, for instance, to 0 for compatibility with other
5161     utilities that number columns from 0.  The column origin is
5162     recorded in the JSON output in the 'column-origin' tag.  In the
5163     remaining examples below, the extra column number outputs have been
5164     omitted for brevity.
5165
5166     For example, this error:
5167
5168          bad-binary-ops.c:64:23: error: invalid operands to binary + (have 'S' {aka
5169             'struct s'} and 'T' {aka 'struct t'})
5170             64 |   return callee_4a () + callee_4b ();
5171                |          ~~~~~~~~~~~~ ^ ~~~~~~~~~~~~
5172                |          |              |
5173                |          |              T {aka struct t}
5174                |          S {aka struct s}
5175
5176     has three locations.  Its primary location is at the "+" token at
5177     column 23.  It has two secondary locations, describing the left and
5178     right-hand sides of the expression, which have labels.  It might be
5179     printed in JSON form as:
5180
5181              {
5182                  "children": [],
5183                  "kind": "error",
5184                  "locations": [
5185                      {
5186                          "caret": {
5187                              "column": 23, "file": "bad-binary-ops.c", "line": 64
5188                          }
5189                      },
5190                      {
5191                          "caret": {
5192                              "column": 10, "file": "bad-binary-ops.c", "line": 64
5193                          },
5194                          "finish": {
5195                              "column": 21, "file": "bad-binary-ops.c", "line": 64
5196                          },
5197                          "label": "S {aka struct s}"
5198                      },
5199                      {
5200                          "caret": {
5201                              "column": 25, "file": "bad-binary-ops.c", "line": 64
5202                          },
5203                          "finish": {
5204                              "column": 36, "file": "bad-binary-ops.c", "line": 64
5205                          },
5206                          "label": "T {aka struct t}"
5207                      }
5208                  ],
5209                  "escape-source": false,
5210                  "message": "invalid operands to binary + ..."
5211              }
5212
5213     If a diagnostic contains fix-it hints, it has a 'fixits' array,
5214     consisting of half-open intervals, similar to the output of
5215     '-fdiagnostics-parseable-fixits'.  For example, this diagnostic
5216     with a replacement fix-it hint:
5217
5218          demo.c:8:15: error: 'struct s' has no member named 'colour'; did you
5219            mean 'color'?
5220              8 |   return ptr->colour;
5221                |               ^~~~~~
5222                |               color
5223
5224     might be printed in JSON form as:
5225
5226              {
5227                  "children": [],
5228                  "fixits": [
5229                      {
5230                          "next": {
5231                              "column": 21,
5232                              "file": "demo.c",
5233                              "line": 8
5234                          },
5235                          "start": {
5236                              "column": 15,
5237                              "file": "demo.c",
5238                              "line": 8
5239                          },
5240                          "string": "color"
5241                      }
5242                  ],
5243                  "kind": "error",
5244                  "locations": [
5245                      {
5246                          "caret": {
5247                              "column": 15,
5248                              "file": "demo.c",
5249                              "line": 8
5250                          },
5251                          "finish": {
5252                              "column": 20,
5253                              "file": "demo.c",
5254                              "line": 8
5255                          }
5256                      }
5257                  ],
5258                  "escape-source": false,
5259                  "message": "\u2018struct s\u2019 has no member named ..."
5260              }
5261
5262     where the fix-it hint suggests replacing the text from 'start' up
5263     to but not including 'next' with 'string''s value.  Deletions are
5264     expressed via an empty value for 'string', insertions by having
5265     'start' equal 'next'.
5266
5267     If the diagnostic has a path of control-flow events associated with
5268     it, it has a 'path' array of objects representing the events.  Each
5269     event object has a 'description' string, a 'location' object, along
5270     with a 'function' string and a 'depth' number for representing
5271     interprocedural paths.  The 'function' represents the current
5272     function at that event, and the 'depth' represents the stack depth
5273     relative to some baseline: the higher, the more frames are within
5274     the stack.
5275
5276     For example, the intraprocedural example shown for
5277     '-fdiagnostics-path-format=' might have this JSON for its path:
5278
5279              "path": [
5280                  {
5281                      "depth": 0,
5282                      "description": "when 'PyList_New' fails, returning NULL",
5283                      "function": "test",
5284                      "location": {
5285                          "column": 10,
5286                          "file": "test.c",
5287                          "line": 25
5288                      }
5289                  },
5290                  {
5291                      "depth": 0,
5292                      "description": "when 'i < count'",
5293                      "function": "test",
5294                      "location": {
5295                          "column": 3,
5296                          "file": "test.c",
5297                          "line": 27
5298                      }
5299                  },
5300                  {
5301                      "depth": 0,
5302                      "description": "when calling 'PyList_Append', passing NULL from (1) as argument 1",
5303                      "function": "test",
5304                      "location": {
5305                          "column": 5,
5306                          "file": "test.c",
5307                          "line": 29
5308                      }
5309                  }
5310              ]
5311
5312     Diagnostics have a boolean attribute 'escape-source', hinting
5313     whether non-ASCII bytes should be escaped when printing the
5314     pertinent lines of source code ('true' for diagnostics involving
5315     source encoding issues).
5316
5317
5318File: gcc.info,  Node: Warning Options,  Next: Static Analyzer Options,  Prev: Diagnostic Message Formatting Options,  Up: Invoking GCC
5319
53203.8 Options to Request or Suppress Warnings
5321===========================================
5322
5323Warnings are diagnostic messages that report constructions that are not
5324inherently erroneous but that are risky or suggest there may have been
5325an error.
5326
5327 The following language-independent options do not enable specific
5328warnings but control the kinds of diagnostics produced by GCC.
5329
5330'-fsyntax-only'
5331     Check the code for syntax errors, but don't do anything beyond
5332     that.
5333
5334'-fmax-errors=N'
5335     Limits the maximum number of error messages to N, at which point
5336     GCC bails out rather than attempting to continue processing the
5337     source code.  If N is 0 (the default), there is no limit on the
5338     number of error messages produced.  If '-Wfatal-errors' is also
5339     specified, then '-Wfatal-errors' takes precedence over this option.
5340
5341'-w'
5342     Inhibit all warning messages.
5343
5344'-Werror'
5345     Make all warnings into errors.
5346
5347'-Werror='
5348     Make the specified warning into an error.  The specifier for a
5349     warning is appended; for example '-Werror=switch' turns the
5350     warnings controlled by '-Wswitch' into errors.  This switch takes a
5351     negative form, to be used to negate '-Werror' for specific
5352     warnings; for example '-Wno-error=switch' makes '-Wswitch' warnings
5353     not be errors, even when '-Werror' is in effect.
5354
5355     The warning message for each controllable warning includes the
5356     option that controls the warning.  That option can then be used
5357     with '-Werror=' and '-Wno-error=' as described above.  (Printing of
5358     the option in the warning message can be disabled using the
5359     '-fno-diagnostics-show-option' flag.)
5360
5361     Note that specifying '-Werror='FOO automatically implies '-W'FOO.
5362     However, '-Wno-error='FOO does not imply anything.
5363
5364'-Wfatal-errors'
5365     This option causes the compiler to abort compilation on the first
5366     error occurred rather than trying to keep going and printing
5367     further error messages.
5368
5369 You can request many specific warnings with options beginning with
5370'-W', for example '-Wimplicit' to request warnings on implicit
5371declarations.  Each of these specific warning options also has a
5372negative form beginning '-Wno-' to turn off warnings; for example,
5373'-Wno-implicit'.  This manual lists only one of the two forms, whichever
5374is not the default.  For further language-specific options also refer to
5375*note C++ Dialect Options:: and *note Objective-C and Objective-C++
5376Dialect Options::.  Additional warnings can be produced by enabling the
5377static analyzer; *Note Static Analyzer Options::.
5378
5379 Some options, such as '-Wall' and '-Wextra', turn on other options,
5380such as '-Wunused', which may turn on further options, such as
5381'-Wunused-value'.  The combined effect of positive and negative forms is
5382that more specific options have priority over less specific ones,
5383independently of their position in the command-line.  For options of the
5384same specificity, the last one takes effect.  Options enabled or
5385disabled via pragmas (*note Diagnostic Pragmas::) take effect as if they
5386appeared at the end of the command-line.
5387
5388 When an unrecognized warning option is requested (e.g.,
5389'-Wunknown-warning'), GCC emits a diagnostic stating that the option is
5390not recognized.  However, if the '-Wno-' form is used, the behavior is
5391slightly different: no diagnostic is produced for '-Wno-unknown-warning'
5392unless other diagnostics are being produced.  This allows the use of new
5393'-Wno-' options with old compilers, but if something goes wrong, the
5394compiler warns that an unrecognized option is present.
5395
5396 The effectiveness of some warnings depends on optimizations also being
5397enabled.  For example '-Wsuggest-final-types' is more effective with
5398link-time optimization and some instances of other warnings may not be
5399issued at all unless optimization is enabled.  While optimization in
5400general improves the efficacy of control and data flow sensitive
5401warnings, in some cases it may also cause false positives.
5402
5403'-Wpedantic'
5404'-pedantic'
5405     Issue all the warnings demanded by strict ISO C and ISO C++; reject
5406     all programs that use forbidden extensions, and some other programs
5407     that do not follow ISO C and ISO C++.  For ISO C, follows the
5408     version of the ISO C standard specified by any '-std' option used.
5409
5410     Valid ISO C and ISO C++ programs should compile properly with or
5411     without this option (though a rare few require '-ansi' or a '-std'
5412     option specifying the required version of ISO C).  However, without
5413     this option, certain GNU extensions and traditional C and C++
5414     features are supported as well.  With this option, they are
5415     rejected.
5416
5417     '-Wpedantic' does not cause warning messages for use of the
5418     alternate keywords whose names begin and end with '__'.  This
5419     alternate format can also be used to disable warnings for non-ISO
5420     '__intN' types, i.e.  '__intN__'.  Pedantic warnings are also
5421     disabled in the expression that follows '__extension__'.  However,
5422     only system header files should use these escape routes;
5423     application programs should avoid them.  *Note Alternate
5424     Keywords::.
5425
5426     Some users try to use '-Wpedantic' to check programs for strict ISO
5427     C conformance.  They soon find that it does not do quite what they
5428     want: it finds some non-ISO practices, but not all--only those for
5429     which ISO C _requires_ a diagnostic, and some others for which
5430     diagnostics have been added.
5431
5432     A feature to report any failure to conform to ISO C might be useful
5433     in some instances, but would require considerable additional work
5434     and would be quite different from '-Wpedantic'.  We don't have
5435     plans to support such a feature in the near future.
5436
5437     Where the standard specified with '-std' represents a GNU extended
5438     dialect of C, such as 'gnu90' or 'gnu99', there is a corresponding
5439     "base standard", the version of ISO C on which the GNU extended
5440     dialect is based.  Warnings from '-Wpedantic' are given where they
5441     are required by the base standard.  (It does not make sense for
5442     such warnings to be given only for features not in the specified
5443     GNU C dialect, since by definition the GNU dialects of C include
5444     all features the compiler supports with the given option, and there
5445     would be nothing to warn about.)
5446
5447'-pedantic-errors'
5448     Give an error whenever the "base standard" (see '-Wpedantic')
5449     requires a diagnostic, in some cases where there is undefined
5450     behavior at compile-time and in some other cases that do not
5451     prevent compilation of programs that are valid according to the
5452     standard.  This is not equivalent to '-Werror=pedantic', since
5453     there are errors enabled by this option and not enabled by the
5454     latter and vice versa.
5455
5456'-Wall'
5457     This enables all the warnings about constructions that some users
5458     consider questionable, and that are easy to avoid (or modify to
5459     prevent the warning), even in conjunction with macros.  This also
5460     enables some language-specific warnings described in *note C++
5461     Dialect Options:: and *note Objective-C and Objective-C++ Dialect
5462     Options::.
5463
5464     '-Wall' turns on the following warning flags:
5465
5466          -Waddress
5467          -Warray-bounds=1 (only with -O2)
5468          -Warray-compare
5469          -Warray-parameter=2 (C and Objective-C only)
5470          -Wbool-compare
5471          -Wbool-operation
5472          -Wc++11-compat  -Wc++14-compat
5473          -Wcatch-value (C++ and Objective-C++ only)
5474          -Wchar-subscripts
5475          -Wcomment
5476          -Wdangling-pointer=2
5477          -Wduplicate-decl-specifier (C and Objective-C only)
5478          -Wenum-compare (in C/ObjC; this is on by default in C++)
5479          -Wformat
5480          -Wformat-overflow
5481          -Wformat-truncation
5482          -Wint-in-bool-context
5483          -Wimplicit (C and Objective-C only)
5484          -Wimplicit-int (C and Objective-C only)
5485          -Wimplicit-function-declaration (C and Objective-C only)
5486          -Winit-self (only for C++)
5487          -Wlogical-not-parentheses
5488          -Wmain (only for C/ObjC and unless -ffreestanding)
5489          -Wmaybe-uninitialized
5490          -Wmemset-elt-size
5491          -Wmemset-transposed-args
5492          -Wmisleading-indentation (only for C/C++)
5493          -Wmismatched-dealloc
5494          -Wmismatched-new-delete (only for C/C++)
5495          -Wmissing-attributes
5496          -Wmissing-braces (only for C/ObjC)
5497          -Wmultistatement-macros
5498          -Wnarrowing (only for C++)
5499          -Wnonnull
5500          -Wnonnull-compare
5501          -Wopenmp-simd
5502          -Wparentheses
5503          -Wpessimizing-move (only for C++)
5504          -Wpointer-sign
5505          -Wrange-loop-construct (only for C++)
5506          -Wreorder
5507          -Wrestrict
5508          -Wreturn-type
5509          -Wsequence-point
5510          -Wsign-compare (only in C++)
5511          -Wsizeof-array-div
5512          -Wsizeof-pointer-div
5513          -Wsizeof-pointer-memaccess
5514          -Wstrict-aliasing
5515          -Wstrict-overflow=1
5516          -Wswitch
5517          -Wtautological-compare
5518          -Wtrigraphs
5519          -Wuninitialized
5520          -Wunknown-pragmas
5521          -Wunused-function
5522          -Wunused-label
5523          -Wunused-value
5524          -Wunused-variable
5525          -Wuse-after-free=3
5526          -Wvla-parameter (C and Objective-C only)
5527          -Wvolatile-register-var
5528          -Wzero-length-bounds
5529
5530     Note that some warning flags are not implied by '-Wall'.  Some of
5531     them warn about constructions that users generally do not consider
5532     questionable, but which occasionally you might wish to check for;
5533     others warn about constructions that are necessary or hard to avoid
5534     in some cases, and there is no simple way to modify the code to
5535     suppress the warning.  Some of them are enabled by '-Wextra' but
5536     many of them must be enabled individually.
5537
5538'-Wextra'
5539     This enables some extra warning flags that are not enabled by
5540     '-Wall'.  (This option used to be called '-W'.  The older name is
5541     still supported, but the newer name is more descriptive.)
5542
5543          -Wclobbered
5544          -Wcast-function-type
5545          -Wdeprecated-copy (C++ only)
5546          -Wempty-body
5547          -Wenum-conversion (C only)
5548          -Wignored-qualifiers
5549          -Wimplicit-fallthrough=3
5550          -Wmissing-field-initializers
5551          -Wmissing-parameter-type (C only)
5552          -Wold-style-declaration (C only)
5553          -Woverride-init
5554          -Wsign-compare (C only)
5555          -Wstring-compare
5556          -Wredundant-move (only for C++)
5557          -Wtype-limits
5558          -Wuninitialized
5559          -Wshift-negative-value (in C++11 to C++17 and in C99 and newer)
5560          -Wunused-parameter (only with -Wunused or -Wall)
5561          -Wunused-but-set-parameter (only with -Wunused or -Wall)
5562
5563     The option '-Wextra' also prints warning messages for the following
5564     cases:
5565
5566        * A pointer is compared against integer zero with '<', '<=',
5567          '>', or '>='.
5568
5569        * (C++ only) An enumerator and a non-enumerator both appear in a
5570          conditional expression.
5571
5572        * (C++ only) Ambiguous virtual bases.
5573
5574        * (C++ only) Subscripting an array that has been declared
5575          'register'.
5576
5577        * (C++ only) Taking the address of a variable that has been
5578          declared 'register'.
5579
5580        * (C++ only) A base class is not initialized in the copy
5581          constructor of a derived class.
5582
5583'-Wabi (C, Objective-C, C++ and Objective-C++ only)'
5584
5585     Warn about code affected by ABI changes.  This includes code that
5586     may not be compatible with the vendor-neutral C++ ABI as well as
5587     the psABI for the particular target.
5588
5589     Since G++ now defaults to updating the ABI with each major release,
5590     normally '-Wabi' warns only about C++ ABI compatibility problems if
5591     there is a check added later in a release series for an ABI issue
5592     discovered since the initial release.  '-Wabi' warns about more
5593     things if an older ABI version is selected (with
5594     '-fabi-version=N').
5595
5596     '-Wabi' can also be used with an explicit version number to warn
5597     about C++ ABI compatibility with a particular '-fabi-version'
5598     level, e.g. '-Wabi=2' to warn about changes relative to
5599     '-fabi-version=2'.
5600
5601     If an explicit version number is provided and
5602     '-fabi-compat-version' is not specified, the version number from
5603     this option is used for compatibility aliases.  If no explicit
5604     version number is provided with this option, but
5605     '-fabi-compat-version' is specified, that version number is used
5606     for C++ ABI warnings.
5607
5608     Although an effort has been made to warn about all such cases,
5609     there are probably some cases that are not warned about, even
5610     though G++ is generating incompatible code.  There may also be
5611     cases where warnings are emitted even though the code that is
5612     generated is compatible.
5613
5614     You should rewrite your code to avoid these warnings if you are
5615     concerned about the fact that code generated by G++ may not be
5616     binary compatible with code generated by other compilers.
5617
5618     Known incompatibilities in '-fabi-version=2' (which was the default
5619     from GCC 3.4 to 4.9) include:
5620
5621        * A template with a non-type template parameter of reference
5622          type was mangled incorrectly:
5623               extern int N;
5624               template <int &> struct S {};
5625               void n (S<N>) {2}
5626
5627          This was fixed in '-fabi-version=3'.
5628
5629        * SIMD vector types declared using '__attribute ((vector_size))'
5630          were mangled in a non-standard way that does not allow for
5631          overloading of functions taking vectors of different sizes.
5632
5633          The mangling was changed in '-fabi-version=4'.
5634
5635        * '__attribute ((const))' and 'noreturn' were mangled as type
5636          qualifiers, and 'decltype' of a plain declaration was folded
5637          away.
5638
5639          These mangling issues were fixed in '-fabi-version=5'.
5640
5641        * Scoped enumerators passed as arguments to a variadic function
5642          are promoted like unscoped enumerators, causing 'va_arg' to
5643          complain.  On most targets this does not actually affect the
5644          parameter passing ABI, as there is no way to pass an argument
5645          smaller than 'int'.
5646
5647          Also, the ABI changed the mangling of template argument packs,
5648          'const_cast', 'static_cast', prefix increment/decrement, and a
5649          class scope function used as a template argument.
5650
5651          These issues were corrected in '-fabi-version=6'.
5652
5653        * Lambdas in default argument scope were mangled incorrectly,
5654          and the ABI changed the mangling of 'nullptr_t'.
5655
5656          These issues were corrected in '-fabi-version=7'.
5657
5658        * When mangling a function type with function-cv-qualifiers, the
5659          un-qualified function type was incorrectly treated as a
5660          substitution candidate.
5661
5662          This was fixed in '-fabi-version=8', the default for GCC 5.1.
5663
5664        * 'decltype(nullptr)' incorrectly had an alignment of 1, leading
5665          to unaligned accesses.  Note that this did not affect the ABI
5666          of a function with a 'nullptr_t' parameter, as parameters have
5667          a minimum alignment.
5668
5669          This was fixed in '-fabi-version=9', the default for GCC 5.2.
5670
5671        * Target-specific attributes that affect the identity of a type,
5672          such as ia32 calling conventions on a function type (stdcall,
5673          regparm, etc.), did not affect the mangled name, leading to
5674          name collisions when function pointers were used as template
5675          arguments.
5676
5677          This was fixed in '-fabi-version=10', the default for GCC 6.1.
5678
5679     This option also enables warnings about psABI-related changes.  The
5680     known psABI changes at this point include:
5681
5682        * For SysV/x86-64, unions with 'long double' members are passed
5683          in memory as specified in psABI. Prior to GCC 4.4, this was
5684          not the case.  For example:
5685
5686               union U {
5687                 long double ld;
5688                 int i;
5689               };
5690
5691          'union U' is now always passed in memory.
5692
5693'-Wchar-subscripts'
5694     Warn if an array subscript has type 'char'.  This is a common cause
5695     of error, as programmers often forget that this type is signed on
5696     some machines.  This warning is enabled by '-Wall'.
5697
5698'-Wno-coverage-mismatch'
5699     Warn if feedback profiles do not match when using the
5700     '-fprofile-use' option.  If a source file is changed between
5701     compiling with '-fprofile-generate' and with '-fprofile-use', the
5702     files with the profile feedback can fail to match the source file
5703     and GCC cannot use the profile feedback information.  By default,
5704     this warning is enabled and is treated as an error.
5705     '-Wno-coverage-mismatch' can be used to disable the warning or
5706     '-Wno-error=coverage-mismatch' can be used to disable the error.
5707     Disabling the error for this warning can result in poorly optimized
5708     code and is useful only in the case of very minor changes such as
5709     bug fixes to an existing code-base.  Completely disabling the
5710     warning is not recommended.
5711
5712'-Wno-coverage-invalid-line-number'
5713     Warn in case a function ends earlier than it begins due to an
5714     invalid linenum macros.  The warning is emitted only with
5715     '--coverage' enabled.
5716
5717     By default, this warning is enabled and is treated as an error.
5718     '-Wno-coverage-invalid-line-number' can be used to disable the
5719     warning or '-Wno-error=coverage-invalid-line-number' can be used to
5720     disable the error.
5721
5722'-Wno-cpp (C, Objective-C, C++, Objective-C++ and Fortran only)'
5723     Suppress warning messages emitted by '#warning' directives.
5724
5725'-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
5726     Give a warning when a value of type 'float' is implicitly promoted
5727     to 'double'.  CPUs with a 32-bit "single-precision" floating-point
5728     unit implement 'float' in hardware, but emulate 'double' in
5729     software.  On such a machine, doing computations using 'double'
5730     values is much more expensive because of the overhead required for
5731     software emulation.
5732
5733     It is easy to accidentally do computations with 'double' because
5734     floating-point literals are implicitly of type 'double'.  For
5735     example, in:
5736          float area(float radius)
5737          {
5738             return 3.14159 * radius * radius;
5739          }
5740     the compiler performs the entire computation with 'double' because
5741     the floating-point literal is a 'double'.
5742
5743'-Wduplicate-decl-specifier (C and Objective-C only)'
5744     Warn if a declaration has duplicate 'const', 'volatile', 'restrict'
5745     or '_Atomic' specifier.  This warning is enabled by '-Wall'.
5746
5747'-Wformat'
5748'-Wformat=N'
5749     Check calls to 'printf' and 'scanf', etc., to make sure that the
5750     arguments supplied have types appropriate to the format string
5751     specified, and that the conversions specified in the format string
5752     make sense.  This includes standard functions, and others specified
5753     by format attributes (*note Function Attributes::), in the
5754     'printf', 'scanf', 'strftime' and 'strfmon' (an X/Open extension,
5755     not in the C standard) families (or other target-specific
5756     families).  Which functions are checked without format attributes
5757     having been specified depends on the standard version selected, and
5758     such checks of functions without the attribute specified are
5759     disabled by '-ffreestanding' or '-fno-builtin'.
5760
5761     The formats are checked against the format features supported by
5762     GNU libc version 2.2.  These include all ISO C90 and C99 features,
5763     as well as features from the Single Unix Specification and some BSD
5764     and GNU extensions.  Other library implementations may not support
5765     all these features; GCC does not support warning about features
5766     that go beyond a particular library's limitations.  However, if
5767     '-Wpedantic' is used with '-Wformat', warnings are given about
5768     format features not in the selected standard version (but not for
5769     'strfmon' formats, since those are not in any version of the C
5770     standard).  *Note Options Controlling C Dialect: C Dialect Options.
5771
5772     '-Wformat=1'
5773     '-Wformat'
5774          Option '-Wformat' is equivalent to '-Wformat=1', and
5775          '-Wno-format' is equivalent to '-Wformat=0'.  Since '-Wformat'
5776          also checks for null format arguments for several functions,
5777          '-Wformat' also implies '-Wnonnull'.  Some aspects of this
5778          level of format checking can be disabled by the options:
5779          '-Wno-format-contains-nul', '-Wno-format-extra-args', and
5780          '-Wno-format-zero-length'.  '-Wformat' is enabled by '-Wall'.
5781
5782     '-Wformat=2'
5783          Enable '-Wformat' plus additional format checks.  Currently
5784          equivalent to '-Wformat -Wformat-nonliteral -Wformat-security
5785          -Wformat-y2k'.
5786
5787'-Wno-format-contains-nul'
5788     If '-Wformat' is specified, do not warn about format strings that
5789     contain NUL bytes.
5790
5791'-Wno-format-extra-args'
5792     If '-Wformat' is specified, do not warn about excess arguments to a
5793     'printf' or 'scanf' format function.  The C standard specifies that
5794     such arguments are ignored.
5795
5796     Where the unused arguments lie between used arguments that are
5797     specified with '$' operand number specifications, normally warnings
5798     are still given, since the implementation could not know what type
5799     to pass to 'va_arg' to skip the unused arguments.  However, in the
5800     case of 'scanf' formats, this option suppresses the warning if the
5801     unused arguments are all pointers, since the Single Unix
5802     Specification says that such unused arguments are allowed.
5803
5804'-Wformat-overflow'
5805'-Wformat-overflow=LEVEL'
5806     Warn about calls to formatted input/output functions such as
5807     'sprintf' and 'vsprintf' that might overflow the destination
5808     buffer.  When the exact number of bytes written by a format
5809     directive cannot be determined at compile-time it is estimated
5810     based on heuristics that depend on the LEVEL argument and on
5811     optimization.  While enabling optimization will in most cases
5812     improve the accuracy of the warning, it may also result in false
5813     positives.
5814
5815     '-Wformat-overflow'
5816     '-Wformat-overflow=1'
5817          Level 1 of '-Wformat-overflow' enabled by '-Wformat' employs a
5818          conservative approach that warns only about calls that most
5819          likely overflow the buffer.  At this level, numeric arguments
5820          to format directives with unknown values are assumed to have
5821          the value of one, and strings of unknown length to be empty.
5822          Numeric arguments that are known to be bounded to a subrange
5823          of their type, or string arguments whose output is bounded
5824          either by their directive's precision or by a finite set of
5825          string literals, are assumed to take on the value within the
5826          range that results in the most bytes on output.  For example,
5827          the call to 'sprintf' below is diagnosed because even with
5828          both A and B equal to zero, the terminating NUL character
5829          (''\0'') appended by the function to the destination buffer
5830          will be written past its end.  Increasing the size of the
5831          buffer by a single byte is sufficient to avoid the warning,
5832          though it may not be sufficient to avoid the overflow.
5833
5834               void f (int a, int b)
5835               {
5836                 char buf [13];
5837                 sprintf (buf, "a = %i, b = %i\n", a, b);
5838               }
5839
5840     '-Wformat-overflow=2'
5841          Level 2 warns also about calls that might overflow the
5842          destination buffer given an argument of sufficient length or
5843          magnitude.  At level 2, unknown numeric arguments are assumed
5844          to have the minimum representable value for signed types with
5845          a precision greater than 1, and the maximum representable
5846          value otherwise.  Unknown string arguments whose length cannot
5847          be assumed to be bounded either by the directive's precision,
5848          or by a finite set of string literals they may evaluate to, or
5849          the character array they may point to, are assumed to be 1
5850          character long.
5851
5852          At level 2, the call in the example above is again diagnosed,
5853          but this time because with A equal to a 32-bit 'INT_MIN' the
5854          first '%i' directive will write some of its digits beyond the
5855          end of the destination buffer.  To make the call safe
5856          regardless of the values of the two variables, the size of the
5857          destination buffer must be increased to at least 34 bytes.
5858          GCC includes the minimum size of the buffer in an
5859          informational note following the warning.
5860
5861          An alternative to increasing the size of the destination
5862          buffer is to constrain the range of formatted values.  The
5863          maximum length of string arguments can be bounded by
5864          specifying the precision in the format directive.  When
5865          numeric arguments of format directives can be assumed to be
5866          bounded by less than the precision of their type, choosing an
5867          appropriate length modifier to the format specifier will
5868          reduce the required buffer size.  For example, if A and B in
5869          the example above can be assumed to be within the precision of
5870          the 'short int' type then using either the '%hi' format
5871          directive or casting the argument to 'short' reduces the
5872          maximum required size of the buffer to 24 bytes.
5873
5874               void f (int a, int b)
5875               {
5876                 char buf [23];
5877                 sprintf (buf, "a = %hi, b = %i\n", a, (short)b);
5878               }
5879
5880'-Wno-format-zero-length'
5881     If '-Wformat' is specified, do not warn about zero-length formats.
5882     The C standard specifies that zero-length formats are allowed.
5883
5884'-Wformat-nonliteral'
5885     If '-Wformat' is specified, also warn if the format string is not a
5886     string literal and so cannot be checked, unless the format function
5887     takes its format arguments as a 'va_list'.
5888
5889'-Wformat-security'
5890     If '-Wformat' is specified, also warn about uses of format
5891     functions that represent possible security problems.  At present,
5892     this warns about calls to 'printf' and 'scanf' functions where the
5893     format string is not a string literal and there are no format
5894     arguments, as in 'printf (foo);'.  This may be a security hole if
5895     the format string came from untrusted input and contains '%n'.
5896     (This is currently a subset of what '-Wformat-nonliteral' warns
5897     about, but in future warnings may be added to '-Wformat-security'
5898     that are not included in '-Wformat-nonliteral'.)
5899
5900'-Wformat-signedness'
5901     If '-Wformat' is specified, also warn if the format string requires
5902     an unsigned argument and the argument is signed and vice versa.
5903
5904'-Wformat-truncation'
5905'-Wformat-truncation=LEVEL'
5906     Warn about calls to formatted input/output functions such as
5907     'snprintf' and 'vsnprintf' that might result in output truncation.
5908     When the exact number of bytes written by a format directive cannot
5909     be determined at compile-time it is estimated based on heuristics
5910     that depend on the LEVEL argument and on optimization.  While
5911     enabling optimization will in most cases improve the accuracy of
5912     the warning, it may also result in false positives.  Except as
5913     noted otherwise, the option uses the same logic
5914     '-Wformat-overflow'.
5915
5916     '-Wformat-truncation'
5917     '-Wformat-truncation=1'
5918          Level 1 of '-Wformat-truncation' enabled by '-Wformat' employs
5919          a conservative approach that warns only about calls to bounded
5920          functions whose return value is unused and that will most
5921          likely result in output truncation.
5922
5923     '-Wformat-truncation=2'
5924          Level 2 warns also about calls to bounded functions whose
5925          return value is used and that might result in truncation given
5926          an argument of sufficient length or magnitude.
5927
5928'-Wformat-y2k'
5929     If '-Wformat' is specified, also warn about 'strftime' formats that
5930     may yield only a two-digit year.
5931
5932'-Wnonnull'
5933     Warn about passing a null pointer for arguments marked as requiring
5934     a non-null value by the 'nonnull' function attribute.
5935
5936     '-Wnonnull' is included in '-Wall' and '-Wformat'.  It can be
5937     disabled with the '-Wno-nonnull' option.
5938
5939'-Wnonnull-compare'
5940     Warn when comparing an argument marked with the 'nonnull' function
5941     attribute against null inside the function.
5942
5943     '-Wnonnull-compare' is included in '-Wall'.  It can be disabled
5944     with the '-Wno-nonnull-compare' option.
5945
5946'-Wnull-dereference'
5947     Warn if the compiler detects paths that trigger erroneous or
5948     undefined behavior due to dereferencing a null pointer.  This
5949     option is only active when '-fdelete-null-pointer-checks' is
5950     active, which is enabled by optimizations in most targets.  The
5951     precision of the warnings depends on the optimization options used.
5952
5953'-Winfinite-recursion'
5954     Warn about infinitely recursive calls.  The warning is effective at
5955     all optimization levels but requires optimization in order to
5956     detect infinite recursion in calls between two or more functions.
5957     '-Winfinite-recursion' is included in '-Wall'.
5958
5959'-Winit-self (C, C++, Objective-C and Objective-C++ only)'
5960     Warn about uninitialized variables that are initialized with
5961     themselves.  Note this option can only be used with the
5962     '-Wuninitialized' option.
5963
5964     For example, GCC warns about 'i' being uninitialized in the
5965     following snippet only when '-Winit-self' has been specified:
5966          int f()
5967          {
5968            int i = i;
5969            return i;
5970          }
5971
5972     This warning is enabled by '-Wall' in C++.
5973
5974'-Wno-implicit-int (C and Objective-C only)'
5975     This option controls warnings when a declaration does not specify a
5976     type.  This warning is enabled by default in C99 and later dialects
5977     of C, and also by '-Wall'.
5978
5979'-Wno-implicit-function-declaration (C and Objective-C only)'
5980     This option controls warnings when a function is used before being
5981     declared.  This warning is enabled by default in C99 and later
5982     dialects of C, and also by '-Wall'.  The warning is made into an
5983     error by '-pedantic-errors'.
5984
5985'-Wimplicit (C and Objective-C only)'
5986     Same as '-Wimplicit-int' and '-Wimplicit-function-declaration'.
5987     This warning is enabled by '-Wall'.
5988
5989'-Wimplicit-fallthrough'
5990     '-Wimplicit-fallthrough' is the same as '-Wimplicit-fallthrough=3'
5991     and '-Wno-implicit-fallthrough' is the same as
5992     '-Wimplicit-fallthrough=0'.
5993
5994'-Wimplicit-fallthrough=N'
5995     Warn when a switch case falls through.  For example:
5996
5997          switch (cond)
5998            {
5999            case 1:
6000              a = 1;
6001              break;
6002            case 2:
6003              a = 2;
6004            case 3:
6005              a = 3;
6006              break;
6007            }
6008
6009     This warning does not warn when the last statement of a case cannot
6010     fall through, e.g.  when there is a return statement or a call to
6011     function declared with the noreturn attribute.
6012     '-Wimplicit-fallthrough=' also takes into account control flow
6013     statements, such as ifs, and only warns when appropriate.  E.g.
6014
6015          switch (cond)
6016            {
6017            case 1:
6018              if (i > 3) {
6019                bar (5);
6020                break;
6021              } else if (i < 1) {
6022                bar (0);
6023              } else
6024                return;
6025            default:
6026              ...
6027            }
6028
6029     Since there are occasions where a switch case fall through is
6030     desirable, GCC provides an attribute, '__attribute__
6031     ((fallthrough))', that is to be used along with a null statement to
6032     suppress this warning that would normally occur:
6033
6034          switch (cond)
6035            {
6036            case 1:
6037              bar (0);
6038              __attribute__ ((fallthrough));
6039            default:
6040              ...
6041            }
6042
6043     C++17 provides a standard way to suppress the
6044     '-Wimplicit-fallthrough' warning using '[[fallthrough]];' instead
6045     of the GNU attribute.  In C++11 or C++14 users can use
6046     '[[gnu::fallthrough]];', which is a GNU extension.  Instead of
6047     these attributes, it is also possible to add a fallthrough comment
6048     to silence the warning.  The whole body of the C or C++ style
6049     comment should match the given regular expressions listed below.
6050     The option argument N specifies what kind of comments are accepted:
6051
6052        * '-Wimplicit-fallthrough=0' disables the warning altogether.
6053
6054        * '-Wimplicit-fallthrough=1' matches '.*' regular expression,
6055          any comment is used as fallthrough comment.
6056
6057        * '-Wimplicit-fallthrough=2' case insensitively matches
6058          '.*falls?[ \t-]*thr(ough|u).*' regular expression.
6059
6060        * '-Wimplicit-fallthrough=3' case sensitively matches one of the
6061          following regular expressions:
6062
6063             * '-fallthrough'
6064
6065             * '@fallthrough@'
6066
6067             * 'lint -fallthrough[ \t]*'
6068
6069             * '[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?
6070               FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?'
6071
6072             * '[ \t.!]*(Else,? |Intentional(ly)? )?
6073               Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?'
6074
6075             * '[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?
6076               fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?'
6077
6078        * '-Wimplicit-fallthrough=4' case sensitively matches one of the
6079          following regular expressions:
6080
6081             * '-fallthrough'
6082
6083             * '@fallthrough@'
6084
6085             * 'lint -fallthrough[ \t]*'
6086
6087             * '[ \t]*FALLTHR(OUGH|U)[ \t]*'
6088
6089        * '-Wimplicit-fallthrough=5' doesn't recognize any comments as
6090          fallthrough comments, only attributes disable the warning.
6091
6092     The comment needs to be followed after optional whitespace and
6093     other comments by 'case' or 'default' keywords or by a user label
6094     that precedes some 'case' or 'default' label.
6095
6096          switch (cond)
6097            {
6098            case 1:
6099              bar (0);
6100              /* FALLTHRU */
6101            default:
6102              ...
6103            }
6104
6105     The '-Wimplicit-fallthrough=3' warning is enabled by '-Wextra'.
6106
6107'-Wno-if-not-aligned (C, C++, Objective-C and Objective-C++ only)'
6108     Control if warnings triggered by the 'warn_if_not_aligned'
6109     attribute should be issued.  These warnings are enabled by default.
6110
6111'-Wignored-qualifiers (C and C++ only)'
6112     Warn if the return type of a function has a type qualifier such as
6113     'const'.  For ISO C such a type qualifier has no effect, since the
6114     value returned by a function is not an lvalue.  For C++, the
6115     warning is only emitted for scalar types or 'void'.  ISO C
6116     prohibits qualified 'void' return types on function definitions, so
6117     such return types always receive a warning even without this
6118     option.
6119
6120     This warning is also enabled by '-Wextra'.
6121
6122'-Wno-ignored-attributes (C and C++ only)'
6123     This option controls warnings when an attribute is ignored.  This
6124     is different from the '-Wattributes' option in that it warns
6125     whenever the compiler decides to drop an attribute, not that the
6126     attribute is either unknown, used in a wrong place, etc.  This
6127     warning is enabled by default.
6128
6129'-Wmain'
6130     Warn if the type of 'main' is suspicious.  'main' should be a
6131     function with external linkage, returning int, taking either zero
6132     arguments, two, or three arguments of appropriate types.  This
6133     warning is enabled by default in C++ and is enabled by either
6134     '-Wall' or '-Wpedantic'.
6135
6136'-Wmisleading-indentation (C and C++ only)'
6137     Warn when the indentation of the code does not reflect the block
6138     structure.  Specifically, a warning is issued for 'if', 'else',
6139     'while', and 'for' clauses with a guarded statement that does not
6140     use braces, followed by an unguarded statement with the same
6141     indentation.
6142
6143     In the following example, the call to "bar" is misleadingly
6144     indented as if it were guarded by the "if" conditional.
6145
6146            if (some_condition ())
6147              foo ();
6148              bar ();  /* Gotcha: this is not guarded by the "if".  */
6149
6150     In the case of mixed tabs and spaces, the warning uses the
6151     '-ftabstop=' option to determine if the statements line up
6152     (defaulting to 8).
6153
6154     The warning is not issued for code involving multiline preprocessor
6155     logic such as the following example.
6156
6157            if (flagA)
6158              foo (0);
6159          #if SOME_CONDITION_THAT_DOES_NOT_HOLD
6160            if (flagB)
6161          #endif
6162              foo (1);
6163
6164     The warning is not issued after a '#line' directive, since this
6165     typically indicates autogenerated code, and no assumptions can be
6166     made about the layout of the file that the directive references.
6167
6168     This warning is enabled by '-Wall' in C and C++.
6169
6170'-Wmissing-attributes'
6171     Warn when a declaration of a function is missing one or more
6172     attributes that a related function is declared with and whose
6173     absence may adversely affect the correctness or efficiency of
6174     generated code.  For example, the warning is issued for
6175     declarations of aliases that use attributes to specify less
6176     restrictive requirements than those of their targets.  This
6177     typically represents a potential optimization opportunity.  By
6178     contrast, the '-Wattribute-alias=2' option controls warnings issued
6179     when the alias is more restrictive than the target, which could
6180     lead to incorrect code generation.  Attributes considered include
6181     'alloc_align', 'alloc_size', 'cold', 'const', 'hot', 'leaf',
6182     'malloc', 'nonnull', 'noreturn', 'nothrow', 'pure',
6183     'returns_nonnull', and 'returns_twice'.
6184
6185     In C++, the warning is issued when an explicit specialization of a
6186     primary template declared with attribute 'alloc_align',
6187     'alloc_size', 'assume_aligned', 'format', 'format_arg', 'malloc',
6188     or 'nonnull' is declared without it.  Attributes 'deprecated',
6189     'error', and 'warning' suppress the warning.  (*note Function
6190     Attributes::).
6191
6192     You can use the 'copy' attribute to apply the same set of
6193     attributes to a declaration as that on another declaration without
6194     explicitly enumerating the attributes.  This attribute can be
6195     applied to declarations of functions (*note Common Function
6196     Attributes::), variables (*note Common Variable Attributes::), or
6197     types (*note Common Type Attributes::).
6198
6199     '-Wmissing-attributes' is enabled by '-Wall'.
6200
6201     For example, since the declaration of the primary function template
6202     below makes use of both attribute 'malloc' and 'alloc_size' the
6203     declaration of the explicit specialization of the template is
6204     diagnosed because it is missing one of the attributes.
6205
6206          template <class T>
6207          T* __attribute__ ((malloc, alloc_size (1)))
6208          allocate (size_t);
6209
6210          template <>
6211          void* __attribute__ ((malloc))   // missing alloc_size
6212          allocate<void> (size_t);
6213
6214'-Wmissing-braces'
6215     Warn if an aggregate or union initializer is not fully bracketed.
6216     In the following example, the initializer for 'a' is not fully
6217     bracketed, but that for 'b' is fully bracketed.
6218
6219          int a[2][2] = { 0, 1, 2, 3 };
6220          int b[2][2] = { { 0, 1 }, { 2, 3 } };
6221
6222     This warning is enabled by '-Wall'.
6223
6224'-Wmissing-include-dirs (C, C++, Objective-C, Objective-C++ and Fortran only)'
6225     Warn if a user-supplied include directory does not exist.  This
6226     opions is disabled by default for C, C++, Objective-C and
6227     Objective-C++.  For Fortran, it is partially enabled by default by
6228     warning for -I and -J, only.
6229
6230'-Wno-missing-profile'
6231     This option controls warnings if feedback profiles are missing when
6232     using the '-fprofile-use' option.  This option diagnoses those
6233     cases where a new function or a new file is added between compiling
6234     with '-fprofile-generate' and with '-fprofile-use', without
6235     regenerating the profiles.  In these cases, the profile feedback
6236     data files do not contain any profile feedback information for the
6237     newly added function or file respectively.  Also, in the case when
6238     profile count data (.gcda) files are removed, GCC cannot use any
6239     profile feedback information.  In all these cases, warnings are
6240     issued to inform you that a profile generation step is due.
6241     Ignoring the warning can result in poorly optimized code.
6242     '-Wno-missing-profile' can be used to disable the warning, but this
6243     is not recommended and should be done only when non-existent
6244     profile data is justified.
6245
6246'-Wmismatched-dealloc'
6247
6248     Warn for calls to deallocation functions with pointer arguments
6249     returned from from allocations functions for which the former isn't
6250     a suitable deallocator.  A pair of functions can be associated as
6251     matching allocators and deallocators by use of attribute 'malloc'.
6252     Unless disabled by the '-fno-builtin' option the standard functions
6253     'calloc', 'malloc', 'realloc', and 'free', as well as the
6254     corresponding forms of C++ 'operator new' and 'operator delete' are
6255     implicitly associated as matching allocators and deallocators.  In
6256     the following example 'mydealloc' is the deallocator for pointers
6257     returned from 'myalloc'.
6258
6259          void mydealloc (void*);
6260
6261          __attribute__ ((malloc (mydealloc, 1))) void*
6262          myalloc (size_t);
6263
6264          void f (void)
6265          {
6266            void *p = myalloc (32);
6267            // ...use p...
6268            free (p);   // warning: not a matching deallocator for myalloc
6269            mydealloc (p);   // ok
6270          }
6271
6272     In C++, the related option '-Wmismatched-new-delete' diagnoses
6273     mismatches involving either 'operator new' or 'operator delete'.
6274
6275     Option '-Wmismatched-dealloc' is included in '-Wall'.
6276
6277'-Wmultistatement-macros'
6278     Warn about unsafe multiple statement macros that appear to be
6279     guarded by a clause such as 'if', 'else', 'for', 'switch', or
6280     'while', in which only the first statement is actually guarded
6281     after the macro is expanded.
6282
6283     For example:
6284
6285          #define DOIT x++; y++
6286          if (c)
6287            DOIT;
6288
6289     will increment 'y' unconditionally, not just when 'c' holds.  The
6290     can usually be fixed by wrapping the macro in a do-while loop:
6291          #define DOIT do { x++; y++; } while (0)
6292          if (c)
6293            DOIT;
6294
6295     This warning is enabled by '-Wall' in C and C++.
6296
6297'-Wparentheses'
6298     Warn if parentheses are omitted in certain contexts, such as when
6299     there is an assignment in a context where a truth value is
6300     expected, or when operators are nested whose precedence people
6301     often get confused about.
6302
6303     Also warn if a comparison like 'x<=y<=z' appears; this is
6304     equivalent to '(x<=y ? 1 : 0) <= z', which is a different
6305     interpretation from that of ordinary mathematical notation.
6306
6307     Also warn for dangerous uses of the GNU extension to '?:' with
6308     omitted middle operand.  When the condition in the '?': operator is
6309     a boolean expression, the omitted value is always 1.  Often
6310     programmers expect it to be a value computed inside the conditional
6311     expression instead.
6312
6313     For C++ this also warns for some cases of unnecessary parentheses
6314     in declarations, which can indicate an attempt at a function call
6315     instead of a declaration:
6316          {
6317            // Declares a local variable called mymutex.
6318            std::unique_lock<std::mutex> (mymutex);
6319            // User meant std::unique_lock<std::mutex> lock (mymutex);
6320          }
6321
6322     This warning is enabled by '-Wall'.
6323
6324'-Wsequence-point'
6325     Warn about code that may have undefined semantics because of
6326     violations of sequence point rules in the C and C++ standards.
6327
6328     The C and C++ standards define the order in which expressions in a
6329     C/C++ program are evaluated in terms of "sequence points", which
6330     represent a partial ordering between the execution of parts of the
6331     program: those executed before the sequence point, and those
6332     executed after it.  These occur after the evaluation of a full
6333     expression (one which is not part of a larger expression), after
6334     the evaluation of the first operand of a '&&', '||', '? :' or ','
6335     (comma) operator, before a function is called (but after the
6336     evaluation of its arguments and the expression denoting the called
6337     function), and in certain other places.  Other than as expressed by
6338     the sequence point rules, the order of evaluation of subexpressions
6339     of an expression is not specified.  All these rules describe only a
6340     partial order rather than a total order, since, for example, if two
6341     functions are called within one expression with no sequence point
6342     between them, the order in which the functions are called is not
6343     specified.  However, the standards committee have ruled that
6344     function calls do not overlap.
6345
6346     It is not specified when between sequence points modifications to
6347     the values of objects take effect.  Programs whose behavior depends
6348     on this have undefined behavior; the C and C++ standards specify
6349     that "Between the previous and next sequence point an object shall
6350     have its stored value modified at most once by the evaluation of an
6351     expression.  Furthermore, the prior value shall be read only to
6352     determine the value to be stored.".  If a program breaks these
6353     rules, the results on any particular implementation are entirely
6354     unpredictable.
6355
6356     Examples of code with undefined behavior are 'a = a++;', 'a[n] =
6357     b[n++]' and 'a[i++] = i;'.  Some more complicated cases are not
6358     diagnosed by this option, and it may give an occasional false
6359     positive result, but in general it has been found fairly effective
6360     at detecting this sort of problem in programs.
6361
6362     The C++17 standard will define the order of evaluation of operands
6363     in more cases: in particular it requires that the right-hand side
6364     of an assignment be evaluated before the left-hand side, so the
6365     above examples are no longer undefined.  But this option will still
6366     warn about them, to help people avoid writing code that is
6367     undefined in C and earlier revisions of C++.
6368
6369     The standard is worded confusingly, therefore there is some debate
6370     over the precise meaning of the sequence point rules in subtle
6371     cases.  Links to discussions of the problem, including proposed
6372     formal definitions, may be found on the GCC readings page, at
6373     <https://gcc.gnu.org/readings.html>.
6374
6375     This warning is enabled by '-Wall' for C and C++.
6376
6377'-Wno-return-local-addr'
6378     Do not warn about returning a pointer (or in C++, a reference) to a
6379     variable that goes out of scope after the function returns.
6380
6381'-Wreturn-type'
6382     Warn whenever a function is defined with a return type that
6383     defaults to 'int'.  Also warn about any 'return' statement with no
6384     return value in a function whose return type is not 'void' (falling
6385     off the end of the function body is considered returning without a
6386     value).
6387
6388     For C only, warn about a 'return' statement with an expression in a
6389     function whose return type is 'void', unless the expression type is
6390     also 'void'.  As a GNU extension, the latter case is accepted
6391     without a warning unless '-Wpedantic' is used.  Attempting to use
6392     the return value of a non-'void' function other than 'main' that
6393     flows off the end by reaching the closing curly brace that
6394     terminates the function is undefined.
6395
6396     Unlike in C, in C++, flowing off the end of a non-'void' function
6397     other than 'main' results in undefined behavior even when the value
6398     of the function is not used.
6399
6400     This warning is enabled by default in C++ and by '-Wall' otherwise.
6401
6402'-Wno-shift-count-negative'
6403     Controls warnings if a shift count is negative.  This warning is
6404     enabled by default.
6405
6406'-Wno-shift-count-overflow'
6407     Controls warnings if a shift count is greater than or equal to the
6408     bit width of the type.  This warning is enabled by default.
6409
6410'-Wshift-negative-value'
6411     Warn if left shifting a negative value.  This warning is enabled by
6412     '-Wextra' in C99 (and newer) and C++11 to C++17 modes.
6413
6414'-Wno-shift-overflow'
6415'-Wshift-overflow=N'
6416     These options control warnings about left shift overflows.
6417
6418     '-Wshift-overflow=1'
6419          This is the warning level of '-Wshift-overflow' and is enabled
6420          by default in C99 and C++11 modes (and newer).  This warning
6421          level does not warn about left-shifting 1 into the sign bit.
6422          (However, in C, such an overflow is still rejected in contexts
6423          where an integer constant expression is required.)  No warning
6424          is emitted in C++20 mode (and newer), as signed left shifts
6425          always wrap.
6426
6427     '-Wshift-overflow=2'
6428          This warning level also warns about left-shifting 1 into the
6429          sign bit, unless C++14 mode (or newer) is active.
6430
6431'-Wswitch'
6432     Warn whenever a 'switch' statement has an index of enumerated type
6433     and lacks a 'case' for one or more of the named codes of that
6434     enumeration.  (The presence of a 'default' label prevents this
6435     warning.)  'case' labels outside the enumeration range also provoke
6436     warnings when this option is used (even if there is a 'default'
6437     label).  This warning is enabled by '-Wall'.
6438
6439'-Wswitch-default'
6440     Warn whenever a 'switch' statement does not have a 'default' case.
6441
6442'-Wswitch-enum'
6443     Warn whenever a 'switch' statement has an index of enumerated type
6444     and lacks a 'case' for one or more of the named codes of that
6445     enumeration.  'case' labels outside the enumeration range also
6446     provoke warnings when this option is used.  The only difference
6447     between '-Wswitch' and this option is that this option gives a
6448     warning about an omitted enumeration code even if there is a
6449     'default' label.
6450
6451'-Wno-switch-bool'
6452     Do not warn when a 'switch' statement has an index of boolean type
6453     and the case values are outside the range of a boolean type.  It is
6454     possible to suppress this warning by casting the controlling
6455     expression to a type other than 'bool'.  For example:
6456          switch ((int) (a == 4))
6457            {
6458            ...
6459            }
6460     This warning is enabled by default for C and C++ programs.
6461
6462'-Wno-switch-outside-range'
6463     This option controls warnings when a 'switch' case has a value that
6464     is outside of its respective type range.  This warning is enabled
6465     by default for C and C++ programs.
6466
6467'-Wno-switch-unreachable'
6468     Do not warn when a 'switch' statement contains statements between
6469     the controlling expression and the first case label, which will
6470     never be executed.  For example:
6471          switch (cond)
6472            {
6473             i = 15;
6474            ...
6475             case 5:
6476            ...
6477            }
6478     '-Wswitch-unreachable' does not warn if the statement between the
6479     controlling expression and the first case label is just a
6480     declaration:
6481          switch (cond)
6482            {
6483             int i;
6484            ...
6485             case 5:
6486             i = 5;
6487            ...
6488            }
6489     This warning is enabled by default for C and C++ programs.
6490
6491'-Wsync-nand (C and C++ only)'
6492     Warn when '__sync_fetch_and_nand' and '__sync_nand_and_fetch'
6493     built-in functions are used.  These functions changed semantics in
6494     GCC 4.4.
6495
6496'-Wtrivial-auto-var-init'
6497     Warn when '-ftrivial-auto-var-init' cannot initialize the automatic
6498     variable.  A common situation is an automatic variable that is
6499     declared between the controlling expression and the first case
6500     label of a 'switch' statement.
6501
6502'-Wunused-but-set-parameter'
6503     Warn whenever a function parameter is assigned to, but otherwise
6504     unused (aside from its declaration).
6505
6506     To suppress this warning use the 'unused' attribute (*note Variable
6507     Attributes::).
6508
6509     This warning is also enabled by '-Wunused' together with '-Wextra'.
6510
6511'-Wunused-but-set-variable'
6512     Warn whenever a local variable is assigned to, but otherwise unused
6513     (aside from its declaration).  This warning is enabled by '-Wall'.
6514
6515     To suppress this warning use the 'unused' attribute (*note Variable
6516     Attributes::).
6517
6518     This warning is also enabled by '-Wunused', which is enabled by
6519     '-Wall'.
6520
6521'-Wunused-function'
6522     Warn whenever a static function is declared but not defined or a
6523     non-inline static function is unused.  This warning is enabled by
6524     '-Wall'.
6525
6526'-Wunused-label'
6527     Warn whenever a label is declared but not used.  This warning is
6528     enabled by '-Wall'.
6529
6530     To suppress this warning use the 'unused' attribute (*note Variable
6531     Attributes::).
6532
6533'-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
6534     Warn when a typedef locally defined in a function is not used.
6535     This warning is enabled by '-Wall'.
6536
6537'-Wunused-parameter'
6538     Warn whenever a function parameter is unused aside from its
6539     declaration.
6540
6541     To suppress this warning use the 'unused' attribute (*note Variable
6542     Attributes::).
6543
6544'-Wno-unused-result'
6545     Do not warn if a caller of a function marked with attribute
6546     'warn_unused_result' (*note Function Attributes::) does not use its
6547     return value.  The default is '-Wunused-result'.
6548
6549'-Wunused-variable'
6550     Warn whenever a local or static variable is unused aside from its
6551     declaration.  This option implies '-Wunused-const-variable=1' for
6552     C, but not for C++.  This warning is enabled by '-Wall'.
6553
6554     To suppress this warning use the 'unused' attribute (*note Variable
6555     Attributes::).
6556
6557'-Wunused-const-variable'
6558'-Wunused-const-variable=N'
6559     Warn whenever a constant static variable is unused aside from its
6560     declaration.  '-Wunused-const-variable=1' is enabled by
6561     '-Wunused-variable' for C, but not for C++.  In C this declares
6562     variable storage, but in C++ this is not an error since const
6563     variables take the place of '#define's.
6564
6565     To suppress this warning use the 'unused' attribute (*note Variable
6566     Attributes::).
6567
6568     '-Wunused-const-variable=1'
6569          This is the warning level that is enabled by
6570          '-Wunused-variable' for C. It warns only about unused static
6571          const variables defined in the main compilation unit, but not
6572          about static const variables declared in any header included.
6573
6574     '-Wunused-const-variable=2'
6575          This warning level also warns for unused constant static
6576          variables in headers (excluding system headers).  This is the
6577          warning level of '-Wunused-const-variable' and must be
6578          explicitly requested since in C++ this isn't an error and in C
6579          it might be harder to clean up all headers included.
6580
6581'-Wunused-value'
6582     Warn whenever a statement computes a result that is explicitly not
6583     used.  To suppress this warning cast the unused expression to
6584     'void'.  This includes an expression-statement or the left-hand
6585     side of a comma expression that contains no side effects.  For
6586     example, an expression such as 'x[i,j]' causes a warning, while
6587     'x[(void)i,j]' does not.
6588
6589     This warning is enabled by '-Wall'.
6590
6591'-Wunused'
6592     All the above '-Wunused' options combined.
6593
6594     In order to get a warning about an unused function parameter, you
6595     must either specify '-Wextra -Wunused' (note that '-Wall' implies
6596     '-Wunused'), or separately specify '-Wunused-parameter'.
6597
6598'-Wuninitialized'
6599     Warn if an object with automatic or allocated storage duration is
6600     used without having been initialized.  In C++, also warn if a
6601     non-static reference or non-static 'const' member appears in a
6602     class without constructors.
6603
6604     In addition, passing a pointer (or in C++, a reference) to an
6605     uninitialized object to a 'const'-qualified argument of a built-in
6606     function known to read the object is also diagnosed by this
6607     warning.  ('-Wmaybe-uninitialized' is issued for ordinary
6608     functions.)
6609
6610     If you want to warn about code that uses the uninitialized value of
6611     the variable in its own initializer, use the '-Winit-self' option.
6612
6613     These warnings occur for individual uninitialized elements of
6614     structure, union or array variables as well as for variables that
6615     are uninitialized as a whole.  They do not occur for variables or
6616     elements declared 'volatile'.  Because these warnings depend on
6617     optimization, the exact variables or elements for which there are
6618     warnings depend on the precise optimization options and version of
6619     GCC used.
6620
6621     Note that there may be no warning about a variable that is used
6622     only to compute a value that itself is never used, because such
6623     computations may be deleted by data flow analysis before the
6624     warnings are printed.
6625
6626     In C++, this warning also warns about using uninitialized objects
6627     in member-initializer-lists.  For example, GCC warns about 'b'
6628     being uninitialized in the following snippet:
6629
6630          struct A {
6631            int a;
6632            int b;
6633            A() : a(b) { }
6634          };
6635
6636'-Wno-invalid-memory-model'
6637     This option controls warnings for invocations of *note __atomic
6638     Builtins::, *note __sync Builtins::, and the C11 atomic generic
6639     functions with a memory consistency argument that is either invalid
6640     for the operation or outside the range of values of the
6641     'memory_order' enumeration.  For example, since the
6642     '__atomic_store' and '__atomic_store_n' built-ins are only defined
6643     for the relaxed, release, and sequentially consistent memory orders
6644     the following code is diagnosed:
6645
6646          void store (int *i)
6647          {
6648            __atomic_store_n (i, 0, memory_order_consume);
6649          }
6650
6651     '-Winvalid-memory-model' is enabled by default.
6652
6653'-Wmaybe-uninitialized'
6654     For an object with automatic or allocated storage duration, if
6655     there exists a path from the function entry to a use of the object
6656     that is initialized, but there exist some other paths for which the
6657     object is not initialized, the compiler emits a warning if it
6658     cannot prove the uninitialized paths are not executed at run time.
6659
6660     In addition, passing a pointer (or in C++, a reference) to an
6661     uninitialized object to a 'const'-qualified function argument is
6662     also diagnosed by this warning.  ('-Wuninitialized' is issued for
6663     built-in functions known to read the object.)  Annotating the
6664     function with attribute 'access (none)' indicates that the argument
6665     isn't used to access the object and avoids the warning (*note
6666     Common Function Attributes::).
6667
6668     These warnings are only possible in optimizing compilation, because
6669     otherwise GCC does not keep track of the state of variables.
6670
6671     These warnings are made optional because GCC may not be able to
6672     determine when the code is correct in spite of appearing to have an
6673     error.  Here is one example of how this can happen:
6674
6675          {
6676            int x;
6677            switch (y)
6678              {
6679              case 1: x = 1;
6680                break;
6681              case 2: x = 4;
6682                break;
6683              case 3: x = 5;
6684              }
6685            foo (x);
6686          }
6687
6688     If the value of 'y' is always 1, 2 or 3, then 'x' is always
6689     initialized, but GCC doesn't know this.  To suppress the warning,
6690     you need to provide a default case with assert(0) or similar code.
6691
6692     This option also warns when a non-volatile automatic variable might
6693     be changed by a call to 'longjmp'.  The compiler sees only the
6694     calls to 'setjmp'.  It cannot know where 'longjmp' will be called;
6695     in fact, a signal handler could call it at any point in the code.
6696     As a result, you may get a warning even when there is in fact no
6697     problem because 'longjmp' cannot in fact be called at the place
6698     that would cause a problem.
6699
6700     Some spurious warnings can be avoided if you declare all the
6701     functions you use that never return as 'noreturn'.  *Note Function
6702     Attributes::.
6703
6704     This warning is enabled by '-Wall' or '-Wextra'.
6705
6706'-Wunknown-pragmas'
6707     Warn when a '#pragma' directive is encountered that is not
6708     understood by GCC.  If this command-line option is used, warnings
6709     are even issued for unknown pragmas in system header files.  This
6710     is not the case if the warnings are only enabled by the '-Wall'
6711     command-line option.
6712
6713'-Wno-pragmas'
6714     Do not warn about misuses of pragmas, such as incorrect parameters,
6715     invalid syntax, or conflicts between pragmas.  See also
6716     '-Wunknown-pragmas'.
6717
6718'-Wno-prio-ctor-dtor'
6719     Do not warn if a priority from 0 to 100 is used for constructor or
6720     destructor.  The use of constructor and destructor attributes allow
6721     you to assign a priority to the constructor/destructor to control
6722     its order of execution before 'main' is called or after it returns.
6723     The priority values must be greater than 100 as the compiler
6724     reserves priority values between 0-100 for the implementation.
6725
6726'-Wstrict-aliasing'
6727     This option is only active when '-fstrict-aliasing' is active.  It
6728     warns about code that might break the strict aliasing rules that
6729     the compiler is using for optimization.  The warning does not catch
6730     all cases, but does attempt to catch the more common pitfalls.  It
6731     is included in '-Wall'.  It is equivalent to '-Wstrict-aliasing=3'
6732
6733'-Wstrict-aliasing=n'
6734     This option is only active when '-fstrict-aliasing' is active.  It
6735     warns about code that might break the strict aliasing rules that
6736     the compiler is using for optimization.  Higher levels correspond
6737     to higher accuracy (fewer false positives).  Higher levels also
6738     correspond to more effort, similar to the way '-O' works.
6739     '-Wstrict-aliasing' is equivalent to '-Wstrict-aliasing=3'.
6740
6741     Level 1: Most aggressive, quick, least accurate.  Possibly useful
6742     when higher levels do not warn but '-fstrict-aliasing' still breaks
6743     the code, as it has very few false negatives.  However, it has many
6744     false positives.  Warns for all pointer conversions between
6745     possibly incompatible types, even if never dereferenced.  Runs in
6746     the front end only.
6747
6748     Level 2: Aggressive, quick, not too precise.  May still have many
6749     false positives (not as many as level 1 though), and few false
6750     negatives (but possibly more than level 1).  Unlike level 1, it
6751     only warns when an address is taken.  Warns about incomplete types.
6752     Runs in the front end only.
6753
6754     Level 3 (default for '-Wstrict-aliasing'): Should have very few
6755     false positives and few false negatives.  Slightly slower than
6756     levels 1 or 2 when optimization is enabled.  Takes care of the
6757     common pun+dereference pattern in the front end:
6758     '*(int*)&some_float'.  If optimization is enabled, it also runs in
6759     the back end, where it deals with multiple statement cases using
6760     flow-sensitive points-to information.  Only warns when the
6761     converted pointer is dereferenced.  Does not warn about incomplete
6762     types.
6763
6764'-Wstrict-overflow'
6765'-Wstrict-overflow=N'
6766     This option is only active when signed overflow is undefined.  It
6767     warns about cases where the compiler optimizes based on the
6768     assumption that signed overflow does not occur.  Note that it does
6769     not warn about all cases where the code might overflow: it only
6770     warns about cases where the compiler implements some optimization.
6771     Thus this warning depends on the optimization level.
6772
6773     An optimization that assumes that signed overflow does not occur is
6774     perfectly safe if the values of the variables involved are such
6775     that overflow never does, in fact, occur.  Therefore this warning
6776     can easily give a false positive: a warning about code that is not
6777     actually a problem.  To help focus on important issues, several
6778     warning levels are defined.  No warnings are issued for the use of
6779     undefined signed overflow when estimating how many iterations a
6780     loop requires, in particular when determining whether a loop will
6781     be executed at all.
6782
6783     '-Wstrict-overflow=1'
6784          Warn about cases that are both questionable and easy to avoid.
6785          For example the compiler simplifies 'x + 1 > x' to '1'.  This
6786          level of '-Wstrict-overflow' is enabled by '-Wall'; higher
6787          levels are not, and must be explicitly requested.
6788
6789     '-Wstrict-overflow=2'
6790          Also warn about other cases where a comparison is simplified
6791          to a constant.  For example: 'abs (x) >= 0'.  This can only be
6792          simplified when signed integer overflow is undefined, because
6793          'abs (INT_MIN)' overflows to 'INT_MIN', which is less than
6794          zero.  '-Wstrict-overflow' (with no level) is the same as
6795          '-Wstrict-overflow=2'.
6796
6797     '-Wstrict-overflow=3'
6798          Also warn about other cases where a comparison is simplified.
6799          For example: 'x + 1 > 1' is simplified to 'x > 0'.
6800
6801     '-Wstrict-overflow=4'
6802          Also warn about other simplifications not covered by the above
6803          cases.  For example: '(x * 10) / 5' is simplified to 'x * 2'.
6804
6805     '-Wstrict-overflow=5'
6806          Also warn about cases where the compiler reduces the magnitude
6807          of a constant involved in a comparison.  For example: 'x + 2 >
6808          y' is simplified to 'x + 1 >= y'.  This is reported only at
6809          the highest warning level because this simplification applies
6810          to many comparisons, so this warning level gives a very large
6811          number of false positives.
6812
6813'-Wstring-compare'
6814     Warn for calls to 'strcmp' and 'strncmp' whose result is determined
6815     to be either zero or non-zero in tests for such equality owing to
6816     the length of one argument being greater than the size of the array
6817     the other argument is stored in (or the bound in the case of
6818     'strncmp').  Such calls could be mistakes.  For example, the call
6819     to 'strcmp' below is diagnosed because its result is necessarily
6820     non-zero irrespective of the contents of the array 'a'.
6821
6822          extern char a[4];
6823          void f (char *d)
6824          {
6825            strcpy (d, "string");
6826            ...
6827            if (0 == strcmp (a, d))   // cannot be true
6828              puts ("a and d are the same");
6829          }
6830
6831     '-Wstring-compare' is enabled by '-Wextra'.
6832
6833'-Wno-stringop-overflow'
6834'-Wstringop-overflow'
6835'-Wstringop-overflow=TYPE'
6836     Warn for calls to string manipulation functions such as 'memcpy'
6837     and 'strcpy' that are determined to overflow the destination
6838     buffer.  The optional argument is one greater than the type of
6839     Object Size Checking to perform to determine the size of the
6840     destination.  *Note Object Size Checking::.  The argument is
6841     meaningful only for functions that operate on character arrays but
6842     not for raw memory functions like 'memcpy' which always make use of
6843     Object Size type-0.  The option also warns for calls that specify a
6844     size in excess of the largest possible object or at most 'SIZE_MAX
6845     / 2' bytes.  The option produces the best results with optimization
6846     enabled but can detect a small subset of simple buffer overflows
6847     even without optimization in calls to the GCC built-in functions
6848     like '__builtin_memcpy' that correspond to the standard functions.
6849     In any case, the option warns about just a subset of buffer
6850     overflows detected by the corresponding overflow checking
6851     built-ins.  For example, the option issues a warning for the
6852     'strcpy' call below because it copies at least 5 characters (the
6853     string '"blue"' including the terminating NUL) into the buffer of
6854     size 4.
6855
6856          enum Color { blue, purple, yellow };
6857          const char* f (enum Color clr)
6858          {
6859            static char buf [4];
6860            const char *str;
6861            switch (clr)
6862              {
6863                case blue: str = "blue"; break;
6864                case purple: str = "purple"; break;
6865                case yellow: str = "yellow"; break;
6866              }
6867
6868            return strcpy (buf, str);   // warning here
6869          }
6870
6871     Option '-Wstringop-overflow=2' is enabled by default.
6872
6873     '-Wstringop-overflow'
6874     '-Wstringop-overflow=1'
6875          The '-Wstringop-overflow=1' option uses type-zero Object Size
6876          Checking to determine the sizes of destination objects.  At
6877          this setting the option does not warn for writes past the end
6878          of subobjects of larger objects accessed by pointers unless
6879          the size of the largest surrounding object is known.  When the
6880          destination may be one of several objects it is assumed to be
6881          the largest one of them.  On Linux systems, when optimization
6882          is enabled at this setting the option warns for the same code
6883          as when the '_FORTIFY_SOURCE' macro is defined to a non-zero
6884          value.
6885
6886     '-Wstringop-overflow=2'
6887          The '-Wstringop-overflow=2' option uses type-one Object Size
6888          Checking to determine the sizes of destination objects.  At
6889          this setting the option warns about overflows when writing to
6890          members of the largest complete objects whose exact size is
6891          known.  However, it does not warn for excessive writes to the
6892          same members of unknown objects referenced by pointers since
6893          they may point to arrays containing unknown numbers of
6894          elements.  This is the default setting of the option.
6895
6896     '-Wstringop-overflow=3'
6897          The '-Wstringop-overflow=3' option uses type-two Object Size
6898          Checking to determine the sizes of destination objects.  At
6899          this setting the option warns about overflowing the smallest
6900          object or data member.  This is the most restrictive setting
6901          of the option that may result in warnings for safe code.
6902
6903     '-Wstringop-overflow=4'
6904          The '-Wstringop-overflow=4' option uses type-three Object Size
6905          Checking to determine the sizes of destination objects.  At
6906          this setting the option warns about overflowing any data
6907          members, and when the destination is one of several objects it
6908          uses the size of the largest of them to decide whether to
6909          issue a warning.  Similarly to '-Wstringop-overflow=3' this
6910          setting of the option may result in warnings for benign code.
6911
6912'-Wno-stringop-overread'
6913     Warn for calls to string manipulation functions such as 'memchr',
6914     or 'strcpy' that are determined to read past the end of the source
6915     sequence.
6916
6917     Option '-Wstringop-overread' is enabled by default.
6918
6919'-Wno-stringop-truncation'
6920     Do not warn for calls to bounded string manipulation functions such
6921     as 'strncat', 'strncpy', and 'stpncpy' that may either truncate the
6922     copied string or leave the destination unchanged.
6923
6924     In the following example, the call to 'strncat' specifies a bound
6925     that is less than the length of the source string.  As a result,
6926     the copy of the source will be truncated and so the call is
6927     diagnosed.  To avoid the warning use 'bufsize - strlen (buf) - 1)'
6928     as the bound.
6929
6930          void append (char *buf, size_t bufsize)
6931          {
6932            strncat (buf, ".txt", 3);
6933          }
6934
6935     As another example, the following call to 'strncpy' results in
6936     copying to 'd' just the characters preceding the terminating NUL,
6937     without appending the NUL to the end.  Assuming the result of
6938     'strncpy' is necessarily a NUL-terminated string is a common
6939     mistake, and so the call is diagnosed.  To avoid the warning when
6940     the result is not expected to be NUL-terminated, call 'memcpy'
6941     instead.
6942
6943          void copy (char *d, const char *s)
6944          {
6945            strncpy (d, s, strlen (s));
6946          }
6947
6948     In the following example, the call to 'strncpy' specifies the size
6949     of the destination buffer as the bound.  If the length of the
6950     source string is equal to or greater than this size the result of
6951     the copy will not be NUL-terminated.  Therefore, the call is also
6952     diagnosed.  To avoid the warning, specify 'sizeof buf - 1' as the
6953     bound and set the last element of the buffer to 'NUL'.
6954
6955          void copy (const char *s)
6956          {
6957            char buf[80];
6958            strncpy (buf, s, sizeof buf);
6959            ...
6960          }
6961
6962     In situations where a character array is intended to store a
6963     sequence of bytes with no terminating 'NUL' such an array may be
6964     annotated with attribute 'nonstring' to avoid this warning.  Such
6965     arrays, however, are not suitable arguments to functions that
6966     expect 'NUL'-terminated strings.  To help detect accidental misuses
6967     of such arrays GCC issues warnings unless it can prove that the use
6968     is safe.  *Note Common Variable Attributes::.
6969
6970'-Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]'
6971     Warn for cases where adding an attribute may be beneficial.  The
6972     attributes currently supported are listed below.
6973
6974     '-Wsuggest-attribute=pure'
6975     '-Wsuggest-attribute=const'
6976     '-Wsuggest-attribute=noreturn'
6977     '-Wmissing-noreturn'
6978     '-Wsuggest-attribute=malloc'
6979
6980          Warn about functions that might be candidates for attributes
6981          'pure', 'const' or 'noreturn' or 'malloc'.  The compiler only
6982          warns for functions visible in other compilation units or (in
6983          the case of 'pure' and 'const') if it cannot prove that the
6984          function returns normally.  A function returns normally if it
6985          doesn't contain an infinite loop or return abnormally by
6986          throwing, calling 'abort' or trapping.  This analysis requires
6987          option '-fipa-pure-const', which is enabled by default at '-O'
6988          and higher.  Higher optimization levels improve the accuracy
6989          of the analysis.
6990
6991     '-Wsuggest-attribute=format'
6992     '-Wmissing-format-attribute'
6993
6994          Warn about function pointers that might be candidates for
6995          'format' attributes.  Note these are only possible candidates,
6996          not absolute ones.  GCC guesses that function pointers with
6997          'format' attributes that are used in assignment,
6998          initialization, parameter passing or return statements should
6999          have a corresponding 'format' attribute in the resulting type.
7000          I.e. the left-hand side of the assignment or initialization,
7001          the type of the parameter variable, or the return type of the
7002          containing function respectively should also have a 'format'
7003          attribute to avoid the warning.
7004
7005          GCC also warns about function definitions that might be
7006          candidates for 'format' attributes.  Again, these are only
7007          possible candidates.  GCC guesses that 'format' attributes
7008          might be appropriate for any function that calls a function
7009          like 'vprintf' or 'vscanf', but this might not always be the
7010          case, and some functions for which 'format' attributes are
7011          appropriate may not be detected.
7012
7013     '-Wsuggest-attribute=cold'
7014
7015          Warn about functions that might be candidates for 'cold'
7016          attribute.  This is based on static detection and generally
7017          only warns about functions which always leads to a call to
7018          another 'cold' function such as wrappers of C++ 'throw' or
7019          fatal error reporting functions leading to 'abort'.
7020
7021'-Walloc-zero'
7022     Warn about calls to allocation functions decorated with attribute
7023     'alloc_size' that specify zero bytes, including those to the
7024     built-in forms of the functions 'aligned_alloc', 'alloca',
7025     'calloc', 'malloc', and 'realloc'.  Because the behavior of these
7026     functions when called with a zero size differs among
7027     implementations (and in the case of 'realloc' has been deprecated)
7028     relying on it may result in subtle portability bugs and should be
7029     avoided.
7030
7031'-Walloc-size-larger-than=BYTE-SIZE'
7032     Warn about calls to functions decorated with attribute 'alloc_size'
7033     that attempt to allocate objects larger than the specified number
7034     of bytes, or where the result of the size computation in an integer
7035     type with infinite precision would exceed the value of
7036     'PTRDIFF_MAX' on the target.
7037     '-Walloc-size-larger-than=''PTRDIFF_MAX' is enabled by default.
7038     Warnings controlled by the option can be disabled either by
7039     specifying BYTE-SIZE of 'SIZE_MAX' or more or by
7040     '-Wno-alloc-size-larger-than'.  *Note Function Attributes::.
7041
7042'-Wno-alloc-size-larger-than'
7043     Disable '-Walloc-size-larger-than=' warnings.  The option is
7044     equivalent to '-Walloc-size-larger-than=''SIZE_MAX' or larger.
7045
7046'-Walloca'
7047     This option warns on all uses of 'alloca' in the source.
7048
7049'-Walloca-larger-than=BYTE-SIZE'
7050     This option warns on calls to 'alloca' with an integer argument
7051     whose value is either zero, or that is not bounded by a controlling
7052     predicate that limits its value to at most BYTE-SIZE.  It also
7053     warns for calls to 'alloca' where the bound value is unknown.
7054     Arguments of non-integer types are considered unbounded even if
7055     they appear to be constrained to the expected range.
7056
7057     For example, a bounded case of 'alloca' could be:
7058
7059          void func (size_t n)
7060          {
7061            void *p;
7062            if (n <= 1000)
7063              p = alloca (n);
7064            else
7065              p = malloc (n);
7066            f (p);
7067          }
7068
7069     In the above example, passing '-Walloca-larger-than=1000' would not
7070     issue a warning because the call to 'alloca' is known to be at most
7071     1000 bytes.  However, if '-Walloca-larger-than=500' were passed,
7072     the compiler would emit a warning.
7073
7074     Unbounded uses, on the other hand, are uses of 'alloca' with no
7075     controlling predicate constraining its integer argument.  For
7076     example:
7077
7078          void func ()
7079          {
7080            void *p = alloca (n);
7081            f (p);
7082          }
7083
7084     If '-Walloca-larger-than=500' were passed, the above would trigger
7085     a warning, but this time because of the lack of bounds checking.
7086
7087     Note, that even seemingly correct code involving signed integers
7088     could cause a warning:
7089
7090          void func (signed int n)
7091          {
7092            if (n < 500)
7093              {
7094                p = alloca (n);
7095                f (p);
7096              }
7097          }
7098
7099     In the above example, N could be negative, causing a larger than
7100     expected argument to be implicitly cast into the 'alloca' call.
7101
7102     This option also warns when 'alloca' is used in a loop.
7103
7104     '-Walloca-larger-than=''PTRDIFF_MAX' is enabled by default but is
7105     usually only effective when '-ftree-vrp' is active (default for
7106     '-O2' and above).
7107
7108     See also '-Wvla-larger-than=''byte-size'.
7109
7110'-Wno-alloca-larger-than'
7111     Disable '-Walloca-larger-than=' warnings.  The option is equivalent
7112     to '-Walloca-larger-than=''SIZE_MAX' or larger.
7113
7114'-Warith-conversion'
7115     Do warn about implicit conversions from arithmetic operations even
7116     when conversion of the operands to the same type cannot change
7117     their values.  This affects warnings from '-Wconversion',
7118     '-Wfloat-conversion', and '-Wsign-conversion'.
7119
7120          void f (char c, int i)
7121          {
7122            c = c + i; // warns with -Wconversion
7123            c = c + 1; // only warns with -Warith-conversion
7124          }
7125
7126'-Warray-bounds'
7127'-Warray-bounds=N'
7128     Warn about out of bounds subscripts or offsets into arrays.  This
7129     warning is enabled by '-Wall'.  It is more effective when
7130     '-ftree-vrp' is active (the default for '-O2' and above) but a
7131     subset of instances are issued even without optimization.
7132
7133     '-Warray-bounds=1'
7134          This is the default warning level of '-Warray-bounds' and is
7135          enabled by '-Wall'; higher levels are not, and must be
7136          explicitly requested.
7137
7138     '-Warray-bounds=2'
7139          This warning level also warns about out of bounds accesses to
7140          trailing struct members of one-element array types (*note Zero
7141          Length::) and about the intermediate results of pointer
7142          arithmetic that may yield out of bounds values.  This warning
7143          level may give a larger number of false positives and is
7144          deactivated by default.
7145
7146'-Warray-compare'
7147     Warn about equality and relational comparisons between two operands
7148     of array type.  This comparison was deprecated in C++20.  For
7149     example:
7150
7151          int arr1[5];
7152          int arr2[5];
7153          bool same = arr1 == arr2;
7154
7155     '-Warray-compare' is enabled by '-Wall'.
7156
7157'-Warray-parameter'
7158'-Warray-parameter=N'
7159     Warn about redeclarations of functions involving arguments of array
7160     or pointer types of inconsistent kinds or forms, and enable the
7161     detection of out-of-bounds accesses to such parameters by warnings
7162     such as '-Warray-bounds'.
7163
7164     If the first function declaration uses the array form the bound
7165     specified in the array is assumed to be the minimum number of
7166     elements expected to be provided in calls to the function and the
7167     maximum number of elements accessed by it.  Failing to provide
7168     arguments of sufficient size or accessing more than the maximum
7169     number of elements may be diagnosed by warnings such as
7170     '-Warray-bounds'.  At level 1 the warning diagnoses inconsistencies
7171     involving array parameters declared using the 'T[static N]' form.
7172
7173     For example, the warning triggers for the following redeclarations
7174     because the first one allows an array of any size to be passed to
7175     'f' while the second one with the keyword 'static' specifies that
7176     the array argument must have at least four elements.
7177
7178          void f (int[static 4]);
7179          void f (int[]);           // warning (inconsistent array form)
7180
7181          void g (void)
7182          {
7183            int *p = (int *)malloc (4);
7184            f (p);                  // warning (array too small)
7185            ...
7186          }
7187
7188     At level 2 the warning also triggers for redeclarations involving
7189     any other inconsistency in array or pointer argument forms denoting
7190     array sizes.  Pointers and arrays of unspecified bound are
7191     considered equivalent and do not trigger a warning.
7192
7193          void g (int*);
7194          void g (int[]);     // no warning
7195          void g (int[8]);    // warning (inconsistent array bound)
7196
7197     '-Warray-parameter=2' is included in '-Wall'.  The
7198     '-Wvla-parameter' option triggers warnings for similar
7199     inconsistencies involving Variable Length Array arguments.
7200
7201'-Wattribute-alias=N'
7202'-Wno-attribute-alias'
7203     Warn about declarations using the 'alias' and similar attributes
7204     whose target is incompatible with the type of the alias.  *Note
7205     Declaring Attributes of Functions: Function Attributes.
7206
7207     '-Wattribute-alias=1'
7208          The default warning level of the '-Wattribute-alias' option
7209          diagnoses incompatibilities between the type of the alias
7210          declaration and that of its target.  Such incompatibilities
7211          are typically indicative of bugs.
7212
7213     '-Wattribute-alias=2'
7214
7215          At this level '-Wattribute-alias' also diagnoses cases where
7216          the attributes of the alias declaration are more restrictive
7217          than the attributes applied to its target.  These mismatches
7218          can potentially result in incorrect code generation.  In other
7219          cases they may be benign and could be resolved simply by
7220          adding the missing attribute to the target.  For comparison,
7221          see the '-Wmissing-attributes' option, which controls
7222          diagnostics when the alias declaration is less restrictive
7223          than the target, rather than more restrictive.
7224
7225          Attributes considered include 'alloc_align', 'alloc_size',
7226          'cold', 'const', 'hot', 'leaf', 'malloc', 'nonnull',
7227          'noreturn', 'nothrow', 'pure', 'returns_nonnull', and
7228          'returns_twice'.
7229
7230     '-Wattribute-alias' is equivalent to '-Wattribute-alias=1'.  This
7231     is the default.  You can disable these warnings with either
7232     '-Wno-attribute-alias' or '-Wattribute-alias=0'.
7233
7234'-Wbidi-chars=[none|unpaired|any|ucn]'
7235     Warn about possibly misleading UTF-8 bidirectional control
7236     characters in comments, string literals, character constants, and
7237     identifiers.  Such characters can change left-to-right writing
7238     direction into right-to-left (and vice versa), which can cause
7239     confusion between the logical order and visual order.  This may be
7240     dangerous; for instance, it may seem that a piece of code is not
7241     commented out, whereas it in fact is.
7242
7243     There are three levels of warning supported by GCC.  The default is
7244     '-Wbidi-chars=unpaired', which warns about improperly terminated
7245     bidi contexts.  '-Wbidi-chars=none' turns the warning off.
7246     '-Wbidi-chars=any' warns about any use of bidirectional control
7247     characters.
7248
7249     By default, this warning does not warn about UCNs.  It is, however,
7250     possible to turn on such checking by using
7251     '-Wbidi-chars=unpaired,ucn' or '-Wbidi-chars=any,ucn'.  Using
7252     '-Wbidi-chars=ucn' is valid, and is equivalent to
7253     '-Wbidi-chars=unpaired,ucn', if no previous '-Wbidi-chars=any' was
7254     specified.
7255
7256'-Wbool-compare'
7257     Warn about boolean expression compared with an integer value
7258     different from 'true'/'false'.  For instance, the following
7259     comparison is always false:
7260          int n = 5;
7261          ...
7262          if ((n > 1) == 2) { ... }
7263     This warning is enabled by '-Wall'.
7264
7265'-Wbool-operation'
7266     Warn about suspicious operations on expressions of a boolean type.
7267     For instance, bitwise negation of a boolean is very likely a bug in
7268     the program.  For C, this warning also warns about incrementing or
7269     decrementing a boolean, which rarely makes sense.  (In C++,
7270     decrementing a boolean is always invalid.  Incrementing a boolean
7271     is invalid in C++17, and deprecated otherwise.)
7272
7273     This warning is enabled by '-Wall'.
7274
7275'-Wduplicated-branches'
7276     Warn when an if-else has identical branches.  This warning detects
7277     cases like
7278          if (p != NULL)
7279            return 0;
7280          else
7281            return 0;
7282     It doesn't warn when both branches contain just a null statement.
7283     This warning also warn for conditional operators:
7284            int i = x ? *p : *p;
7285
7286'-Wduplicated-cond'
7287     Warn about duplicated conditions in an if-else-if chain.  For
7288     instance, warn for the following code:
7289          if (p->q != NULL) { ... }
7290          else if (p->q != NULL) { ... }
7291
7292'-Wframe-address'
7293     Warn when the '__builtin_frame_address' or
7294     '__builtin_return_address' is called with an argument greater than
7295     0.  Such calls may return indeterminate values or crash the
7296     program.  The warning is included in '-Wall'.
7297
7298'-Wno-discarded-qualifiers (C and Objective-C only)'
7299     Do not warn if type qualifiers on pointers are being discarded.
7300     Typically, the compiler warns if a 'const char *' variable is
7301     passed to a function that takes a 'char *' parameter.  This option
7302     can be used to suppress such a warning.
7303
7304'-Wno-discarded-array-qualifiers (C and Objective-C only)'
7305     Do not warn if type qualifiers on arrays which are pointer targets
7306     are being discarded.  Typically, the compiler warns if a 'const int
7307     (*)[]' variable is passed to a function that takes a 'int (*)[]'
7308     parameter.  This option can be used to suppress such a warning.
7309
7310'-Wno-incompatible-pointer-types (C and Objective-C only)'
7311     Do not warn when there is a conversion between pointers that have
7312     incompatible types.  This warning is for cases not covered by
7313     '-Wno-pointer-sign', which warns for pointer argument passing or
7314     assignment with different signedness.
7315
7316'-Wno-int-conversion (C and Objective-C only)'
7317     Do not warn about incompatible integer to pointer and pointer to
7318     integer conversions.  This warning is about implicit conversions;
7319     for explicit conversions the warnings '-Wno-int-to-pointer-cast'
7320     and '-Wno-pointer-to-int-cast' may be used.
7321
7322'-Wzero-length-bounds'
7323     Warn about accesses to elements of zero-length array members that
7324     might overlap other members of the same object.  Declaring interior
7325     zero-length arrays is discouraged because accesses to them are
7326     undefined.  See *Note Zero Length::.
7327
7328     For example, the first two stores in function 'bad' are diagnosed
7329     because the array elements overlap the subsequent members 'b' and
7330     'c'.  The third store is diagnosed by '-Warray-bounds' because it
7331     is beyond the bounds of the enclosing object.
7332
7333          struct X { int a[0]; int b, c; };
7334          struct X x;
7335
7336          void bad (void)
7337          {
7338            x.a[0] = 0;   // -Wzero-length-bounds
7339            x.a[1] = 1;   // -Wzero-length-bounds
7340            x.a[2] = 2;   // -Warray-bounds
7341          }
7342
7343     Option '-Wzero-length-bounds' is enabled by '-Warray-bounds'.
7344
7345'-Wno-div-by-zero'
7346     Do not warn about compile-time integer division by zero.
7347     Floating-point division by zero is not warned about, as it can be a
7348     legitimate way of obtaining infinities and NaNs.
7349
7350'-Wsystem-headers'
7351     Print warning messages for constructs found in system header files.
7352     Warnings from system headers are normally suppressed, on the
7353     assumption that they usually do not indicate real problems and
7354     would only make the compiler output harder to read.  Using this
7355     command-line option tells GCC to emit warnings from system headers
7356     as if they occurred in user code.  However, note that using '-Wall'
7357     in conjunction with this option does _not_ warn about unknown
7358     pragmas in system headers--for that, '-Wunknown-pragmas' must also
7359     be used.
7360
7361'-Wtautological-compare'
7362     Warn if a self-comparison always evaluates to true or false.  This
7363     warning detects various mistakes such as:
7364          int i = 1;
7365          ...
7366          if (i > i) { ... }
7367
7368     This warning also warns about bitwise comparisons that always
7369     evaluate to true or false, for instance:
7370          if ((a & 16) == 10) { ... }
7371     will always be false.
7372
7373     This warning is enabled by '-Wall'.
7374
7375'-Wtrampolines'
7376     Warn about trampolines generated for pointers to nested functions.
7377     A trampoline is a small piece of data or code that is created at
7378     run time on the stack when the address of a nested function is
7379     taken, and is used to call the nested function indirectly.  For
7380     some targets, it is made up of data only and thus requires no
7381     special treatment.  But, for most targets, it is made up of code
7382     and thus requires the stack to be made executable in order for the
7383     program to work properly.
7384
7385'-Wfloat-equal'
7386     Warn if floating-point values are used in equality comparisons.
7387
7388     The idea behind this is that sometimes it is convenient (for the
7389     programmer) to consider floating-point values as approximations to
7390     infinitely precise real numbers.  If you are doing this, then you
7391     need to compute (by analyzing the code, or in some other way) the
7392     maximum or likely maximum error that the computation introduces,
7393     and allow for it when performing comparisons (and when producing
7394     output, but that's a different problem).  In particular, instead of
7395     testing for equality, you should check to see whether the two
7396     values have ranges that overlap; and this is done with the
7397     relational operators, so equality comparisons are probably
7398     mistaken.
7399
7400'-Wtraditional (C and Objective-C only)'
7401     Warn about certain constructs that behave differently in
7402     traditional and ISO C.  Also warn about ISO C constructs that have
7403     no traditional C equivalent, and/or problematic constructs that
7404     should be avoided.
7405
7406        * Macro parameters that appear within string literals in the
7407          macro body.  In traditional C macro replacement takes place
7408          within string literals, but in ISO C it does not.
7409
7410        * In traditional C, some preprocessor directives did not exist.
7411          Traditional preprocessors only considered a line to be a
7412          directive if the '#' appeared in column 1 on the line.
7413          Therefore '-Wtraditional' warns about directives that
7414          traditional C understands but ignores because the '#' does not
7415          appear as the first character on the line.  It also suggests
7416          you hide directives like '#pragma' not understood by
7417          traditional C by indenting them.  Some traditional
7418          implementations do not recognize '#elif', so this option
7419          suggests avoiding it altogether.
7420
7421        * A function-like macro that appears without arguments.
7422
7423        * The unary plus operator.
7424
7425        * The 'U' integer constant suffix, or the 'F' or 'L'
7426          floating-point constant suffixes.  (Traditional C does support
7427          the 'L' suffix on integer constants.)  Note, these suffixes
7428          appear in macros defined in the system headers of most modern
7429          systems, e.g. the '_MIN'/'_MAX' macros in '<limits.h>'.  Use
7430          of these macros in user code might normally lead to spurious
7431          warnings, however GCC's integrated preprocessor has enough
7432          context to avoid warning in these cases.
7433
7434        * A function declared external in one block and then used after
7435          the end of the block.
7436
7437        * A 'switch' statement has an operand of type 'long'.
7438
7439        * A non-'static' function declaration follows a 'static' one.
7440          This construct is not accepted by some traditional C
7441          compilers.
7442
7443        * The ISO type of an integer constant has a different width or
7444          signedness from its traditional type.  This warning is only
7445          issued if the base of the constant is ten.  I.e. hexadecimal
7446          or octal values, which typically represent bit patterns, are
7447          not warned about.
7448
7449        * Usage of ISO string concatenation is detected.
7450
7451        * Initialization of automatic aggregates.
7452
7453        * Identifier conflicts with labels.  Traditional C lacks a
7454          separate namespace for labels.
7455
7456        * Initialization of unions.  If the initializer is zero, the
7457          warning is omitted.  This is done under the assumption that
7458          the zero initializer in user code appears conditioned on e.g.
7459          '__STDC__' to avoid missing initializer warnings and relies on
7460          default initialization to zero in the traditional C case.
7461
7462        * Conversions by prototypes between fixed/floating-point values
7463          and vice versa.  The absence of these prototypes when
7464          compiling with traditional C causes serious problems.  This is
7465          a subset of the possible conversion warnings; for the full set
7466          use '-Wtraditional-conversion'.
7467
7468        * Use of ISO C style function definitions.  This warning
7469          intentionally is _not_ issued for prototype declarations or
7470          variadic functions because these ISO C features appear in your
7471          code when using libiberty's traditional C compatibility
7472          macros, 'PARAMS' and 'VPARAMS'.  This warning is also bypassed
7473          for nested functions because that feature is already a GCC
7474          extension and thus not relevant to traditional C
7475          compatibility.
7476
7477'-Wtraditional-conversion (C and Objective-C only)'
7478     Warn if a prototype causes a type conversion that is different from
7479     what would happen to the same argument in the absence of a
7480     prototype.  This includes conversions of fixed point to floating
7481     and vice versa, and conversions changing the width or signedness of
7482     a fixed-point argument except when the same as the default
7483     promotion.
7484
7485'-Wdeclaration-after-statement (C and Objective-C only)'
7486     Warn when a declaration is found after a statement in a block.
7487     This construct, known from C++, was introduced with ISO C99 and is
7488     by default allowed in GCC.  It is not supported by ISO C90.  *Note
7489     Mixed Labels and Declarations::.
7490
7491'-Wshadow'
7492     Warn whenever a local variable or type declaration shadows another
7493     variable, parameter, type, class member (in C++), or instance
7494     variable (in Objective-C) or whenever a built-in function is
7495     shadowed.  Note that in C++, the compiler warns if a local variable
7496     shadows an explicit typedef, but not if it shadows a
7497     struct/class/enum.  If this warning is enabled, it includes also
7498     all instances of local shadowing.  This means that
7499     '-Wno-shadow=local' and '-Wno-shadow=compatible-local' are ignored
7500     when '-Wshadow' is used.  Same as '-Wshadow=global'.
7501
7502'-Wno-shadow-ivar (Objective-C only)'
7503     Do not warn whenever a local variable shadows an instance variable
7504     in an Objective-C method.
7505
7506'-Wshadow=global'
7507     Warn for any shadowing.  Same as '-Wshadow'.
7508
7509'-Wshadow=local'
7510     Warn when a local variable shadows another local variable or
7511     parameter.
7512
7513'-Wshadow=compatible-local'
7514     Warn when a local variable shadows another local variable or
7515     parameter whose type is compatible with that of the shadowing
7516     variable.  In C++, type compatibility here means the type of the
7517     shadowing variable can be converted to that of the shadowed
7518     variable.  The creation of this flag (in addition to
7519     '-Wshadow=local') is based on the idea that when a local variable
7520     shadows another one of incompatible type, it is most likely
7521     intentional, not a bug or typo, as shown in the following example:
7522
7523          for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i)
7524          {
7525            for (int i = 0; i < N; ++i)
7526            {
7527              ...
7528            }
7529            ...
7530          }
7531
7532     Since the two variable 'i' in the example above have incompatible
7533     types, enabling only '-Wshadow=compatible-local' does not emit a
7534     warning.  Because their types are incompatible, if a programmer
7535     accidentally uses one in place of the other, type checking is
7536     expected to catch that and emit an error or warning.  Use of this
7537     flag instead of '-Wshadow=local' can possibly reduce the number of
7538     warnings triggered by intentional shadowing.  Note that this also
7539     means that shadowing 'const char *i' by 'char *i' does not emit a
7540     warning.
7541
7542     This warning is also enabled by '-Wshadow=local'.
7543
7544'-Wlarger-than=BYTE-SIZE'
7545     Warn whenever an object is defined whose size exceeds BYTE-SIZE.
7546     '-Wlarger-than=''PTRDIFF_MAX' is enabled by default.  Warnings
7547     controlled by the option can be disabled either by specifying
7548     BYTE-SIZE of 'SIZE_MAX' or more or by '-Wno-larger-than'.
7549
7550     Also warn for calls to bounded functions such as 'memchr' or
7551     'strnlen' that specify a bound greater than the largest possible
7552     object, which is 'PTRDIFF_MAX' bytes by default.  These warnings
7553     can only be disabled by '-Wno-larger-than'.
7554
7555'-Wno-larger-than'
7556     Disable '-Wlarger-than=' warnings.  The option is equivalent to
7557     '-Wlarger-than=''SIZE_MAX' or larger.
7558
7559'-Wframe-larger-than=BYTE-SIZE'
7560     Warn if the size of a function frame exceeds BYTE-SIZE.  The
7561     computation done to determine the stack frame size is approximate
7562     and not conservative.  The actual requirements may be somewhat
7563     greater than BYTE-SIZE even if you do not get a warning.  In
7564     addition, any space allocated via 'alloca', variable-length arrays,
7565     or related constructs is not included by the compiler when
7566     determining whether or not to issue a warning.
7567     '-Wframe-larger-than=''PTRDIFF_MAX' is enabled by default.
7568     Warnings controlled by the option can be disabled either by
7569     specifying BYTE-SIZE of 'SIZE_MAX' or more or by
7570     '-Wno-frame-larger-than'.
7571
7572'-Wno-frame-larger-than'
7573     Disable '-Wframe-larger-than=' warnings.  The option is equivalent
7574     to '-Wframe-larger-than=''SIZE_MAX' or larger.
7575
7576'-Wfree-nonheap-object'
7577     Warn when attempting to deallocate an object that was either not
7578     allocated on the heap, or by using a pointer that was not returned
7579     from a prior call to the corresponding allocation function.  For
7580     example, because the call to 'stpcpy' returns a pointer to the
7581     terminating nul character and not to the beginning of the object,
7582     the call to 'free' below is diagnosed.
7583
7584          void f (char *p)
7585          {
7586            p = stpcpy (p, "abc");
7587            // ...
7588            free (p);   // warning
7589          }
7590
7591     '-Wfree-nonheap-object' is included in '-Wall'.
7592
7593'-Wstack-usage=BYTE-SIZE'
7594     Warn if the stack usage of a function might exceed BYTE-SIZE.  The
7595     computation done to determine the stack usage is conservative.  Any
7596     space allocated via 'alloca', variable-length arrays, or related
7597     constructs is included by the compiler when determining whether or
7598     not to issue a warning.
7599
7600     The message is in keeping with the output of '-fstack-usage'.
7601
7602        * If the stack usage is fully static but exceeds the specified
7603          amount, it's:
7604
7605                 warning: stack usage is 1120 bytes
7606        * If the stack usage is (partly) dynamic but bounded, it's:
7607
7608                 warning: stack usage might be 1648 bytes
7609        * If the stack usage is (partly) dynamic and not bounded, it's:
7610
7611                 warning: stack usage might be unbounded
7612
7613     '-Wstack-usage=''PTRDIFF_MAX' is enabled by default.  Warnings
7614     controlled by the option can be disabled either by specifying
7615     BYTE-SIZE of 'SIZE_MAX' or more or by '-Wno-stack-usage'.
7616
7617'-Wno-stack-usage'
7618     Disable '-Wstack-usage=' warnings.  The option is equivalent to
7619     '-Wstack-usage=''SIZE_MAX' or larger.
7620
7621'-Wunsafe-loop-optimizations'
7622     Warn if the loop cannot be optimized because the compiler cannot
7623     assume anything on the bounds of the loop indices.  With
7624     '-funsafe-loop-optimizations' warn if the compiler makes such
7625     assumptions.
7626
7627'-Wno-pedantic-ms-format (MinGW targets only)'
7628     When used in combination with '-Wformat' and '-pedantic' without
7629     GNU extensions, this option disables the warnings about non-ISO
7630     'printf' / 'scanf' format width specifiers 'I32', 'I64', and 'I'
7631     used on Windows targets, which depend on the MS runtime.
7632
7633'-Wpointer-arith'
7634     Warn about anything that depends on the "size of" a function type
7635     or of 'void'.  GNU C assigns these types a size of 1, for
7636     convenience in calculations with 'void *' pointers and pointers to
7637     functions.  In C++, warn also when an arithmetic operation involves
7638     'NULL'.  This warning is also enabled by '-Wpedantic'.
7639
7640'-Wno-pointer-compare'
7641     Do not warn if a pointer is compared with a zero character
7642     constant.  This usually means that the pointer was meant to be
7643     dereferenced.  For example:
7644
7645          const char *p = foo ();
7646          if (p == '\0')
7647            return 42;
7648
7649     Note that the code above is invalid in C++11.
7650
7651     This warning is enabled by default.
7652
7653'-Wtsan'
7654     Warn about unsupported features in ThreadSanitizer.
7655
7656     ThreadSanitizer does not support 'std::atomic_thread_fence' and can
7657     report false positives.
7658
7659     This warning is enabled by default.
7660
7661'-Wtype-limits'
7662     Warn if a comparison is always true or always false due to the
7663     limited range of the data type, but do not warn for constant
7664     expressions.  For example, warn if an unsigned variable is compared
7665     against zero with '<' or '>='.  This warning is also enabled by
7666     '-Wextra'.
7667
7668'-Wabsolute-value (C and Objective-C only)'
7669     Warn for calls to standard functions that compute the absolute
7670     value of an argument when a more appropriate standard function is
7671     available.  For example, calling 'abs(3.14)' triggers the warning
7672     because the appropriate function to call to compute the absolute
7673     value of a double argument is 'fabs'.  The option also triggers
7674     warnings when the argument in a call to such a function has an
7675     unsigned type.  This warning can be suppressed with an explicit
7676     type cast and it is also enabled by '-Wextra'.
7677
7678'-Wcomment'
7679'-Wcomments'
7680     Warn whenever a comment-start sequence '/*' appears in a '/*'
7681     comment, or whenever a backslash-newline appears in a '//' comment.
7682     This warning is enabled by '-Wall'.
7683
7684'-Wtrigraphs'
7685     Warn if any trigraphs are encountered that might change the meaning
7686     of the program.  Trigraphs within comments are not warned about,
7687     except those that would form escaped newlines.
7688
7689     This option is implied by '-Wall'.  If '-Wall' is not given, this
7690     option is still enabled unless trigraphs are enabled.  To get
7691     trigraph conversion without warnings, but get the other '-Wall'
7692     warnings, use '-trigraphs -Wall -Wno-trigraphs'.
7693
7694'-Wundef'
7695     Warn if an undefined identifier is evaluated in an '#if' directive.
7696     Such identifiers are replaced with zero.
7697
7698'-Wexpansion-to-defined'
7699     Warn whenever 'defined' is encountered in the expansion of a macro
7700     (including the case where the macro is expanded by an '#if'
7701     directive).  Such usage is not portable.  This warning is also
7702     enabled by '-Wpedantic' and '-Wextra'.
7703
7704'-Wunused-macros'
7705     Warn about macros defined in the main file that are unused.  A
7706     macro is "used" if it is expanded or tested for existence at least
7707     once.  The preprocessor also warns if the macro has not been used
7708     at the time it is redefined or undefined.
7709
7710     Built-in macros, macros defined on the command line, and macros
7711     defined in include files are not warned about.
7712
7713     _Note:_ If a macro is actually used, but only used in skipped
7714     conditional blocks, then the preprocessor reports it as unused.  To
7715     avoid the warning in such a case, you might improve the scope of
7716     the macro's definition by, for example, moving it into the first
7717     skipped block.  Alternatively, you could provide a dummy use with
7718     something like:
7719
7720          #if defined the_macro_causing_the_warning
7721          #endif
7722
7723'-Wno-endif-labels'
7724     Do not warn whenever an '#else' or an '#endif' are followed by
7725     text.  This sometimes happens in older programs with code of the
7726     form
7727
7728          #if FOO
7729          ...
7730          #else FOO
7731          ...
7732          #endif FOO
7733
7734     The second and third 'FOO' should be in comments.  This warning is
7735     on by default.
7736
7737'-Wbad-function-cast (C and Objective-C only)'
7738     Warn when a function call is cast to a non-matching type.  For
7739     example, warn if a call to a function returning an integer type is
7740     cast to a pointer type.
7741
7742'-Wc90-c99-compat (C and Objective-C only)'
7743     Warn about features not present in ISO C90, but present in ISO C99.
7744     For instance, warn about use of variable length arrays, 'long long'
7745     type, 'bool' type, compound literals, designated initializers, and
7746     so on.  This option is independent of the standards mode.  Warnings
7747     are disabled in the expression that follows '__extension__'.
7748
7749'-Wc99-c11-compat (C and Objective-C only)'
7750     Warn about features not present in ISO C99, but present in ISO C11.
7751     For instance, warn about use of anonymous structures and unions,
7752     '_Atomic' type qualifier, '_Thread_local' storage-class specifier,
7753     '_Alignas' specifier, 'Alignof' operator, '_Generic' keyword, and
7754     so on.  This option is independent of the standards mode.  Warnings
7755     are disabled in the expression that follows '__extension__'.
7756
7757'-Wc11-c2x-compat (C and Objective-C only)'
7758     Warn about features not present in ISO C11, but present in ISO C2X.
7759     For instance, warn about omitting the string in '_Static_assert',
7760     use of '[[]]' syntax for attributes, use of decimal floating-point
7761     types, and so on.  This option is independent of the standards
7762     mode.  Warnings are disabled in the expression that follows
7763     '__extension__'.
7764
7765'-Wc++-compat (C and Objective-C only)'
7766     Warn about ISO C constructs that are outside of the common subset
7767     of ISO C and ISO C++, e.g. request for implicit conversion from
7768     'void *' to a pointer to non-'void' type.
7769
7770'-Wc++11-compat (C++ and Objective-C++ only)'
7771     Warn about C++ constructs whose meaning differs between ISO C++
7772     1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
7773     keywords in ISO C++ 2011.  This warning turns on '-Wnarrowing' and
7774     is enabled by '-Wall'.
7775
7776'-Wc++14-compat (C++ and Objective-C++ only)'
7777     Warn about C++ constructs whose meaning differs between ISO C++
7778     2011 and ISO C++ 2014.  This warning is enabled by '-Wall'.
7779
7780'-Wc++17-compat (C++ and Objective-C++ only)'
7781     Warn about C++ constructs whose meaning differs between ISO C++
7782     2014 and ISO C++ 2017.  This warning is enabled by '-Wall'.
7783
7784'-Wc++20-compat (C++ and Objective-C++ only)'
7785     Warn about C++ constructs whose meaning differs between ISO C++
7786     2017 and ISO C++ 2020.  This warning is enabled by '-Wall'.
7787
7788'-Wno-c++11-extensions (C++ and Objective-C++ only)'
7789     Do not warn about C++11 constructs in code being compiled using an
7790     older C++ standard.  Even without this option, some C++11
7791     constructs will only be diagnosed if '-Wpedantic' is used.
7792
7793'-Wno-c++14-extensions (C++ and Objective-C++ only)'
7794     Do not warn about C++14 constructs in code being compiled using an
7795     older C++ standard.  Even without this option, some C++14
7796     constructs will only be diagnosed if '-Wpedantic' is used.
7797
7798'-Wno-c++17-extensions (C++ and Objective-C++ only)'
7799     Do not warn about C++17 constructs in code being compiled using an
7800     older C++ standard.  Even without this option, some C++17
7801     constructs will only be diagnosed if '-Wpedantic' is used.
7802
7803'-Wno-c++20-extensions (C++ and Objective-C++ only)'
7804     Do not warn about C++20 constructs in code being compiled using an
7805     older C++ standard.  Even without this option, some C++20
7806     constructs will only be diagnosed if '-Wpedantic' is used.
7807
7808'-Wno-c++23-extensions (C++ and Objective-C++ only)'
7809     Do not warn about C++23 constructs in code being compiled using an
7810     older C++ standard.  Even without this option, some C++23
7811     constructs will only be diagnosed if '-Wpedantic' is used.
7812
7813'-Wcast-qual'
7814     Warn whenever a pointer is cast so as to remove a type qualifier
7815     from the target type.  For example, warn if a 'const char *' is
7816     cast to an ordinary 'char *'.
7817
7818     Also warn when making a cast that introduces a type qualifier in an
7819     unsafe way.  For example, casting 'char **' to 'const char **' is
7820     unsafe, as in this example:
7821
7822            /* p is char ** value.  */
7823            const char **q = (const char **) p;
7824            /* Assignment of readonly string to const char * is OK.  */
7825            *q = "string";
7826            /* Now char** pointer points to read-only memory.  */
7827            **p = 'b';
7828
7829'-Wcast-align'
7830     Warn whenever a pointer is cast such that the required alignment of
7831     the target is increased.  For example, warn if a 'char *' is cast
7832     to an 'int *' on machines where integers can only be accessed at
7833     two- or four-byte boundaries.
7834
7835'-Wcast-align=strict'
7836     Warn whenever a pointer is cast such that the required alignment of
7837     the target is increased.  For example, warn if a 'char *' is cast
7838     to an 'int *' regardless of the target machine.
7839
7840'-Wcast-function-type'
7841     Warn when a function pointer is cast to an incompatible function
7842     pointer.  In a cast involving function types with a variable
7843     argument list only the types of initial arguments that are provided
7844     are considered.  Any parameter of pointer-type matches any other
7845     pointer-type.  Any benign differences in integral types are
7846     ignored, like 'int' vs. 'long' on ILP32 targets.  Likewise type
7847     qualifiers are ignored.  The function type 'void (*) (void)' is
7848     special and matches everything, which can be used to suppress this
7849     warning.  In a cast involving pointer to member types this warning
7850     warns whenever the type cast is changing the pointer to member
7851     type.  This warning is enabled by '-Wextra'.
7852
7853'-Wwrite-strings'
7854     When compiling C, give string constants the type 'const
7855     char[LENGTH]' so that copying the address of one into a non-'const'
7856     'char *' pointer produces a warning.  These warnings help you find
7857     at compile time code that can try to write into a string constant,
7858     but only if you have been very careful about using 'const' in
7859     declarations and prototypes.  Otherwise, it is just a nuisance.
7860     This is why we did not make '-Wall' request these warnings.
7861
7862     When compiling C++, warn about the deprecated conversion from
7863     string literals to 'char *'.  This warning is enabled by default
7864     for C++ programs.
7865
7866'-Wclobbered'
7867     Warn for variables that might be changed by 'longjmp' or 'vfork'.
7868     This warning is also enabled by '-Wextra'.
7869
7870'-Wconversion'
7871     Warn for implicit conversions that may alter a value.  This
7872     includes conversions between real and integer, like 'abs (x)' when
7873     'x' is 'double'; conversions between signed and unsigned, like
7874     'unsigned ui = -1'; and conversions to smaller types, like 'sqrtf
7875     (M_PI)'.  Do not warn for explicit casts like 'abs ((int) x)' and
7876     'ui = (unsigned) -1', or if the value is not changed by the
7877     conversion like in 'abs (2.0)'.  Warnings about conversions between
7878     signed and unsigned integers can be disabled by using
7879     '-Wno-sign-conversion'.
7880
7881     For C++, also warn for confusing overload resolution for
7882     user-defined conversions; and conversions that never use a type
7883     conversion operator: conversions to 'void', the same type, a base
7884     class or a reference to them.  Warnings about conversions between
7885     signed and unsigned integers are disabled by default in C++ unless
7886     '-Wsign-conversion' is explicitly enabled.
7887
7888     Warnings about conversion from arithmetic on a small type back to
7889     that type are only given with '-Warith-conversion'.
7890
7891'-Wdangling-else'
7892     Warn about constructions where there may be confusion to which 'if'
7893     statement an 'else' branch belongs.  Here is an example of such a
7894     case:
7895
7896          {
7897            if (a)
7898              if (b)
7899                foo ();
7900            else
7901              bar ();
7902          }
7903
7904     In C/C++, every 'else' branch belongs to the innermost possible
7905     'if' statement, which in this example is 'if (b)'.  This is often
7906     not what the programmer expected, as illustrated in the above
7907     example by indentation the programmer chose.  When there is the
7908     potential for this confusion, GCC issues a warning when this flag
7909     is specified.  To eliminate the warning, add explicit braces around
7910     the innermost 'if' statement so there is no way the 'else' can
7911     belong to the enclosing 'if'.  The resulting code looks like this:
7912
7913          {
7914            if (a)
7915              {
7916                if (b)
7917                  foo ();
7918                else
7919                  bar ();
7920              }
7921          }
7922
7923     This warning is enabled by '-Wparentheses'.
7924
7925'-Wdangling-pointer'
7926'-Wdangling-pointer=N'
7927     Warn about uses of pointers (or C++ references) to objects with
7928     automatic storage duration after their lifetime has ended.  This
7929     includes local variables declared in nested blocks, compound
7930     literals and other unnamed temporary objects.  In addition, warn
7931     about storing the address of such objects in escaped pointers.  The
7932     warning is enabled at all optimization levels but may yield
7933     different results with optimization than without.
7934
7935     '-Wdangling-pointer=1'
7936          At level 1 the warning diagnoses only unconditional uses of
7937          dangling pointers.  For example
7938               int f (int c1, int c2, x)
7939               {
7940                 char *p = strchr ((char[]){ c1, c2 }, c3);
7941                 return p ? *p : 'x';   // warning: dangling pointer to a compound literal
7942               }
7943          In the following function the store of the address of the
7944          local variable 'x' in the escaped pointer '*p' also triggers
7945          the warning.
7946               void g (int **p)
7947               {
7948                 int x = 7;
7949                 *p = &x;   // warning: storing the address of a local variable in *p
7950               }
7951
7952     '-Wdangling-pointer=2'
7953          At level 2, in addition to unconditional uses the warning also
7954          diagnoses conditional uses of dangling pointers.
7955
7956          For example, because the array A in the following function is
7957          out of scope when the pointer S that was set to point is used,
7958          the warning triggers at this level.
7959
7960               void f (char *s)
7961               {
7962                 if (!s)
7963                   {
7964                     char a[12] = "tmpname";
7965                     s = a;
7966                   }
7967                 strcat (s, ".tmp");   // warning: dangling pointer to a may be used
7968                 ...
7969               }
7970
7971     '-Wdangling-pointer=2' is included in '-Wall'.
7972
7973'-Wdate-time'
7974     Warn when macros '__TIME__', '__DATE__' or '__TIMESTAMP__' are
7975     encountered as they might prevent bit-wise-identical reproducible
7976     compilations.
7977
7978'-Wempty-body'
7979     Warn if an empty body occurs in an 'if', 'else' or 'do while'
7980     statement.  This warning is also enabled by '-Wextra'.
7981
7982'-Wno-endif-labels'
7983     Do not warn about stray tokens after '#else' and '#endif'.
7984
7985'-Wenum-compare'
7986     Warn about a comparison between values of different enumerated
7987     types.  In C++ enumerated type mismatches in conditional
7988     expressions are also diagnosed and the warning is enabled by
7989     default.  In C this warning is enabled by '-Wall'.
7990
7991'-Wenum-conversion'
7992     Warn when a value of enumerated type is implicitly converted to a
7993     different enumerated type.  This warning is enabled by '-Wextra' in
7994     C.
7995
7996'-Wjump-misses-init (C, Objective-C only)'
7997     Warn if a 'goto' statement or a 'switch' statement jumps forward
7998     across the initialization of a variable, or jumps backward to a
7999     label after the variable has been initialized.  This only warns
8000     about variables that are initialized when they are declared.  This
8001     warning is only supported for C and Objective-C; in C++ this sort
8002     of branch is an error in any case.
8003
8004     '-Wjump-misses-init' is included in '-Wc++-compat'.  It can be
8005     disabled with the '-Wno-jump-misses-init' option.
8006
8007'-Wsign-compare'
8008     Warn when a comparison between signed and unsigned values could
8009     produce an incorrect result when the signed value is converted to
8010     unsigned.  In C++, this warning is also enabled by '-Wall'.  In C,
8011     it is also enabled by '-Wextra'.
8012
8013'-Wsign-conversion'
8014     Warn for implicit conversions that may change the sign of an
8015     integer value, like assigning a signed integer expression to an
8016     unsigned integer variable.  An explicit cast silences the warning.
8017     In C, this option is enabled also by '-Wconversion'.
8018
8019'-Wfloat-conversion'
8020     Warn for implicit conversions that reduce the precision of a real
8021     value.  This includes conversions from real to integer, and from
8022     higher precision real to lower precision real values.  This option
8023     is also enabled by '-Wconversion'.
8024
8025'-Wno-scalar-storage-order'
8026     Do not warn on suspicious constructs involving reverse scalar
8027     storage order.
8028
8029'-Wsizeof-array-div'
8030     Warn about divisions of two sizeof operators when the first one is
8031     applied to an array and the divisor does not equal the size of the
8032     array element.  In such a case, the computation will not yield the
8033     number of elements in the array, which is likely what the user
8034     intended.  This warning warns e.g.  about
8035          int fn ()
8036          {
8037            int arr[10];
8038            return sizeof (arr) / sizeof (short);
8039          }
8040
8041     This warning is enabled by '-Wall'.
8042
8043'-Wsizeof-pointer-div'
8044     Warn for suspicious divisions of two sizeof expressions that divide
8045     the pointer size by the element size, which is the usual way to
8046     compute the array size but won't work out correctly with pointers.
8047     This warning warns e.g. about 'sizeof (ptr) / sizeof (ptr[0])' if
8048     'ptr' is not an array, but a pointer.  This warning is enabled by
8049     '-Wall'.
8050
8051'-Wsizeof-pointer-memaccess'
8052     Warn for suspicious length parameters to certain string and memory
8053     built-in functions if the argument uses 'sizeof'.  This warning
8054     triggers for example for 'memset (ptr, 0, sizeof (ptr));' if 'ptr'
8055     is not an array, but a pointer, and suggests a possible fix, or
8056     about 'memcpy (&foo, ptr, sizeof (&foo));'.
8057     '-Wsizeof-pointer-memaccess' also warns about calls to bounded
8058     string copy functions like 'strncat' or 'strncpy' that specify as
8059     the bound a 'sizeof' expression of the source array.  For example,
8060     in the following function the call to 'strncat' specifies the size
8061     of the source string as the bound.  That is almost certainly a
8062     mistake and so the call is diagnosed.
8063          void make_file (const char *name)
8064          {
8065            char path[PATH_MAX];
8066            strncpy (path, name, sizeof path - 1);
8067            strncat (path, ".text", sizeof ".text");
8068            ...
8069          }
8070
8071     The '-Wsizeof-pointer-memaccess' option is enabled by '-Wall'.
8072
8073'-Wno-sizeof-array-argument'
8074     Do not warn when the 'sizeof' operator is applied to a parameter
8075     that is declared as an array in a function definition.  This
8076     warning is enabled by default for C and C++ programs.
8077
8078'-Wmemset-elt-size'
8079     Warn for suspicious calls to the 'memset' built-in function, if the
8080     first argument references an array, and the third argument is a
8081     number equal to the number of elements, but not equal to the size
8082     of the array in memory.  This indicates that the user has omitted a
8083     multiplication by the element size.  This warning is enabled by
8084     '-Wall'.
8085
8086'-Wmemset-transposed-args'
8087     Warn for suspicious calls to the 'memset' built-in function where
8088     the second argument is not zero and the third argument is zero.
8089     For example, the call 'memset (buf, sizeof buf, 0)' is diagnosed
8090     because 'memset (buf, 0, sizeof buf)' was meant instead.  The
8091     diagnostic is only emitted if the third argument is a literal zero.
8092     Otherwise, if it is an expression that is folded to zero, or a cast
8093     of zero to some type, it is far less likely that the arguments have
8094     been mistakenly transposed and no warning is emitted.  This warning
8095     is enabled by '-Wall'.
8096
8097'-Waddress'
8098     Warn about suspicious uses of address expressions.  These include
8099     comparing the address of a function or a declared object to the
8100     null pointer constant such as in
8101          void f (void);
8102          void g (void)
8103          {
8104            if (!func)   // warning: expression evaluates to false
8105              abort ();
8106          }
8107     comparisons of a pointer to a string literal, such as in
8108          void f (const char *x)
8109          {
8110            if (x == "abc")   // warning: expression evaluates to false
8111              puts ("equal");
8112          }
8113     and tests of the results of pointer addition or subtraction for
8114     equality to null, such as in
8115          void f (const int *p, int i)
8116          {
8117            return p + i == NULL;
8118          }
8119     Such uses typically indicate a programmer error: the address of
8120     most functions and objects necessarily evaluates to true (the
8121     exception are weak symbols), so their use in a conditional might
8122     indicate missing parentheses in a function call or a missing
8123     dereference in an array expression.  The subset of the warning for
8124     object pointers can be suppressed by casting the pointer operand to
8125     an integer type such as 'inptr_t' or 'uinptr_t'.  Comparisons
8126     against string literals result in unspecified behavior and are not
8127     portable, and suggest the intent was to call 'strcmp'.  The warning
8128     is suppressed if the suspicious expression is the result of macro
8129     expansion.  '-Waddress' warning is enabled by '-Wall'.
8130
8131'-Wno-address-of-packed-member'
8132     Do not warn when the address of packed member of struct or union is
8133     taken, which usually results in an unaligned pointer value.  This
8134     is enabled by default.
8135
8136'-Wlogical-op'
8137     Warn about suspicious uses of logical operators in expressions.
8138     This includes using logical operators in contexts where a bit-wise
8139     operator is likely to be expected.  Also warns when the operands of
8140     a logical operator are the same:
8141          extern int a;
8142          if (a < 0 && a < 0) { ... }
8143
8144'-Wlogical-not-parentheses'
8145     Warn about logical not used on the left hand side operand of a
8146     comparison.  This option does not warn if the right operand is
8147     considered to be a boolean expression.  Its purpose is to detect
8148     suspicious code like the following:
8149          int a;
8150          ...
8151          if (!a > 1) { ... }
8152
8153     It is possible to suppress the warning by wrapping the LHS into
8154     parentheses:
8155          if ((!a) > 1) { ... }
8156
8157     This warning is enabled by '-Wall'.
8158
8159'-Waggregate-return'
8160     Warn if any functions that return structures or unions are defined
8161     or called.  (In languages where you can return an array, this also
8162     elicits a warning.)
8163
8164'-Wno-aggressive-loop-optimizations'
8165     Warn if in a loop with constant number of iterations the compiler
8166     detects undefined behavior in some statement during one or more of
8167     the iterations.
8168
8169'-Wno-attributes'
8170     Do not warn if an unexpected '__attribute__' is used, such as
8171     unrecognized attributes, function attributes applied to variables,
8172     etc.  This does not stop errors for incorrect use of supported
8173     attributes.
8174
8175     Additionally, using '-Wno-attributes=', it is possible to suppress
8176     warnings about unknown scoped attributes (in C++11 and C2X). For
8177     example, '-Wno-attributes=vendor::attr' disables warning about the
8178     following declaration:
8179
8180          [[vendor::attr]] void f();
8181
8182     It is also possible to disable warning about all attributes in a
8183     namespace using '-Wno-attributes=vendor::' which prevents warning
8184     about both of these declarations:
8185
8186          [[vendor::safe]] void f();
8187          [[vendor::unsafe]] void f2();
8188
8189     Note that '-Wno-attributes=' does not imply '-Wno-attributes'.
8190
8191'-Wno-builtin-declaration-mismatch'
8192     Warn if a built-in function is declared with an incompatible
8193     signature or as a non-function, or when a built-in function
8194     declared with a type that does not include a prototype is called
8195     with arguments whose promoted types do not match those expected by
8196     the function.  When '-Wextra' is specified, also warn when a
8197     built-in function that takes arguments is declared without a
8198     prototype.  The '-Wbuiltin-declaration-mismatch' warning is enabled
8199     by default.  To avoid the warning include the appropriate header to
8200     bring the prototypes of built-in functions into scope.
8201
8202     For example, the call to 'memset' below is diagnosed by the warning
8203     because the function expects a value of type 'size_t' as its
8204     argument but the type of '32' is 'int'.  With '-Wextra', the
8205     declaration of the function is diagnosed as well.
8206          extern void* memset ();
8207          void f (void *d)
8208          {
8209            memset (d, '\0', 32);
8210          }
8211
8212'-Wno-builtin-macro-redefined'
8213     Do not warn if certain built-in macros are redefined.  This
8214     suppresses warnings for redefinition of '__TIMESTAMP__',
8215     '__TIME__', '__DATE__', '__FILE__', and '__BASE_FILE__'.
8216
8217'-Wstrict-prototypes (C and Objective-C only)'
8218     Warn if a function is declared or defined without specifying the
8219     argument types.  (An old-style function definition is permitted
8220     without a warning if preceded by a declaration that specifies the
8221     argument types.)
8222
8223'-Wold-style-declaration (C and Objective-C only)'
8224     Warn for obsolescent usages, according to the C Standard, in a
8225     declaration.  For example, warn if storage-class specifiers like
8226     'static' are not the first things in a declaration.  This warning
8227     is also enabled by '-Wextra'.
8228
8229'-Wold-style-definition (C and Objective-C only)'
8230     Warn if an old-style function definition is used.  A warning is
8231     given even if there is a previous prototype.  A definition using
8232     '()' is not considered an old-style definition in C2X mode, because
8233     it is equivalent to '(void)' in that case, but is considered an
8234     old-style definition for older standards.
8235
8236'-Wmissing-parameter-type (C and Objective-C only)'
8237     A function parameter is declared without a type specifier in
8238     K&R-style functions:
8239
8240          void foo(bar) { }
8241
8242     This warning is also enabled by '-Wextra'.
8243
8244'-Wmissing-prototypes (C and Objective-C only)'
8245     Warn if a global function is defined without a previous prototype
8246     declaration.  This warning is issued even if the definition itself
8247     provides a prototype.  Use this option to detect global functions
8248     that do not have a matching prototype declaration in a header file.
8249     This option is not valid for C++ because all function declarations
8250     provide prototypes and a non-matching declaration declares an
8251     overload rather than conflict with an earlier declaration.  Use
8252     '-Wmissing-declarations' to detect missing declarations in C++.
8253
8254'-Wmissing-declarations'
8255     Warn if a global function is defined without a previous
8256     declaration.  Do so even if the definition itself provides a
8257     prototype.  Use this option to detect global functions that are not
8258     declared in header files.  In C, no warnings are issued for
8259     functions with previous non-prototype declarations; use
8260     '-Wmissing-prototypes' to detect missing prototypes.  In C++, no
8261     warnings are issued for function templates, or for inline
8262     functions, or for functions in anonymous namespaces.
8263
8264'-Wmissing-field-initializers'
8265     Warn if a structure's initializer has some fields missing.  For
8266     example, the following code causes such a warning, because 'x.h' is
8267     implicitly zero:
8268
8269          struct s { int f, g, h; };
8270          struct s x = { 3, 4 };
8271
8272     This option does not warn about designated initializers, so the
8273     following modification does not trigger a warning:
8274
8275          struct s { int f, g, h; };
8276          struct s x = { .f = 3, .g = 4 };
8277
8278     In C this option does not warn about the universal zero initializer
8279     '{ 0 }':
8280
8281          struct s { int f, g, h; };
8282          struct s x = { 0 };
8283
8284     Likewise, in C++ this option does not warn about the empty { }
8285     initializer, for example:
8286
8287          struct s { int f, g, h; };
8288          s x = { };
8289
8290     This warning is included in '-Wextra'.  To get other '-Wextra'
8291     warnings without this one, use '-Wextra
8292     -Wno-missing-field-initializers'.
8293
8294'-Wno-missing-requires'
8295
8296     By default, the compiler warns about a concept-id appearing as a
8297     C++20 simple-requirement:
8298
8299          bool satisfied = requires { C<T> };
8300
8301     Here 'satisfied' will be true if 'C<T>' is a valid expression,
8302     which it is for all T. Presumably the user meant to write
8303
8304          bool satisfied = requires { requires C<T> };
8305
8306     so 'satisfied' is only true if concept 'C' is satisfied for type
8307     'T'.
8308
8309     This warning can be disabled with '-Wno-missing-requires'.
8310
8311'-Wno-missing-template-keyword'
8312
8313     The member access tokens ., -> and :: must be followed by the
8314     'template' keyword if the parent object is dependent and the member
8315     being named is a template.
8316
8317          template <class X>
8318          void DoStuff (X x)
8319          {
8320            x.template DoSomeOtherStuff<X>(); // Good.
8321            x.DoMoreStuff<X>(); // Warning, x is dependent.
8322          }
8323
8324     In rare cases it is possible to get false positives.  To silence
8325     this, wrap the expression in parentheses.  For example, the
8326     following is treated as a template, even where m and N are
8327     integers:
8328
8329          void NotATemplate (my_class t)
8330          {
8331            int N = 5;
8332
8333            bool test = t.m < N > (0); // Treated as a template.
8334            test = (t.m < N) > (0); // Same meaning, but not treated as a template.
8335          }
8336
8337     This warning can be disabled with '-Wno-missing-template-keyword'.
8338
8339'-Wno-multichar'
8340     Do not warn if a multicharacter constant (''FOOF'') is used.
8341     Usually they indicate a typo in the user's code, as they have
8342     implementation-defined values, and should not be used in portable
8343     code.
8344
8345'-Wnormalized=[none|id|nfc|nfkc]'
8346     In ISO C and ISO C++, two identifiers are different if they are
8347     different sequences of characters.  However, sometimes when
8348     characters outside the basic ASCII character set are used, you can
8349     have two different character sequences that look the same.  To
8350     avoid confusion, the ISO 10646 standard sets out some
8351     "normalization rules" which when applied ensure that two sequences
8352     that look the same are turned into the same sequence.  GCC can warn
8353     you if you are using identifiers that have not been normalized;
8354     this option controls that warning.
8355
8356     There are four levels of warning supported by GCC.  The default is
8357     '-Wnormalized=nfc', which warns about any identifier that is not in
8358     the ISO 10646 "C" normalized form, "NFC". NFC is the recommended
8359     form for most uses.  It is equivalent to '-Wnormalized'.
8360
8361     Unfortunately, there are some characters allowed in identifiers by
8362     ISO C and ISO C++ that, when turned into NFC, are not allowed in
8363     identifiers.  That is, there's no way to use these symbols in
8364     portable ISO C or C++ and have all your identifiers in NFC.
8365     '-Wnormalized=id' suppresses the warning for these characters.  It
8366     is hoped that future versions of the standards involved will
8367     correct this, which is why this option is not the default.
8368
8369     You can switch the warning off for all characters by writing
8370     '-Wnormalized=none' or '-Wno-normalized'.  You should only do this
8371     if you are using some other normalization scheme (like "D"),
8372     because otherwise you can easily create bugs that are literally
8373     impossible to see.
8374
8375     Some characters in ISO 10646 have distinct meanings but look
8376     identical in some fonts or display methodologies, especially once
8377     formatting has been applied.  For instance '\u207F', "SUPERSCRIPT
8378     LATIN SMALL LETTER N", displays just like a regular 'n' that has
8379     been placed in a superscript.  ISO 10646 defines the "NFKC"
8380     normalization scheme to convert all these into a standard form as
8381     well, and GCC warns if your code is not in NFKC if you use
8382     '-Wnormalized=nfkc'.  This warning is comparable to warning about
8383     every identifier that contains the letter O because it might be
8384     confused with the digit 0, and so is not the default, but may be
8385     useful as a local coding convention if the programming environment
8386     cannot be fixed to display these characters distinctly.
8387
8388'-Wno-attribute-warning'
8389     Do not warn about usage of functions (*note Function Attributes::)
8390     declared with 'warning' attribute.  By default, this warning is
8391     enabled.  '-Wno-attribute-warning' can be used to disable the
8392     warning or '-Wno-error=attribute-warning' can be used to disable
8393     the error when compiled with '-Werror' flag.
8394
8395'-Wno-deprecated'
8396     Do not warn about usage of deprecated features.  *Note Deprecated
8397     Features::.
8398
8399'-Wno-deprecated-declarations'
8400     Do not warn about uses of functions (*note Function Attributes::),
8401     variables (*note Variable Attributes::), and types (*note Type
8402     Attributes::) marked as deprecated by using the 'deprecated'
8403     attribute.
8404
8405'-Wno-overflow'
8406     Do not warn about compile-time overflow in constant expressions.
8407
8408'-Wno-odr'
8409     Warn about One Definition Rule violations during link-time
8410     optimization.  Enabled by default.
8411
8412'-Wopenacc-parallelism'
8413     Warn about potentially suboptimal choices related to OpenACC
8414     parallelism.
8415
8416'-Wopenmp-simd'
8417     Warn if the vectorizer cost model overrides the OpenMP simd
8418     directive set by user.  The '-fsimd-cost-model=unlimited' option
8419     can be used to relax the cost model.
8420
8421'-Woverride-init (C and Objective-C only)'
8422     Warn if an initialized field without side effects is overridden
8423     when using designated initializers (*note Designated Initializers:
8424     Designated Inits.).
8425
8426     This warning is included in '-Wextra'.  To get other '-Wextra'
8427     warnings without this one, use '-Wextra -Wno-override-init'.
8428
8429'-Wno-override-init-side-effects (C and Objective-C only)'
8430     Do not warn if an initialized field with side effects is overridden
8431     when using designated initializers (*note Designated Initializers:
8432     Designated Inits.).  This warning is enabled by default.
8433
8434'-Wpacked'
8435     Warn if a structure is given the packed attribute, but the packed
8436     attribute has no effect on the layout or size of the structure.
8437     Such structures may be mis-aligned for little benefit.  For
8438     instance, in this code, the variable 'f.x' in 'struct bar' is
8439     misaligned even though 'struct bar' does not itself have the packed
8440     attribute:
8441
8442          struct foo {
8443            int x;
8444            char a, b, c, d;
8445          } __attribute__((packed));
8446          struct bar {
8447            char z;
8448            struct foo f;
8449          };
8450
8451'-Wnopacked-bitfield-compat'
8452     The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' attribute on
8453     bit-fields of type 'char'.  This was fixed in GCC 4.4 but the
8454     change can lead to differences in the structure layout.  GCC
8455     informs you when the offset of such a field has changed in GCC 4.4.
8456     For example there is no longer a 4-bit padding between field 'a'
8457     and 'b' in this structure:
8458
8459          struct foo
8460          {
8461            char a:4;
8462            char b:8;
8463          } __attribute__ ((packed));
8464
8465     This warning is enabled by default.  Use
8466     '-Wno-packed-bitfield-compat' to disable this warning.
8467
8468'-Wpacked-not-aligned (C, C++, Objective-C and Objective-C++ only)'
8469     Warn if a structure field with explicitly specified alignment in a
8470     packed struct or union is misaligned.  For example, a warning will
8471     be issued on 'struct S', like, 'warning: alignment 1 of 'struct S'
8472     is less than 8', in this code:
8473
8474          struct __attribute__ ((aligned (8))) S8 { char a[8]; };
8475          struct __attribute__ ((packed)) S {
8476            struct S8 s8;
8477          };
8478
8479     This warning is enabled by '-Wall'.
8480
8481'-Wpadded'
8482     Warn if padding is included in a structure, either to align an
8483     element of the structure or to align the whole structure.
8484     Sometimes when this happens it is possible to rearrange the fields
8485     of the structure to reduce the padding and so make the structure
8486     smaller.
8487
8488'-Wredundant-decls'
8489     Warn if anything is declared more than once in the same scope, even
8490     in cases where multiple declaration is valid and changes nothing.
8491
8492'-Wrestrict'
8493     Warn when an object referenced by a 'restrict'-qualified parameter
8494     (or, in C++, a '__restrict'-qualified parameter) is aliased by
8495     another argument, or when copies between such objects overlap.  For
8496     example, the call to the 'strcpy' function below attempts to
8497     truncate the string by replacing its initial characters with the
8498     last four.  However, because the call writes the terminating NUL
8499     into 'a[4]', the copies overlap and the call is diagnosed.
8500
8501          void foo (void)
8502          {
8503            char a[] = "abcd1234";
8504            strcpy (a, a + 4);
8505            ...
8506          }
8507     The '-Wrestrict' option detects some instances of simple overlap
8508     even without optimization but works best at '-O2' and above.  It is
8509     included in '-Wall'.
8510
8511'-Wnested-externs (C and Objective-C only)'
8512     Warn if an 'extern' declaration is encountered within a function.
8513
8514'-Winline'
8515     Warn if a function that is declared as inline cannot be inlined.
8516     Even with this option, the compiler does not warn about failures to
8517     inline functions declared in system headers.
8518
8519     The compiler uses a variety of heuristics to determine whether or
8520     not to inline a function.  For example, the compiler takes into
8521     account the size of the function being inlined and the amount of
8522     inlining that has already been done in the current function.
8523     Therefore, seemingly insignificant changes in the source program
8524     can cause the warnings produced by '-Winline' to appear or
8525     disappear.
8526
8527'-Winterference-size'
8528     Warn about use of C++17
8529     'std::hardware_destructive_interference_size' without specifying
8530     its value with '--param destructive-interference-size'.  Also warn
8531     about questionable values for that option.
8532
8533     This variable is intended to be used for controlling class layout,
8534     to avoid false sharing in concurrent code:
8535
8536          struct independent_fields {
8537            alignas(std::hardware_destructive_interference_size) std::atomic<int> one;
8538            alignas(std::hardware_destructive_interference_size) std::atomic<int> two;
8539          };
8540
8541     Here 'one' and 'two' are intended to be far enough apart that
8542     stores to one won't require accesses to the other to reload the
8543     cache line.
8544
8545     By default, '--param destructive-interference-size' and '--param
8546     constructive-interference-size' are set based on the current
8547     '-mtune' option, typically to the L1 cache line size for the
8548     particular target CPU, sometimes to a range if tuning for a generic
8549     target.  So all translation units that depend on ABI compatibility
8550     for the use of these variables must be compiled with the same
8551     '-mtune' (or '-mcpu').
8552
8553     If ABI stability is important, such as if the use is in a header
8554     for a library, you should probably not use the hardware
8555     interference size variables at all.  Alternatively, you can force a
8556     particular value with '--param'.
8557
8558     If you are confident that your use of the variable does not affect
8559     ABI outside a single build of your project, you can turn off the
8560     warning with '-Wno-interference-size'.
8561
8562'-Wint-in-bool-context'
8563     Warn for suspicious use of integer values where boolean values are
8564     expected, such as conditional expressions (?:) using non-boolean
8565     integer constants in boolean context, like 'if (a <= b ? 2 : 3)'.
8566     Or left shifting of signed integers in boolean context, like 'for
8567     (a = 0; 1 << a; a++);'.  Likewise for all kinds of multiplications
8568     regardless of the data type.  This warning is enabled by '-Wall'.
8569
8570'-Wno-int-to-pointer-cast'
8571     Suppress warnings from casts to pointer type of an integer of a
8572     different size.  In C++, casting to a pointer type of smaller size
8573     is an error.  'Wint-to-pointer-cast' is enabled by default.
8574
8575'-Wno-pointer-to-int-cast (C and Objective-C only)'
8576     Suppress warnings from casts from a pointer to an integer type of a
8577     different size.
8578
8579'-Winvalid-pch'
8580     Warn if a precompiled header (*note Precompiled Headers::) is found
8581     in the search path but cannot be used.
8582
8583'-Wlong-long'
8584     Warn if 'long long' type is used.  This is enabled by either
8585     '-Wpedantic' or '-Wtraditional' in ISO C90 and C++98 modes.  To
8586     inhibit the warning messages, use '-Wno-long-long'.
8587
8588'-Wvariadic-macros'
8589     Warn if variadic macros are used in ISO C90 mode, or if the GNU
8590     alternate syntax is used in ISO C99 mode.  This is enabled by
8591     either '-Wpedantic' or '-Wtraditional'.  To inhibit the warning
8592     messages, use '-Wno-variadic-macros'.
8593
8594'-Wno-varargs'
8595     Do not warn upon questionable usage of the macros used to handle
8596     variable arguments like 'va_start'.  These warnings are enabled by
8597     default.
8598
8599'-Wvector-operation-performance'
8600     Warn if vector operation is not implemented via SIMD capabilities
8601     of the architecture.  Mainly useful for the performance tuning.
8602     Vector operation can be implemented 'piecewise', which means that
8603     the scalar operation is performed on every vector element; 'in
8604     parallel', which means that the vector operation is implemented
8605     using scalars of wider type, which normally is more performance
8606     efficient; and 'as a single scalar', which means that vector fits
8607     into a scalar type.
8608
8609'-Wvla'
8610     Warn if a variable-length array is used in the code.  '-Wno-vla'
8611     prevents the '-Wpedantic' warning of the variable-length array.
8612
8613'-Wvla-larger-than=BYTE-SIZE'
8614     If this option is used, the compiler warns for declarations of
8615     variable-length arrays whose size is either unbounded, or bounded
8616     by an argument that allows the array size to exceed BYTE-SIZE
8617     bytes.  This is similar to how '-Walloca-larger-than='BYTE-SIZE
8618     works, but with variable-length arrays.
8619
8620     Note that GCC may optimize small variable-length arrays of a known
8621     value into plain arrays, so this warning may not get triggered for
8622     such arrays.
8623
8624     '-Wvla-larger-than=''PTRDIFF_MAX' is enabled by default but is
8625     typically only effective when '-ftree-vrp' is active (default for
8626     '-O2' and above).
8627
8628     See also '-Walloca-larger-than=BYTE-SIZE'.
8629
8630'-Wno-vla-larger-than'
8631     Disable '-Wvla-larger-than=' warnings.  The option is equivalent to
8632     '-Wvla-larger-than=''SIZE_MAX' or larger.
8633
8634'-Wvla-parameter'
8635     Warn about redeclarations of functions involving arguments of
8636     Variable Length Array types of inconsistent kinds or forms, and
8637     enable the detection of out-of-bounds accesses to such parameters
8638     by warnings such as '-Warray-bounds'.
8639
8640     If the first function declaration uses the VLA form the bound
8641     specified in the array is assumed to be the minimum number of
8642     elements expected to be provided in calls to the function and the
8643     maximum number of elements accessed by it.  Failing to provide
8644     arguments of sufficient size or accessing more than the maximum
8645     number of elements may be diagnosed.
8646
8647     For example, the warning triggers for the following redeclarations
8648     because the first one allows an array of any size to be passed to
8649     'f' while the second one specifies that the array argument must
8650     have at least 'n' elements.  In addition, calling 'f' with the
8651     associated VLA bound parameter in excess of the actual VLA bound
8652     triggers a warning as well.
8653
8654          void f (int n, int[n]);
8655          void f (int, int[]);     // warning: argument 2 previously declared as a VLA
8656
8657          void g (int n)
8658          {
8659              if (n > 4)
8660                return;
8661              int a[n];
8662              f (sizeof a, a);     // warning: access to a by f may be out of bounds
8663            ...
8664          }
8665
8666
8667     '-Wvla-parameter' is included in '-Wall'.  The '-Warray-parameter'
8668     option triggers warnings for similar problems involving ordinary
8669     array arguments.
8670
8671'-Wvolatile-register-var'
8672     Warn if a register variable is declared volatile.  The volatile
8673     modifier does not inhibit all optimizations that may eliminate
8674     reads and/or writes to register variables.  This warning is enabled
8675     by '-Wall'.
8676
8677'-Wdisabled-optimization'
8678     Warn if a requested optimization pass is disabled.  This warning
8679     does not generally indicate that there is anything wrong with your
8680     code; it merely indicates that GCC's optimizers are unable to
8681     handle the code effectively.  Often, the problem is that your code
8682     is too big or too complex; GCC refuses to optimize programs when
8683     the optimization itself is likely to take inordinate amounts of
8684     time.
8685
8686'-Wpointer-sign (C and Objective-C only)'
8687     Warn for pointer argument passing or assignment with different
8688     signedness.  This option is only supported for C and Objective-C.
8689     It is implied by '-Wall' and by '-Wpedantic', which can be disabled
8690     with '-Wno-pointer-sign'.
8691
8692'-Wstack-protector'
8693     This option is only active when '-fstack-protector' is active.  It
8694     warns about functions that are not protected against stack
8695     smashing.
8696
8697'-Woverlength-strings'
8698     Warn about string constants that are longer than the "minimum
8699     maximum" length specified in the C standard.  Modern compilers
8700     generally allow string constants that are much longer than the
8701     standard's minimum limit, but very portable programs should avoid
8702     using longer strings.
8703
8704     The limit applies _after_ string constant concatenation, and does
8705     not count the trailing NUL.  In C90, the limit was 509 characters;
8706     in C99, it was raised to 4095.  C++98 does not specify a normative
8707     minimum maximum, so we do not diagnose overlength strings in C++.
8708
8709     This option is implied by '-Wpedantic', and can be disabled with
8710     '-Wno-overlength-strings'.
8711
8712'-Wunsuffixed-float-constants (C and Objective-C only)'
8713
8714     Issue a warning for any floating constant that does not have a
8715     suffix.  When used together with '-Wsystem-headers' it warns about
8716     such constants in system header files.  This can be useful when
8717     preparing code to use with the 'FLOAT_CONST_DECIMAL64' pragma from
8718     the decimal floating-point extension to C99.
8719
8720'-Wno-lto-type-mismatch'
8721
8722     During the link-time optimization, do not warn about type
8723     mismatches in global declarations from different compilation units.
8724     Requires '-flto' to be enabled.  Enabled by default.
8725
8726'-Wno-designated-init (C and Objective-C only)'
8727     Suppress warnings when a positional initializer is used to
8728     initialize a structure that has been marked with the
8729     'designated_init' attribute.
8730
8731
8732File: gcc.info,  Node: Static Analyzer Options,  Next: Debugging Options,  Prev: Warning Options,  Up: Invoking GCC
8733
87343.9 Options That Control Static Analysis
8735========================================
8736
8737'-fanalyzer'
8738     This option enables an static analysis of program flow which looks
8739     for "interesting" interprocedural paths through the code, and
8740     issues warnings for problems found on them.
8741
8742     This analysis is much more expensive than other GCC warnings.
8743
8744     In technical terms, it performs coverage-guided symbolic execution
8745     of the code being compiled.  It is neither sound nor complete: it
8746     can have false positives and false negatives.  It is a bug-finding
8747     tool, rather than a tool for proving program correctness.
8748
8749     The analyzer is only suitable for use on C code in this release.
8750
8751     Enabling this option effectively enables the following warnings:
8752
8753
8754          -Wanalyzer-double-fclose
8755          -Wanalyzer-double-free
8756          -Wanalyzer-exposure-through-output-file
8757          -Wanalyzer-file-leak
8758          -Wanalyzer-free-of-non-heap
8759          -Wanalyzer-malloc-leak
8760          -Wanalyzer-mismatching-deallocation
8761          -Wanalyzer-null-argument
8762          -Wanalyzer-null-dereference
8763          -Wanalyzer-possible-null-argument
8764          -Wanalyzer-possible-null-dereference
8765          -Wanalyzer-shift-count-negative
8766          -Wanalyzer-shift-count-overflow
8767          -Wanalyzer-stale-setjmp-buffer
8768          -Wanalyzer-unsafe-call-within-signal-handler
8769          -Wanalyzer-use-after-free
8770          -Wanalyzer-use-of-pointer-in-stale-stack-frame
8771          -Wanalyzer-use-of-uninitialized-value
8772          -Wanalyzer-write-to-const
8773          -Wanalyzer-write-to-string-literal
8774
8775
8776     This option is only available if GCC was configured with analyzer
8777     support enabled.
8778
8779'-Wanalyzer-too-complex'
8780     If '-fanalyzer' is enabled, the analyzer uses various heuristics to
8781     attempt to explore the control flow and data flow in the program,
8782     but these can be defeated by sufficiently complicated code.
8783
8784     By default, the analysis silently stops if the code is too
8785     complicated for the analyzer to fully explore and it reaches an
8786     internal limit.  The '-Wanalyzer-too-complex' option warns if this
8787     occurs.
8788
8789'-Wno-analyzer-double-fclose'
8790     This warning requires '-fanalyzer', which enables it; use
8791     '-Wno-analyzer-double-fclose' to disable it.
8792
8793     This diagnostic warns for paths through the code in which a 'FILE
8794     *' can have 'fclose' called on it more than once.
8795
8796'-Wno-analyzer-double-free'
8797     This warning requires '-fanalyzer', which enables it; use
8798     '-Wno-analyzer-double-free' to disable it.
8799
8800     This diagnostic warns for paths through the code in which a pointer
8801     can have a deallocator called on it more than once, either 'free',
8802     or a deallocator referenced by attribute 'malloc'.
8803
8804'-Wno-analyzer-exposure-through-output-file'
8805     This warning requires '-fanalyzer', which enables it; use
8806     '-Wno-analyzer-exposure-through-output-file' to disable it.
8807
8808     This diagnostic warns for paths through the code in which a
8809     security-sensitive value is written to an output file (such as
8810     writing a password to a log file).
8811
8812'-Wno-analyzer-file-leak'
8813     This warning requires '-fanalyzer', which enables it; use
8814     '-Wno-analyzer-file-leak' to disable it.
8815
8816     This diagnostic warns for paths through the code in which a
8817     '<stdio.h>' 'FILE *' stream object is leaked.
8818
8819'-Wno-analyzer-free-of-non-heap'
8820     This warning requires '-fanalyzer', which enables it; use
8821     '-Wno-analyzer-free-of-non-heap' to disable it.
8822
8823     This diagnostic warns for paths through the code in which 'free' is
8824     called on a non-heap pointer (e.g.  an on-stack buffer, or a
8825     global).
8826
8827'-Wno-analyzer-malloc-leak'
8828     This warning requires '-fanalyzer', which enables it; use
8829     '-Wno-analyzer-malloc-leak' to disable it.
8830
8831     This diagnostic warns for paths through the code in which a pointer
8832     allocated via an allocator is leaked: either 'malloc', or a
8833     function marked with attribute 'malloc'.
8834
8835'-Wno-analyzer-mismatching-deallocation'
8836     This warning requires '-fanalyzer', which enables it; use
8837     '-Wno-analyzer-mismatching-deallocation' to disable it.
8838
8839     This diagnostic warns for paths through the code in which the wrong
8840     deallocation function is called on a pointer value, based on which
8841     function was used to allocate the pointer value.  The diagnostic
8842     will warn about mismatches between 'free', scalar 'delete' and
8843     vector 'delete[]', and those marked as allocator/deallocator pairs
8844     using attribute 'malloc'.
8845
8846'-Wno-analyzer-possible-null-argument'
8847     This warning requires '-fanalyzer', which enables it; use
8848     '-Wno-analyzer-possible-null-argument' to disable it.
8849
8850     This diagnostic warns for paths through the code in which a
8851     possibly-NULL value is passed to a function argument marked with
8852     '__attribute__((nonnull))' as requiring a non-NULL value.
8853
8854'-Wno-analyzer-possible-null-dereference'
8855     This warning requires '-fanalyzer', which enables it; use
8856     '-Wno-analyzer-possible-null-dereference' to disable it.
8857
8858     This diagnostic warns for paths through the code in which a
8859     possibly-NULL value is dereferenced.
8860
8861'-Wno-analyzer-null-argument'
8862     This warning requires '-fanalyzer', which enables it; use
8863     '-Wno-analyzer-null-argument' to disable it.
8864
8865     This diagnostic warns for paths through the code in which a value
8866     known to be NULL is passed to a function argument marked with
8867     '__attribute__((nonnull))' as requiring a non-NULL value.
8868
8869'-Wno-analyzer-null-dereference'
8870     This warning requires '-fanalyzer', which enables it; use
8871     '-Wno-analyzer-null-dereference' to disable it.
8872
8873     This diagnostic warns for paths through the code in which a value
8874     known to be NULL is dereferenced.
8875
8876'-Wno-analyzer-shift-count-negative'
8877     This warning requires '-fanalyzer', which enables it; use
8878     '-Wno-analyzer-shift-count-negative' to disable it.
8879
8880     This diagnostic warns for paths through the code in which a shift
8881     is attempted with a negative count.  It is analogous to the
8882     '-Wshift-count-negative' diagnostic implemented in the C/C++ front
8883     ends, but is implemented based on analyzing interprocedural paths,
8884     rather than merely parsing the syntax tree.  However, the analyzer
8885     does not prioritize detection of such paths, so false negatives are
8886     more likely relative to other warnings.
8887
8888'-Wno-analyzer-shift-count-overflow'
8889     This warning requires '-fanalyzer', which enables it; use
8890     '-Wno-analyzer-shift-count-overflow' to disable it.
8891
8892     This diagnostic warns for paths through the code in which a shift
8893     is attempted with a count greater than or equal to the precision of
8894     the operand's type.  It is analogous to the
8895     '-Wshift-count-overflow' diagnostic implemented in the C/C++ front
8896     ends, but is implemented based on analyzing interprocedural paths,
8897     rather than merely parsing the syntax tree.  However, the analyzer
8898     does not prioritize detection of such paths, so false negatives are
8899     more likely relative to other warnings.
8900
8901'-Wno-analyzer-stale-setjmp-buffer'
8902     This warning requires '-fanalyzer', which enables it; use
8903     '-Wno-analyzer-stale-setjmp-buffer' to disable it.
8904
8905     This diagnostic warns for paths through the code in which 'longjmp'
8906     is called to rewind to a 'jmp_buf' relating to a 'setjmp' call in a
8907     function that has returned.
8908
8909     When 'setjmp' is called on a 'jmp_buf' to record a rewind location,
8910     it records the stack frame.  The stack frame becomes invalid when
8911     the function containing the 'setjmp' call returns.  Attempting to
8912     rewind to it via 'longjmp' would reference a stack frame that no
8913     longer exists, and likely lead to a crash (or worse).
8914
8915'-Wno-analyzer-tainted-allocation-size'
8916     This warning requires both '-fanalyzer' and
8917     '-fanalyzer-checker=taint' to enable it; use
8918     '-Wno-analyzer-tainted-allocation-size' to disable it.
8919
8920     This diagnostic warns for paths through the code in which a value
8921     that could be under an attacker's control is used as the size of an
8922     allocation without being sanitized, so that an attacker could
8923     inject an excessively large allocation and potentially cause a
8924     denial of service attack.
8925
8926     See CWE-789: Memory Allocation with Excessive Size Value
8927     (https://cwe.mitre.org/data/definitions/789.html).
8928
8929'-Wno-analyzer-tainted-array-index'
8930     This warning requires both '-fanalyzer' and
8931     '-fanalyzer-checker=taint' to enable it; use
8932     '-Wno-analyzer-tainted-array-index' to disable it.
8933
8934     This diagnostic warns for paths through the code in which a value
8935     that could be under an attacker's control is used as the index of
8936     an array access without being sanitized, so that an attacker could
8937     inject an out-of-bounds access.
8938
8939     See CWE-129: Improper Validation of Array Index
8940     (https://cwe.mitre.org/data/definitions/129.html).
8941
8942'-Wno-analyzer-tainted-divisor'
8943     This warning requires both '-fanalyzer' and
8944     '-fanalyzer-checker=taint' to enable it; use
8945     '-Wno-analyzer-tainted-divisor' to disable it.
8946
8947     This diagnostic warns for paths through the code in which a value
8948     that could be under an attacker's control is used as the divisor in
8949     a division or modulus operation without being sanitized, so that an
8950     attacker could inject a division-by-zero.
8951
8952'-Wno-analyzer-tainted-offset'
8953     This warning requires both '-fanalyzer' and
8954     '-fanalyzer-checker=taint' to enable it; use
8955     '-Wno-analyzer-tainted-offset' to disable it.
8956
8957     This diagnostic warns for paths through the code in which a value
8958     that could be under an attacker's control is used as a pointer
8959     offset without being sanitized, so that an attacker could inject an
8960     out-of-bounds access.
8961
8962     See CWE-823: Use of Out-of-range Pointer Offset
8963     (https://cwe.mitre.org/data/definitions/823.html).
8964
8965'-Wno-analyzer-tainted-size'
8966     This warning requires both '-fanalyzer' and
8967     '-fanalyzer-checker=taint' to enable it; use
8968     '-Wno-analyzer-tainted-size' to disable it.
8969
8970     This diagnostic warns for paths through the code in which a value
8971     that could be under an attacker's control is used as the size of an
8972     operation such as 'memset' without being sanitized, so that an
8973     attacker could inject an out-of-bounds access.
8974
8975'-Wno-analyzer-unsafe-call-within-signal-handler'
8976     This warning requires '-fanalyzer', which enables it; use
8977     '-Wno-analyzer-unsafe-call-within-signal-handler' to disable it.
8978
8979     This diagnostic warns for paths through the code in which a
8980     function known to be async-signal-unsafe (such as 'fprintf') is
8981     called from a signal handler.
8982
8983'-Wno-analyzer-use-after-free'
8984     This warning requires '-fanalyzer', which enables it; use
8985     '-Wno-analyzer-use-after-free' to disable it.
8986
8987     This diagnostic warns for paths through the code in which a pointer
8988     is used after a deallocator is called on it: either 'free', or a
8989     deallocator referenced by attribute 'malloc'.
8990
8991'-Wno-analyzer-use-of-pointer-in-stale-stack-frame'
8992     This warning requires '-fanalyzer', which enables it; use
8993     '-Wno-analyzer-use-of-pointer-in-stale-stack-frame' to disable it.
8994
8995     This diagnostic warns for paths through the code in which a pointer
8996     is dereferenced that points to a variable in a stale stack frame.
8997
8998'-Wno-analyzer-write-to-const'
8999     This warning requires '-fanalyzer', which enables it; use
9000     '-Wno-analyzer-write-to-const' to disable it.
9001
9002     This diagnostic warns for paths through the code in which the
9003     analyzer detects an attempt to write through a pointer to a 'const'
9004     object.  However, the analyzer does not prioritize detection of
9005     such paths, so false negatives are more likely relative to other
9006     warnings.
9007
9008'-Wno-analyzer-write-to-string-literal'
9009     This warning requires '-fanalyzer', which enables it; use
9010     '-Wno-analyzer-write-to-string-literal' to disable it.
9011
9012     This diagnostic warns for paths through the code in which the
9013     analyzer detects an attempt to write through a pointer to a string
9014     literal.  However, the analyzer does not prioritize detection of
9015     such paths, so false negatives are more likely relative to other
9016     warnings.
9017
9018'-Wno-analyzer-use-of-uninitialized-value'
9019     This warning requires '-fanalyzer', which enables it; use
9020     '-Wno-analyzer-use-of-uninitialized-value' to disable it.
9021
9022     This diagnostic warns for paths through the code in which an
9023     uninitialized value is used.
9024
9025 Pertinent parameters for controlling the exploration are: '--param
9026analyzer-bb-explosion-factor=VALUE', '--param
9027analyzer-max-enodes-per-program-point=VALUE', '--param
9028analyzer-max-recursion-depth=VALUE', and '--param
9029analyzer-min-snodes-for-call-summary=VALUE'.
9030
9031 The following options control the analyzer.
9032
9033'-fanalyzer-call-summaries'
9034     Simplify interprocedural analysis by computing the effect of
9035     certain calls, rather than exploring all paths through the function
9036     from callsite to each possible return.
9037
9038     If enabled, call summaries are only used for functions with more
9039     than one call site, and that are sufficiently complicated (as per
9040     '--param analyzer-min-snodes-for-call-summary=VALUE').
9041
9042'-fanalyzer-checker=NAME'
9043     Restrict the analyzer to run just the named checker, and enable it.
9044
9045     Some checkers are disabled by default (even with '-fanalyzer'),
9046     such as the 'taint' checker that implements
9047     '-Wanalyzer-tainted-array-index', and this option is required to
9048     enable them.
9049
9050     _Note:_ currently, '-fanalyzer-checker=taint' disables the
9051     following warnings from '-fanalyzer':
9052
9053
9054          -Wanalyzer-double-fclose
9055          -Wanalyzer-double-free
9056          -Wanalyzer-exposure-through-output-file
9057          -Wanalyzer-file-leak
9058          -Wanalyzer-free-of-non-heap
9059          -Wanalyzer-malloc-leak
9060          -Wanalyzer-mismatching-deallocation
9061          -Wanalyzer-null-argument
9062          -Wanalyzer-null-dereference
9063          -Wanalyzer-possible-null-argument
9064          -Wanalyzer-possible-null-dereference
9065          -Wanalyzer-unsafe-call-within-signal-handler
9066          -Wanalyzer-use-after-free
9067
9068
9069'-fno-analyzer-feasibility'
9070     This option is intended for analyzer developers.
9071
9072     By default the analyzer verifies that there is a feasible control
9073     flow path for each diagnostic it emits: that the conditions that
9074     hold are not mutually exclusive.  Diagnostics for which no feasible
9075     path can be found are rejected.  This filtering can be suppressed
9076     with '-fno-analyzer-feasibility', for debugging issues in this
9077     code.
9078
9079'-fanalyzer-fine-grained'
9080     This option is intended for analyzer developers.
9081
9082     Internally the analyzer builds an "exploded graph" that combines
9083     control flow graphs with data flow information.
9084
9085     By default, an edge in this graph can contain the effects of a run
9086     of multiple statements within a basic block.  With
9087     '-fanalyzer-fine-grained', each statement gets its own edge.
9088
9089'-fanalyzer-show-duplicate-count'
9090     This option is intended for analyzer developers: if multiple
9091     diagnostics have been detected as being duplicates of each other,
9092     it emits a note when reporting the best diagnostic, giving the
9093     number of additional diagnostics that were suppressed by the
9094     deduplication logic.
9095
9096'-fno-analyzer-state-merge'
9097     This option is intended for analyzer developers.
9098
9099     By default the analyzer attempts to simplify analysis by merging
9100     sufficiently similar states at each program point as it builds its
9101     "exploded graph".  With '-fno-analyzer-state-merge' this merging
9102     can be suppressed, for debugging state-handling issues.
9103
9104'-fno-analyzer-state-purge'
9105     This option is intended for analyzer developers.
9106
9107     By default the analyzer attempts to simplify analysis by purging
9108     aspects of state at a program point that appear to no longer be
9109     relevant e.g.  the values of locals that aren't accessed later in
9110     the function and which aren't relevant to leak analysis.
9111
9112     With '-fno-analyzer-state-purge' this purging of state can be
9113     suppressed, for debugging state-handling issues.
9114
9115'-fanalyzer-transitivity'
9116     This option enables transitivity of constraints within the
9117     analyzer.
9118
9119'-fanalyzer-verbose-edges'
9120     This option is intended for analyzer developers.  It enables more
9121     verbose, lower-level detail in the descriptions of control flow
9122     within diagnostic paths.
9123
9124'-fanalyzer-verbose-state-changes'
9125     This option is intended for analyzer developers.  It enables more
9126     verbose, lower-level detail in the descriptions of events relating
9127     to state machines within diagnostic paths.
9128
9129'-fanalyzer-verbosity=LEVEL'
9130     This option controls the complexity of the control flow paths that
9131     are emitted for analyzer diagnostics.
9132
9133     The LEVEL can be one of:
9134
9135     '0'
9136          At this level, interprocedural call and return events are
9137          displayed, along with the most pertinent state-change events
9138          relating to a diagnostic.  For example, for a double-'free'
9139          diagnostic, both calls to 'free' will be shown.
9140
9141     '1'
9142          As per the previous level, but also show events for the entry
9143          to each function.
9144
9145     '2'
9146          As per the previous level, but also show events relating to
9147          control flow that are significant to triggering the issue
9148          (e.g.  "true path taken" at a conditional).
9149
9150          This level is the default.
9151
9152     '3'
9153          As per the previous level, but show all control flow events,
9154          not just significant ones.
9155
9156     '4'
9157          This level is intended for analyzer developers; it adds
9158          various other events intended for debugging the analyzer.
9159
9160'-fdump-analyzer'
9161     Dump internal details about what the analyzer is doing to
9162     'FILE.analyzer.txt'.  This option is overridden by
9163     '-fdump-analyzer-stderr'.
9164
9165'-fdump-analyzer-stderr'
9166     Dump internal details about what the analyzer is doing to stderr.
9167     This option overrides '-fdump-analyzer'.
9168
9169'-fdump-analyzer-callgraph'
9170     Dump a representation of the call graph suitable for viewing with
9171     GraphViz to 'FILE.callgraph.dot'.
9172
9173'-fdump-analyzer-exploded-graph'
9174     Dump a representation of the "exploded graph" suitable for viewing
9175     with GraphViz to 'FILE.eg.dot'.  Nodes are color-coded based on
9176     state-machine states to emphasize state changes.
9177
9178'-fdump-analyzer-exploded-nodes'
9179     Emit diagnostics showing where nodes in the "exploded graph" are in
9180     relation to the program source.
9181
9182'-fdump-analyzer-exploded-nodes-2'
9183     Dump a textual representation of the "exploded graph" to
9184     'FILE.eg.txt'.
9185
9186'-fdump-analyzer-exploded-nodes-3'
9187     Dump a textual representation of the "exploded graph" to one dump
9188     file per node, to 'FILE.eg-ID.txt'.  This is typically a large
9189     number of dump files.
9190
9191'-fdump-analyzer-exploded-paths'
9192     Dump a textual representation of the "exploded path" for each
9193     diagnostic to 'FILE.IDX.KIND.epath.txt'.
9194
9195'-fdump-analyzer-feasibility'
9196     Dump internal details about the analyzer's search for feasible
9197     paths.  The details are written in a form suitable for viewing with
9198     GraphViz to filenames of the form 'FILE.*.fg.dot', 'FILE.*.tg.dot',
9199     and 'FILE.*.fpath.txt'.
9200
9201'-fdump-analyzer-json'
9202     Dump a compressed JSON representation of analyzer internals to
9203     'FILE.analyzer.json.gz'.  The precise format is subject to change.
9204
9205'-fdump-analyzer-state-purge'
9206     As per '-fdump-analyzer-supergraph', dump a representation of the
9207     "supergraph" suitable for viewing with GraphViz, but annotate the
9208     graph with information on what state will be purged at each node.
9209     The graph is written to 'FILE.state-purge.dot'.
9210
9211'-fdump-analyzer-supergraph'
9212     Dump representations of the "supergraph" suitable for viewing with
9213     GraphViz to 'FILE.supergraph.dot' and to 'FILE.supergraph-eg.dot'.
9214     These show all of the control flow graphs in the program, with
9215     interprocedural edges for calls and returns.  The second dump
9216     contains annotations showing nodes in the "exploded graph" and
9217     diagnostics associated with them.
9218
9219'-fdump-analyzer-untracked'
9220     Emit custom warnings with internal details intended for analyzer
9221     developers.
9222
9223
9224File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Static Analyzer Options,  Up: Invoking GCC
9225
92263.10 Options for Debugging Your Program
9227=======================================
9228
9229To tell GCC to emit extra information for use by a debugger, in almost
9230all cases you need only to add '-g' to your other options.  Some debug
9231formats can co-exist (like DWARF with CTF) when each of them is enabled
9232explicitly by adding the respective command line option to your other
9233options.
9234
9235 GCC allows you to use '-g' with '-O'.  The shortcuts taken by optimized
9236code may occasionally be surprising: some variables you declared may not
9237exist at all; flow of control may briefly move where you did not expect
9238it; some statements may not be executed because they compute constant
9239results or their values are already at hand; some statements may execute
9240in different places because they have been moved out of loops.
9241Nevertheless it is possible to debug optimized output.  This makes it
9242reasonable to use the optimizer for programs that might have bugs.
9243
9244 If you are not using some other optimization option, consider using
9245'-Og' (*note Optimize Options::) with '-g'.  With no '-O' option at all,
9246some compiler passes that collect information useful for debugging do
9247not run at all, so that '-Og' may result in a better debugging
9248experience.
9249
9250'-g'
9251     Produce debugging information in the operating system's native
9252     format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
9253     debugging information.
9254
9255     On most systems that use stabs format, '-g' enables use of extra
9256     debugging information that only GDB can use; this extra information
9257     makes debugging work better in GDB but probably makes other
9258     debuggers crash or refuse to read the program.  If you want to
9259     control for certain whether to generate the extra information, use
9260     '-gstabs+', '-gstabs', '-gxcoff+', '-gxcoff', or '-gvms' (see
9261     below).
9262
9263'-ggdb'
9264     Produce debugging information for use by GDB.  This means to use
9265     the most expressive format available (DWARF, stabs, or the native
9266     format if neither of those are supported), including GDB extensions
9267     if at all possible.
9268
9269'-gdwarf'
9270'-gdwarf-VERSION'
9271     Produce debugging information in DWARF format (if that is
9272     supported).  The value of VERSION may be either 2, 3, 4 or 5; the
9273     default version for most targets is 5 (with the exception of
9274     VxWorks, TPF and Darwin/Mac OS X, which default to version 2, and
9275     AIX, which defaults to version 4).
9276
9277     Note that with DWARF Version 2, some ports require and always use
9278     some non-conflicting DWARF 3 extensions in the unwind tables.
9279
9280     Version 4 may require GDB 7.0 and '-fvar-tracking-assignments' for
9281     maximum benefit.  Version 5 requires GDB 8.0 or higher.
9282
9283     GCC no longer supports DWARF Version 1, which is substantially
9284     different than Version 2 and later.  For historical reasons, some
9285     other DWARF-related options such as '-fno-dwarf2-cfi-asm') retain a
9286     reference to DWARF Version 2 in their names, but apply to all
9287     currently-supported versions of DWARF.
9288
9289'-gbtf'
9290     Request BTF debug information.  BTF is the default debugging format
9291     for the eBPF target.  On other targets, like x86, BTF debug
9292     information can be generated along with DWARF debug information
9293     when both of the debug formats are enabled explicitly via their
9294     respective command line options.
9295
9296'-gctf'
9297'-gctfLEVEL'
9298     Request CTF debug information and use level to specify how much CTF
9299     debug information should be produced.  If '-gctf' is specified
9300     without a value for level, the default level of CTF debug
9301     information is 2.
9302
9303     CTF debug information can be generated along with DWARF debug
9304     information when both of the debug formats are enabled explicitly
9305     via their respective command line options.
9306
9307     Level 0 produces no CTF debug information at all.  Thus, '-gctf0'
9308     negates '-gctf'.
9309
9310     Level 1 produces CTF information for tracebacks only.  This
9311     includes callsite information, but does not include type
9312     information.
9313
9314     Level 2 produces type information for entities (functions, data
9315     objects etc.)  at file-scope or global-scope only.
9316
9317'-gstabs'
9318     Produce debugging information in stabs format (if that is
9319     supported), without GDB extensions.  This is the format used by DBX
9320     on most BSD systems.  On MIPS, Alpha and System V Release 4 systems
9321     this option produces stabs debugging output that is not understood
9322     by DBX.  On System V Release 4 systems this option requires the GNU
9323     assembler.
9324
9325'-gstabs+'
9326     Produce debugging information in stabs format (if that is
9327     supported), using GNU extensions understood only by the GNU
9328     debugger (GDB).  The use of these extensions is likely to make
9329     other debuggers crash or refuse to read the program.
9330
9331'-gxcoff'
9332     Produce debugging information in XCOFF format (if that is
9333     supported).  This is the format used by the DBX debugger on IBM
9334     RS/6000 systems.
9335
9336'-gxcoff+'
9337     Produce debugging information in XCOFF format (if that is
9338     supported), using GNU extensions understood only by the GNU
9339     debugger (GDB).  The use of these extensions is likely to make
9340     other debuggers crash or refuse to read the program, and may cause
9341     assemblers other than the GNU assembler (GAS) to fail with an
9342     error.
9343
9344'-gvms'
9345     Produce debugging information in Alpha/VMS debug format (if that is
9346     supported).  This is the format used by DEBUG on Alpha/VMS systems.
9347
9348'-gLEVEL'
9349'-ggdbLEVEL'
9350'-gstabsLEVEL'
9351'-gxcoffLEVEL'
9352'-gvmsLEVEL'
9353     Request debugging information and also use LEVEL to specify how
9354     much information.  The default level is 2.
9355
9356     Level 0 produces no debug information at all.  Thus, '-g0' negates
9357     '-g'.
9358
9359     Level 1 produces minimal information, enough for making backtraces
9360     in parts of the program that you don't plan to debug.  This
9361     includes descriptions of functions and external variables, and line
9362     number tables, but no information about local variables.
9363
9364     Level 3 includes extra information, such as all the macro
9365     definitions present in the program.  Some debuggers support macro
9366     expansion when you use '-g3'.
9367
9368     If you use multiple '-g' options, with or without level numbers,
9369     the last such option is the one that is effective.
9370
9371     '-gdwarf' does not accept a concatenated debug level, to avoid
9372     confusion with '-gdwarf-LEVEL'.  Instead use an additional
9373     '-gLEVEL' option to change the debug level for DWARF.
9374
9375'-fno-eliminate-unused-debug-symbols'
9376     By default, no debug information is produced for symbols that are
9377     not actually used.  Use this option if you want debug information
9378     for all symbols.
9379
9380'-femit-class-debug-always'
9381     Instead of emitting debugging information for a C++ class in only
9382     one object file, emit it in all object files using the class.  This
9383     option should be used only with debuggers that are unable to handle
9384     the way GCC normally emits debugging information for classes
9385     because using this option increases the size of debugging
9386     information by as much as a factor of two.
9387
9388'-fno-merge-debug-strings'
9389     Direct the linker to not merge together strings in the debugging
9390     information that are identical in different object files.  Merging
9391     is not supported by all assemblers or linkers.  Merging decreases
9392     the size of the debug information in the output file at the cost of
9393     increasing link processing time.  Merging is enabled by default.
9394
9395'-fdebug-prefix-map=OLD=NEW'
9396     When compiling files residing in directory 'OLD', record debugging
9397     information describing them as if the files resided in directory
9398     'NEW' instead.  This can be used to replace a build-time path with
9399     an install-time path in the debug info.  It can also be used to
9400     change an absolute path to a relative path by using '.' for NEW.
9401     This can give more reproducible builds, which are location
9402     independent, but may require an extra command to tell GDB where to
9403     find the source files.  See also '-ffile-prefix-map'.
9404
9405'-fvar-tracking'
9406     Run variable tracking pass.  It computes where variables are stored
9407     at each position in code.  Better debugging information is then
9408     generated (if the debugging information format supports this
9409     information).
9410
9411     It is enabled by default when compiling with optimization ('-Os',
9412     '-O', '-O2', ...), debugging information ('-g') and the debug info
9413     format supports it.
9414
9415'-fvar-tracking-assignments'
9416     Annotate assignments to user variables early in the compilation and
9417     attempt to carry the annotations over throughout the compilation
9418     all the way to the end, in an attempt to improve debug information
9419     while optimizing.  Use of '-gdwarf-4' is recommended along with it.
9420
9421     It can be enabled even if var-tracking is disabled, in which case
9422     annotations are created and maintained, but discarded at the end.
9423     By default, this flag is enabled together with '-fvar-tracking',
9424     except when selective scheduling is enabled.
9425
9426'-gsplit-dwarf'
9427     If DWARF debugging information is enabled, separate as much
9428     debugging information as possible into a separate output file with
9429     the extension '.dwo'.  This option allows the build system to avoid
9430     linking files with debug information.  To be useful, this option
9431     requires a debugger capable of reading '.dwo' files.
9432
9433'-gdwarf32'
9434'-gdwarf64'
9435     If DWARF debugging information is enabled, the '-gdwarf32' selects
9436     the 32-bit DWARF format and the '-gdwarf64' selects the 64-bit
9437     DWARF format.  The default is target specific, on most targets it
9438     is '-gdwarf32' though.  The 32-bit DWARF format is smaller, but
9439     can't support more than 2GiB of debug information in any of the
9440     DWARF debug information sections.  The 64-bit DWARF format allows
9441     larger debug information and might not be well supported by all
9442     consumers yet.
9443
9444'-gdescribe-dies'
9445     Add description attributes to some DWARF DIEs that have no name
9446     attribute, such as artificial variables, external references and
9447     call site parameter DIEs.
9448
9449'-gpubnames'
9450     Generate DWARF '.debug_pubnames' and '.debug_pubtypes' sections.
9451
9452'-ggnu-pubnames'
9453     Generate '.debug_pubnames' and '.debug_pubtypes' sections in a
9454     format suitable for conversion into a GDB index.  This option is
9455     only useful with a linker that can produce GDB index version 7.
9456
9457'-fdebug-types-section'
9458     When using DWARF Version 4 or higher, type DIEs can be put into
9459     their own '.debug_types' section instead of making them part of the
9460     '.debug_info' section.  It is more efficient to put them in a
9461     separate comdat section since the linker can then remove
9462     duplicates.  But not all DWARF consumers support '.debug_types'
9463     sections yet and on some objects '.debug_types' produces larger
9464     instead of smaller debugging information.
9465
9466'-grecord-gcc-switches'
9467'-gno-record-gcc-switches'
9468     This switch causes the command-line options used to invoke the
9469     compiler that may affect code generation to be appended to the
9470     DW_AT_producer attribute in DWARF debugging information.  The
9471     options are concatenated with spaces separating them from each
9472     other and from the compiler version.  It is enabled by default.
9473     See also '-frecord-gcc-switches' for another way of storing
9474     compiler options into the object file.
9475
9476'-gstrict-dwarf'
9477     Disallow using extensions of later DWARF standard version than
9478     selected with '-gdwarf-VERSION'.  On most targets using
9479     non-conflicting DWARF extensions from later standard versions is
9480     allowed.
9481
9482'-gno-strict-dwarf'
9483     Allow using extensions of later DWARF standard version than
9484     selected with '-gdwarf-VERSION'.
9485
9486'-gas-loc-support'
9487     Inform the compiler that the assembler supports '.loc' directives.
9488     It may then use them for the assembler to generate DWARF2+ line
9489     number tables.
9490
9491     This is generally desirable, because assembler-generated
9492     line-number tables are a lot more compact than those the compiler
9493     can generate itself.
9494
9495     This option will be enabled by default if, at GCC configure time,
9496     the assembler was found to support such directives.
9497
9498'-gno-as-loc-support'
9499     Force GCC to generate DWARF2+ line number tables internally, if
9500     DWARF2+ line number tables are to be generated.
9501
9502'-gas-locview-support'
9503     Inform the compiler that the assembler supports 'view' assignment
9504     and reset assertion checking in '.loc' directives.
9505
9506     This option will be enabled by default if, at GCC configure time,
9507     the assembler was found to support them.
9508
9509'-gno-as-locview-support'
9510     Force GCC to assign view numbers internally, if
9511     '-gvariable-location-views' are explicitly requested.
9512
9513'-gcolumn-info'
9514'-gno-column-info'
9515     Emit location column information into DWARF debugging information,
9516     rather than just file and line.  This option is enabled by default.
9517
9518'-gstatement-frontiers'
9519'-gno-statement-frontiers'
9520     This option causes GCC to create markers in the internal
9521     representation at the beginning of statements, and to keep them
9522     roughly in place throughout compilation, using them to guide the
9523     output of 'is_stmt' markers in the line number table.  This is
9524     enabled by default when compiling with optimization ('-Os', '-O1',
9525     '-O2', ...), and outputting DWARF 2 debug information at the normal
9526     level.
9527
9528'-gvariable-location-views'
9529'-gvariable-location-views=incompat5'
9530'-gno-variable-location-views'
9531     Augment variable location lists with progressive view numbers
9532     implied from the line number table.  This enables debug information
9533     consumers to inspect state at certain points of the program, even
9534     if no instructions associated with the corresponding source
9535     locations are present at that point.  If the assembler lacks
9536     support for view numbers in line number tables, this will cause the
9537     compiler to emit the line number table, which generally makes them
9538     somewhat less compact.  The augmented line number tables and
9539     location lists are fully backward-compatible, so they can be
9540     consumed by debug information consumers that are not aware of these
9541     augmentations, but they won't derive any benefit from them either.
9542
9543     This is enabled by default when outputting DWARF 2 debug
9544     information at the normal level, as long as there is assembler
9545     support, '-fvar-tracking-assignments' is enabled and
9546     '-gstrict-dwarf' is not.  When assembler support is not available,
9547     this may still be enabled, but it will force GCC to output internal
9548     line number tables, and if '-ginternal-reset-location-views' is not
9549     enabled, that will most certainly lead to silently mismatching
9550     location views.
9551
9552     There is a proposed representation for view numbers that is not
9553     backward compatible with the location list format introduced in
9554     DWARF 5, that can be enabled with
9555     '-gvariable-location-views=incompat5'.  This option may be removed
9556     in the future, is only provided as a reference implementation of
9557     the proposed representation.  Debug information consumers are not
9558     expected to support this extended format, and they would be
9559     rendered unable to decode location lists using it.
9560
9561'-ginternal-reset-location-views'
9562'-gno-internal-reset-location-views'
9563     Attempt to determine location views that can be omitted from
9564     location view lists.  This requires the compiler to have very
9565     accurate insn length estimates, which isn't always the case, and it
9566     may cause incorrect view lists to be generated silently when using
9567     an assembler that does not support location view lists.  The GNU
9568     assembler will flag any such error as a 'view number mismatch'.
9569     This is only enabled on ports that define a reliable estimation
9570     function.
9571
9572'-ginline-points'
9573'-gno-inline-points'
9574     Generate extended debug information for inlined functions.
9575     Location view tracking markers are inserted at inlined entry
9576     points, so that address and view numbers can be computed and output
9577     in debug information.  This can be enabled independently of
9578     location views, in which case the view numbers won't be output, but
9579     it can only be enabled along with statement frontiers, and it is
9580     only enabled by default if location views are enabled.
9581
9582'-gz[=TYPE]'
9583     Produce compressed debug sections in DWARF format, if that is
9584     supported.  If TYPE is not given, the default type depends on the
9585     capabilities of the assembler and linker used.  TYPE may be one of
9586     'none' (don't compress debug sections), 'zlib' (use zlib
9587     compression in ELF gABI format), or 'zlib-gnu' (use zlib
9588     compression in traditional GNU format).  If the linker doesn't
9589     support writing compressed debug sections, the option is rejected.
9590     Otherwise, if the assembler does not support them, '-gz' is
9591     silently ignored when producing object files.
9592
9593'-femit-struct-debug-baseonly'
9594     Emit debug information for struct-like types only when the base
9595     name of the compilation source file matches the base name of file
9596     in which the struct is defined.
9597
9598     This option substantially reduces the size of debugging
9599     information, but at significant potential loss in type information
9600     to the debugger.  See '-femit-struct-debug-reduced' for a less
9601     aggressive option.  See '-femit-struct-debug-detailed' for more
9602     detailed control.
9603
9604     This option works only with DWARF debug output.
9605
9606'-femit-struct-debug-reduced'
9607     Emit debug information for struct-like types only when the base
9608     name of the compilation source file matches the base name of file
9609     in which the type is defined, unless the struct is a template or
9610     defined in a system header.
9611
9612     This option significantly reduces the size of debugging
9613     information, with some potential loss in type information to the
9614     debugger.  See '-femit-struct-debug-baseonly' for a more aggressive
9615     option.  See '-femit-struct-debug-detailed' for more detailed
9616     control.
9617
9618     This option works only with DWARF debug output.
9619
9620'-femit-struct-debug-detailed[=SPEC-LIST]'
9621     Specify the struct-like types for which the compiler generates
9622     debug information.  The intent is to reduce duplicate struct debug
9623     information between different object files within the same program.
9624
9625     This option is a detailed version of '-femit-struct-debug-reduced'
9626     and '-femit-struct-debug-baseonly', which serves for most needs.
9627
9628     A specification has the syntax
9629     ['dir:'|'ind:']['ord:'|'gen:']('any'|'sys'|'base'|'none')
9630
9631     The optional first word limits the specification to structs that
9632     are used directly ('dir:') or used indirectly ('ind:').  A struct
9633     type is used directly when it is the type of a variable, member.
9634     Indirect uses arise through pointers to structs.  That is, when use
9635     of an incomplete struct is valid, the use is indirect.  An example
9636     is 'struct one direct; struct two * indirect;'.
9637
9638     The optional second word limits the specification to ordinary
9639     structs ('ord:') or generic structs ('gen:').  Generic structs are
9640     a bit complicated to explain.  For C++, these are non-explicit
9641     specializations of template classes, or non-template classes within
9642     the above.  Other programming languages have generics, but
9643     '-femit-struct-debug-detailed' does not yet implement them.
9644
9645     The third word specifies the source files for those structs for
9646     which the compiler should emit debug information.  The values
9647     'none' and 'any' have the normal meaning.  The value 'base' means
9648     that the base of name of the file in which the type declaration
9649     appears must match the base of the name of the main compilation
9650     file.  In practice, this means that when compiling 'foo.c', debug
9651     information is generated for types declared in that file and
9652     'foo.h', but not other header files.  The value 'sys' means those
9653     types satisfying 'base' or declared in system or compiler headers.
9654
9655     You may need to experiment to determine the best settings for your
9656     application.
9657
9658     The default is '-femit-struct-debug-detailed=all'.
9659
9660     This option works only with DWARF debug output.
9661
9662'-fno-dwarf2-cfi-asm'
9663     Emit DWARF unwind info as compiler generated '.eh_frame' section
9664     instead of using GAS '.cfi_*' directives.
9665
9666'-fno-eliminate-unused-debug-types'
9667     Normally, when producing DWARF output, GCC avoids producing debug
9668     symbol output for types that are nowhere used in the source file
9669     being compiled.  Sometimes it is useful to have GCC emit debugging
9670     information for all types declared in a compilation unit,
9671     regardless of whether or not they are actually used in that
9672     compilation unit, for example if, in the debugger, you want to cast
9673     a value to a type that is not actually used in your program (but is
9674     declared).  More often, however, this results in a significant
9675     amount of wasted space.
9676
9677
9678File: gcc.info,  Node: Optimize Options,  Next: Instrumentation Options,  Prev: Debugging Options,  Up: Invoking GCC
9679
96803.11 Options That Control Optimization
9681======================================
9682
9683These options control various sorts of optimizations.
9684
9685 Without any optimization option, the compiler's goal is to reduce the
9686cost of compilation and to make debugging produce the expected results.
9687Statements are independent: if you stop the program with a breakpoint
9688between statements, you can then assign a new value to any variable or
9689change the program counter to any other statement in the function and
9690get exactly the results you expect from the source code.
9691
9692 Turning on optimization flags makes the compiler attempt to improve the
9693performance and/or code size at the expense of compilation time and
9694possibly the ability to debug the program.
9695
9696 The compiler performs optimization based on the knowledge it has of the
9697program.  Compiling multiple files at once to a single output file mode
9698allows the compiler to use information gained from all of the files when
9699compiling each of them.
9700
9701 Not all optimizations are controlled directly by a flag.  Only
9702optimizations that have a flag are listed in this section.
9703
9704 Most optimizations are completely disabled at '-O0' or if an '-O' level
9705is not set on the command line, even if individual optimization flags
9706are specified.  Similarly, '-Og' suppresses many optimization passes.
9707
9708 Depending on the target and how GCC was configured, a slightly
9709different set of optimizations may be enabled at each '-O' level than
9710those listed here.  You can invoke GCC with '-Q --help=optimizers' to
9711find out the exact set of optimizations that are enabled at each level.
9712*Note Overall Options::, for examples.
9713
9714'-O'
9715'-O1'
9716     Optimize.  Optimizing compilation takes somewhat more time, and a
9717     lot more memory for a large function.
9718
9719     With '-O', the compiler tries to reduce code size and execution
9720     time, without performing any optimizations that take a great deal
9721     of compilation time.
9722
9723     '-O' turns on the following optimization flags:
9724
9725          -fauto-inc-dec
9726          -fbranch-count-reg
9727          -fcombine-stack-adjustments
9728          -fcompare-elim
9729          -fcprop-registers
9730          -fdce
9731          -fdefer-pop
9732          -fdelayed-branch
9733          -fdse
9734          -fforward-propagate
9735          -fguess-branch-probability
9736          -fif-conversion
9737          -fif-conversion2
9738          -finline-functions-called-once
9739          -fipa-modref
9740          -fipa-profile
9741          -fipa-pure-const
9742          -fipa-reference
9743          -fipa-reference-addressable
9744          -fmerge-constants
9745          -fmove-loop-invariants
9746          -fmove-loop-stores
9747          -fomit-frame-pointer
9748          -freorder-blocks
9749          -fshrink-wrap
9750          -fshrink-wrap-separate
9751          -fsplit-wide-types
9752          -fssa-backprop
9753          -fssa-phiopt
9754          -ftree-bit-ccp
9755          -ftree-ccp
9756          -ftree-ch
9757          -ftree-coalesce-vars
9758          -ftree-copy-prop
9759          -ftree-dce
9760          -ftree-dominator-opts
9761          -ftree-dse
9762          -ftree-forwprop
9763          -ftree-fre
9764          -ftree-phiprop
9765          -ftree-pta
9766          -ftree-scev-cprop
9767          -ftree-sink
9768          -ftree-slsr
9769          -ftree-sra
9770          -ftree-ter
9771          -funit-at-a-time
9772
9773'-O2'
9774     Optimize even more.  GCC performs nearly all supported
9775     optimizations that do not involve a space-speed tradeoff.  As
9776     compared to '-O', this option increases both compilation time and
9777     the performance of the generated code.
9778
9779     '-O2' turns on all optimization flags specified by '-O1'.  It also
9780     turns on the following optimization flags:
9781
9782          -falign-functions  -falign-jumps
9783          -falign-labels  -falign-loops
9784          -fcaller-saves
9785          -fcode-hoisting
9786          -fcrossjumping
9787          -fcse-follow-jumps  -fcse-skip-blocks
9788          -fdelete-null-pointer-checks
9789          -fdevirtualize  -fdevirtualize-speculatively
9790          -fexpensive-optimizations
9791          -ffinite-loops
9792          -fgcse  -fgcse-lm
9793          -fhoist-adjacent-loads
9794          -finline-functions
9795          -finline-small-functions
9796          -findirect-inlining
9797          -fipa-bit-cp  -fipa-cp  -fipa-icf
9798          -fipa-ra  -fipa-sra  -fipa-vrp
9799          -fisolate-erroneous-paths-dereference
9800          -flra-remat
9801          -foptimize-sibling-calls
9802          -foptimize-strlen
9803          -fpartial-inlining
9804          -fpeephole2
9805          -freorder-blocks-algorithm=stc
9806          -freorder-blocks-and-partition  -freorder-functions
9807          -frerun-cse-after-loop
9808          -fschedule-insns  -fschedule-insns2
9809          -fsched-interblock  -fsched-spec
9810          -fstore-merging
9811          -fstrict-aliasing
9812          -fthread-jumps
9813          -ftree-builtin-call-dce
9814          -ftree-loop-vectorize
9815          -ftree-pre
9816          -ftree-slp-vectorize
9817          -ftree-switch-conversion  -ftree-tail-merge
9818          -ftree-vrp
9819          -fvect-cost-model=very-cheap
9820
9821     Please note the warning under '-fgcse' about invoking '-O2' on
9822     programs that use computed gotos.
9823
9824'-O3'
9825     Optimize yet more.  '-O3' turns on all optimizations specified by
9826     '-O2' and also turns on the following optimization flags:
9827
9828          -fgcse-after-reload
9829          -fipa-cp-clone
9830          -floop-interchange
9831          -floop-unroll-and-jam
9832          -fpeel-loops
9833          -fpredictive-commoning
9834          -fsplit-loops
9835          -fsplit-paths
9836          -ftree-loop-distribution
9837          -ftree-partial-pre
9838          -funswitch-loops
9839          -fvect-cost-model=dynamic
9840          -fversion-loops-for-strides
9841
9842'-O0'
9843     Reduce compilation time and make debugging produce the expected
9844     results.  This is the default.
9845
9846'-Os'
9847     Optimize for size.  '-Os' enables all '-O2' optimizations except
9848     those that often increase code size:
9849
9850          -falign-functions  -falign-jumps
9851          -falign-labels  -falign-loops
9852          -fprefetch-loop-arrays  -freorder-blocks-algorithm=stc
9853
9854     It also enables '-finline-functions', causes the compiler to tune
9855     for code size rather than execution speed, and performs further
9856     optimizations designed to reduce code size.
9857
9858'-Ofast'
9859     Disregard strict standards compliance.  '-Ofast' enables all '-O3'
9860     optimizations.  It also enables optimizations that are not valid
9861     for all standard-compliant programs.  It turns on '-ffast-math',
9862     '-fallow-store-data-races' and the Fortran-specific
9863     '-fstack-arrays', unless '-fmax-stack-var-size' is specified, and
9864     '-fno-protect-parens'.  It turns off '-fsemantic-interposition'.
9865
9866'-Og'
9867     Optimize debugging experience.  '-Og' should be the optimization
9868     level of choice for the standard edit-compile-debug cycle, offering
9869     a reasonable level of optimization while maintaining fast
9870     compilation and a good debugging experience.  It is a better choice
9871     than '-O0' for producing debuggable code because some compiler
9872     passes that collect debug information are disabled at '-O0'.
9873
9874     Like '-O0', '-Og' completely disables a number of optimization
9875     passes so that individual options controlling them have no effect.
9876     Otherwise '-Og' enables all '-O1' optimization flags except for
9877     those that may interfere with debugging:
9878
9879          -fbranch-count-reg  -fdelayed-branch
9880          -fdse  -fif-conversion  -fif-conversion2
9881          -finline-functions-called-once
9882          -fmove-loop-invariants  -fmove-loop-stores  -fssa-phiopt
9883          -ftree-bit-ccp  -ftree-dse  -ftree-pta  -ftree-sra
9884
9885'-Oz'
9886     Optimize aggressively for size rather than speed.  This may
9887     increase the number of instructions executed if those instructions
9888     require fewer bytes to encode.  '-Oz' behaves similarly to '-Os'
9889     including enabling most '-O2' optimizations.
9890
9891 If you use multiple '-O' options, with or without level numbers, the
9892last such option is the one that is effective.
9893
9894 Options of the form '-fFLAG' specify machine-independent flags.  Most
9895flags have both positive and negative forms; the negative form of
9896'-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
9897listed--the one you typically use.  You can figure out the other form by
9898either removing 'no-' or adding it.
9899
9900 The following options control specific optimizations.  They are either
9901activated by '-O' options or are related to ones that are.  You can use
9902the following flags in the rare cases when "fine-tuning" of
9903optimizations to be performed is desired.
9904
9905'-fno-defer-pop'
9906     For machines that must pop arguments after a function call, always
9907     pop the arguments as soon as each function returns.  At levels
9908     '-O1' and higher, '-fdefer-pop' is the default; this allows the
9909     compiler to let arguments accumulate on the stack for several
9910     function calls and pop them all at once.
9911
9912'-fforward-propagate'
9913     Perform a forward propagation pass on RTL.  The pass tries to
9914     combine two instructions and checks if the result can be
9915     simplified.  If loop unrolling is active, two passes are performed
9916     and the second is scheduled after loop unrolling.
9917
9918     This option is enabled by default at optimization levels '-O1',
9919     '-O2', '-O3', '-Os'.
9920
9921'-ffp-contract=STYLE'
9922     '-ffp-contract=off' disables floating-point expression contraction.
9923     '-ffp-contract=fast' enables floating-point expression contraction
9924     such as forming of fused multiply-add operations if the target has
9925     native support for them.  '-ffp-contract=on' enables floating-point
9926     expression contraction if allowed by the language standard.  This
9927     is currently not implemented and treated equal to
9928     '-ffp-contract=off'.
9929
9930     The default is '-ffp-contract=fast'.
9931
9932'-fomit-frame-pointer'
9933     Omit the frame pointer in functions that don't need one.  This
9934     avoids the instructions to save, set up and restore the frame
9935     pointer; on many targets it also makes an extra register available.
9936
9937     On some targets this flag has no effect because the standard
9938     calling sequence always uses a frame pointer, so it cannot be
9939     omitted.
9940
9941     Note that '-fno-omit-frame-pointer' doesn't guarantee the frame
9942     pointer is used in all functions.  Several targets always omit the
9943     frame pointer in leaf functions.
9944
9945     Enabled by default at '-O1' and higher.
9946
9947'-foptimize-sibling-calls'
9948     Optimize sibling and tail recursive calls.
9949
9950     Enabled at levels '-O2', '-O3', '-Os'.
9951
9952'-foptimize-strlen'
9953     Optimize various standard C string functions (e.g. 'strlen',
9954     'strchr' or 'strcpy') and their '_FORTIFY_SOURCE' counterparts into
9955     faster alternatives.
9956
9957     Enabled at levels '-O2', '-O3'.
9958
9959'-fno-inline'
9960     Do not expand any functions inline apart from those marked with the
9961     'always_inline' attribute.  This is the default when not
9962     optimizing.
9963
9964     Single functions can be exempted from inlining by marking them with
9965     the 'noinline' attribute.
9966
9967'-finline-small-functions'
9968     Integrate functions into their callers when their body is smaller
9969     than expected function call code (so overall size of program gets
9970     smaller).  The compiler heuristically decides which functions are
9971     simple enough to be worth integrating in this way.  This inlining
9972     applies to all functions, even those not declared inline.
9973
9974     Enabled at levels '-O2', '-O3', '-Os'.
9975
9976'-findirect-inlining'
9977     Inline also indirect calls that are discovered to be known at
9978     compile time thanks to previous inlining.  This option has any
9979     effect only when inlining itself is turned on by the
9980     '-finline-functions' or '-finline-small-functions' options.
9981
9982     Enabled at levels '-O2', '-O3', '-Os'.
9983
9984'-finline-functions'
9985     Consider all functions for inlining, even if they are not declared
9986     inline.  The compiler heuristically decides which functions are
9987     worth integrating in this way.
9988
9989     If all calls to a given function are integrated, and the function
9990     is declared 'static', then the function is normally not output as
9991     assembler code in its own right.
9992
9993     Enabled at levels '-O2', '-O3', '-Os'.  Also enabled by
9994     '-fprofile-use' and '-fauto-profile'.
9995
9996'-finline-functions-called-once'
9997     Consider all 'static' functions called once for inlining into their
9998     caller even if they are not marked 'inline'.  If a call to a given
9999     function is integrated, then the function is not output as
10000     assembler code in its own right.
10001
10002     Enabled at levels '-O1', '-O2', '-O3' and '-Os', but not '-Og'.
10003
10004'-fearly-inlining'
10005     Inline functions marked by 'always_inline' and functions whose body
10006     seems smaller than the function call overhead early before doing
10007     '-fprofile-generate' instrumentation and real inlining pass.  Doing
10008     so makes profiling significantly cheaper and usually inlining
10009     faster on programs having large chains of nested wrapper functions.
10010
10011     Enabled by default.
10012
10013'-fipa-sra'
10014     Perform interprocedural scalar replacement of aggregates, removal
10015     of unused parameters and replacement of parameters passed by
10016     reference by parameters passed by value.
10017
10018     Enabled at levels '-O2', '-O3' and '-Os'.
10019
10020'-finline-limit=N'
10021     By default, GCC limits the size of functions that can be inlined.
10022     This flag allows coarse control of this limit.  N is the size of
10023     functions that can be inlined in number of pseudo instructions.
10024
10025     Inlining is actually controlled by a number of parameters, which
10026     may be specified individually by using '--param NAME=VALUE'.  The
10027     '-finline-limit=N' option sets some of these parameters as follows:
10028
10029     'max-inline-insns-single'
10030          is set to N/2.
10031     'max-inline-insns-auto'
10032          is set to N/2.
10033
10034     See below for a documentation of the individual parameters
10035     controlling inlining and for the defaults of these parameters.
10036
10037     _Note:_ there may be no value to '-finline-limit' that results in
10038     default behavior.
10039
10040     _Note:_ pseudo instruction represents, in this particular context,
10041     an abstract measurement of function's size.  In no way does it
10042     represent a count of assembly instructions and as such its exact
10043     meaning might change from one release to an another.
10044
10045'-fno-keep-inline-dllexport'
10046     This is a more fine-grained version of '-fkeep-inline-functions',
10047     which applies only to functions that are declared using the
10048     'dllexport' attribute or declspec.  *Note Declaring Attributes of
10049     Functions: Function Attributes.
10050
10051'-fkeep-inline-functions'
10052     In C, emit 'static' functions that are declared 'inline' into the
10053     object file, even if the function has been inlined into all of its
10054     callers.  This switch does not affect functions using the 'extern
10055     inline' extension in GNU C90.  In C++, emit any and all inline
10056     functions into the object file.
10057
10058'-fkeep-static-functions'
10059     Emit 'static' functions into the object file, even if the function
10060     is never used.
10061
10062'-fkeep-static-consts'
10063     Emit variables declared 'static const' when optimization isn't
10064     turned on, even if the variables aren't referenced.
10065
10066     GCC enables this option by default.  If you want to force the
10067     compiler to check if a variable is referenced, regardless of
10068     whether or not optimization is turned on, use the
10069     '-fno-keep-static-consts' option.
10070
10071'-fmerge-constants'
10072     Attempt to merge identical constants (string constants and
10073     floating-point constants) across compilation units.
10074
10075     This option is the default for optimized compilation if the
10076     assembler and linker support it.  Use '-fno-merge-constants' to
10077     inhibit this behavior.
10078
10079     Enabled at levels '-O1', '-O2', '-O3', '-Os'.
10080
10081'-fmerge-all-constants'
10082     Attempt to merge identical constants and identical variables.
10083
10084     This option implies '-fmerge-constants'.  In addition to
10085     '-fmerge-constants' this considers e.g. even constant initialized
10086     arrays or initialized constant variables with integral or
10087     floating-point types.  Languages like C or C++ require each
10088     variable, including multiple instances of the same variable in
10089     recursive calls, to have distinct locations, so using this option
10090     results in non-conforming behavior.
10091
10092'-fmodulo-sched'
10093     Perform swing modulo scheduling immediately before the first
10094     scheduling pass.  This pass looks at innermost loops and reorders
10095     their instructions by overlapping different iterations.
10096
10097'-fmodulo-sched-allow-regmoves'
10098     Perform more aggressive SMS-based modulo scheduling with register
10099     moves allowed.  By setting this flag certain anti-dependences edges
10100     are deleted, which triggers the generation of reg-moves based on
10101     the life-range analysis.  This option is effective only with
10102     '-fmodulo-sched' enabled.
10103
10104'-fno-branch-count-reg'
10105     Disable the optimization pass that scans for opportunities to use
10106     "decrement and branch" instructions on a count register instead of
10107     instruction sequences that decrement a register, compare it against
10108     zero, and then branch based upon the result.  This option is only
10109     meaningful on architectures that support such instructions, which
10110     include x86, PowerPC, IA-64 and S/390.  Note that the
10111     '-fno-branch-count-reg' option doesn't remove the decrement and
10112     branch instructions from the generated instruction stream
10113     introduced by other optimization passes.
10114
10115     The default is '-fbranch-count-reg' at '-O1' and higher, except for
10116     '-Og'.
10117
10118'-fno-function-cse'
10119     Do not put function addresses in registers; make each instruction
10120     that calls a constant function contain the function's address
10121     explicitly.
10122
10123     This option results in less efficient code, but some strange hacks
10124     that alter the assembler output may be confused by the
10125     optimizations performed when this option is not used.
10126
10127     The default is '-ffunction-cse'
10128
10129'-fno-zero-initialized-in-bss'
10130     If the target supports a BSS section, GCC by default puts variables
10131     that are initialized to zero into BSS.  This can save space in the
10132     resulting code.
10133
10134     This option turns off this behavior because some programs
10135     explicitly rely on variables going to the data section--e.g., so
10136     that the resulting executable can find the beginning of that
10137     section and/or make assumptions based on that.
10138
10139     The default is '-fzero-initialized-in-bss'.
10140
10141'-fthread-jumps'
10142     Perform optimizations that check to see if a jump branches to a
10143     location where another comparison subsumed by the first is found.
10144     If so, the first branch is redirected to either the destination of
10145     the second branch or a point immediately following it, depending on
10146     whether the condition is known to be true or false.
10147
10148     Enabled at levels '-O1', '-O2', '-O3', '-Os'.
10149
10150'-fsplit-wide-types'
10151     When using a type that occupies multiple registers, such as 'long
10152     long' on a 32-bit system, split the registers apart and allocate
10153     them independently.  This normally generates better code for those
10154     types, but may make debugging more difficult.
10155
10156     Enabled at levels '-O1', '-O2', '-O3', '-Os'.
10157
10158'-fsplit-wide-types-early'
10159     Fully split wide types early, instead of very late.  This option
10160     has no effect unless '-fsplit-wide-types' is turned on.
10161
10162     This is the default on some targets.
10163
10164'-fcse-follow-jumps'
10165     In common subexpression elimination (CSE), scan through jump
10166     instructions when the target of the jump is not reached by any
10167     other path.  For example, when CSE encounters an 'if' statement
10168     with an 'else' clause, CSE follows the jump when the condition
10169     tested is false.
10170
10171     Enabled at levels '-O2', '-O3', '-Os'.
10172
10173'-fcse-skip-blocks'
10174     This is similar to '-fcse-follow-jumps', but causes CSE to follow
10175     jumps that conditionally skip over blocks.  When CSE encounters a
10176     simple 'if' statement with no else clause, '-fcse-skip-blocks'
10177     causes CSE to follow the jump around the body of the 'if'.
10178
10179     Enabled at levels '-O2', '-O3', '-Os'.
10180
10181'-frerun-cse-after-loop'
10182     Re-run common subexpression elimination after loop optimizations
10183     are performed.
10184
10185     Enabled at levels '-O2', '-O3', '-Os'.
10186
10187'-fgcse'
10188     Perform a global common subexpression elimination pass.  This pass
10189     also performs global constant and copy propagation.
10190
10191     _Note:_ When compiling a program using computed gotos, a GCC
10192     extension, you may get better run-time performance if you disable
10193     the global common subexpression elimination pass by adding
10194     '-fno-gcse' to the command line.
10195
10196     Enabled at levels '-O2', '-O3', '-Os'.
10197
10198'-fgcse-lm'
10199     When '-fgcse-lm' is enabled, global common subexpression
10200     elimination attempts to move loads that are only killed by stores
10201     into themselves.  This allows a loop containing a load/store
10202     sequence to be changed to a load outside the loop, and a copy/store
10203     within the loop.
10204
10205     Enabled by default when '-fgcse' is enabled.
10206
10207'-fgcse-sm'
10208     When '-fgcse-sm' is enabled, a store motion pass is run after
10209     global common subexpression elimination.  This pass attempts to
10210     move stores out of loops.  When used in conjunction with
10211     '-fgcse-lm', loops containing a load/store sequence can be changed
10212     to a load before the loop and a store after the loop.
10213
10214     Not enabled at any optimization level.
10215
10216'-fgcse-las'
10217     When '-fgcse-las' is enabled, the global common subexpression
10218     elimination pass eliminates redundant loads that come after stores
10219     to the same memory location (both partial and full redundancies).
10220
10221     Not enabled at any optimization level.
10222
10223'-fgcse-after-reload'
10224     When '-fgcse-after-reload' is enabled, a redundant load elimination
10225     pass is performed after reload.  The purpose of this pass is to
10226     clean up redundant spilling.
10227
10228     Enabled by '-O3', '-fprofile-use' and '-fauto-profile'.
10229
10230'-faggressive-loop-optimizations'
10231     This option tells the loop optimizer to use language constraints to
10232     derive bounds for the number of iterations of a loop.  This assumes
10233     that loop code does not invoke undefined behavior by for example
10234     causing signed integer overflows or out-of-bound array accesses.
10235     The bounds for the number of iterations of a loop are used to guide
10236     loop unrolling and peeling and loop exit test optimizations.  This
10237     option is enabled by default.
10238
10239'-funconstrained-commons'
10240     This option tells the compiler that variables declared in common
10241     blocks (e.g. Fortran) may later be overridden with longer trailing
10242     arrays.  This prevents certain optimizations that depend on knowing
10243     the array bounds.
10244
10245'-fcrossjumping'
10246     Perform cross-jumping transformation.  This transformation unifies
10247     equivalent code and saves code size.  The resulting code may or may
10248     not perform better than without cross-jumping.
10249
10250     Enabled at levels '-O2', '-O3', '-Os'.
10251
10252'-fauto-inc-dec'
10253     Combine increments or decrements of addresses with memory accesses.
10254     This pass is always skipped on architectures that do not have
10255     instructions to support this.  Enabled by default at '-O1' and
10256     higher on architectures that support this.
10257
10258'-fdce'
10259     Perform dead code elimination (DCE) on RTL.  Enabled by default at
10260     '-O1' and higher.
10261
10262'-fdse'
10263     Perform dead store elimination (DSE) on RTL.  Enabled by default at
10264     '-O1' and higher.
10265
10266'-fif-conversion'
10267     Attempt to transform conditional jumps into branch-less
10268     equivalents.  This includes use of conditional moves, min, max, set
10269     flags and abs instructions, and some tricks doable by standard
10270     arithmetics.  The use of conditional execution on chips where it is
10271     available is controlled by '-fif-conversion2'.
10272
10273     Enabled at levels '-O1', '-O2', '-O3', '-Os', but not with '-Og'.
10274
10275'-fif-conversion2'
10276     Use conditional execution (where available) to transform
10277     conditional jumps into branch-less equivalents.
10278
10279     Enabled at levels '-O1', '-O2', '-O3', '-Os', but not with '-Og'.
10280
10281'-fdeclone-ctor-dtor'
10282     The C++ ABI requires multiple entry points for constructors and
10283     destructors: one for a base subobject, one for a complete object,
10284     and one for a virtual destructor that calls operator delete
10285     afterwards.  For a hierarchy with virtual bases, the base and
10286     complete variants are clones, which means two copies of the
10287     function.  With this option, the base and complete variants are
10288     changed to be thunks that call a common implementation.
10289
10290     Enabled by '-Os'.
10291
10292'-fdelete-null-pointer-checks'
10293     Assume that programs cannot safely dereference null pointers, and
10294     that no code or data element resides at address zero.  This option
10295     enables simple constant folding optimizations at all optimization
10296     levels.  In addition, other optimization passes in GCC use this
10297     flag to control global dataflow analyses that eliminate useless
10298     checks for null pointers; these assume that a memory access to
10299     address zero always results in a trap, so that if a pointer is
10300     checked after it has already been dereferenced, it cannot be null.
10301
10302     Note however that in some environments this assumption is not true.
10303     Use '-fno-delete-null-pointer-checks' to disable this optimization
10304     for programs that depend on that behavior.
10305
10306     This option is enabled by default on most targets.  On Nios II ELF,
10307     it defaults to off.  On AVR, CR16, and MSP430, this option is
10308     completely disabled.
10309
10310     Passes that use the dataflow information are enabled independently
10311     at different optimization levels.
10312
10313'-fdevirtualize'
10314     Attempt to convert calls to virtual functions to direct calls.
10315     This is done both within a procedure and interprocedurally as part
10316     of indirect inlining ('-findirect-inlining') and interprocedural
10317     constant propagation ('-fipa-cp').  Enabled at levels '-O2', '-O3',
10318     '-Os'.
10319
10320'-fdevirtualize-speculatively'
10321     Attempt to convert calls to virtual functions to speculative direct
10322     calls.  Based on the analysis of the type inheritance graph,
10323     determine for a given call the set of likely targets.  If the set
10324     is small, preferably of size 1, change the call into a conditional
10325     deciding between direct and indirect calls.  The speculative calls
10326     enable more optimizations, such as inlining.  When they seem
10327     useless after further optimization, they are converted back into
10328     original form.
10329
10330'-fdevirtualize-at-ltrans'
10331     Stream extra information needed for aggressive devirtualization
10332     when running the link-time optimizer in local transformation mode.
10333     This option enables more devirtualization but significantly
10334     increases the size of streamed data.  For this reason it is
10335     disabled by default.
10336
10337'-fexpensive-optimizations'
10338     Perform a number of minor optimizations that are relatively
10339     expensive.
10340
10341     Enabled at levels '-O2', '-O3', '-Os'.
10342
10343'-free'
10344     Attempt to remove redundant extension instructions.  This is
10345     especially helpful for the x86-64 architecture, which implicitly
10346     zero-extends in 64-bit registers after writing to their lower
10347     32-bit half.
10348
10349     Enabled for Alpha, AArch64 and x86 at levels '-O2', '-O3', '-Os'.
10350
10351'-fno-lifetime-dse'
10352     In C++ the value of an object is only affected by changes within
10353     its lifetime: when the constructor begins, the object has an
10354     indeterminate value, and any changes during the lifetime of the
10355     object are dead when the object is destroyed.  Normally dead store
10356     elimination will take advantage of this; if your code relies on the
10357     value of the object storage persisting beyond the lifetime of the
10358     object, you can use this flag to disable this optimization.  To
10359     preserve stores before the constructor starts (e.g. because your
10360     operator new clears the object storage) but still treat the object
10361     as dead after the destructor, you can use '-flifetime-dse=1'.  The
10362     default behavior can be explicitly selected with
10363     '-flifetime-dse=2'.  '-flifetime-dse=0' is equivalent to
10364     '-fno-lifetime-dse'.
10365
10366'-flive-range-shrinkage'
10367     Attempt to decrease register pressure through register live range
10368     shrinkage.  This is helpful for fast processors with small or
10369     moderate size register sets.
10370
10371'-fira-algorithm=ALGORITHM'
10372     Use the specified coloring algorithm for the integrated register
10373     allocator.  The ALGORITHM argument can be 'priority', which
10374     specifies Chow's priority coloring, or 'CB', which specifies
10375     Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
10376     implemented for all architectures, but for those targets that do
10377     support it, it is the default because it generates better code.
10378
10379'-fira-region=REGION'
10380     Use specified regions for the integrated register allocator.  The
10381     REGION argument should be one of the following:
10382
10383     'all'
10384          Use all loops as register allocation regions.  This can give
10385          the best results for machines with a small and/or irregular
10386          register set.
10387
10388     'mixed'
10389          Use all loops except for loops with small register pressure as
10390          the regions.  This value usually gives the best results in
10391          most cases and for most architectures, and is enabled by
10392          default when compiling with optimization for speed ('-O',
10393          '-O2', ...).
10394
10395     'one'
10396          Use all functions as a single region.  This typically results
10397          in the smallest code size, and is enabled by default for '-Os'
10398          or '-O0'.
10399
10400'-fira-hoist-pressure'
10401     Use IRA to evaluate register pressure in the code hoisting pass for
10402     decisions to hoist expressions.  This option usually results in
10403     smaller code, but it can slow the compiler down.
10404
10405     This option is enabled at level '-Os' for all targets.
10406
10407'-fira-loop-pressure'
10408     Use IRA to evaluate register pressure in loops for decisions to
10409     move loop invariants.  This option usually results in generation of
10410     faster and smaller code on machines with large register files (>=
10411     32 registers), but it can slow the compiler down.
10412
10413     This option is enabled at level '-O3' for some targets.
10414
10415'-fno-ira-share-save-slots'
10416     Disable sharing of stack slots used for saving call-used hard
10417     registers living through a call.  Each hard register gets a
10418     separate stack slot, and as a result function stack frames are
10419     larger.
10420
10421'-fno-ira-share-spill-slots'
10422     Disable sharing of stack slots allocated for pseudo-registers.
10423     Each pseudo-register that does not get a hard register gets a
10424     separate stack slot, and as a result function stack frames are
10425     larger.
10426
10427'-flra-remat'
10428     Enable CFG-sensitive rematerialization in LRA. Instead of loading
10429     values of spilled pseudos, LRA tries to rematerialize (recalculate)
10430     values if it is profitable.
10431
10432     Enabled at levels '-O2', '-O3', '-Os'.
10433
10434'-fdelayed-branch'
10435     If supported for the target machine, attempt to reorder
10436     instructions to exploit instruction slots available after delayed
10437     branch instructions.
10438
10439     Enabled at levels '-O1', '-O2', '-O3', '-Os', but not at '-Og'.
10440
10441'-fschedule-insns'
10442     If supported for the target machine, attempt to reorder
10443     instructions to eliminate execution stalls due to required data
10444     being unavailable.  This helps machines that have slow floating
10445     point or memory load instructions by allowing other instructions to
10446     be issued until the result of the load or floating-point
10447     instruction is required.
10448
10449     Enabled at levels '-O2', '-O3'.
10450
10451'-fschedule-insns2'
10452     Similar to '-fschedule-insns', but requests an additional pass of
10453     instruction scheduling after register allocation has been done.
10454     This is especially useful on machines with a relatively small
10455     number of registers and where memory load instructions take more
10456     than one cycle.
10457
10458     Enabled at levels '-O2', '-O3', '-Os'.
10459
10460'-fno-sched-interblock'
10461     Disable instruction scheduling across basic blocks, which is
10462     normally enabled when scheduling before register allocation, i.e.
10463     with '-fschedule-insns' or at '-O2' or higher.
10464
10465'-fno-sched-spec'
10466     Disable speculative motion of non-load instructions, which is
10467     normally enabled when scheduling before register allocation, i.e.
10468     with '-fschedule-insns' or at '-O2' or higher.
10469
10470'-fsched-pressure'
10471     Enable register pressure sensitive insn scheduling before register
10472     allocation.  This only makes sense when scheduling before register
10473     allocation is enabled, i.e. with '-fschedule-insns' or at '-O2' or
10474     higher.  Usage of this option can improve the generated code and
10475     decrease its size by preventing register pressure increase above
10476     the number of available hard registers and subsequent spills in
10477     register allocation.
10478
10479'-fsched-spec-load'
10480     Allow speculative motion of some load instructions.  This only
10481     makes sense when scheduling before register allocation, i.e. with
10482     '-fschedule-insns' or at '-O2' or higher.
10483
10484'-fsched-spec-load-dangerous'
10485     Allow speculative motion of more load instructions.  This only
10486     makes sense when scheduling before register allocation, i.e. with
10487     '-fschedule-insns' or at '-O2' or higher.
10488
10489'-fsched-stalled-insns'
10490'-fsched-stalled-insns=N'
10491     Define how many insns (if any) can be moved prematurely from the
10492     queue of stalled insns into the ready list during the second
10493     scheduling pass.  '-fno-sched-stalled-insns' means that no insns
10494     are moved prematurely, '-fsched-stalled-insns=0' means there is no
10495     limit on how many queued insns can be moved prematurely.
10496     '-fsched-stalled-insns' without a value is equivalent to
10497     '-fsched-stalled-insns=1'.
10498
10499'-fsched-stalled-insns-dep'
10500'-fsched-stalled-insns-dep=N'
10501     Define how many insn groups (cycles) are examined for a dependency
10502     on a stalled insn that is a candidate for premature removal from
10503     the queue of stalled insns.  This has an effect only during the
10504     second scheduling pass, and only if '-fsched-stalled-insns' is
10505     used.  '-fno-sched-stalled-insns-dep' is equivalent to
10506     '-fsched-stalled-insns-dep=0'.  '-fsched-stalled-insns-dep' without
10507     a value is equivalent to '-fsched-stalled-insns-dep=1'.
10508
10509'-fsched2-use-superblocks'
10510     When scheduling after register allocation, use superblock
10511     scheduling.  This allows motion across basic block boundaries,
10512     resulting in faster schedules.  This option is experimental, as not
10513     all machine descriptions used by GCC model the CPU closely enough
10514     to avoid unreliable results from the algorithm.
10515
10516     This only makes sense when scheduling after register allocation,
10517     i.e. with '-fschedule-insns2' or at '-O2' or higher.
10518
10519'-fsched-group-heuristic'
10520     Enable the group heuristic in the scheduler.  This heuristic favors
10521     the instruction that belongs to a schedule group.  This is enabled
10522     by default when scheduling is enabled, i.e. with '-fschedule-insns'
10523     or '-fschedule-insns2' or at '-O2' or higher.
10524
10525'-fsched-critical-path-heuristic'
10526     Enable the critical-path heuristic in the scheduler.  This
10527     heuristic favors instructions on the critical path.  This is
10528     enabled by default when scheduling is enabled, i.e. with
10529     '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or higher.
10530
10531'-fsched-spec-insn-heuristic'
10532     Enable the speculative instruction heuristic in the scheduler.
10533     This heuristic favors speculative instructions with greater
10534     dependency weakness.  This is enabled by default when scheduling is
10535     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
10536     '-O2' or higher.
10537
10538'-fsched-rank-heuristic'
10539     Enable the rank heuristic in the scheduler.  This heuristic favors
10540     the instruction belonging to a basic block with greater size or
10541     frequency.  This is enabled by default when scheduling is enabled,
10542     i.e. with '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or
10543     higher.
10544
10545'-fsched-last-insn-heuristic'
10546     Enable the last-instruction heuristic in the scheduler.  This
10547     heuristic favors the instruction that is less dependent on the last
10548     instruction scheduled.  This is enabled by default when scheduling
10549     is enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or
10550     at '-O2' or higher.
10551
10552'-fsched-dep-count-heuristic'
10553     Enable the dependent-count heuristic in the scheduler.  This
10554     heuristic favors the instruction that has more instructions
10555     depending on it.  This is enabled by default when scheduling is
10556     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
10557     '-O2' or higher.
10558
10559'-freschedule-modulo-scheduled-loops'
10560     Modulo scheduling is performed before traditional scheduling.  If a
10561     loop is modulo scheduled, later scheduling passes may change its
10562     schedule.  Use this option to control that behavior.
10563
10564'-fselective-scheduling'
10565     Schedule instructions using selective scheduling algorithm.
10566     Selective scheduling runs instead of the first scheduler pass.
10567
10568'-fselective-scheduling2'
10569     Schedule instructions using selective scheduling algorithm.
10570     Selective scheduling runs instead of the second scheduler pass.
10571
10572'-fsel-sched-pipelining'
10573     Enable software pipelining of innermost loops during selective
10574     scheduling.  This option has no effect unless one of
10575     '-fselective-scheduling' or '-fselective-scheduling2' is turned on.
10576
10577'-fsel-sched-pipelining-outer-loops'
10578     When pipelining loops during selective scheduling, also pipeline
10579     outer loops.  This option has no effect unless
10580     '-fsel-sched-pipelining' is turned on.
10581
10582'-fsemantic-interposition'
10583     Some object formats, like ELF, allow interposing of symbols by the
10584     dynamic linker.  This means that for symbols exported from the DSO,
10585     the compiler cannot perform interprocedural propagation, inlining
10586     and other optimizations in anticipation that the function or
10587     variable in question may change.  While this feature is useful, for
10588     example, to rewrite memory allocation functions by a debugging
10589     implementation, it is expensive in the terms of code quality.  With
10590     '-fno-semantic-interposition' the compiler assumes that if
10591     interposition happens for functions the overwriting function will
10592     have precisely the same semantics (and side effects).  Similarly if
10593     interposition happens for variables, the constructor of the
10594     variable will be the same.  The flag has no effect for functions
10595     explicitly declared inline (where it is never allowed for
10596     interposition to change semantics) and for symbols explicitly
10597     declared weak.
10598
10599'-fshrink-wrap'
10600     Emit function prologues only before parts of the function that need
10601     it, rather than at the top of the function.  This flag is enabled
10602     by default at '-O' and higher.
10603
10604'-fshrink-wrap-separate'
10605     Shrink-wrap separate parts of the prologue and epilogue separately,
10606     so that those parts are only executed when needed.  This option is
10607     on by default, but has no effect unless '-fshrink-wrap' is also
10608     turned on and the target supports this.
10609
10610'-fcaller-saves'
10611     Enable allocation of values to registers that are clobbered by
10612     function calls, by emitting extra instructions to save and restore
10613     the registers around such calls.  Such allocation is done only when
10614     it seems to result in better code.
10615
10616     This option is always enabled by default on certain machines,
10617     usually those which have no call-preserved registers to use
10618     instead.
10619
10620     Enabled at levels '-O2', '-O3', '-Os'.
10621
10622'-fcombine-stack-adjustments'
10623     Tracks stack adjustments (pushes and pops) and stack memory
10624     references and then tries to find ways to combine them.
10625
10626     Enabled by default at '-O1' and higher.
10627
10628'-fipa-ra'
10629     Use caller save registers for allocation if those registers are not
10630     used by any called function.  In that case it is not necessary to
10631     save and restore them around calls.  This is only possible if
10632     called functions are part of same compilation unit as current
10633     function and they are compiled before it.
10634
10635     Enabled at levels '-O2', '-O3', '-Os', however the option is
10636     disabled if generated code will be instrumented for profiling
10637     ('-p', or '-pg') or if callee's register usage cannot be known
10638     exactly (this happens on targets that do not expose prologues and
10639     epilogues in RTL).
10640
10641'-fconserve-stack'
10642     Attempt to minimize stack usage.  The compiler attempts to use less
10643     stack space, even if that makes the program slower.  This option
10644     implies setting the 'large-stack-frame' parameter to 100 and the
10645     'large-stack-frame-growth' parameter to 400.
10646
10647'-ftree-reassoc'
10648     Perform reassociation on trees.  This flag is enabled by default at
10649     '-O1' and higher.
10650
10651'-fcode-hoisting'
10652     Perform code hoisting.  Code hoisting tries to move the evaluation
10653     of expressions executed on all paths to the function exit as early
10654     as possible.  This is especially useful as a code size
10655     optimization, but it often helps for code speed as well.  This flag
10656     is enabled by default at '-O2' and higher.
10657
10658'-ftree-pre'
10659     Perform partial redundancy elimination (PRE) on trees.  This flag
10660     is enabled by default at '-O2' and '-O3'.
10661
10662'-ftree-partial-pre'
10663     Make partial redundancy elimination (PRE) more aggressive.  This
10664     flag is enabled by default at '-O3'.
10665
10666'-ftree-forwprop'
10667     Perform forward propagation on trees.  This flag is enabled by
10668     default at '-O1' and higher.
10669
10670'-ftree-fre'
10671     Perform full redundancy elimination (FRE) on trees.  The difference
10672     between FRE and PRE is that FRE only considers expressions that are
10673     computed on all paths leading to the redundant computation.  This
10674     analysis is faster than PRE, though it exposes fewer redundancies.
10675     This flag is enabled by default at '-O1' and higher.
10676
10677'-ftree-phiprop'
10678     Perform hoisting of loads from conditional pointers on trees.  This
10679     pass is enabled by default at '-O1' and higher.
10680
10681'-fhoist-adjacent-loads'
10682     Speculatively hoist loads from both branches of an if-then-else if
10683     the loads are from adjacent locations in the same structure and the
10684     target architecture has a conditional move instruction.  This flag
10685     is enabled by default at '-O2' and higher.
10686
10687'-ftree-copy-prop'
10688     Perform copy propagation on trees.  This pass eliminates
10689     unnecessary copy operations.  This flag is enabled by default at
10690     '-O1' and higher.
10691
10692'-fipa-pure-const'
10693     Discover which functions are pure or constant.  Enabled by default
10694     at '-O1' and higher.
10695
10696'-fipa-reference'
10697     Discover which static variables do not escape the compilation unit.
10698     Enabled by default at '-O1' and higher.
10699
10700'-fipa-reference-addressable'
10701     Discover read-only, write-only and non-addressable static
10702     variables.  Enabled by default at '-O1' and higher.
10703
10704'-fipa-stack-alignment'
10705     Reduce stack alignment on call sites if possible.  Enabled by
10706     default.
10707
10708'-fipa-pta'
10709     Perform interprocedural pointer analysis and interprocedural
10710     modification and reference analysis.  This option can cause
10711     excessive memory and compile-time usage on large compilation units.
10712     It is not enabled by default at any optimization level.
10713
10714'-fipa-profile'
10715     Perform interprocedural profile propagation.  The functions called
10716     only from cold functions are marked as cold.  Also functions
10717     executed once (such as 'cold', 'noreturn', static constructors or
10718     destructors) are identified.  Cold functions and loop less parts of
10719     functions executed once are then optimized for size.  Enabled by
10720     default at '-O1' and higher.
10721
10722'-fipa-modref'
10723     Perform interprocedural mod/ref analysis.  This optimization
10724     analyzes the side effects of functions (memory locations that are
10725     modified or referenced) and enables better optimization across the
10726     function call boundary.  This flag is enabled by default at '-O1'
10727     and higher.
10728
10729'-fipa-cp'
10730     Perform interprocedural constant propagation.  This optimization
10731     analyzes the program to determine when values passed to functions
10732     are constants and then optimizes accordingly.  This optimization
10733     can substantially increase performance if the application has
10734     constants passed to functions.  This flag is enabled by default at
10735     '-O2', '-Os' and '-O3'.  It is also enabled by '-fprofile-use' and
10736     '-fauto-profile'.
10737
10738'-fipa-cp-clone'
10739     Perform function cloning to make interprocedural constant
10740     propagation stronger.  When enabled, interprocedural constant
10741     propagation performs function cloning when externally visible
10742     function can be called with constant arguments.  Because this
10743     optimization can create multiple copies of functions, it may
10744     significantly increase code size (see '--param
10745     ipa-cp-unit-growth=VALUE').  This flag is enabled by default at
10746     '-O3'.  It is also enabled by '-fprofile-use' and '-fauto-profile'.
10747
10748'-fipa-bit-cp'
10749     When enabled, perform interprocedural bitwise constant propagation.
10750     This flag is enabled by default at '-O2' and by '-fprofile-use' and
10751     '-fauto-profile'.  It requires that '-fipa-cp' is enabled.
10752
10753'-fipa-vrp'
10754     When enabled, perform interprocedural propagation of value ranges.
10755     This flag is enabled by default at '-O2'.  It requires that
10756     '-fipa-cp' is enabled.
10757
10758'-fipa-icf'
10759     Perform Identical Code Folding for functions and read-only
10760     variables.  The optimization reduces code size and may disturb
10761     unwind stacks by replacing a function by equivalent one with a
10762     different name.  The optimization works more effectively with
10763     link-time optimization enabled.
10764
10765     Although the behavior is similar to the Gold Linker's ICF
10766     optimization, GCC ICF works on different levels and thus the
10767     optimizations are not same - there are equivalences that are found
10768     only by GCC and equivalences found only by Gold.
10769
10770     This flag is enabled by default at '-O2' and '-Os'.
10771
10772'-flive-patching=LEVEL'
10773     Control GCC's optimizations to produce output suitable for
10774     live-patching.
10775
10776     If the compiler's optimization uses a function's body or
10777     information extracted from its body to optimize/change another
10778     function, the latter is called an impacted function of the former.
10779     If a function is patched, its impacted functions should be patched
10780     too.
10781
10782     The impacted functions are determined by the compiler's
10783     interprocedural optimizations.  For example, a caller is impacted
10784     when inlining a function into its caller, cloning a function and
10785     changing its caller to call this new clone, or extracting a
10786     function's pureness/constness information to optimize its direct or
10787     indirect callers, etc.
10788
10789     Usually, the more IPA optimizations enabled, the larger the number
10790     of impacted functions for each function.  In order to control the
10791     number of impacted functions and more easily compute the list of
10792     impacted function, IPA optimizations can be partially enabled at
10793     two different levels.
10794
10795     The LEVEL argument should be one of the following:
10796
10797     'inline-clone'
10798
10799          Only enable inlining and cloning optimizations, which includes
10800          inlining, cloning, interprocedural scalar replacement of
10801          aggregates and partial inlining.  As a result, when patching a
10802          function, all its callers and its clones' callers are
10803          impacted, therefore need to be patched as well.
10804
10805          '-flive-patching=inline-clone' disables the following
10806          optimization flags:
10807               -fwhole-program  -fipa-pta  -fipa-reference  -fipa-ra
10808               -fipa-icf  -fipa-icf-functions  -fipa-icf-variables
10809               -fipa-bit-cp  -fipa-vrp  -fipa-pure-const  -fipa-reference-addressable
10810               -fipa-stack-alignment -fipa-modref
10811
10812     'inline-only-static'
10813
10814          Only enable inlining of static functions.  As a result, when
10815          patching a static function, all its callers are impacted and
10816          so need to be patched as well.
10817
10818          In addition to all the flags that
10819          '-flive-patching=inline-clone' disables,
10820          '-flive-patching=inline-only-static' disables the following
10821          additional optimization flags:
10822               -fipa-cp-clone  -fipa-sra  -fpartial-inlining  -fipa-cp
10823
10824     When '-flive-patching' is specified without any value, the default
10825     value is INLINE-CLONE.
10826
10827     This flag is disabled by default.
10828
10829     Note that '-flive-patching' is not supported with link-time
10830     optimization ('-flto').
10831
10832'-fisolate-erroneous-paths-dereference'
10833     Detect paths that trigger erroneous or undefined behavior due to
10834     dereferencing a null pointer.  Isolate those paths from the main
10835     control flow and turn the statement with erroneous or undefined
10836     behavior into a trap.  This flag is enabled by default at '-O2' and
10837     higher and depends on '-fdelete-null-pointer-checks' also being
10838     enabled.
10839
10840'-fisolate-erroneous-paths-attribute'
10841     Detect paths that trigger erroneous or undefined behavior due to a
10842     null value being used in a way forbidden by a 'returns_nonnull' or
10843     'nonnull' attribute.  Isolate those paths from the main control
10844     flow and turn the statement with erroneous or undefined behavior
10845     into a trap.  This is not currently enabled, but may be enabled by
10846     '-O2' in the future.
10847
10848'-ftree-sink'
10849     Perform forward store motion on trees.  This flag is enabled by
10850     default at '-O1' and higher.
10851
10852'-ftree-bit-ccp'
10853     Perform sparse conditional bit constant propagation on trees and
10854     propagate pointer alignment information.  This pass only operates
10855     on local scalar variables and is enabled by default at '-O1' and
10856     higher, except for '-Og'.  It requires that '-ftree-ccp' is
10857     enabled.
10858
10859'-ftree-ccp'
10860     Perform sparse conditional constant propagation (CCP) on trees.
10861     This pass only operates on local scalar variables and is enabled by
10862     default at '-O1' and higher.
10863
10864'-fssa-backprop'
10865     Propagate information about uses of a value up the definition chain
10866     in order to simplify the definitions.  For example, this pass
10867     strips sign operations if the sign of a value never matters.  The
10868     flag is enabled by default at '-O1' and higher.
10869
10870'-fssa-phiopt'
10871     Perform pattern matching on SSA PHI nodes to optimize conditional
10872     code.  This pass is enabled by default at '-O1' and higher, except
10873     for '-Og'.
10874
10875'-ftree-switch-conversion'
10876     Perform conversion of simple initializations in a switch to
10877     initializations from a scalar array.  This flag is enabled by
10878     default at '-O2' and higher.
10879
10880'-ftree-tail-merge'
10881     Look for identical code sequences.  When found, replace one with a
10882     jump to the other.  This optimization is known as tail merging or
10883     cross jumping.  This flag is enabled by default at '-O2' and
10884     higher.  The compilation time in this pass can be limited using
10885     'max-tail-merge-comparisons' parameter and
10886     'max-tail-merge-iterations' parameter.
10887
10888'-ftree-dce'
10889     Perform dead code elimination (DCE) on trees.  This flag is enabled
10890     by default at '-O1' and higher.
10891
10892'-ftree-builtin-call-dce'
10893     Perform conditional dead code elimination (DCE) for calls to
10894     built-in functions that may set 'errno' but are otherwise free of
10895     side effects.  This flag is enabled by default at '-O2' and higher
10896     if '-Os' is not also specified.
10897
10898'-ffinite-loops'
10899     Assume that a loop with an exit will eventually take the exit and
10900     not loop indefinitely.  This allows the compiler to remove loops
10901     that otherwise have no side-effects, not considering eventual
10902     endless looping as such.
10903
10904     This option is enabled by default at '-O2' for C++ with -std=c++11
10905     or higher.
10906
10907'-ftree-dominator-opts'
10908     Perform a variety of simple scalar cleanups (constant/copy
10909     propagation, redundancy elimination, range propagation and
10910     expression simplification) based on a dominator tree traversal.
10911     This also performs jump threading (to reduce jumps to jumps).  This
10912     flag is enabled by default at '-O1' and higher.
10913
10914'-ftree-dse'
10915     Perform dead store elimination (DSE) on trees.  A dead store is a
10916     store into a memory location that is later overwritten by another
10917     store without any intervening loads.  In this case the earlier
10918     store can be deleted.  This flag is enabled by default at '-O1' and
10919     higher.
10920
10921'-ftree-ch'
10922     Perform loop header copying on trees.  This is beneficial since it
10923     increases effectiveness of code motion optimizations.  It also
10924     saves one jump.  This flag is enabled by default at '-O1' and
10925     higher.  It is not enabled for '-Os', since it usually increases
10926     code size.
10927
10928'-ftree-loop-optimize'
10929     Perform loop optimizations on trees.  This flag is enabled by
10930     default at '-O1' and higher.
10931
10932'-ftree-loop-linear'
10933'-floop-strip-mine'
10934'-floop-block'
10935     Perform loop nest optimizations.  Same as '-floop-nest-optimize'.
10936     To use this code transformation, GCC has to be configured with
10937     '--with-isl' to enable the Graphite loop transformation
10938     infrastructure.
10939
10940'-fgraphite-identity'
10941     Enable the identity transformation for graphite.  For every SCoP we
10942     generate the polyhedral representation and transform it back to
10943     gimple.  Using '-fgraphite-identity' we can check the costs or
10944     benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
10945     minimal optimizations are also performed by the code generator isl,
10946     like index splitting and dead code elimination in loops.
10947
10948'-floop-nest-optimize'
10949     Enable the isl based loop nest optimizer.  This is a generic loop
10950     nest optimizer based on the Pluto optimization algorithms.  It
10951     calculates a loop structure optimized for data-locality and
10952     parallelism.  This option is experimental.
10953
10954'-floop-parallelize-all'
10955     Use the Graphite data dependence analysis to identify loops that
10956     can be parallelized.  Parallelize all the loops that can be
10957     analyzed to not contain loop carried dependences without checking
10958     that it is profitable to parallelize the loops.
10959
10960'-ftree-coalesce-vars'
10961     While transforming the program out of the SSA representation,
10962     attempt to reduce copying by coalescing versions of different
10963     user-defined variables, instead of just compiler temporaries.  This
10964     may severely limit the ability to debug an optimized program
10965     compiled with '-fno-var-tracking-assignments'.  In the negated
10966     form, this flag prevents SSA coalescing of user variables.  This
10967     option is enabled by default if optimization is enabled, and it
10968     does very little otherwise.
10969
10970'-ftree-loop-if-convert'
10971     Attempt to transform conditional jumps in the innermost loops to
10972     branch-less equivalents.  The intent is to remove control-flow from
10973     the innermost loops in order to improve the ability of the
10974     vectorization pass to handle these loops.  This is enabled by
10975     default if vectorization is enabled.
10976
10977'-ftree-loop-distribution'
10978     Perform loop distribution.  This flag can improve cache performance
10979     on big loop bodies and allow further loop optimizations, like
10980     parallelization or vectorization, to take place.  For example, the
10981     loop
10982          DO I = 1, N
10983            A(I) = B(I) + C
10984            D(I) = E(I) * F
10985          ENDDO
10986     is transformed to
10987          DO I = 1, N
10988             A(I) = B(I) + C
10989          ENDDO
10990          DO I = 1, N
10991             D(I) = E(I) * F
10992          ENDDO
10993     This flag is enabled by default at '-O3'.  It is also enabled by
10994     '-fprofile-use' and '-fauto-profile'.
10995
10996'-ftree-loop-distribute-patterns'
10997     Perform loop distribution of patterns that can be code generated
10998     with calls to a library.  This flag is enabled by default at '-O2'
10999     and higher, and by '-fprofile-use' and '-fauto-profile'.
11000
11001     This pass distributes the initialization loops and generates a call
11002     to memset zero.  For example, the loop
11003          DO I = 1, N
11004            A(I) = 0
11005            B(I) = A(I) + I
11006          ENDDO
11007     is transformed to
11008          DO I = 1, N
11009             A(I) = 0
11010          ENDDO
11011          DO I = 1, N
11012             B(I) = A(I) + I
11013          ENDDO
11014     and the initialization loop is transformed into a call to memset
11015     zero.  This flag is enabled by default at '-O3'.  It is also
11016     enabled by '-fprofile-use' and '-fauto-profile'.
11017
11018'-floop-interchange'
11019     Perform loop interchange outside of graphite.  This flag can
11020     improve cache performance on loop nest and allow further loop
11021     optimizations, like vectorization, to take place.  For example, the
11022     loop
11023          for (int i = 0; i < N; i++)
11024            for (int j = 0; j < N; j++)
11025              for (int k = 0; k < N; k++)
11026                c[i][j] = c[i][j] + a[i][k]*b[k][j];
11027     is transformed to
11028          for (int i = 0; i < N; i++)
11029            for (int k = 0; k < N; k++)
11030              for (int j = 0; j < N; j++)
11031                c[i][j] = c[i][j] + a[i][k]*b[k][j];
11032     This flag is enabled by default at '-O3'.  It is also enabled by
11033     '-fprofile-use' and '-fauto-profile'.
11034
11035'-floop-unroll-and-jam'
11036     Apply unroll and jam transformations on feasible loops.  In a loop
11037     nest this unrolls the outer loop by some factor and fuses the
11038     resulting multiple inner loops.  This flag is enabled by default at
11039     '-O3'.  It is also enabled by '-fprofile-use' and '-fauto-profile'.
11040
11041'-ftree-loop-im'
11042     Perform loop invariant motion on trees.  This pass moves only
11043     invariants that are hard to handle at RTL level (function calls,
11044     operations that expand to nontrivial sequences of insns).  With
11045     '-funswitch-loops' it also moves operands of conditions that are
11046     invariant out of the loop, so that we can use just trivial
11047     invariantness analysis in loop unswitching.  The pass also includes
11048     store motion.
11049
11050'-ftree-loop-ivcanon'
11051     Create a canonical counter for number of iterations in loops for
11052     which determining number of iterations requires complicated
11053     analysis.  Later optimizations then may determine the number
11054     easily.  Useful especially in connection with unrolling.
11055
11056'-ftree-scev-cprop'
11057     Perform final value replacement.  If a variable is modified in a
11058     loop in such a way that its value when exiting the loop can be
11059     determined using only its initial value and the number of loop
11060     iterations, replace uses of the final value by such a computation,
11061     provided it is sufficiently cheap.  This reduces data dependencies
11062     and may allow further simplifications.  Enabled by default at '-O1'
11063     and higher.
11064
11065'-fivopts'
11066     Perform induction variable optimizations (strength reduction,
11067     induction variable merging and induction variable elimination) on
11068     trees.
11069
11070'-ftree-parallelize-loops=n'
11071     Parallelize loops, i.e., split their iteration space to run in n
11072     threads.  This is only possible for loops whose iterations are
11073     independent and can be arbitrarily reordered.  The optimization is
11074     only profitable on multiprocessor machines, for loops that are
11075     CPU-intensive, rather than constrained e.g. by memory bandwidth.
11076     This option implies '-pthread', and thus is only supported on
11077     targets that have support for '-pthread'.
11078
11079'-ftree-pta'
11080     Perform function-local points-to analysis on trees.  This flag is
11081     enabled by default at '-O1' and higher, except for '-Og'.
11082
11083'-ftree-sra'
11084     Perform scalar replacement of aggregates.  This pass replaces
11085     structure references with scalars to prevent committing structures
11086     to memory too early.  This flag is enabled by default at '-O1' and
11087     higher, except for '-Og'.
11088
11089'-fstore-merging'
11090     Perform merging of narrow stores to consecutive memory addresses.
11091     This pass merges contiguous stores of immediate values narrower
11092     than a word into fewer wider stores to reduce the number of
11093     instructions.  This is enabled by default at '-O2' and higher as
11094     well as '-Os'.
11095
11096'-ftree-ter'
11097     Perform temporary expression replacement during the SSA->normal
11098     phase.  Single use/single def temporaries are replaced at their use
11099     location with their defining expression.  This results in
11100     non-GIMPLE code, but gives the expanders much more complex trees to
11101     work on resulting in better RTL generation.  This is enabled by
11102     default at '-O1' and higher.
11103
11104'-ftree-slsr'
11105     Perform straight-line strength reduction on trees.  This recognizes
11106     related expressions involving multiplications and replaces them by
11107     less expensive calculations when possible.  This is enabled by
11108     default at '-O1' and higher.
11109
11110'-ftree-vectorize'
11111     Perform vectorization on trees.  This flag enables
11112     '-ftree-loop-vectorize' and '-ftree-slp-vectorize' if not
11113     explicitly specified.
11114
11115'-ftree-loop-vectorize'
11116     Perform loop vectorization on trees.  This flag is enabled by
11117     default at '-O2' and by '-ftree-vectorize', '-fprofile-use', and
11118     '-fauto-profile'.
11119
11120'-ftree-slp-vectorize'
11121     Perform basic block vectorization on trees.  This flag is enabled
11122     by default at '-O2' and by '-ftree-vectorize', '-fprofile-use', and
11123     '-fauto-profile'.
11124
11125'-ftrivial-auto-var-init=CHOICE'
11126     Initialize automatic variables with either a pattern or with zeroes
11127     to increase the security and predictability of a program by
11128     preventing uninitialized memory disclosure and use.  GCC still
11129     considers an automatic variable that doesn't have an explicit
11130     initializer as uninitialized, '-Wuninitialized' and
11131     '-Wanalyzer-use-of-uninitialized-value' will still report warning
11132     messages on such automatic variables.  With this option, GCC will
11133     also initialize any padding of automatic variables that have
11134     structure or union types to zeroes.  However, the current
11135     implementation cannot initialize automatic variables that are
11136     declared between the controlling expression and the first case of a
11137     'switch' statement.  Using '-Wtrivial-auto-var-init' to report all
11138     such cases.
11139
11140     The three values of CHOICE are:
11141
11142        * 'uninitialized' doesn't initialize any automatic variables.
11143          This is C and C++'s default.
11144
11145        * 'pattern' Initialize automatic variables with values which
11146          will likely transform logic bugs into crashes down the line,
11147          are easily recognized in a crash dump and without being values
11148          that programmers can rely on for useful program semantics.
11149          The current value is byte-repeatable pattern with byte "0xFE".
11150          The values used for pattern initialization might be changed in
11151          the future.
11152
11153        * 'zero' Initialize automatic variables with zeroes.
11154
11155     The default is 'uninitialized'.
11156
11157     You can control this behavior for a specific variable by using the
11158     variable attribute 'uninitialized' (*note Variable Attributes::).
11159
11160'-fvect-cost-model=MODEL'
11161     Alter the cost model used for vectorization.  The MODEL argument
11162     should be one of 'unlimited', 'dynamic', 'cheap' or 'very-cheap'.
11163     With the 'unlimited' model the vectorized code-path is assumed to
11164     be profitable while with the 'dynamic' model a runtime check guards
11165     the vectorized code-path to enable it only for iteration counts
11166     that will likely execute faster than when executing the original
11167     scalar loop.  The 'cheap' model disables vectorization of loops
11168     where doing so would be cost prohibitive for example due to
11169     required runtime checks for data dependence or alignment but
11170     otherwise is equal to the 'dynamic' model.  The 'very-cheap' model
11171     only allows vectorization if the vector code would entirely replace
11172     the scalar code that is being vectorized.  For example, if each
11173     iteration of a vectorized loop would only be able to handle exactly
11174     four iterations of the scalar loop, the 'very-cheap' model would
11175     only allow vectorization if the scalar iteration count is known to
11176     be a multiple of four.
11177
11178     The default cost model depends on other optimization flags and is
11179     either 'dynamic' or 'cheap'.
11180
11181'-fsimd-cost-model=MODEL'
11182     Alter the cost model used for vectorization of loops marked with
11183     the OpenMP simd directive.  The MODEL argument should be one of
11184     'unlimited', 'dynamic', 'cheap'.  All values of MODEL have the same
11185     meaning as described in '-fvect-cost-model' and by default a cost
11186     model defined with '-fvect-cost-model' is used.
11187
11188'-ftree-vrp'
11189     Perform Value Range Propagation on trees.  This is similar to the
11190     constant propagation pass, but instead of values, ranges of values
11191     are propagated.  This allows the optimizers to remove unnecessary
11192     range checks like array bound checks and null pointer checks.  This
11193     is enabled by default at '-O2' and higher.  Null pointer check
11194     elimination is only done if '-fdelete-null-pointer-checks' is
11195     enabled.
11196
11197'-fsplit-paths'
11198     Split paths leading to loop backedges.  This can improve dead code
11199     elimination and common subexpression elimination.  This is enabled
11200     by default at '-O3' and above.
11201
11202'-fsplit-ivs-in-unroller'
11203     Enables expression of values of induction variables in later
11204     iterations of the unrolled loop using the value in the first
11205     iteration.  This breaks long dependency chains, thus improving
11206     efficiency of the scheduling passes.
11207
11208     A combination of '-fweb' and CSE is often sufficient to obtain the
11209     same effect.  However, that is not reliable in cases where the loop
11210     body is more complicated than a single basic block.  It also does
11211     not work at all on some architectures due to restrictions in the
11212     CSE pass.
11213
11214     This optimization is enabled by default.
11215
11216'-fvariable-expansion-in-unroller'
11217     With this option, the compiler creates multiple copies of some
11218     local variables when unrolling a loop, which can result in superior
11219     code.
11220
11221     This optimization is enabled by default for PowerPC targets, but
11222     disabled by default otherwise.
11223
11224'-fpartial-inlining'
11225     Inline parts of functions.  This option has any effect only when
11226     inlining itself is turned on by the '-finline-functions' or
11227     '-finline-small-functions' options.
11228
11229     Enabled at levels '-O2', '-O3', '-Os'.
11230
11231'-fpredictive-commoning'
11232     Perform predictive commoning optimization, i.e., reusing
11233     computations (especially memory loads and stores) performed in
11234     previous iterations of loops.
11235
11236     This option is enabled at level '-O3'.  It is also enabled by
11237     '-fprofile-use' and '-fauto-profile'.
11238
11239'-fprefetch-loop-arrays'
11240     If supported by the target machine, generate instructions to
11241     prefetch memory to improve the performance of loops that access
11242     large arrays.
11243
11244     This option may generate better or worse code; results are highly
11245     dependent on the structure of loops within the source code.
11246
11247     Disabled at level '-Os'.
11248
11249'-fno-printf-return-value'
11250     Do not substitute constants for known return value of formatted
11251     output functions such as 'sprintf', 'snprintf', 'vsprintf', and
11252     'vsnprintf' (but not 'printf' of 'fprintf').  This transformation
11253     allows GCC to optimize or even eliminate branches based on the
11254     known return value of these functions called with arguments that
11255     are either constant, or whose values are known to be in a range
11256     that makes determining the exact return value possible.  For
11257     example, when '-fprintf-return-value' is in effect, both the branch
11258     and the body of the 'if' statement (but not the call to 'snprint')
11259     can be optimized away when 'i' is a 32-bit or smaller integer
11260     because the return value is guaranteed to be at most 8.
11261
11262          char buf[9];
11263          if (snprintf (buf, "%08x", i) >= sizeof buf)
11264            ...
11265
11266     The '-fprintf-return-value' option relies on other optimizations
11267     and yields best results with '-O2' and above.  It works in tandem
11268     with the '-Wformat-overflow' and '-Wformat-truncation' options.
11269     The '-fprintf-return-value' option is enabled by default.
11270
11271'-fno-peephole'
11272'-fno-peephole2'
11273     Disable any machine-specific peephole optimizations.  The
11274     difference between '-fno-peephole' and '-fno-peephole2' is in how
11275     they are implemented in the compiler; some targets use one, some
11276     use the other, a few use both.
11277
11278     '-fpeephole' is enabled by default.  '-fpeephole2' enabled at
11279     levels '-O2', '-O3', '-Os'.
11280
11281'-fno-guess-branch-probability'
11282     Do not guess branch probabilities using heuristics.
11283
11284     GCC uses heuristics to guess branch probabilities if they are not
11285     provided by profiling feedback ('-fprofile-arcs').  These
11286     heuristics are based on the control flow graph.  If some branch
11287     probabilities are specified by '__builtin_expect', then the
11288     heuristics are used to guess branch probabilities for the rest of
11289     the control flow graph, taking the '__builtin_expect' info into
11290     account.  The interactions between the heuristics and
11291     '__builtin_expect' can be complex, and in some cases, it may be
11292     useful to disable the heuristics so that the effects of
11293     '__builtin_expect' are easier to understand.
11294
11295     It is also possible to specify expected probability of the
11296     expression with '__builtin_expect_with_probability' built-in
11297     function.
11298
11299     The default is '-fguess-branch-probability' at levels '-O', '-O2',
11300     '-O3', '-Os'.
11301
11302'-freorder-blocks'
11303     Reorder basic blocks in the compiled function in order to reduce
11304     number of taken branches and improve code locality.
11305
11306     Enabled at levels '-O1', '-O2', '-O3', '-Os'.
11307
11308'-freorder-blocks-algorithm=ALGORITHM'
11309     Use the specified algorithm for basic block reordering.  The
11310     ALGORITHM argument can be 'simple', which does not increase code
11311     size (except sometimes due to secondary effects like alignment), or
11312     'stc', the "software trace cache" algorithm, which tries to put all
11313     often executed code together, minimizing the number of branches
11314     executed by making extra copies of code.
11315
11316     The default is 'simple' at levels '-O1', '-Os', and 'stc' at levels
11317     '-O2', '-O3'.
11318
11319'-freorder-blocks-and-partition'
11320     In addition to reordering basic blocks in the compiled function, in
11321     order to reduce number of taken branches, partitions hot and cold
11322     basic blocks into separate sections of the assembly and '.o' files,
11323     to improve paging and cache locality performance.
11324
11325     This optimization is automatically turned off in the presence of
11326     exception handling or unwind tables (on targets using
11327     setjump/longjump or target specific scheme), for linkonce sections,
11328     for functions with a user-defined section attribute and on any
11329     architecture that does not support named sections.  When
11330     '-fsplit-stack' is used this option is not enabled by default (to
11331     avoid linker errors), but may be enabled explicitly (if using a
11332     working linker).
11333
11334     Enabled for x86 at levels '-O2', '-O3', '-Os'.
11335
11336'-freorder-functions'
11337     Reorder functions in the object file in order to improve code
11338     locality.  This is implemented by using special subsections
11339     '.text.hot' for most frequently executed functions and
11340     '.text.unlikely' for unlikely executed functions.  Reordering is
11341     done by the linker so object file format must support named
11342     sections and linker must place them in a reasonable way.
11343
11344     This option isn't effective unless you either provide profile
11345     feedback (see '-fprofile-arcs' for details) or manually annotate
11346     functions with 'hot' or 'cold' attributes (*note Common Function
11347     Attributes::).
11348
11349     Enabled at levels '-O2', '-O3', '-Os'.
11350
11351'-fstrict-aliasing'
11352     Allow the compiler to assume the strictest aliasing rules
11353     applicable to the language being compiled.  For C (and C++), this
11354     activates optimizations based on the type of expressions.  In
11355     particular, an object of one type is assumed never to reside at the
11356     same address as an object of a different type, unless the types are
11357     almost the same.  For example, an 'unsigned int' can alias an
11358     'int', but not a 'void*' or a 'double'.  A character type may alias
11359     any other type.
11360
11361     Pay special attention to code like this:
11362          union a_union {
11363            int i;
11364            double d;
11365          };
11366
11367          int f() {
11368            union a_union t;
11369            t.d = 3.0;
11370            return t.i;
11371          }
11372     The practice of reading from a different union member than the one
11373     most recently written to (called "type-punning") is common.  Even
11374     with '-fstrict-aliasing', type-punning is allowed, provided the
11375     memory is accessed through the union type.  So, the code above
11376     works as expected.  *Note Structures unions enumerations and
11377     bit-fields implementation::.  However, this code might not:
11378          int f() {
11379            union a_union t;
11380            int* ip;
11381            t.d = 3.0;
11382            ip = &t.i;
11383            return *ip;
11384          }
11385
11386     Similarly, access by taking the address, casting the resulting
11387     pointer and dereferencing the result has undefined behavior, even
11388     if the cast uses a union type, e.g.:
11389          int f() {
11390            double d = 3.0;
11391            return ((union a_union *) &d)->i;
11392          }
11393
11394     The '-fstrict-aliasing' option is enabled at levels '-O2', '-O3',
11395     '-Os'.
11396
11397'-fipa-strict-aliasing'
11398     Controls whether rules of '-fstrict-aliasing' are applied across
11399     function boundaries.  Note that if multiple functions gets inlined
11400     into a single function the memory accesses are no longer considered
11401     to be crossing a function boundary.
11402
11403     The '-fipa-strict-aliasing' option is enabled by default and is
11404     effective only in combination with '-fstrict-aliasing'.
11405
11406'-falign-functions'
11407'-falign-functions=N'
11408'-falign-functions=N:M'
11409'-falign-functions=N:M:N2'
11410'-falign-functions=N:M:N2:M2'
11411     Align the start of functions to the next power-of-two greater than
11412     or equal to N, skipping up to M-1 bytes.  This ensures that at
11413     least the first M bytes of the function can be fetched by the CPU
11414     without crossing an N-byte alignment boundary.
11415
11416     If M is not specified, it defaults to N.
11417
11418     Examples: '-falign-functions=32' aligns functions to the next
11419     32-byte boundary, '-falign-functions=24' aligns to the next 32-byte
11420     boundary only if this can be done by skipping 23 bytes or less,
11421     '-falign-functions=32:7' aligns to the next 32-byte boundary only
11422     if this can be done by skipping 6 bytes or less.
11423
11424     The second pair of N2:M2 values allows you to specify a secondary
11425     alignment: '-falign-functions=64:7:32:3' aligns to the next 64-byte
11426     boundary if this can be done by skipping 6 bytes or less, otherwise
11427     aligns to the next 32-byte boundary if this can be done by skipping
11428     2 bytes or less.  If M2 is not specified, it defaults to N2.
11429
11430     Some assemblers only support this flag when N is a power of two; in
11431     that case, it is rounded up.
11432
11433     '-fno-align-functions' and '-falign-functions=1' are equivalent and
11434     mean that functions are not aligned.
11435
11436     If N is not specified or is zero, use a machine-dependent default.
11437     The maximum allowed N option value is 65536.
11438
11439     Enabled at levels '-O2', '-O3'.
11440
11441'-flimit-function-alignment'
11442     If this option is enabled, the compiler tries to avoid
11443     unnecessarily overaligning functions.  It attempts to instruct the
11444     assembler to align by the amount specified by '-falign-functions',
11445     but not to skip more bytes than the size of the function.
11446
11447'-falign-labels'
11448'-falign-labels=N'
11449'-falign-labels=N:M'
11450'-falign-labels=N:M:N2'
11451'-falign-labels=N:M:N2:M2'
11452     Align all branch targets to a power-of-two boundary.
11453
11454     Parameters of this option are analogous to the '-falign-functions'
11455     option.  '-fno-align-labels' and '-falign-labels=1' are equivalent
11456     and mean that labels are not aligned.
11457
11458     If '-falign-loops' or '-falign-jumps' are applicable and are
11459     greater than this value, then their values are used instead.
11460
11461     If N is not specified or is zero, use a machine-dependent default
11462     which is very likely to be '1', meaning no alignment.  The maximum
11463     allowed N option value is 65536.
11464
11465     Enabled at levels '-O2', '-O3'.
11466
11467'-falign-loops'
11468'-falign-loops=N'
11469'-falign-loops=N:M'
11470'-falign-loops=N:M:N2'
11471'-falign-loops=N:M:N2:M2'
11472     Align loops to a power-of-two boundary.  If the loops are executed
11473     many times, this makes up for any execution of the dummy padding
11474     instructions.
11475
11476     If '-falign-labels' is greater than this value, then its value is
11477     used instead.
11478
11479     Parameters of this option are analogous to the '-falign-functions'
11480     option.  '-fno-align-loops' and '-falign-loops=1' are equivalent
11481     and mean that loops are not aligned.  The maximum allowed N option
11482     value is 65536.
11483
11484     If N is not specified or is zero, use a machine-dependent default.
11485
11486     Enabled at levels '-O2', '-O3'.
11487
11488'-falign-jumps'
11489'-falign-jumps=N'
11490'-falign-jumps=N:M'
11491'-falign-jumps=N:M:N2'
11492'-falign-jumps=N:M:N2:M2'
11493     Align branch targets to a power-of-two boundary, for branch targets
11494     where the targets can only be reached by jumping.  In this case, no
11495     dummy operations need be executed.
11496
11497     If '-falign-labels' is greater than this value, then its value is
11498     used instead.
11499
11500     Parameters of this option are analogous to the '-falign-functions'
11501     option.  '-fno-align-jumps' and '-falign-jumps=1' are equivalent
11502     and mean that loops are not aligned.
11503
11504     If N is not specified or is zero, use a machine-dependent default.
11505     The maximum allowed N option value is 65536.
11506
11507     Enabled at levels '-O2', '-O3'.
11508
11509'-fno-allocation-dce'
11510     Do not remove unused C++ allocations in dead code elimination.
11511
11512'-fallow-store-data-races'
11513     Allow the compiler to perform optimizations that may introduce new
11514     data races on stores, without proving that the variable cannot be
11515     concurrently accessed by other threads.  Does not affect
11516     optimization of local data.  It is safe to use this option if it is
11517     known that global data will not be accessed by multiple threads.
11518
11519     Examples of optimizations enabled by '-fallow-store-data-races'
11520     include hoisting or if-conversions that may cause a value that was
11521     already in memory to be re-written with that same value.  Such
11522     re-writing is safe in a single threaded context but may be unsafe
11523     in a multi-threaded context.  Note that on some processors,
11524     if-conversions may be required in order to enable vectorization.
11525
11526     Enabled at level '-Ofast'.
11527
11528'-funit-at-a-time'
11529     This option is left for compatibility reasons.  '-funit-at-a-time'
11530     has no effect, while '-fno-unit-at-a-time' implies
11531     '-fno-toplevel-reorder' and '-fno-section-anchors'.
11532
11533     Enabled by default.
11534
11535'-fno-toplevel-reorder'
11536     Do not reorder top-level functions, variables, and 'asm'
11537     statements.  Output them in the same order that they appear in the
11538     input file.  When this option is used, unreferenced static
11539     variables are not removed.  This option is intended to support
11540     existing code that relies on a particular ordering.  For new code,
11541     it is better to use attributes when possible.
11542
11543     '-ftoplevel-reorder' is the default at '-O1' and higher, and also
11544     at '-O0' if '-fsection-anchors' is explicitly requested.
11545     Additionally '-fno-toplevel-reorder' implies
11546     '-fno-section-anchors'.
11547
11548'-fweb'
11549     Constructs webs as commonly used for register allocation purposes
11550     and assign each web individual pseudo register.  This allows the
11551     register allocation pass to operate on pseudos directly, but also
11552     strengthens several other optimization passes, such as CSE, loop
11553     optimizer and trivial dead code remover.  It can, however, make
11554     debugging impossible, since variables no longer stay in a "home
11555     register".
11556
11557     Enabled by default with '-funroll-loops'.
11558
11559'-fwhole-program'
11560     Assume that the current compilation unit represents the whole
11561     program being compiled.  All public functions and variables with
11562     the exception of 'main' and those merged by attribute
11563     'externally_visible' become static functions and in effect are
11564     optimized more aggressively by interprocedural optimizers.
11565
11566     This option should not be used in combination with '-flto'.
11567     Instead relying on a linker plugin should provide safer and more
11568     precise information.
11569
11570'-flto[=N]'
11571     This option runs the standard link-time optimizer.  When invoked
11572     with source code, it generates GIMPLE (one of GCC's internal
11573     representations) and writes it to special ELF sections in the
11574     object file.  When the object files are linked together, all the
11575     function bodies are read from these ELF sections and instantiated
11576     as if they had been part of the same translation unit.
11577
11578     To use the link-time optimizer, '-flto' and optimization options
11579     should be specified at compile time and during the final link.  It
11580     is recommended that you compile all the files participating in the
11581     same link with the same options and also specify those options at
11582     link time.  For example:
11583
11584          gcc -c -O2 -flto foo.c
11585          gcc -c -O2 -flto bar.c
11586          gcc -o myprog -flto -O2 foo.o bar.o
11587
11588     The first two invocations to GCC save a bytecode representation of
11589     GIMPLE into special ELF sections inside 'foo.o' and 'bar.o'.  The
11590     final invocation reads the GIMPLE bytecode from 'foo.o' and
11591     'bar.o', merges the two files into a single internal image, and
11592     compiles the result as usual.  Since both 'foo.o' and 'bar.o' are
11593     merged into a single image, this causes all the interprocedural
11594     analyses and optimizations in GCC to work across the two files as
11595     if they were a single one.  This means, for example, that the
11596     inliner is able to inline functions in 'bar.o' into functions in
11597     'foo.o' and vice-versa.
11598
11599     Another (simpler) way to enable link-time optimization is:
11600
11601          gcc -o myprog -flto -O2 foo.c bar.c
11602
11603     The above generates bytecode for 'foo.c' and 'bar.c', merges them
11604     together into a single GIMPLE representation and optimizes them as
11605     usual to produce 'myprog'.
11606
11607     The important thing to keep in mind is that to enable link-time
11608     optimizations you need to use the GCC driver to perform the link
11609     step.  GCC automatically performs link-time optimization if any of
11610     the objects involved were compiled with the '-flto' command-line
11611     option.  You can always override the automatic decision to do
11612     link-time optimization by passing '-fno-lto' to the link command.
11613
11614     To make whole program optimization effective, it is necessary to
11615     make certain whole program assumptions.  The compiler needs to know
11616     what functions and variables can be accessed by libraries and
11617     runtime outside of the link-time optimized unit.  When supported by
11618     the linker, the linker plugin (see '-fuse-linker-plugin') passes
11619     information to the compiler about used and externally visible
11620     symbols.  When the linker plugin is not available,
11621     '-fwhole-program' should be used to allow the compiler to make
11622     these assumptions, which leads to more aggressive optimization
11623     decisions.
11624
11625     When a file is compiled with '-flto' without '-fuse-linker-plugin',
11626     the generated object file is larger than a regular object file
11627     because it contains GIMPLE bytecodes and the usual final code (see
11628     '-ffat-lto-objects').  This means that object files with LTO
11629     information can be linked as normal object files; if '-fno-lto' is
11630     passed to the linker, no interprocedural optimizations are applied.
11631     Note that when '-fno-fat-lto-objects' is enabled the compile stage
11632     is faster but you cannot perform a regular, non-LTO link on them.
11633
11634     When producing the final binary, GCC only applies link-time
11635     optimizations to those files that contain bytecode.  Therefore, you
11636     can mix and match object files and libraries with GIMPLE bytecodes
11637     and final object code.  GCC automatically selects which files to
11638     optimize in LTO mode and which files to link without further
11639     processing.
11640
11641     Generally, options specified at link time override those specified
11642     at compile time, although in some cases GCC attempts to infer
11643     link-time options from the settings used to compile the input
11644     files.
11645
11646     If you do not specify an optimization level option '-O' at link
11647     time, then GCC uses the highest optimization level used when
11648     compiling the object files.  Note that it is generally ineffective
11649     to specify an optimization level option only at link time and not
11650     at compile time, for two reasons.  First, compiling without
11651     optimization suppresses compiler passes that gather information
11652     needed for effective optimization at link time.  Second, some early
11653     optimization passes can be performed only at compile time and not
11654     at link time.
11655
11656     There are some code generation flags preserved by GCC when
11657     generating bytecodes, as they need to be used during the final
11658     link.  Currently, the following options and their settings are
11659     taken from the first object file that explicitly specifies them:
11660     '-fcommon', '-fexceptions', '-fnon-call-exceptions', '-fgnu-tm' and
11661     all the '-m' target flags.
11662
11663     The following options '-fPIC', '-fpic', '-fpie' and '-fPIE' are
11664     combined based on the following scheme:
11665
11666          -fPIC + -fpic = -fpic
11667          -fPIC + -fno-pic = -fno-pic
11668          -fpic/-fPIC + (no option) = (no option)
11669          -fPIC + -fPIE = -fPIE
11670          -fpic + -fPIE = -fpie
11671          -fPIC/-fpic + -fpie = -fpie
11672
11673     Certain ABI-changing flags are required to match in all compilation
11674     units, and trying to override this at link time with a conflicting
11675     value is ignored.  This includes options such as
11676     '-freg-struct-return' and '-fpcc-struct-return'.
11677
11678     Other options such as '-ffp-contract', '-fno-strict-overflow',
11679     '-fwrapv', '-fno-trapv' or '-fno-strict-aliasing' are passed
11680     through to the link stage and merged conservatively for conflicting
11681     translation units.  Specifically '-fno-strict-overflow', '-fwrapv'
11682     and '-fno-trapv' take precedence; and for example
11683     '-ffp-contract=off' takes precedence over '-ffp-contract=fast'.
11684     You can override them at link time.
11685
11686     Diagnostic options such as '-Wstringop-overflow' are passed through
11687     to the link stage and their setting matches that of the
11688     compile-step at function granularity.  Note that this matters only
11689     for diagnostics emitted during optimization.  Note that code
11690     transforms such as inlining can lead to warnings being enabled or
11691     disabled for regions if code not consistent with the setting at
11692     compile time.
11693
11694     When you need to pass options to the assembler via '-Wa' or
11695     '-Xassembler' make sure to either compile such translation units
11696     with '-fno-lto' or consistently use the same assembler options on
11697     all translation units.  You can alternatively also specify
11698     assembler options at LTO link time.
11699
11700     To enable debug info generation you need to supply '-g' at compile
11701     time.  If any of the input files at link time were built with debug
11702     info generation enabled the link will enable debug info generation
11703     as well.  Any elaborate debug info settings like the dwarf level
11704     '-gdwarf-5' need to be explicitly repeated at the linker command
11705     line and mixing different settings in different translation units
11706     is discouraged.
11707
11708     If LTO encounters objects with C linkage declared with incompatible
11709     types in separate translation units to be linked together
11710     (undefined behavior according to ISO C99 6.2.7), a non-fatal
11711     diagnostic may be issued.  The behavior is still undefined at run
11712     time.  Similar diagnostics may be raised for other languages.
11713
11714     Another feature of LTO is that it is possible to apply
11715     interprocedural optimizations on files written in different
11716     languages:
11717
11718          gcc -c -flto foo.c
11719          g++ -c -flto bar.cc
11720          gfortran -c -flto baz.f90
11721          g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
11722
11723     Notice that the final link is done with 'g++' to get the C++
11724     runtime libraries and '-lgfortran' is added to get the Fortran
11725     runtime libraries.  In general, when mixing languages in LTO mode,
11726     you should use the same link command options as when mixing
11727     languages in a regular (non-LTO) compilation.
11728
11729     If object files containing GIMPLE bytecode are stored in a library
11730     archive, say 'libfoo.a', it is possible to extract and use them in
11731     an LTO link if you are using a linker with plugin support.  To
11732     create static libraries suitable for LTO, use 'gcc-ar' and
11733     'gcc-ranlib' instead of 'ar' and 'ranlib'; to show the symbols of
11734     object files with GIMPLE bytecode, use 'gcc-nm'.  Those commands
11735     require that 'ar', 'ranlib' and 'nm' have been compiled with plugin
11736     support.  At link time, use the flag '-fuse-linker-plugin' to
11737     ensure that the library participates in the LTO optimization
11738     process:
11739
11740          gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
11741
11742     With the linker plugin enabled, the linker extracts the needed
11743     GIMPLE files from 'libfoo.a' and passes them on to the running GCC
11744     to make them part of the aggregated GIMPLE image to be optimized.
11745
11746     If you are not using a linker with plugin support and/or do not
11747     enable the linker plugin, then the objects inside 'libfoo.a' are
11748     extracted and linked as usual, but they do not participate in the
11749     LTO optimization process.  In order to make a static library
11750     suitable for both LTO optimization and usual linkage, compile its
11751     object files with '-flto' '-ffat-lto-objects'.
11752
11753     Link-time optimizations do not require the presence of the whole
11754     program to operate.  If the program does not require any symbols to
11755     be exported, it is possible to combine '-flto' and
11756     '-fwhole-program' to allow the interprocedural optimizers to use
11757     more aggressive assumptions which may lead to improved optimization
11758     opportunities.  Use of '-fwhole-program' is not needed when linker
11759     plugin is active (see '-fuse-linker-plugin').
11760
11761     The current implementation of LTO makes no attempt to generate
11762     bytecode that is portable between different types of hosts.  The
11763     bytecode files are versioned and there is a strict version check,
11764     so bytecode files generated in one version of GCC do not work with
11765     an older or newer version of GCC.
11766
11767     Link-time optimization does not work well with generation of
11768     debugging information on systems other than those using a
11769     combination of ELF and DWARF.
11770
11771     If you specify the optional N, the optimization and code generation
11772     done at link time is executed in parallel using N parallel jobs by
11773     utilizing an installed 'make' program.  The environment variable
11774     'MAKE' may be used to override the program used.
11775
11776     You can also specify '-flto=jobserver' to use GNU make's job server
11777     mode to determine the number of parallel jobs.  This is useful when
11778     the Makefile calling GCC is already executing in parallel.  You
11779     must prepend a '+' to the command recipe in the parent Makefile for
11780     this to work.  This option likely only works if 'MAKE' is GNU make.
11781     Even without the option value, GCC tries to automatically detect a
11782     running GNU make's job server.
11783
11784     Use '-flto=auto' to use GNU make's job server, if available, or
11785     otherwise fall back to autodetection of the number of CPU threads
11786     present in your system.
11787
11788'-flto-partition=ALG'
11789     Specify the partitioning algorithm used by the link-time optimizer.
11790     The value is either '1to1' to specify a partitioning mirroring the
11791     original source files or 'balanced' to specify partitioning into
11792     equally sized chunks (whenever possible) or 'max' to create new
11793     partition for every symbol where possible.  Specifying 'none' as an
11794     algorithm disables partitioning and streaming completely.  The
11795     default value is 'balanced'.  While '1to1' can be used as an
11796     workaround for various code ordering issues, the 'max' partitioning
11797     is intended for internal testing only.  The value 'one' specifies
11798     that exactly one partition should be used while the value 'none'
11799     bypasses partitioning and executes the link-time optimization step
11800     directly from the WPA phase.
11801
11802'-flto-compression-level=N'
11803     This option specifies the level of compression used for
11804     intermediate language written to LTO object files, and is only
11805     meaningful in conjunction with LTO mode ('-flto').  GCC currently
11806     supports two LTO compression algorithms.  For zstd, valid values
11807     are 0 (no compression) to 19 (maximum compression), while zlib
11808     supports values from 0 to 9.  Values outside this range are clamped
11809     to either minimum or maximum of the supported values.  If the
11810     option is not given, a default balanced compression setting is
11811     used.
11812
11813'-fuse-linker-plugin'
11814     Enables the use of a linker plugin during link-time optimization.
11815     This option relies on plugin support in the linker, which is
11816     available in gold or in GNU ld 2.21 or newer.
11817
11818     This option enables the extraction of object files with GIMPLE
11819     bytecode out of library archives.  This improves the quality of
11820     optimization by exposing more code to the link-time optimizer.
11821     This information specifies what symbols can be accessed externally
11822     (by non-LTO object or during dynamic linking).  Resulting code
11823     quality improvements on binaries (and shared libraries that use
11824     hidden visibility) are similar to '-fwhole-program'.  See '-flto'
11825     for a description of the effect of this flag and how to use it.
11826
11827     This option is enabled by default when LTO support in GCC is
11828     enabled and GCC was configured for use with a linker supporting
11829     plugins (GNU ld 2.21 or newer or gold).
11830
11831'-ffat-lto-objects'
11832     Fat LTO objects are object files that contain both the intermediate
11833     language and the object code.  This makes them usable for both LTO
11834     linking and normal linking.  This option is effective only when
11835     compiling with '-flto' and is ignored at link time.
11836
11837     '-fno-fat-lto-objects' improves compilation time over plain LTO,
11838     but requires the complete toolchain to be aware of LTO. It requires
11839     a linker with linker plugin support for basic functionality.
11840     Additionally, 'nm', 'ar' and 'ranlib' need to support linker
11841     plugins to allow a full-featured build environment (capable of
11842     building static libraries etc).  GCC provides the 'gcc-ar',
11843     'gcc-nm', 'gcc-ranlib' wrappers to pass the right options to these
11844     tools.  With non fat LTO makefiles need to be modified to use them.
11845
11846     Note that modern binutils provide plugin auto-load mechanism.
11847     Installing the linker plugin into '$libdir/bfd-plugins' has the
11848     same effect as usage of the command wrappers ('gcc-ar', 'gcc-nm'
11849     and 'gcc-ranlib').
11850
11851     The default is '-fno-fat-lto-objects' on targets with linker plugin
11852     support.
11853
11854'-fcompare-elim'
11855     After register allocation and post-register allocation instruction
11856     splitting, identify arithmetic instructions that compute processor
11857     flags similar to a comparison operation based on that arithmetic.
11858     If possible, eliminate the explicit comparison operation.
11859
11860     This pass only applies to certain targets that cannot explicitly
11861     represent the comparison operation before register allocation is
11862     complete.
11863
11864     Enabled at levels '-O1', '-O2', '-O3', '-Os'.
11865
11866'-fcprop-registers'
11867     After register allocation and post-register allocation instruction
11868     splitting, perform a copy-propagation pass to try to reduce
11869     scheduling dependencies and occasionally eliminate the copy.
11870
11871     Enabled at levels '-O1', '-O2', '-O3', '-Os'.
11872
11873'-fprofile-correction'
11874     Profiles collected using an instrumented binary for multi-threaded
11875     programs may be inconsistent due to missed counter updates.  When
11876     this option is specified, GCC uses heuristics to correct or smooth
11877     out such inconsistencies.  By default, GCC emits an error message
11878     when an inconsistent profile is detected.
11879
11880     This option is enabled by '-fauto-profile'.
11881
11882'-fprofile-partial-training'
11883     With '-fprofile-use' all portions of programs not executed during
11884     train run are optimized agressively for size rather than speed.  In
11885     some cases it is not practical to train all possible hot paths in
11886     the program.  (For example, program may contain functions specific
11887     for a given hardware and trianing may not cover all hardware
11888     configurations program is run on.)  With
11889     '-fprofile-partial-training' profile feedback will be ignored for
11890     all functions not executed during the train run leading them to be
11891     optimized as if they were compiled without profile feedback.  This
11892     leads to better performance when train run is not representative
11893     but also leads to significantly bigger code.
11894
11895'-fprofile-use'
11896'-fprofile-use=PATH'
11897     Enable profile feedback-directed optimizations, and the following
11898     optimizations, many of which are generally profitable only with
11899     profile feedback available:
11900
11901          -fbranch-probabilities  -fprofile-values
11902          -funroll-loops  -fpeel-loops  -ftracer  -fvpt
11903          -finline-functions  -fipa-cp  -fipa-cp-clone  -fipa-bit-cp
11904          -fpredictive-commoning  -fsplit-loops  -funswitch-loops
11905          -fgcse-after-reload  -ftree-loop-vectorize  -ftree-slp-vectorize
11906          -fvect-cost-model=dynamic  -ftree-loop-distribute-patterns
11907          -fprofile-reorder-functions
11908
11909     Before you can use this option, you must first generate profiling
11910     information.  *Note Instrumentation Options::, for information
11911     about the '-fprofile-generate' option.
11912
11913     By default, GCC emits an error message if the feedback profiles do
11914     not match the source code.  This error can be turned into a warning
11915     by using '-Wno-error=coverage-mismatch'.  Note this may result in
11916     poorly optimized code.  Additionally, by default, GCC also emits a
11917     warning message if the feedback profiles do not exist (see
11918     '-Wmissing-profile').
11919
11920     If PATH is specified, GCC looks at the PATH to find the profile
11921     feedback data files.  See '-fprofile-dir'.
11922
11923'-fauto-profile'
11924'-fauto-profile=PATH'
11925     Enable sampling-based feedback-directed optimizations, and the
11926     following optimizations, many of which are generally profitable
11927     only with profile feedback available:
11928
11929          -fbranch-probabilities  -fprofile-values
11930          -funroll-loops  -fpeel-loops  -ftracer  -fvpt
11931          -finline-functions  -fipa-cp  -fipa-cp-clone  -fipa-bit-cp
11932          -fpredictive-commoning  -fsplit-loops  -funswitch-loops
11933          -fgcse-after-reload  -ftree-loop-vectorize  -ftree-slp-vectorize
11934          -fvect-cost-model=dynamic  -ftree-loop-distribute-patterns
11935          -fprofile-correction
11936
11937     PATH is the name of a file containing AutoFDO profile information.
11938     If omitted, it defaults to 'fbdata.afdo' in the current directory.
11939
11940     Producing an AutoFDO profile data file requires running your
11941     program with the 'perf' utility on a supported GNU/Linux target
11942     system.  For more information, see <https://perf.wiki.kernel.org/>.
11943
11944     E.g.
11945          perf record -e br_inst_retired:near_taken -b -o perf.data \
11946              -- your_program
11947
11948     Then use the 'create_gcov' tool to convert the raw profile data to
11949     a format that can be used by GCC.  You must also supply the
11950     unstripped binary for your program to this tool.  See
11951     <https://github.com/google/autofdo>.
11952
11953     E.g.
11954          create_gcov --binary=your_program.unstripped --profile=perf.data \
11955              --gcov=profile.afdo
11956
11957 The following options control compiler behavior regarding
11958floating-point arithmetic.  These options trade off between speed and
11959correctness.  All must be specifically enabled.
11960
11961'-ffloat-store'
11962     Do not store floating-point variables in registers, and inhibit
11963     other options that might change whether a floating-point value is
11964     taken from a register or memory.
11965
11966     This option prevents undesirable excess precision on machines such
11967     as the 68000 where the floating registers (of the 68881) keep more
11968     precision than a 'double' is supposed to have.  Similarly for the
11969     x86 architecture.  For most programs, the excess precision does
11970     only good, but a few programs rely on the precise definition of
11971     IEEE floating point.  Use '-ffloat-store' for such programs, after
11972     modifying them to store all pertinent intermediate computations
11973     into variables.
11974
11975'-fexcess-precision=STYLE'
11976     This option allows further control over excess precision on
11977     machines where floating-point operations occur in a format with
11978     more precision or range than the IEEE standard and interchange
11979     floating-point types.  By default, '-fexcess-precision=fast' is in
11980     effect; this means that operations may be carried out in a wider
11981     precision than the types specified in the source if that would
11982     result in faster code, and it is unpredictable when rounding to the
11983     types specified in the source code takes place.  When compiling C,
11984     if '-fexcess-precision=standard' is specified then excess precision
11985     follows the rules specified in ISO C99; in particular, both casts
11986     and assignments cause values to be rounded to their semantic types
11987     (whereas '-ffloat-store' only affects assignments).  This option is
11988     enabled by default for C if a strict conformance option such as
11989     '-std=c99' is used.  '-ffast-math' enables
11990     '-fexcess-precision=fast' by default regardless of whether a strict
11991     conformance option is used.
11992
11993     '-fexcess-precision=standard' is not implemented for languages
11994     other than C. On the x86, it has no effect if '-mfpmath=sse' or
11995     '-mfpmath=sse+387' is specified; in the former case, IEEE semantics
11996     apply without excess precision, and in the latter, rounding is
11997     unpredictable.
11998
11999'-ffast-math'
12000     Sets the options '-fno-math-errno', '-funsafe-math-optimizations',
12001     '-ffinite-math-only', '-fno-rounding-math', '-fno-signaling-nans',
12002     '-fcx-limited-range' and '-fexcess-precision=fast'.
12003
12004     This option causes the preprocessor macro '__FAST_MATH__' to be
12005     defined.
12006
12007     This option is not turned on by any '-O' option besides '-Ofast'
12008     since it can result in incorrect output for programs that depend on
12009     an exact implementation of IEEE or ISO rules/specifications for
12010     math functions.  It may, however, yield faster code for programs
12011     that do not require the guarantees of these specifications.
12012
12013'-fno-math-errno'
12014     Do not set 'errno' after calling math functions that are executed
12015     with a single instruction, e.g., 'sqrt'.  A program that relies on
12016     IEEE exceptions for math error handling may want to use this flag
12017     for speed while maintaining IEEE arithmetic compatibility.
12018
12019     This option is not turned on by any '-O' option since it can result
12020     in incorrect output for programs that depend on an exact
12021     implementation of IEEE or ISO rules/specifications for math
12022     functions.  It may, however, yield faster code for programs that do
12023     not require the guarantees of these specifications.
12024
12025     The default is '-fmath-errno'.
12026
12027     On Darwin systems, the math library never sets 'errno'.  There is
12028     therefore no reason for the compiler to consider the possibility
12029     that it might, and '-fno-math-errno' is the default.
12030
12031'-funsafe-math-optimizations'
12032
12033     Allow optimizations for floating-point arithmetic that (a) assume
12034     that arguments and results are valid and (b) may violate IEEE or
12035     ANSI standards.  When used at link time, it may include libraries
12036     or startup files that change the default FPU control word or other
12037     similar optimizations.
12038
12039     This option is not turned on by any '-O' option since it can result
12040     in incorrect output for programs that depend on an exact
12041     implementation of IEEE or ISO rules/specifications for math
12042     functions.  It may, however, yield faster code for programs that do
12043     not require the guarantees of these specifications.  Enables
12044     '-fno-signed-zeros', '-fno-trapping-math', '-fassociative-math' and
12045     '-freciprocal-math'.
12046
12047     The default is '-fno-unsafe-math-optimizations'.
12048
12049'-fassociative-math'
12050
12051     Allow re-association of operands in series of floating-point
12052     operations.  This violates the ISO C and C++ language standard by
12053     possibly changing computation result.  NOTE: re-ordering may change
12054     the sign of zero as well as ignore NaNs and inhibit or create
12055     underflow or overflow (and thus cannot be used on code that relies
12056     on rounding behavior like '(x + 2**52) - 2**52'.  May also reorder
12057     floating-point comparisons and thus may not be used when ordered
12058     comparisons are required.  This option requires that both
12059     '-fno-signed-zeros' and '-fno-trapping-math' be in effect.
12060     Moreover, it doesn't make much sense with '-frounding-math'.  For
12061     Fortran the option is automatically enabled when both
12062     '-fno-signed-zeros' and '-fno-trapping-math' are in effect.
12063
12064     The default is '-fno-associative-math'.
12065
12066'-freciprocal-math'
12067
12068     Allow the reciprocal of a value to be used instead of dividing by
12069     the value if this enables optimizations.  For example 'x / y' can
12070     be replaced with 'x * (1/y)', which is useful if '(1/y)' is subject
12071     to common subexpression elimination.  Note that this loses
12072     precision and increases the number of flops operating on the value.
12073
12074     The default is '-fno-reciprocal-math'.
12075
12076'-ffinite-math-only'
12077     Allow optimizations for floating-point arithmetic that assume that
12078     arguments and results are not NaNs or +-Infs.
12079
12080     This option is not turned on by any '-O' option since it can result
12081     in incorrect output for programs that depend on an exact
12082     implementation of IEEE or ISO rules/specifications for math
12083     functions.  It may, however, yield faster code for programs that do
12084     not require the guarantees of these specifications.
12085
12086     The default is '-fno-finite-math-only'.
12087
12088'-fno-signed-zeros'
12089     Allow optimizations for floating-point arithmetic that ignore the
12090     signedness of zero.  IEEE arithmetic specifies the behavior of
12091     distinct +0.0 and -0.0 values, which then prohibits simplification
12092     of expressions such as x+0.0 or 0.0*x (even with
12093     '-ffinite-math-only').  This option implies that the sign of a zero
12094     result isn't significant.
12095
12096     The default is '-fsigned-zeros'.
12097
12098'-fno-trapping-math'
12099     Compile code assuming that floating-point operations cannot
12100     generate user-visible traps.  These traps include division by zero,
12101     overflow, underflow, inexact result and invalid operation.  This
12102     option requires that '-fno-signaling-nans' be in effect.  Setting
12103     this option may allow faster code if one relies on "non-stop" IEEE
12104     arithmetic, for example.
12105
12106     This option should never be turned on by any '-O' option since it
12107     can result in incorrect output for programs that depend on an exact
12108     implementation of IEEE or ISO rules/specifications for math
12109     functions.
12110
12111     The default is '-ftrapping-math'.
12112
12113'-frounding-math'
12114     Disable transformations and optimizations that assume default
12115     floating-point rounding behavior.  This is round-to-zero for all
12116     floating point to integer conversions, and round-to-nearest for all
12117     other arithmetic truncations.  This option should be specified for
12118     programs that change the FP rounding mode dynamically, or that may
12119     be executed with a non-default rounding mode.  This option disables
12120     constant folding of floating-point expressions at compile time
12121     (which may be affected by rounding mode) and arithmetic
12122     transformations that are unsafe in the presence of sign-dependent
12123     rounding modes.
12124
12125     The default is '-fno-rounding-math'.
12126
12127     This option is experimental and does not currently guarantee to
12128     disable all GCC optimizations that are affected by rounding mode.
12129     Future versions of GCC may provide finer control of this setting
12130     using C99's 'FENV_ACCESS' pragma.  This command-line option will be
12131     used to specify the default state for 'FENV_ACCESS'.
12132
12133'-fsignaling-nans'
12134     Compile code assuming that IEEE signaling NaNs may generate
12135     user-visible traps during floating-point operations.  Setting this
12136     option disables optimizations that may change the number of
12137     exceptions visible with signaling NaNs.  This option implies
12138     '-ftrapping-math'.
12139
12140     This option causes the preprocessor macro '__SUPPORT_SNAN__' to be
12141     defined.
12142
12143     The default is '-fno-signaling-nans'.
12144
12145     This option is experimental and does not currently guarantee to
12146     disable all GCC optimizations that affect signaling NaN behavior.
12147
12148'-fno-fp-int-builtin-inexact'
12149     Do not allow the built-in functions 'ceil', 'floor', 'round' and
12150     'trunc', and their 'float' and 'long double' variants, to generate
12151     code that raises the "inexact" floating-point exception for
12152     noninteger arguments.  ISO C99 and C11 allow these functions to
12153     raise the "inexact" exception, but ISO/IEC TS 18661-1:2014, the C
12154     bindings to IEEE 754-2008, as integrated into ISO C2X, does not
12155     allow these functions to do so.
12156
12157     The default is '-ffp-int-builtin-inexact', allowing the exception
12158     to be raised, unless C2X or a later C standard is selected.  This
12159     option does nothing unless '-ftrapping-math' is in effect.
12160
12161     Even if '-fno-fp-int-builtin-inexact' is used, if the functions
12162     generate a call to a library function then the "inexact" exception
12163     may be raised if the library implementation does not follow TS
12164     18661.
12165
12166'-fsingle-precision-constant'
12167     Treat floating-point constants as single precision instead of
12168     implicitly converting them to double-precision constants.
12169
12170'-fcx-limited-range'
12171     When enabled, this option states that a range reduction step is not
12172     needed when performing complex division.  Also, there is no
12173     checking whether the result of a complex multiplication or division
12174     is 'NaN + I*NaN', with an attempt to rescue the situation in that
12175     case.  The default is '-fno-cx-limited-range', but is enabled by
12176     '-ffast-math'.
12177
12178     This option controls the default setting of the ISO C99
12179     'CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to all
12180     languages.
12181
12182'-fcx-fortran-rules'
12183     Complex multiplication and division follow Fortran rules.  Range
12184     reduction is done as part of complex division, but there is no
12185     checking whether the result of a complex multiplication or division
12186     is 'NaN + I*NaN', with an attempt to rescue the situation in that
12187     case.
12188
12189     The default is '-fno-cx-fortran-rules'.
12190
12191 The following options control optimizations that may improve
12192performance, but are not enabled by any '-O' options.  This section
12193includes experimental options that may produce broken code.
12194
12195'-fbranch-probabilities'
12196     After running a program compiled with '-fprofile-arcs' (*note
12197     Instrumentation Options::), you can compile it a second time using
12198     '-fbranch-probabilities', to improve optimizations based on the
12199     number of times each branch was taken.  When a program compiled
12200     with '-fprofile-arcs' exits, it saves arc execution counts to a
12201     file called 'SOURCENAME.gcda' for each source file.  The
12202     information in this data file is very dependent on the structure of
12203     the generated code, so you must use the same source code and the
12204     same optimization options for both compilations.  See details about
12205     the file naming in '-fprofile-arcs'.
12206
12207     With '-fbranch-probabilities', GCC puts a 'REG_BR_PROB' note on
12208     each 'JUMP_INSN' and 'CALL_INSN'.  These can be used to improve
12209     optimization.  Currently, they are only used in one place: in
12210     'reorg.cc', instead of guessing which path a branch is most likely
12211     to take, the 'REG_BR_PROB' values are used to exactly determine
12212     which path is taken more often.
12213
12214     Enabled by '-fprofile-use' and '-fauto-profile'.
12215
12216'-fprofile-values'
12217     If combined with '-fprofile-arcs', it adds code so that some data
12218     about values of expressions in the program is gathered.
12219
12220     With '-fbranch-probabilities', it reads back the data gathered from
12221     profiling values of expressions for usage in optimizations.
12222
12223     Enabled by '-fprofile-generate', '-fprofile-use', and
12224     '-fauto-profile'.
12225
12226'-fprofile-reorder-functions'
12227     Function reordering based on profile instrumentation collects first
12228     time of execution of a function and orders these functions in
12229     ascending order.
12230
12231     Enabled with '-fprofile-use'.
12232
12233'-fvpt'
12234     If combined with '-fprofile-arcs', this option instructs the
12235     compiler to add code to gather information about values of
12236     expressions.
12237
12238     With '-fbranch-probabilities', it reads back the data gathered and
12239     actually performs the optimizations based on them.  Currently the
12240     optimizations include specialization of division operations using
12241     the knowledge about the value of the denominator.
12242
12243     Enabled with '-fprofile-use' and '-fauto-profile'.
12244
12245'-frename-registers'
12246     Attempt to avoid false dependencies in scheduled code by making use
12247     of registers left over after register allocation.  This
12248     optimization most benefits processors with lots of registers.
12249     Depending on the debug information format adopted by the target,
12250     however, it can make debugging impossible, since variables no
12251     longer stay in a "home register".
12252
12253     Enabled by default with '-funroll-loops'.
12254
12255'-fschedule-fusion'
12256     Performs a target dependent pass over the instruction stream to
12257     schedule instructions of same type together because target machine
12258     can execute them more efficiently if they are adjacent to each
12259     other in the instruction flow.
12260
12261     Enabled at levels '-O2', '-O3', '-Os'.
12262
12263'-ftracer'
12264     Perform tail duplication to enlarge superblock size.  This
12265     transformation simplifies the control flow of the function allowing
12266     other optimizations to do a better job.
12267
12268     Enabled by '-fprofile-use' and '-fauto-profile'.
12269
12270'-funroll-loops'
12271     Unroll loops whose number of iterations can be determined at
12272     compile time or upon entry to the loop.  '-funroll-loops' implies
12273     '-frerun-cse-after-loop', '-fweb' and '-frename-registers'.  It
12274     also turns on complete loop peeling (i.e. complete removal of loops
12275     with a small constant number of iterations).  This option makes
12276     code larger, and may or may not make it run faster.
12277
12278     Enabled by '-fprofile-use' and '-fauto-profile'.
12279
12280'-funroll-all-loops'
12281     Unroll all loops, even if their number of iterations is uncertain
12282     when the loop is entered.  This usually makes programs run more
12283     slowly.  '-funroll-all-loops' implies the same options as
12284     '-funroll-loops'.
12285
12286'-fpeel-loops'
12287     Peels loops for which there is enough information that they do not
12288     roll much (from profile feedback or static analysis).  It also
12289     turns on complete loop peeling (i.e. complete removal of loops with
12290     small constant number of iterations).
12291
12292     Enabled by '-O3', '-fprofile-use', and '-fauto-profile'.
12293
12294'-fmove-loop-invariants'
12295     Enables the loop invariant motion pass in the RTL loop optimizer.
12296     Enabled at level '-O1' and higher, except for '-Og'.
12297
12298'-fmove-loop-stores'
12299     Enables the loop store motion pass in the GIMPLE loop optimizer.
12300     This moves invariant stores to after the end of the loop in
12301     exchange for carrying the stored value in a register across the
12302     iteration.  Note for this option to have an effect '-ftree-loop-im'
12303     has to be enabled as well.  Enabled at level '-O1' and higher,
12304     except for '-Og'.
12305
12306'-fsplit-loops'
12307     Split a loop into two if it contains a condition that's always true
12308     for one side of the iteration space and false for the other.
12309
12310     Enabled by '-fprofile-use' and '-fauto-profile'.
12311
12312'-funswitch-loops'
12313     Move branches with loop invariant conditions out of the loop, with
12314     duplicates of the loop on both branches (modified according to
12315     result of the condition).
12316
12317     Enabled by '-fprofile-use' and '-fauto-profile'.
12318
12319'-fversion-loops-for-strides'
12320     If a loop iterates over an array with a variable stride, create
12321     another version of the loop that assumes the stride is always one.
12322     For example:
12323
12324          for (int i = 0; i < n; ++i)
12325            x[i * stride] = ...;
12326
12327     becomes:
12328
12329          if (stride == 1)
12330            for (int i = 0; i < n; ++i)
12331              x[i] = ...;
12332          else
12333            for (int i = 0; i < n; ++i)
12334              x[i * stride] = ...;
12335
12336     This is particularly useful for assumed-shape arrays in Fortran
12337     where (for example) it allows better vectorization assuming
12338     contiguous accesses.  This flag is enabled by default at '-O3'.  It
12339     is also enabled by '-fprofile-use' and '-fauto-profile'.
12340
12341'-ffunction-sections'
12342'-fdata-sections'
12343     Place each function or data item into its own section in the output
12344     file if the target supports arbitrary sections.  The name of the
12345     function or the name of the data item determines the section's name
12346     in the output file.
12347
12348     Use these options on systems where the linker can perform
12349     optimizations to improve locality of reference in the instruction
12350     space.  Most systems using the ELF object format have linkers with
12351     such optimizations.  On AIX, the linker rearranges sections
12352     (CSECTs) based on the call graph.  The performance impact varies.
12353
12354     Together with a linker garbage collection (linker '--gc-sections'
12355     option) these options may lead to smaller statically-linked
12356     executables (after stripping).
12357
12358     On ELF/DWARF systems these options do not degenerate the quality of
12359     the debug information.  There could be issues with other object
12360     files/debug info formats.
12361
12362     Only use these options when there are significant benefits from
12363     doing so.  When you specify these options, the assembler and linker
12364     create larger object and executable files and are also slower.
12365     These options affect code generation.  They prevent optimizations
12366     by the compiler and assembler using relative locations inside a
12367     translation unit since the locations are unknown until link time.
12368     An example of such an optimization is relaxing calls to short call
12369     instructions.
12370
12371'-fstdarg-opt'
12372     Optimize the prologue of variadic argument functions with respect
12373     to usage of those arguments.
12374
12375'-fsection-anchors'
12376     Try to reduce the number of symbolic address calculations by using
12377     shared "anchor" symbols to address nearby objects.  This
12378     transformation can help to reduce the number of GOT entries and GOT
12379     accesses on some targets.
12380
12381     For example, the implementation of the following function 'foo':
12382
12383          static int a, b, c;
12384          int foo (void) { return a + b + c; }
12385
12386     usually calculates the addresses of all three variables, but if you
12387     compile it with '-fsection-anchors', it accesses the variables from
12388     a common anchor point instead.  The effect is similar to the
12389     following pseudocode (which isn't valid C):
12390
12391          int foo (void)
12392          {
12393            register int *xr = &x;
12394            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
12395          }
12396
12397     Not all targets support this option.
12398
12399'-fzero-call-used-regs=CHOICE'
12400     Zero call-used registers at function return to increase program
12401     security by either mitigating Return-Oriented Programming (ROP)
12402     attacks or preventing information leakage through registers.
12403
12404     The possible values of CHOICE are the same as for the
12405     'zero_call_used_regs' attribute (*note Function Attributes::).  The
12406     default is 'skip'.
12407
12408     You can control this behavior for a specific function by using the
12409     function attribute 'zero_call_used_regs' (*note Function
12410     Attributes::).
12411
12412'--param NAME=VALUE'
12413     In some places, GCC uses various constants to control the amount of
12414     optimization that is done.  For example, GCC does not inline
12415     functions that contain more than a certain number of instructions.
12416     You can control some of these constants on the command line using
12417     the '--param' option.
12418
12419     The names of specific parameters, and the meaning of the values,
12420     are tied to the internals of the compiler, and are subject to
12421     change without notice in future releases.
12422
12423     In order to get minimal, maximal and default value of a parameter,
12424     one can use '--help=param -Q' options.
12425
12426     In each case, the VALUE is an integer.  The following choices of
12427     NAME are recognized for all targets:
12428
12429     'predictable-branch-outcome'
12430          When branch is predicted to be taken with probability lower
12431          than this threshold (in percent), then it is considered well
12432          predictable.
12433
12434     'max-rtl-if-conversion-insns'
12435          RTL if-conversion tries to remove conditional branches around
12436          a block and replace them with conditionally executed
12437          instructions.  This parameter gives the maximum number of
12438          instructions in a block which should be considered for
12439          if-conversion.  The compiler will also use other heuristics to
12440          decide whether if-conversion is likely to be profitable.
12441
12442     'max-rtl-if-conversion-predictable-cost'
12443          RTL if-conversion will try to remove conditional branches
12444          around a block and replace them with conditionally executed
12445          instructions.  These parameters give the maximum permissible
12446          cost for the sequence that would be generated by if-conversion
12447          depending on whether the branch is statically determined to be
12448          predictable or not.  The units for this parameter are the same
12449          as those for the GCC internal seq_cost metric.  The compiler
12450          will try to provide a reasonable default for this parameter
12451          using the BRANCH_COST target macro.
12452
12453     'max-crossjump-edges'
12454          The maximum number of incoming edges to consider for
12455          cross-jumping.  The algorithm used by '-fcrossjumping' is
12456          O(N^2) in the number of edges incoming to each block.
12457          Increasing values mean more aggressive optimization, making
12458          the compilation time increase with probably small improvement
12459          in executable size.
12460
12461     'min-crossjump-insns'
12462          The minimum number of instructions that must be matched at the
12463          end of two blocks before cross-jumping is performed on them.
12464          This value is ignored in the case where all instructions in
12465          the block being cross-jumped from are matched.
12466
12467     'max-grow-copy-bb-insns'
12468          The maximum code size expansion factor when copying basic
12469          blocks instead of jumping.  The expansion is relative to a
12470          jump instruction.
12471
12472     'max-goto-duplication-insns'
12473          The maximum number of instructions to duplicate to a block
12474          that jumps to a computed goto.  To avoid O(N^2) behavior in a
12475          number of passes, GCC factors computed gotos early in the
12476          compilation process, and unfactors them as late as possible.
12477          Only computed jumps at the end of a basic blocks with no more
12478          than max-goto-duplication-insns are unfactored.
12479
12480     'max-delay-slot-insn-search'
12481          The maximum number of instructions to consider when looking
12482          for an instruction to fill a delay slot.  If more than this
12483          arbitrary number of instructions are searched, the time
12484          savings from filling the delay slot are minimal, so stop
12485          searching.  Increasing values mean more aggressive
12486          optimization, making the compilation time increase with
12487          probably small improvement in execution time.
12488
12489     'max-delay-slot-live-search'
12490          When trying to fill delay slots, the maximum number of
12491          instructions to consider when searching for a block with valid
12492          live register information.  Increasing this arbitrarily chosen
12493          value means more aggressive optimization, increasing the
12494          compilation time.  This parameter should be removed when the
12495          delay slot code is rewritten to maintain the control-flow
12496          graph.
12497
12498     'max-gcse-memory'
12499          The approximate maximum amount of memory in 'kB' that can be
12500          allocated in order to perform the global common subexpression
12501          elimination optimization.  If more memory than specified is
12502          required, the optimization is not done.
12503
12504     'max-gcse-insertion-ratio'
12505          If the ratio of expression insertions to deletions is larger
12506          than this value for any expression, then RTL PRE inserts or
12507          removes the expression and thus leaves partially redundant
12508          computations in the instruction stream.
12509
12510     'max-pending-list-length'
12511          The maximum number of pending dependencies scheduling allows
12512          before flushing the current state and starting over.  Large
12513          functions with few branches or calls can create excessively
12514          large lists which needlessly consume memory and resources.
12515
12516     'max-modulo-backtrack-attempts'
12517          The maximum number of backtrack attempts the scheduler should
12518          make when modulo scheduling a loop.  Larger values can
12519          exponentially increase compilation time.
12520
12521     'max-inline-functions-called-once-loop-depth'
12522          Maximal loop depth of a call considered by inline heuristics
12523          that tries to inline all functions called once.
12524
12525     'max-inline-functions-called-once-insns'
12526          Maximal estimated size of functions produced while inlining
12527          functions called once.
12528
12529     'max-inline-insns-single'
12530          Several parameters control the tree inliner used in GCC.  This
12531          number sets the maximum number of instructions (counted in
12532          GCC's internal representation) in a single function that the
12533          tree inliner considers for inlining.  This only affects
12534          functions declared inline and methods implemented in a class
12535          declaration (C++).
12536
12537     'max-inline-insns-auto'
12538          When you use '-finline-functions' (included in '-O3'), a lot
12539          of functions that would otherwise not be considered for
12540          inlining by the compiler are investigated.  To those
12541          functions, a different (more restrictive) limit compared to
12542          functions declared inline can be applied ('--param
12543          max-inline-insns-auto').
12544
12545     'max-inline-insns-small'
12546          This is bound applied to calls which are considered relevant
12547          with '-finline-small-functions'.
12548
12549     'max-inline-insns-size'
12550          This is bound applied to calls which are optimized for size.
12551          Small growth may be desirable to anticipate optimization
12552          oppurtunities exposed by inlining.
12553
12554     'uninlined-function-insns'
12555          Number of instructions accounted by inliner for function
12556          overhead such as function prologue and epilogue.
12557
12558     'uninlined-function-time'
12559          Extra time accounted by inliner for function overhead such as
12560          time needed to execute function prologue and epilogue.
12561
12562     'inline-heuristics-hint-percent'
12563          The scale (in percents) applied to 'inline-insns-single',
12564          'inline-insns-single-O2', 'inline-insns-auto' when inline
12565          heuristics hints that inlining is very profitable (will enable
12566          later optimizations).
12567
12568     'uninlined-thunk-insns'
12569     'uninlined-thunk-time'
12570          Same as '--param uninlined-function-insns' and '--param
12571          uninlined-function-time' but applied to function thunks.
12572
12573     'inline-min-speedup'
12574          When estimated performance improvement of caller + callee
12575          runtime exceeds this threshold (in percent), the function can
12576          be inlined regardless of the limit on '--param
12577          max-inline-insns-single' and '--param max-inline-insns-auto'.
12578
12579     'large-function-insns'
12580          The limit specifying really large functions.  For functions
12581          larger than this limit after inlining, inlining is constrained
12582          by '--param large-function-growth'.  This parameter is useful
12583          primarily to avoid extreme compilation time caused by
12584          non-linear algorithms used by the back end.
12585
12586     'large-function-growth'
12587          Specifies maximal growth of large function caused by inlining
12588          in percents.  For example, parameter value 100 limits large
12589          function growth to 2.0 times the original size.
12590
12591     'large-unit-insns'
12592          The limit specifying large translation unit.  Growth caused by
12593          inlining of units larger than this limit is limited by
12594          '--param inline-unit-growth'.  For small units this might be
12595          too tight.  For example, consider a unit consisting of
12596          function A that is inline and B that just calls A three times.
12597          If B is small relative to A, the growth of unit is 300\% and
12598          yet such inlining is very sane.  For very large units
12599          consisting of small inlineable functions, however, the overall
12600          unit growth limit is needed to avoid exponential explosion of
12601          code size.  Thus for smaller units, the size is increased to
12602          '--param large-unit-insns' before applying '--param
12603          inline-unit-growth'.
12604
12605     'lazy-modules'
12606          Maximum number of concurrently open C++ module files when lazy
12607          loading.
12608
12609     'inline-unit-growth'
12610          Specifies maximal overall growth of the compilation unit
12611          caused by inlining.  For example, parameter value 20 limits
12612          unit growth to 1.2 times the original size.  Cold functions
12613          (either marked cold via an attribute or by profile feedback)
12614          are not accounted into the unit size.
12615
12616     'ipa-cp-unit-growth'
12617          Specifies maximal overall growth of the compilation unit
12618          caused by interprocedural constant propagation.  For example,
12619          parameter value 10 limits unit growth to 1.1 times the
12620          original size.
12621
12622     'ipa-cp-large-unit-insns'
12623          The size of translation unit that IPA-CP pass considers large.
12624
12625     'large-stack-frame'
12626          The limit specifying large stack frames.  While inlining the
12627          algorithm is trying to not grow past this limit too much.
12628
12629     'large-stack-frame-growth'
12630          Specifies maximal growth of large stack frames caused by
12631          inlining in percents.  For example, parameter value 1000
12632          limits large stack frame growth to 11 times the original size.
12633
12634     'max-inline-insns-recursive'
12635     'max-inline-insns-recursive-auto'
12636          Specifies the maximum number of instructions an out-of-line
12637          copy of a self-recursive inline function can grow into by
12638          performing recursive inlining.
12639
12640          '--param max-inline-insns-recursive' applies to functions
12641          declared inline.  For functions not declared inline, recursive
12642          inlining happens only when '-finline-functions' (included in
12643          '-O3') is enabled; '--param max-inline-insns-recursive-auto'
12644          applies instead.
12645
12646     'max-inline-recursive-depth'
12647     'max-inline-recursive-depth-auto'
12648          Specifies the maximum recursion depth used for recursive
12649          inlining.
12650
12651          '--param max-inline-recursive-depth' applies to functions
12652          declared inline.  For functions not declared inline, recursive
12653          inlining happens only when '-finline-functions' (included in
12654          '-O3') is enabled; '--param max-inline-recursive-depth-auto'
12655          applies instead.
12656
12657     'min-inline-recursive-probability'
12658          Recursive inlining is profitable only for function having deep
12659          recursion in average and can hurt for function having little
12660          recursion depth by increasing the prologue size or complexity
12661          of function body to other optimizers.
12662
12663          When profile feedback is available (see '-fprofile-generate')
12664          the actual recursion depth can be guessed from the probability
12665          that function recurses via a given call expression.  This
12666          parameter limits inlining only to call expressions whose
12667          probability exceeds the given threshold (in percents).
12668
12669     'early-inlining-insns'
12670          Specify growth that the early inliner can make.  In effect it
12671          increases the amount of inlining for code having a large
12672          abstraction penalty.
12673
12674     'max-early-inliner-iterations'
12675          Limit of iterations of the early inliner.  This basically
12676          bounds the number of nested indirect calls the early inliner
12677          can resolve.  Deeper chains are still handled by late
12678          inlining.
12679
12680     'comdat-sharing-probability'
12681          Probability (in percent) that C++ inline function with comdat
12682          visibility are shared across multiple compilation units.
12683
12684     'modref-max-bases'
12685     'modref-max-refs'
12686     'modref-max-accesses'
12687          Specifies the maximal number of base pointers, references and
12688          accesses stored for a single function by mod/ref analysis.
12689
12690     'modref-max-tests'
12691          Specifies the maxmal number of tests alias oracle can perform
12692          to disambiguate memory locations using the mod/ref
12693          information.  This parameter ought to be bigger than '--param
12694          modref-max-bases' and '--param modref-max-refs'.
12695
12696     'modref-max-depth'
12697          Specifies the maximum depth of DFS walk used by modref escape
12698          analysis.  Setting to 0 disables the analysis completely.
12699
12700     'modref-max-escape-points'
12701          Specifies the maximum number of escape points tracked by
12702          modref per SSA-name.
12703
12704     'modref-max-adjustments'
12705          Specifies the maximum number the access range is enlarged
12706          during modref dataflow analysis.
12707
12708     'profile-func-internal-id'
12709          A parameter to control whether to use function internal id in
12710          profile database lookup.  If the value is 0, the compiler uses
12711          an id that is based on function assembler name and filename,
12712          which makes old profile data more tolerant to source changes
12713          such as function reordering etc.
12714
12715     'min-vect-loop-bound'
12716          The minimum number of iterations under which loops are not
12717          vectorized when '-ftree-vectorize' is used.  The number of
12718          iterations after vectorization needs to be greater than the
12719          value specified by this option to allow vectorization.
12720
12721     'gcse-cost-distance-ratio'
12722          Scaling factor in calculation of maximum distance an
12723          expression can be moved by GCSE optimizations.  This is
12724          currently supported only in the code hoisting pass.  The
12725          bigger the ratio, the more aggressive code hoisting is with
12726          simple expressions, i.e., the expressions that have cost less
12727          than 'gcse-unrestricted-cost'.  Specifying 0 disables hoisting
12728          of simple expressions.
12729
12730     'gcse-unrestricted-cost'
12731          Cost, roughly measured as the cost of a single typical machine
12732          instruction, at which GCSE optimizations do not constrain the
12733          distance an expression can travel.  This is currently
12734          supported only in the code hoisting pass.  The lesser the
12735          cost, the more aggressive code hoisting is.  Specifying 0
12736          allows all expressions to travel unrestricted distances.
12737
12738     'max-hoist-depth'
12739          The depth of search in the dominator tree for expressions to
12740          hoist.  This is used to avoid quadratic behavior in hoisting
12741          algorithm.  The value of 0 does not limit on the search, but
12742          may slow down compilation of huge functions.
12743
12744     'max-tail-merge-comparisons'
12745          The maximum amount of similar bbs to compare a bb with.  This
12746          is used to avoid quadratic behavior in tree tail merging.
12747
12748     'max-tail-merge-iterations'
12749          The maximum amount of iterations of the pass over the
12750          function.  This is used to limit compilation time in tree tail
12751          merging.
12752
12753     'store-merging-allow-unaligned'
12754          Allow the store merging pass to introduce unaligned stores if
12755          it is legal to do so.
12756
12757     'max-stores-to-merge'
12758          The maximum number of stores to attempt to merge into wider
12759          stores in the store merging pass.
12760
12761     'max-store-chains-to-track'
12762          The maximum number of store chains to track at the same time
12763          in the attempt to merge them into wider stores in the store
12764          merging pass.
12765
12766     'max-stores-to-track'
12767          The maximum number of stores to track at the same time in the
12768          attemt to to merge them into wider stores in the store merging
12769          pass.
12770
12771     'max-unrolled-insns'
12772          The maximum number of instructions that a loop may have to be
12773          unrolled.  If a loop is unrolled, this parameter also
12774          determines how many times the loop code is unrolled.
12775
12776     'max-average-unrolled-insns'
12777          The maximum number of instructions biased by probabilities of
12778          their execution that a loop may have to be unrolled.  If a
12779          loop is unrolled, this parameter also determines how many
12780          times the loop code is unrolled.
12781
12782     'max-unroll-times'
12783          The maximum number of unrollings of a single loop.
12784
12785     'max-peeled-insns'
12786          The maximum number of instructions that a loop may have to be
12787          peeled.  If a loop is peeled, this parameter also determines
12788          how many times the loop code is peeled.
12789
12790     'max-peel-times'
12791          The maximum number of peelings of a single loop.
12792
12793     'max-peel-branches'
12794          The maximum number of branches on the hot path through the
12795          peeled sequence.
12796
12797     'max-completely-peeled-insns'
12798          The maximum number of insns of a completely peeled loop.
12799
12800     'max-completely-peel-times'
12801          The maximum number of iterations of a loop to be suitable for
12802          complete peeling.
12803
12804     'max-completely-peel-loop-nest-depth'
12805          The maximum depth of a loop nest suitable for complete
12806          peeling.
12807
12808     'max-unswitch-insns'
12809          The maximum number of insns of an unswitched loop.
12810
12811     'max-unswitch-level'
12812          The maximum number of branches unswitched in a single loop.
12813
12814     'lim-expensive'
12815          The minimum cost of an expensive expression in the loop
12816          invariant motion.
12817
12818     'min-loop-cond-split-prob'
12819          When FDO profile information is available,
12820          'min-loop-cond-split-prob' specifies minimum threshold for
12821          probability of semi-invariant condition statement to trigger
12822          loop split.
12823
12824     'iv-consider-all-candidates-bound'
12825          Bound on number of candidates for induction variables, below
12826          which all candidates are considered for each use in induction
12827          variable optimizations.  If there are more candidates than
12828          this, only the most relevant ones are considered to avoid
12829          quadratic time complexity.
12830
12831     'iv-max-considered-uses'
12832          The induction variable optimizations give up on loops that
12833          contain more induction variable uses.
12834
12835     'iv-always-prune-cand-set-bound'
12836          If the number of candidates in the set is smaller than this
12837          value, always try to remove unnecessary ivs from the set when
12838          adding a new one.
12839
12840     'avg-loop-niter'
12841          Average number of iterations of a loop.
12842
12843     'dse-max-object-size'
12844          Maximum size (in bytes) of objects tracked bytewise by dead
12845          store elimination.  Larger values may result in larger
12846          compilation times.
12847
12848     'dse-max-alias-queries-per-store'
12849          Maximum number of queries into the alias oracle per store.
12850          Larger values result in larger compilation times and may
12851          result in more removed dead stores.
12852
12853     'scev-max-expr-size'
12854          Bound on size of expressions used in the scalar evolutions
12855          analyzer.  Large expressions slow the analyzer.
12856
12857     'scev-max-expr-complexity'
12858          Bound on the complexity of the expressions in the scalar
12859          evolutions analyzer.  Complex expressions slow the analyzer.
12860
12861     'max-tree-if-conversion-phi-args'
12862          Maximum number of arguments in a PHI supported by TREE if
12863          conversion unless the loop is marked with simd pragma.
12864
12865     'vect-max-version-for-alignment-checks'
12866          The maximum number of run-time checks that can be performed
12867          when doing loop versioning for alignment in the vectorizer.
12868
12869     'vect-max-version-for-alias-checks'
12870          The maximum number of run-time checks that can be performed
12871          when doing loop versioning for alias in the vectorizer.
12872
12873     'vect-max-peeling-for-alignment'
12874          The maximum number of loop peels to enhance access alignment
12875          for vectorizer.  Value -1 means no limit.
12876
12877     'max-iterations-to-track'
12878          The maximum number of iterations of a loop the brute-force
12879          algorithm for analysis of the number of iterations of the loop
12880          tries to evaluate.
12881
12882     'hot-bb-count-fraction'
12883          The denominator n of fraction 1/n of the maximal execution
12884          count of a basic block in the entire program that a basic
12885          block needs to at least have in order to be considered hot.
12886          The default is 10000, which means that a basic block is
12887          considered hot if its execution count is greater than 1/10000
12888          of the maximal execution count.  0 means that it is never
12889          considered hot.  Used in non-LTO mode.
12890
12891     'hot-bb-count-ws-permille'
12892          The number of most executed permilles, ranging from 0 to 1000,
12893          of the profiled execution of the entire program to which the
12894          execution count of a basic block must be part of in order to
12895          be considered hot.  The default is 990, which means that a
12896          basic block is considered hot if its execution count
12897          contributes to the upper 990 permilles, or 99.0%, of the
12898          profiled execution of the entire program.  0 means that it is
12899          never considered hot.  Used in LTO mode.
12900
12901     'hot-bb-frequency-fraction'
12902          The denominator n of fraction 1/n of the execution frequency
12903          of the entry block of a function that a basic block of this
12904          function needs to at least have in order to be considered hot.
12905          The default is 1000, which means that a basic block is
12906          considered hot in a function if it is executed more frequently
12907          than 1/1000 of the frequency of the entry block of the
12908          function.  0 means that it is never considered hot.
12909
12910     'unlikely-bb-count-fraction'
12911          The denominator n of fraction 1/n of the number of profiled
12912          runs of the entire program below which the execution count of
12913          a basic block must be in order for the basic block to be
12914          considered unlikely executed.  The default is 20, which means
12915          that a basic block is considered unlikely executed if it is
12916          executed in fewer than 1/20, or 5%, of the runs of the
12917          program.  0 means that it is always considered unlikely
12918          executed.
12919
12920     'max-predicted-iterations'
12921          The maximum number of loop iterations we predict statically.
12922          This is useful in cases where a function contains a single
12923          loop with known bound and another loop with unknown bound.
12924          The known number of iterations is predicted correctly, while
12925          the unknown number of iterations average to roughly 10.  This
12926          means that the loop without bounds appears artificially cold
12927          relative to the other one.
12928
12929     'builtin-expect-probability'
12930          Control the probability of the expression having the specified
12931          value.  This parameter takes a percentage (i.e. 0 ...  100) as
12932          input.
12933
12934     'builtin-string-cmp-inline-length'
12935          The maximum length of a constant string for a builtin string
12936          cmp call eligible for inlining.
12937
12938     'align-threshold'
12939
12940          Select fraction of the maximal frequency of executions of a
12941          basic block in a function to align the basic block.
12942
12943     'align-loop-iterations'
12944
12945          A loop expected to iterate at least the selected number of
12946          iterations is aligned.
12947
12948     'tracer-dynamic-coverage'
12949     'tracer-dynamic-coverage-feedback'
12950
12951          This value is used to limit superblock formation once the
12952          given percentage of executed instructions is covered.  This
12953          limits unnecessary code size expansion.
12954
12955          The 'tracer-dynamic-coverage-feedback' parameter is used only
12956          when profile feedback is available.  The real profiles (as
12957          opposed to statically estimated ones) are much less balanced
12958          allowing the threshold to be larger value.
12959
12960     'tracer-max-code-growth'
12961          Stop tail duplication once code growth has reached given
12962          percentage.  This is a rather artificial limit, as most of the
12963          duplicates are eliminated later in cross jumping, so it may be
12964          set to much higher values than is the desired code growth.
12965
12966     'tracer-min-branch-ratio'
12967
12968          Stop reverse growth when the reverse probability of best edge
12969          is less than this threshold (in percent).
12970
12971     'tracer-min-branch-probability'
12972     'tracer-min-branch-probability-feedback'
12973
12974          Stop forward growth if the best edge has probability lower
12975          than this threshold.
12976
12977          Similarly to 'tracer-dynamic-coverage' two parameters are
12978          provided.  'tracer-min-branch-probability-feedback' is used
12979          for compilation with profile feedback and
12980          'tracer-min-branch-probability' compilation without.  The
12981          value for compilation with profile feedback needs to be more
12982          conservative (higher) in order to make tracer effective.
12983
12984     'stack-clash-protection-guard-size'
12985          Specify the size of the operating system provided stack guard
12986          as 2 raised to NUM bytes.  Higher values may reduce the number
12987          of explicit probes, but a value larger than the operating
12988          system provided guard will leave code vulnerable to stack
12989          clash style attacks.
12990
12991     'stack-clash-protection-probe-interval'
12992          Stack clash protection involves probing stack space as it is
12993          allocated.  This param controls the maximum distance between
12994          probes into the stack as 2 raised to NUM bytes.  Higher values
12995          may reduce the number of explicit probes, but a value larger
12996          than the operating system provided guard will leave code
12997          vulnerable to stack clash style attacks.
12998
12999     'max-cse-path-length'
13000
13001          The maximum number of basic blocks on path that CSE considers.
13002
13003     'max-cse-insns'
13004          The maximum number of instructions CSE processes before
13005          flushing.
13006
13007     'ggc-min-expand'
13008
13009          GCC uses a garbage collector to manage its own memory
13010          allocation.  This parameter specifies the minimum percentage
13011          by which the garbage collector's heap should be allowed to
13012          expand between collections.  Tuning this may improve
13013          compilation speed; it has no effect on code generation.
13014
13015          The default is 30% + 70% * (RAM/1GB) with an upper bound of
13016          100% when RAM >= 1GB.  If 'getrlimit' is available, the notion
13017          of "RAM" is the smallest of actual RAM and 'RLIMIT_DATA' or
13018          'RLIMIT_AS'.  If GCC is not able to calculate RAM on a
13019          particular platform, the lower bound of 30% is used.  Setting
13020          this parameter and 'ggc-min-heapsize' to zero causes a full
13021          collection to occur at every opportunity.  This is extremely
13022          slow, but can be useful for debugging.
13023
13024     'ggc-min-heapsize'
13025
13026          Minimum size of the garbage collector's heap before it begins
13027          bothering to collect garbage.  The first collection occurs
13028          after the heap expands by 'ggc-min-expand'% beyond
13029          'ggc-min-heapsize'.  Again, tuning this may improve
13030          compilation speed, and has no effect on code generation.
13031
13032          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
13033          that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
13034          exceeded, but with a lower bound of 4096 (four megabytes) and
13035          an upper bound of 131072 (128 megabytes).  If GCC is not able
13036          to calculate RAM on a particular platform, the lower bound is
13037          used.  Setting this parameter very large effectively disables
13038          garbage collection.  Setting this parameter and
13039          'ggc-min-expand' to zero causes a full collection to occur at
13040          every opportunity.
13041
13042     'max-reload-search-insns'
13043          The maximum number of instruction reload should look backward
13044          for equivalent register.  Increasing values mean more
13045          aggressive optimization, making the compilation time increase
13046          with probably slightly better performance.
13047
13048     'max-cselib-memory-locations'
13049          The maximum number of memory locations cselib should take into
13050          account.  Increasing values mean more aggressive optimization,
13051          making the compilation time increase with probably slightly
13052          better performance.
13053
13054     'max-sched-ready-insns'
13055          The maximum number of instructions ready to be issued the
13056          scheduler should consider at any given time during the first
13057          scheduling pass.  Increasing values mean more thorough
13058          searches, making the compilation time increase with probably
13059          little benefit.
13060
13061     'max-sched-region-blocks'
13062          The maximum number of blocks in a region to be considered for
13063          interblock scheduling.
13064
13065     'max-pipeline-region-blocks'
13066          The maximum number of blocks in a region to be considered for
13067          pipelining in the selective scheduler.
13068
13069     'max-sched-region-insns'
13070          The maximum number of insns in a region to be considered for
13071          interblock scheduling.
13072
13073     'max-pipeline-region-insns'
13074          The maximum number of insns in a region to be considered for
13075          pipelining in the selective scheduler.
13076
13077     'min-spec-prob'
13078          The minimum probability (in percents) of reaching a source
13079          block for interblock speculative scheduling.
13080
13081     'max-sched-extend-regions-iters'
13082          The maximum number of iterations through CFG to extend
13083          regions.  A value of 0 disables region extensions.
13084
13085     'max-sched-insn-conflict-delay'
13086          The maximum conflict delay for an insn to be considered for
13087          speculative motion.
13088
13089     'sched-spec-prob-cutoff'
13090          The minimal probability of speculation success (in percents),
13091          so that speculative insns are scheduled.
13092
13093     'sched-state-edge-prob-cutoff'
13094          The minimum probability an edge must have for the scheduler to
13095          save its state across it.
13096
13097     'sched-mem-true-dep-cost'
13098          Minimal distance (in CPU cycles) between store and load
13099          targeting same memory locations.
13100
13101     'selsched-max-lookahead'
13102          The maximum size of the lookahead window of selective
13103          scheduling.  It is a depth of search for available
13104          instructions.
13105
13106     'selsched-max-sched-times'
13107          The maximum number of times that an instruction is scheduled
13108          during selective scheduling.  This is the limit on the number
13109          of iterations through which the instruction may be pipelined.
13110
13111     'selsched-insns-to-rename'
13112          The maximum number of best instructions in the ready list that
13113          are considered for renaming in the selective scheduler.
13114
13115     'sms-min-sc'
13116          The minimum value of stage count that swing modulo scheduler
13117          generates.
13118
13119     'max-last-value-rtl'
13120          The maximum size measured as number of RTLs that can be
13121          recorded in an expression in combiner for a pseudo register as
13122          last known value of that register.
13123
13124     'max-combine-insns'
13125          The maximum number of instructions the RTL combiner tries to
13126          combine.
13127
13128     'integer-share-limit'
13129          Small integer constants can use a shared data structure,
13130          reducing the compiler's memory usage and increasing its speed.
13131          This sets the maximum value of a shared integer constant.
13132
13133     'ssp-buffer-size'
13134          The minimum size of buffers (i.e. arrays) that receive stack
13135          smashing protection when '-fstack-protector' is used.
13136
13137     'min-size-for-stack-sharing'
13138          The minimum size of variables taking part in stack slot
13139          sharing when not optimizing.
13140
13141     'max-jump-thread-duplication-stmts'
13142          Maximum number of statements allowed in a block that needs to
13143          be duplicated when threading jumps.
13144
13145     'max-fields-for-field-sensitive'
13146          Maximum number of fields in a structure treated in a field
13147          sensitive manner during pointer analysis.
13148
13149     'prefetch-latency'
13150          Estimate on average number of instructions that are executed
13151          before prefetch finishes.  The distance prefetched ahead is
13152          proportional to this constant.  Increasing this number may
13153          also lead to less streams being prefetched (see
13154          'simultaneous-prefetches').
13155
13156     'simultaneous-prefetches'
13157          Maximum number of prefetches that can run at the same time.
13158
13159     'l1-cache-line-size'
13160          The size of cache line in L1 data cache, in bytes.
13161
13162     'l1-cache-size'
13163          The size of L1 data cache, in kilobytes.
13164
13165     'l2-cache-size'
13166          The size of L2 data cache, in kilobytes.
13167
13168     'prefetch-dynamic-strides'
13169          Whether the loop array prefetch pass should issue software
13170          prefetch hints for strides that are non-constant.  In some
13171          cases this may be beneficial, though the fact the stride is
13172          non-constant may make it hard to predict when there is clear
13173          benefit to issuing these hints.
13174
13175          Set to 1 if the prefetch hints should be issued for
13176          non-constant strides.  Set to 0 if prefetch hints should be
13177          issued only for strides that are known to be constant and
13178          below 'prefetch-minimum-stride'.
13179
13180     'prefetch-minimum-stride'
13181          Minimum constant stride, in bytes, to start using prefetch
13182          hints for.  If the stride is less than this threshold,
13183          prefetch hints will not be issued.
13184
13185          This setting is useful for processors that have hardware
13186          prefetchers, in which case there may be conflicts between the
13187          hardware prefetchers and the software prefetchers.  If the
13188          hardware prefetchers have a maximum stride they can handle, it
13189          should be used here to improve the use of software
13190          prefetchers.
13191
13192          A value of -1 means we don't have a threshold and therefore
13193          prefetch hints can be issued for any constant stride.
13194
13195          This setting is only useful for strides that are known and
13196          constant.
13197
13198     'destructive-interference-size'
13199     'constructive-interference-size'
13200          The values for the C++17 variables
13201          'std::hardware_destructive_interference_size' and
13202          'std::hardware_constructive_interference_size'.  The
13203          destructive interference size is the minimum recommended
13204          offset between two independent concurrently-accessed objects;
13205          the constructive interference size is the maximum recommended
13206          size of contiguous memory accessed together.  Typically both
13207          will be the size of an L1 cache line for the target, in bytes.
13208          For a generic target covering a range of L1 cache line sizes,
13209          typically the constructive interference size will be the small
13210          end of the range and the destructive size will be the large
13211          end.
13212
13213          The destructive interference size is intended to be used for
13214          layout, and thus has ABI impact.  The default value is not
13215          expected to be stable, and on some targets varies with
13216          '-mtune', so use of this variable in a context where ABI
13217          stability is important, such as the public interface of a
13218          library, is strongly discouraged; if it is used in that
13219          context, users can stabilize the value using this option.
13220
13221          The constructive interference size is less sensitive, as it is
13222          typically only used in a 'static_assert' to make sure that a
13223          type fits within a cache line.
13224
13225          See also '-Winterference-size'.
13226
13227     'loop-interchange-max-num-stmts'
13228          The maximum number of stmts in a loop to be interchanged.
13229
13230     'loop-interchange-stride-ratio'
13231          The minimum ratio between stride of two loops for interchange
13232          to be profitable.
13233
13234     'min-insn-to-prefetch-ratio'
13235          The minimum ratio between the number of instructions and the
13236          number of prefetches to enable prefetching in a loop.
13237
13238     'prefetch-min-insn-to-mem-ratio'
13239          The minimum ratio between the number of instructions and the
13240          number of memory references to enable prefetching in a loop.
13241
13242     'use-canonical-types'
13243          Whether the compiler should use the "canonical" type system.
13244          Should always be 1, which uses a more efficient internal
13245          mechanism for comparing types in C++ and Objective-C++.
13246          However, if bugs in the canonical type system are causing
13247          compilation failures, set this value to 0 to disable canonical
13248          types.
13249
13250     'switch-conversion-max-branch-ratio'
13251          Switch initialization conversion refuses to create arrays that
13252          are bigger than 'switch-conversion-max-branch-ratio' times the
13253          number of branches in the switch.
13254
13255     'max-partial-antic-length'
13256          Maximum length of the partial antic set computed during the
13257          tree partial redundancy elimination optimization
13258          ('-ftree-pre') when optimizing at '-O3' and above.  For some
13259          sorts of source code the enhanced partial redundancy
13260          elimination optimization can run away, consuming all of the
13261          memory available on the host machine.  This parameter sets a
13262          limit on the length of the sets that are computed, which
13263          prevents the runaway behavior.  Setting a value of 0 for this
13264          parameter allows an unlimited set length.
13265
13266     'rpo-vn-max-loop-depth'
13267          Maximum loop depth that is value-numbered optimistically.
13268          When the limit hits the innermost RPO-VN-MAX-LOOP-DEPTH loops
13269          and the outermost loop in the loop nest are value-numbered
13270          optimistically and the remaining ones not.
13271
13272     'sccvn-max-alias-queries-per-access'
13273          Maximum number of alias-oracle queries we perform when looking
13274          for redundancies for loads and stores.  If this limit is hit
13275          the search is aborted and the load or store is not considered
13276          redundant.  The number of queries is algorithmically limited
13277          to the number of stores on all paths from the load to the
13278          function entry.
13279
13280     'ira-max-loops-num'
13281          IRA uses regional register allocation by default.  If a
13282          function contains more loops than the number given by this
13283          parameter, only at most the given number of the most
13284          frequently-executed loops form regions for regional register
13285          allocation.
13286
13287     'ira-max-conflict-table-size'
13288          Although IRA uses a sophisticated algorithm to compress the
13289          conflict table, the table can still require excessive amounts
13290          of memory for huge functions.  If the conflict table for a
13291          function could be more than the size in MB given by this
13292          parameter, the register allocator instead uses a faster,
13293          simpler, and lower-quality algorithm that does not require
13294          building a pseudo-register conflict table.
13295
13296     'ira-loop-reserved-regs'
13297          IRA can be used to evaluate more accurate register pressure in
13298          loops for decisions to move loop invariants (see '-O3').  The
13299          number of available registers reserved for some other purposes
13300          is given by this parameter.  Default of the parameter is the
13301          best found from numerous experiments.
13302
13303     'ira-consider-dup-in-all-alts'
13304          Make IRA to consider matching constraint (duplicated operand
13305          number) heavily in all available alternatives for preferred
13306          register class.  If it is set as zero, it means IRA only
13307          respects the matching constraint when it's in the only
13308          available alternative with an appropriate register class.
13309          Otherwise, it means IRA will check all available alternatives
13310          for preferred register class even if it has found some choice
13311          with an appropriate register class and respect the found
13312          qualified matching constraint.
13313
13314     'lra-inheritance-ebb-probability-cutoff'
13315          LRA tries to reuse values reloaded in registers in subsequent
13316          insns.  This optimization is called inheritance.  EBB is used
13317          as a region to do this optimization.  The parameter defines a
13318          minimal fall-through edge probability in percentage used to
13319          add BB to inheritance EBB in LRA. The default value was chosen
13320          from numerous runs of SPEC2000 on x86-64.
13321
13322     'loop-invariant-max-bbs-in-loop'
13323          Loop invariant motion can be very expensive, both in
13324          compilation time and in amount of needed compile-time memory,
13325          with very large loops.  Loops with more basic blocks than this
13326          parameter won't have loop invariant motion optimization
13327          performed on them.
13328
13329     'loop-max-datarefs-for-datadeps'
13330          Building data dependencies is expensive for very large loops.
13331          This parameter limits the number of data references in loops
13332          that are considered for data dependence analysis.  These large
13333          loops are no handled by the optimizations using loop data
13334          dependencies.
13335
13336     'max-vartrack-size'
13337          Sets a maximum number of hash table slots to use during
13338          variable tracking dataflow analysis of any function.  If this
13339          limit is exceeded with variable tracking at assignments
13340          enabled, analysis for that function is retried without it,
13341          after removing all debug insns from the function.  If the
13342          limit is exceeded even without debug insns, var tracking
13343          analysis is completely disabled for the function.  Setting the
13344          parameter to zero makes it unlimited.
13345
13346     'max-vartrack-expr-depth'
13347          Sets a maximum number of recursion levels when attempting to
13348          map variable names or debug temporaries to value expressions.
13349          This trades compilation time for more complete debug
13350          information.  If this is set too low, value expressions that
13351          are available and could be represented in debug information
13352          may end up not being used; setting this higher may enable the
13353          compiler to find more complex debug expressions, but compile
13354          time and memory use may grow.
13355
13356     'max-debug-marker-count'
13357          Sets a threshold on the number of debug markers (e.g. begin
13358          stmt markers) to avoid complexity explosion at inlining or
13359          expanding to RTL. If a function has more such gimple stmts
13360          than the set limit, such stmts will be dropped from the
13361          inlined copy of a function, and from its RTL expansion.
13362
13363     'min-nondebug-insn-uid'
13364          Use uids starting at this parameter for nondebug insns.  The
13365          range below the parameter is reserved exclusively for debug
13366          insns created by '-fvar-tracking-assignments', but debug insns
13367          may get (non-overlapping) uids above it if the reserved range
13368          is exhausted.
13369
13370     'ipa-sra-ptr-growth-factor'
13371          IPA-SRA replaces a pointer to an aggregate with one or more
13372          new parameters only when their cumulative size is less or
13373          equal to 'ipa-sra-ptr-growth-factor' times the size of the
13374          original pointer parameter.
13375
13376     'ipa-sra-max-replacements'
13377          Maximum pieces of an aggregate that IPA-SRA tracks.  As a
13378          consequence, it is also the maximum number of replacements of
13379          a formal parameter.
13380
13381     'sra-max-scalarization-size-Ospeed'
13382     'sra-max-scalarization-size-Osize'
13383          The two Scalar Reduction of Aggregates passes (SRA and
13384          IPA-SRA) aim to replace scalar parts of aggregates with uses
13385          of independent scalar variables.  These parameters control the
13386          maximum size, in storage units, of aggregate which is
13387          considered for replacement when compiling for speed
13388          ('sra-max-scalarization-size-Ospeed') or size
13389          ('sra-max-scalarization-size-Osize') respectively.
13390
13391     'sra-max-propagations'
13392          The maximum number of artificial accesses that Scalar
13393          Replacement of Aggregates (SRA) will track, per one local
13394          variable, in order to facilitate copy propagation.
13395
13396     'tm-max-aggregate-size'
13397          When making copies of thread-local variables in a transaction,
13398          this parameter specifies the size in bytes after which
13399          variables are saved with the logging functions as opposed to
13400          save/restore code sequence pairs.  This option only applies
13401          when using '-fgnu-tm'.
13402
13403     'graphite-max-nb-scop-params'
13404          To avoid exponential effects in the Graphite loop transforms,
13405          the number of parameters in a Static Control Part (SCoP) is
13406          bounded.  A value of zero can be used to lift the bound.  A
13407          variable whose value is unknown at compilation time and
13408          defined outside a SCoP is a parameter of the SCoP.
13409
13410     'loop-block-tile-size'
13411          Loop blocking or strip mining transforms, enabled with
13412          '-floop-block' or '-floop-strip-mine', strip mine each loop in
13413          the loop nest by a given number of iterations.  The strip
13414          length can be changed using the 'loop-block-tile-size'
13415          parameter.
13416
13417     'ipa-jump-function-lookups'
13418          Specifies number of statements visited during jump function
13419          offset discovery.
13420
13421     'ipa-cp-value-list-size'
13422          IPA-CP attempts to track all possible values and types passed
13423          to a function's parameter in order to propagate them and
13424          perform devirtualization.  'ipa-cp-value-list-size' is the
13425          maximum number of values and types it stores per one formal
13426          parameter of a function.
13427
13428     'ipa-cp-eval-threshold'
13429          IPA-CP calculates its own score of cloning profitability
13430          heuristics and performs those cloning opportunities with
13431          scores that exceed 'ipa-cp-eval-threshold'.
13432
13433     'ipa-cp-max-recursive-depth'
13434          Maximum depth of recursive cloning for self-recursive
13435          function.
13436
13437     'ipa-cp-min-recursive-probability'
13438          Recursive cloning only when the probability of call being
13439          executed exceeds the parameter.
13440
13441     'ipa-cp-profile-count-base'
13442          When using '-fprofile-use' option, IPA-CP will consider the
13443          measured execution count of a call graph edge at this
13444          percentage position in their histogram as the basis for its
13445          heuristics calculation.
13446
13447     'ipa-cp-recursive-freq-factor'
13448          The number of times interprocedural copy propagation expects
13449          recursive functions to call themselves.
13450
13451     'ipa-cp-recursion-penalty'
13452          Percentage penalty the recursive functions will receive when
13453          they are evaluated for cloning.
13454
13455     'ipa-cp-single-call-penalty'
13456          Percentage penalty functions containing a single call to
13457          another function will receive when they are evaluated for
13458          cloning.
13459
13460     'ipa-max-agg-items'
13461          IPA-CP is also capable to propagate a number of scalar values
13462          passed in an aggregate.  'ipa-max-agg-items' controls the
13463          maximum number of such values per one parameter.
13464
13465     'ipa-cp-loop-hint-bonus'
13466          When IPA-CP determines that a cloning candidate would make the
13467          number of iterations of a loop known, it adds a bonus of
13468          'ipa-cp-loop-hint-bonus' to the profitability score of the
13469          candidate.
13470
13471     'ipa-max-loop-predicates'
13472          The maximum number of different predicates IPA will use to
13473          describe when loops in a function have known properties.
13474
13475     'ipa-max-aa-steps'
13476          During its analysis of function bodies, IPA-CP employs alias
13477          analysis in order to track values pointed to by function
13478          parameters.  In order not spend too much time analyzing huge
13479          functions, it gives up and consider all memory clobbered after
13480          examining 'ipa-max-aa-steps' statements modifying memory.
13481
13482     'ipa-max-switch-predicate-bounds'
13483          Maximal number of boundary endpoints of case ranges of switch
13484          statement.  For switch exceeding this limit, IPA-CP will not
13485          construct cloning cost predicate, which is used to estimate
13486          cloning benefit, for default case of the switch statement.
13487
13488     'ipa-max-param-expr-ops'
13489          IPA-CP will analyze conditional statement that references some
13490          function parameter to estimate benefit for cloning upon
13491          certain constant value.  But if number of operations in a
13492          parameter expression exceeds 'ipa-max-param-expr-ops', the
13493          expression is treated as complicated one, and is not handled
13494          by IPA analysis.
13495
13496     'lto-partitions'
13497          Specify desired number of partitions produced during WHOPR
13498          compilation.  The number of partitions should exceed the
13499          number of CPUs used for compilation.
13500
13501     'lto-min-partition'
13502          Size of minimal partition for WHOPR (in estimated
13503          instructions).  This prevents expenses of splitting very small
13504          programs into too many partitions.
13505
13506     'lto-max-partition'
13507          Size of max partition for WHOPR (in estimated instructions).
13508          to provide an upper bound for individual size of partition.
13509          Meant to be used only with balanced partitioning.
13510
13511     'lto-max-streaming-parallelism'
13512          Maximal number of parallel processes used for LTO streaming.
13513
13514     'cxx-max-namespaces-for-diagnostic-help'
13515          The maximum number of namespaces to consult for suggestions
13516          when C++ name lookup fails for an identifier.
13517
13518     'sink-frequency-threshold'
13519          The maximum relative execution frequency (in percents) of the
13520          target block relative to a statement's original block to allow
13521          statement sinking of a statement.  Larger numbers result in
13522          more aggressive statement sinking.  A small positive
13523          adjustment is applied for statements with memory operands as
13524          those are even more profitable so sink.
13525
13526     'max-stores-to-sink'
13527          The maximum number of conditional store pairs that can be
13528          sunk.  Set to 0 if either vectorization ('-ftree-vectorize')
13529          or if-conversion ('-ftree-loop-if-convert') is disabled.
13530
13531     'case-values-threshold'
13532          The smallest number of different values for which it is best
13533          to use a jump-table instead of a tree of conditional branches.
13534          If the value is 0, use the default for the machine.
13535
13536     'jump-table-max-growth-ratio-for-size'
13537          The maximum code size growth ratio when expanding into a jump
13538          table (in percent).  The parameter is used when optimizing for
13539          size.
13540
13541     'jump-table-max-growth-ratio-for-speed'
13542          The maximum code size growth ratio when expanding into a jump
13543          table (in percent).  The parameter is used when optimizing for
13544          speed.
13545
13546     'tree-reassoc-width'
13547          Set the maximum number of instructions executed in parallel in
13548          reassociated tree.  This parameter overrides target dependent
13549          heuristics used by default if has non zero value.
13550
13551     'sched-pressure-algorithm'
13552          Choose between the two available implementations of
13553          '-fsched-pressure'.  Algorithm 1 is the original
13554          implementation and is the more likely to prevent instructions
13555          from being reordered.  Algorithm 2 was designed to be a
13556          compromise between the relatively conservative approach taken
13557          by algorithm 1 and the rather aggressive approach taken by the
13558          default scheduler.  It relies more heavily on having a regular
13559          register file and accurate register pressure classes.  See
13560          'haifa-sched.cc' in the GCC sources for more details.
13561
13562          The default choice depends on the target.
13563
13564     'max-slsr-cand-scan'
13565          Set the maximum number of existing candidates that are
13566          considered when seeking a basis for a new straight-line
13567          strength reduction candidate.
13568
13569     'asan-globals'
13570          Enable buffer overflow detection for global objects.  This
13571          kind of protection is enabled by default if you are using
13572          '-fsanitize=address' option.  To disable global objects
13573          protection use '--param asan-globals=0'.
13574
13575     'asan-stack'
13576          Enable buffer overflow detection for stack objects.  This kind
13577          of protection is enabled by default when using
13578          '-fsanitize=address'.  To disable stack protection use
13579          '--param asan-stack=0' option.
13580
13581     'asan-instrument-reads'
13582          Enable buffer overflow detection for memory reads.  This kind
13583          of protection is enabled by default when using
13584          '-fsanitize=address'.  To disable memory reads protection use
13585          '--param asan-instrument-reads=0'.
13586
13587     'asan-instrument-writes'
13588          Enable buffer overflow detection for memory writes.  This kind
13589          of protection is enabled by default when using
13590          '-fsanitize=address'.  To disable memory writes protection use
13591          '--param asan-instrument-writes=0' option.
13592
13593     'asan-memintrin'
13594          Enable detection for built-in functions.  This kind of
13595          protection is enabled by default when using
13596          '-fsanitize=address'.  To disable built-in functions
13597          protection use '--param asan-memintrin=0'.
13598
13599     'asan-use-after-return'
13600          Enable detection of use-after-return.  This kind of protection
13601          is enabled by default when using the '-fsanitize=address'
13602          option.  To disable it use '--param asan-use-after-return=0'.
13603
13604          Note: By default the check is disabled at run time.  To enable
13605          it, add 'detect_stack_use_after_return=1' to the environment
13606          variable 'ASAN_OPTIONS'.
13607
13608     'asan-instrumentation-with-call-threshold'
13609          If number of memory accesses in function being instrumented is
13610          greater or equal to this number, use callbacks instead of
13611          inline checks.  E.g.  to disable inline code use '--param
13612          asan-instrumentation-with-call-threshold=0'.
13613
13614     'hwasan-instrument-stack'
13615          Enable hwasan instrumentation of statically sized
13616          stack-allocated variables.  This kind of instrumentation is
13617          enabled by default when using '-fsanitize=hwaddress' and
13618          disabled by default when using '-fsanitize=kernel-hwaddress'.
13619          To disable stack instrumentation use '--param
13620          hwasan-instrument-stack=0', and to enable it use '--param
13621          hwasan-instrument-stack=1'.
13622
13623     'hwasan-random-frame-tag'
13624          When using stack instrumentation, decide tags for stack
13625          variables using a deterministic sequence beginning at a random
13626          tag for each frame.  With this parameter unset tags are chosen
13627          using the same sequence but beginning from 1.  This is enabled
13628          by default for '-fsanitize=hwaddress' and unavailable for
13629          '-fsanitize=kernel-hwaddress'.  To disable it use '--param
13630          hwasan-random-frame-tag=0'.
13631
13632     'hwasan-instrument-allocas'
13633          Enable hwasan instrumentation of dynamically sized
13634          stack-allocated variables.  This kind of instrumentation is
13635          enabled by default when using '-fsanitize=hwaddress' and
13636          disabled by default when using '-fsanitize=kernel-hwaddress'.
13637          To disable instrumentation of such variables use '--param
13638          hwasan-instrument-allocas=0', and to enable it use '--param
13639          hwasan-instrument-allocas=1'.
13640
13641     'hwasan-instrument-reads'
13642          Enable hwasan checks on memory reads.  Instrumentation of
13643          reads is enabled by default for both '-fsanitize=hwaddress'
13644          and '-fsanitize=kernel-hwaddress'.  To disable checking memory
13645          reads use '--param hwasan-instrument-reads=0'.
13646
13647     'hwasan-instrument-writes'
13648          Enable hwasan checks on memory writes.  Instrumentation of
13649          writes is enabled by default for both '-fsanitize=hwaddress'
13650          and '-fsanitize=kernel-hwaddress'.  To disable checking memory
13651          writes use '--param hwasan-instrument-writes=0'.
13652
13653     'hwasan-instrument-mem-intrinsics'
13654          Enable hwasan instrumentation of builtin functions.
13655          Instrumentation of these builtin functions is enabled by
13656          default for both '-fsanitize=hwaddress' and
13657          '-fsanitize=kernel-hwaddress'.  To disable instrumentation of
13658          builtin functions use '--param
13659          hwasan-instrument-mem-intrinsics=0'.
13660
13661     'use-after-scope-direct-emission-threshold'
13662          If the size of a local variable in bytes is smaller or equal
13663          to this number, directly poison (or unpoison) shadow memory
13664          instead of using run-time callbacks.
13665
13666     'tsan-distinguish-volatile'
13667          Emit special instrumentation for accesses to volatiles.
13668
13669     'tsan-instrument-func-entry-exit'
13670          Emit instrumentation calls to __tsan_func_entry() and
13671          __tsan_func_exit().
13672
13673     'max-fsm-thread-path-insns'
13674          Maximum number of instructions to copy when duplicating blocks
13675          on a finite state automaton jump thread path.
13676
13677     'max-fsm-thread-length'
13678          Maximum number of basic blocks on a jump thread path.
13679
13680     'threader-debug'
13681          threader-debug=[none|all] Enables verbose dumping of the
13682          threader solver.
13683
13684     'parloops-chunk-size'
13685          Chunk size of omp schedule for loops parallelized by parloops.
13686
13687     'parloops-schedule'
13688          Schedule type of omp schedule for loops parallelized by
13689          parloops (static, dynamic, guided, auto, runtime).
13690
13691     'parloops-min-per-thread'
13692          The minimum number of iterations per thread of an innermost
13693          parallelized loop for which the parallelized variant is
13694          preferred over the single threaded one.  Note that for a
13695          parallelized loop nest the minimum number of iterations of the
13696          outermost loop per thread is two.
13697
13698     'max-ssa-name-query-depth'
13699          Maximum depth of recursion when querying properties of SSA
13700          names in things like fold routines.  One level of recursion
13701          corresponds to following a use-def chain.
13702
13703     'max-speculative-devirt-maydefs'
13704          The maximum number of may-defs we analyze when looking for a
13705          must-def specifying the dynamic type of an object that invokes
13706          a virtual call we may be able to devirtualize speculatively.
13707
13708     'max-vrp-switch-assertions'
13709          The maximum number of assertions to add along the default edge
13710          of a switch statement during VRP.
13711
13712     'evrp-sparse-threshold'
13713          Maximum number of basic blocks before EVRP uses a sparse
13714          cache.
13715
13716     'evrp-mode'
13717          Specifies the mode Early VRP should operate in.
13718
13719     'vrp1-mode'
13720          Specifies the mode VRP pass 1 should operate in.
13721
13722     'vrp2-mode'
13723          Specifies the mode VRP pass 2 should operate in.
13724
13725     'ranger-debug'
13726          Specifies the type of debug output to be issued for ranges.
13727
13728     'evrp-switch-limit'
13729          Specifies the maximum number of switch cases before EVRP
13730          ignores a switch.
13731
13732     'unroll-jam-min-percent'
13733          The minimum percentage of memory references that must be
13734          optimized away for the unroll-and-jam transformation to be
13735          considered profitable.
13736
13737     'unroll-jam-max-unroll'
13738          The maximum number of times the outer loop should be unrolled
13739          by the unroll-and-jam transformation.
13740
13741     'max-rtl-if-conversion-unpredictable-cost'
13742          Maximum permissible cost for the sequence that would be
13743          generated by the RTL if-conversion pass for a branch that is
13744          considered unpredictable.
13745
13746     'max-variable-expansions-in-unroller'
13747          If '-fvariable-expansion-in-unroller' is used, the maximum
13748          number of times that an individual variable will be expanded
13749          during loop unrolling.
13750
13751     'partial-inlining-entry-probability'
13752          Maximum probability of the entry BB of split region (in
13753          percent relative to entry BB of the function) to make partial
13754          inlining happen.
13755
13756     'max-tracked-strlens'
13757          Maximum number of strings for which strlen optimization pass
13758          will track string lengths.
13759
13760     'gcse-after-reload-partial-fraction'
13761          The threshold ratio for performing partial redundancy
13762          elimination after reload.
13763
13764     'gcse-after-reload-critical-fraction'
13765          The threshold ratio of critical edges execution count that
13766          permit performing redundancy elimination after reload.
13767
13768     'max-loop-header-insns'
13769          The maximum number of insns in loop header duplicated by the
13770          copy loop headers pass.
13771
13772     'vect-epilogues-nomask'
13773          Enable loop epilogue vectorization using smaller vector size.
13774
13775     'vect-partial-vector-usage'
13776          Controls when the loop vectorizer considers using partial
13777          vector loads and stores as an alternative to falling back to
13778          scalar code.  0 stops the vectorizer from ever using partial
13779          vector loads and stores.  1 allows partial vector loads and
13780          stores if vectorization removes the need for the code to
13781          iterate.  2 allows partial vector loads and stores in all
13782          loops.  The parameter only has an effect on targets that
13783          support partial vector loads and stores.
13784
13785     'vect-inner-loop-cost-factor'
13786          The maximum factor which the loop vectorizer applies to the
13787          cost of statements in an inner loop relative to the loop being
13788          vectorized.  The factor applied is the maximum of the
13789          estimated number of iterations of the inner loop and this
13790          parameter.  The default value of this parameter is 50.
13791
13792     'vect-induction-float'
13793          Enable loop vectorization of floating point inductions.
13794
13795     'avoid-fma-max-bits'
13796          Maximum number of bits for which we avoid creating FMAs.
13797
13798     'sms-loop-average-count-threshold'
13799          A threshold on the average loop count considered by the swing
13800          modulo scheduler.
13801
13802     'sms-dfa-history'
13803          The number of cycles the swing modulo scheduler considers when
13804          checking conflicts using DFA.
13805
13806     'graphite-allow-codegen-errors'
13807          Whether codegen errors should be ICEs when '-fchecking'.
13808
13809     'sms-max-ii-factor'
13810          A factor for tuning the upper bound that swing modulo
13811          scheduler uses for scheduling a loop.
13812
13813     'lra-max-considered-reload-pseudos'
13814          The max number of reload pseudos which are considered during
13815          spilling a non-reload pseudo.
13816
13817     'max-pow-sqrt-depth'
13818          Maximum depth of sqrt chains to use when synthesizing
13819          exponentiation by a real constant.
13820
13821     'max-dse-active-local-stores'
13822          Maximum number of active local stores in RTL dead store
13823          elimination.
13824
13825     'asan-instrument-allocas'
13826          Enable asan allocas/VLAs protection.
13827
13828     'max-iterations-computation-cost'
13829          Bound on the cost of an expression to compute the number of
13830          iterations.
13831
13832     'max-isl-operations'
13833          Maximum number of isl operations, 0 means unlimited.
13834
13835     'graphite-max-arrays-per-scop'
13836          Maximum number of arrays per scop.
13837
13838     'max-vartrack-reverse-op-size'
13839          Max.  size of loc list for which reverse ops should be added.
13840
13841     'fsm-scale-path-stmts'
13842          Scale factor to apply to the number of statements in a
13843          threading path when comparing to the number of (scaled)
13844          blocks.
13845
13846     'uninit-control-dep-attempts'
13847          Maximum number of nested calls to search for control
13848          dependencies during uninitialized variable analysis.
13849
13850     'fsm-scale-path-blocks'
13851          Scale factor to apply to the number of blocks in a threading
13852          path when comparing to the number of (scaled) statements.
13853
13854     'sched-autopref-queue-depth'
13855          Hardware autoprefetcher scheduler model control flag.  Number
13856          of lookahead cycles the model looks into; at ' ' only enable
13857          instruction sorting heuristic.
13858
13859     'loop-versioning-max-inner-insns'
13860          The maximum number of instructions that an inner loop can have
13861          before the loop versioning pass considers it too big to copy.
13862
13863     'loop-versioning-max-outer-insns'
13864          The maximum number of instructions that an outer loop can have
13865          before the loop versioning pass considers it too big to copy,
13866          discounting any instructions in inner loops that directly
13867          benefit from versioning.
13868
13869     'ssa-name-def-chain-limit'
13870          The maximum number of SSA_NAME assignments to follow in
13871          determining a property of a variable such as its value.  This
13872          limits the number of iterations or recursive calls GCC
13873          performs when optimizing certain statements or when
13874          determining their validity prior to issuing diagnostics.
13875
13876     'store-merging-max-size'
13877          Maximum size of a single store merging region in bytes.
13878
13879     'hash-table-verification-limit'
13880          The number of elements for which hash table verification is
13881          done for each searched element.
13882
13883     'max-find-base-term-values'
13884          Maximum number of VALUEs handled during a single
13885          find_base_term call.
13886
13887     'analyzer-max-enodes-per-program-point'
13888          The maximum number of exploded nodes per program point within
13889          the analyzer, before terminating analysis of that point.
13890
13891     'analyzer-max-constraints'
13892          The maximum number of constraints per state.
13893
13894     'analyzer-min-snodes-for-call-summary'
13895          The minimum number of supernodes within a function for the
13896          analyzer to consider summarizing its effects at call sites.
13897
13898     'analyzer-max-enodes-for-full-dump'
13899          The maximum depth of exploded nodes that should appear in a
13900          dot dump before switching to a less verbose format.
13901
13902     'analyzer-max-recursion-depth'
13903          The maximum number of times a callsite can appear in a call
13904          stack within the analyzer, before terminating analysis of a
13905          call that would recurse deeper.
13906
13907     'analyzer-max-svalue-depth'
13908          The maximum depth of a symbolic value, before approximating
13909          the value as unknown.
13910
13911     'analyzer-max-infeasible-edges'
13912          The maximum number of infeasible edges to reject before
13913          declaring a diagnostic as infeasible.
13914
13915     'gimple-fe-computed-hot-bb-threshold'
13916          The number of executions of a basic block which is considered
13917          hot.  The parameter is used only in GIMPLE FE.
13918
13919     'analyzer-bb-explosion-factor'
13920          The maximum number of 'after supernode' exploded nodes within
13921          the analyzer per supernode, before terminating analysis.
13922
13923     'ranger-logical-depth'
13924          Maximum depth of logical expression evaluation ranger will
13925          look through when evaluating outgoing edge ranges.
13926
13927     'relation-block-limit'
13928          Maximum number of relations the oracle will register in a
13929          basic block.
13930
13931     'min-pagesize'
13932          Minimum page size for warning purposes.
13933
13934     'openacc-kernels'
13935          Specify mode of OpenACC 'kernels' constructs handling.  With
13936          '--param=openacc-kernels=decompose', OpenACC 'kernels'
13937          constructs are decomposed into parts, a sequence of compute
13938          constructs, each then handled individually.  This is work in
13939          progress.  With '--param=openacc-kernels=parloops', OpenACC
13940          'kernels' constructs are handled by the 'parloops' pass, en
13941          bloc.  This is the current default.
13942
13943     'openacc-privatization'
13944          Specify mode of OpenACC privatization diagnostics for
13945          '-fopt-info-omp-note' and applicable '-fdump-tree-*-details'.
13946          With '--param=openacc-privatization=quiet', don't diagnose.
13947          This is the current default.  With
13948          '--param=openacc-privatization=noisy', do diagnose.
13949
13950     The following choices of NAME are available on AArch64 targets:
13951
13952     'aarch64-sve-compare-costs'
13953          When vectorizing for SVE, consider using "unpacked" vectors
13954          for smaller elements and use the cost model to pick the
13955          cheapest approach.  Also use the cost model to choose between
13956          SVE and Advanced SIMD vectorization.
13957
13958          Using unpacked vectors includes storing smaller elements in
13959          larger containers and accessing elements with extending loads
13960          and truncating stores.
13961
13962     'aarch64-float-recp-precision'
13963          The number of Newton iterations for calculating the reciprocal
13964          for float type.  The precision of division is proportional to
13965          this param when division approximation is enabled.  The
13966          default value is 1.
13967
13968     'aarch64-double-recp-precision'
13969          The number of Newton iterations for calculating the reciprocal
13970          for double type.  The precision of division is propotional to
13971          this param when division approximation is enabled.  The
13972          default value is 2.
13973
13974     'aarch64-autovec-preference'
13975          Force an ISA selection strategy for auto-vectorization.
13976          Accepts values from 0 to 4, inclusive.
13977          '0'
13978               Use the default heuristics.
13979          '1'
13980               Use only Advanced SIMD for auto-vectorization.
13981          '2'
13982               Use only SVE for auto-vectorization.
13983          '3'
13984               Use both Advanced SIMD and SVE. Prefer Advanced SIMD when
13985               the costs are deemed equal.
13986          '4'
13987               Use both Advanced SIMD and SVE. Prefer SVE when the costs
13988               are deemed equal.
13989          The default value is 0.
13990
13991     'aarch64-loop-vect-issue-rate-niters'
13992          The tuning for some AArch64 CPUs tries to take both latencies
13993          and issue rates into account when deciding whether a loop
13994          should be vectorized using SVE, vectorized using Advanced
13995          SIMD, or not vectorized at all.  If this parameter is set to
13996          N, GCC will not use this heuristic for loops that are known to
13997          execute in fewer than N Advanced SIMD iterations.
13998
13999     'aarch64-vect-unroll-limit'
14000          The vectorizer will use available tuning information to
14001          determine whether it would be beneficial to unroll the main
14002          vectorized loop and by how much.  This parameter set's the
14003          upper bound of how much the vectorizer will unroll the main
14004          loop.  The default value is four.
14005
14006     The following choices of NAME are available on i386 and x86_64
14007     targets:
14008
14009     'x86-stlf-window-ninsns'
14010          Instructions number above which STFL stall penalty can be
14011          compensated.
14012
14013
14014File: gcc.info,  Node: Instrumentation Options,  Next: Preprocessor Options,  Prev: Optimize Options,  Up: Invoking GCC
14015
140163.12 Program Instrumentation Options
14017====================================
14018
14019GCC supports a number of command-line options that control adding
14020run-time instrumentation to the code it normally generates.  For
14021example, one purpose of instrumentation is collect profiling statistics
14022for use in finding program hot spots, code coverage analysis, or
14023profile-guided optimizations.  Another class of program instrumentation
14024is adding run-time checking to detect programming errors like invalid
14025pointer dereferences or out-of-bounds array accesses, as well as
14026deliberately hostile attacks such as stack smashing or C++ vtable
14027hijacking.  There is also a general hook which can be used to implement
14028other forms of tracing or function-level instrumentation for debug or
14029program analysis purposes.
14030
14031'-p'
14032'-pg'
14033     Generate extra code to write profile information suitable for the
14034     analysis program 'prof' (for '-p') or 'gprof' (for '-pg').  You
14035     must use this option when compiling the source files you want data
14036     about, and you must also use it when linking.
14037
14038     You can use the function attribute 'no_instrument_function' to
14039     suppress profiling of individual functions when compiling with
14040     these options.  *Note Common Function Attributes::.
14041
14042'-fprofile-arcs'
14043     Add code so that program flow "arcs" are instrumented.  During
14044     execution the program records how many times each branch and call
14045     is executed and how many times it is taken or returns.  On targets
14046     that support constructors with priority support, profiling properly
14047     handles constructors, destructors and C++ constructors (and
14048     destructors) of classes which are used as a type of a global
14049     variable.
14050
14051     When the compiled program exits it saves this data to a file called
14052     'AUXNAME.gcda' for each source file.  The data may be used for
14053     profile-directed optimizations ('-fbranch-probabilities'), or for
14054     test coverage analysis ('-ftest-coverage').  Each object file's
14055     AUXNAME is generated from the name of the output file, if
14056     explicitly specified and it is not the final executable, otherwise
14057     it is the basename of the source file.  In both cases any suffix is
14058     removed (e.g. 'foo.gcda' for input file 'dir/foo.c', or
14059     'dir/foo.gcda' for output file specified as '-o dir/foo.o').
14060
14061     Note that if a command line directly links source files, the
14062     corresponding .GCDA files will be prefixed with the unsuffixed name
14063     of the output file.  E.g.  'gcc a.c b.c -o binary' would generate
14064     'binary-a.gcda' and 'binary-b.gcda' files.
14065
14066     *Note Cross-profiling::.
14067
14068'--coverage'
14069
14070     This option is used to compile and link code instrumented for
14071     coverage analysis.  The option is a synonym for '-fprofile-arcs'
14072     '-ftest-coverage' (when compiling) and '-lgcov' (when linking).
14073     See the documentation for those options for more details.
14074
14075        * Compile the source files with '-fprofile-arcs' plus
14076          optimization and code generation options.  For test coverage
14077          analysis, use the additional '-ftest-coverage' option.  You do
14078          not need to profile every source file in a program.
14079
14080        * Compile the source files additionally with
14081          '-fprofile-abs-path' to create absolute path names in the
14082          '.gcno' files.  This allows 'gcov' to find the correct sources
14083          in projects where compilations occur with different working
14084          directories.
14085
14086        * Link your object files with '-lgcov' or '-fprofile-arcs' (the
14087          latter implies the former).
14088
14089        * Run the program on a representative workload to generate the
14090          arc profile information.  This may be repeated any number of
14091          times.  You can run concurrent instances of your program, and
14092          provided that the file system supports locking, the data files
14093          will be correctly updated.  Unless a strict ISO C dialect
14094          option is in effect, 'fork' calls are detected and correctly
14095          handled without double counting.
14096
14097          Moreover, an object file can be recompiled multiple times and
14098          the corresponding '.gcda' file merges as long as the source
14099          file and the compiler options are unchanged.
14100
14101        * For profile-directed optimizations, compile the source files
14102          again with the same optimization and code generation options
14103          plus '-fbranch-probabilities' (*note Options that Control
14104          Optimization: Optimize Options.).
14105
14106        * For test coverage analysis, use 'gcov' to produce human
14107          readable information from the '.gcno' and '.gcda' files.
14108          Refer to the 'gcov' documentation for further information.
14109
14110     With '-fprofile-arcs', for each function of your program GCC
14111     creates a program flow graph, then finds a spanning tree for the
14112     graph.  Only arcs that are not on the spanning tree have to be
14113     instrumented: the compiler adds code to count the number of times
14114     that these arcs are executed.  When an arc is the only exit or only
14115     entrance to a block, the instrumentation code can be added to the
14116     block; otherwise, a new basic block must be created to hold the
14117     instrumentation code.
14118
14119'-ftest-coverage'
14120     Produce a notes file that the 'gcov' code-coverage utility (*note
14121     'gcov'--a Test Coverage Program: Gcov.) can use to show program
14122     coverage.  Each source file's note file is called 'AUXNAME.gcno'.
14123     Refer to the '-fprofile-arcs' option above for a description of
14124     AUXNAME and instructions on how to generate test coverage data.
14125     Coverage data matches the source files more closely if you do not
14126     optimize.
14127
14128'-fprofile-abs-path'
14129     Automatically convert relative source file names to absolute path
14130     names in the '.gcno' files.  This allows 'gcov' to find the correct
14131     sources in projects where compilations occur with different working
14132     directories.
14133
14134'-fprofile-dir=PATH'
14135
14136     Set the directory to search for the profile data files in to PATH.
14137     This option affects only the profile data generated by
14138     '-fprofile-generate', '-ftest-coverage', '-fprofile-arcs' and used
14139     by '-fprofile-use' and '-fbranch-probabilities' and its related
14140     options.  Both absolute and relative paths can be used.  By
14141     default, GCC uses the current directory as PATH, thus the profile
14142     data file appears in the same directory as the object file.  In
14143     order to prevent the file name clashing, if the object file name is
14144     not an absolute path, we mangle the absolute path of the
14145     'SOURCENAME.gcda' file and use it as the file name of a '.gcda'
14146     file.  See details about the file naming in '-fprofile-arcs'.  See
14147     similar option '-fprofile-note'.
14148
14149     When an executable is run in a massive parallel environment, it is
14150     recommended to save profile to different folders.  That can be done
14151     with variables in PATH that are exported during run-time:
14152
14153     '%p'
14154          process ID.
14155
14156     '%q{VAR}'
14157          value of environment variable VAR
14158
14159'-fprofile-generate'
14160'-fprofile-generate=PATH'
14161
14162     Enable options usually used for instrumenting application to
14163     produce profile useful for later recompilation with profile
14164     feedback based optimization.  You must use '-fprofile-generate'
14165     both when compiling and when linking your program.
14166
14167     The following options are enabled: '-fprofile-arcs',
14168     '-fprofile-values', '-finline-functions', and '-fipa-bit-cp'.
14169
14170     If PATH is specified, GCC looks at the PATH to find the profile
14171     feedback data files.  See '-fprofile-dir'.
14172
14173     To optimize the program based on the collected profile information,
14174     use '-fprofile-use'.  *Note Optimize Options::, for more
14175     information.
14176
14177'-fprofile-info-section'
14178'-fprofile-info-section=NAME'
14179
14180     Register the profile information in the specified section instead
14181     of using a constructor/destructor.  The section name is NAME if it
14182     is specified, otherwise the section name defaults to '.gcov_info'.
14183     A pointer to the profile information generated by '-fprofile-arcs'
14184     is placed in the specified section for each translation unit.  This
14185     option disables the profile information registration through a
14186     constructor and it disables the profile information processing
14187     through a destructor.  This option is not intended to be used in
14188     hosted environments such as GNU/Linux.  It targets free-standing
14189     environments (for example embedded systems) with limited resources
14190     which do not support constructors/destructors or the C library file
14191     I/O.
14192
14193     The linker could collect the input sections in a continuous memory
14194     block and define start and end symbols.  A GNU linker script
14195     example which defines a linker output section follows:
14196
14197            .gcov_info      :
14198            {
14199              PROVIDE (__gcov_info_start = .);
14200              KEEP (*(.gcov_info))
14201              PROVIDE (__gcov_info_end = .);
14202            }
14203
14204     The program could dump the profiling information registered in this
14205     linker set for example like this:
14206
14207          #include <gcov.h>
14208          #include <stdio.h>
14209          #include <stdlib.h>
14210
14211          extern const struct gcov_info *__gcov_info_start[];
14212          extern const struct gcov_info *__gcov_info_end[];
14213
14214          static void
14215          filename (const char *f, void *arg)
14216          {
14217            puts (f);
14218          }
14219
14220          static void
14221          dump (const void *d, unsigned n, void *arg)
14222          {
14223            const unsigned char *c = d;
14224
14225            for (unsigned i = 0; i < n; ++i)
14226              printf ("%02x", c[i]);
14227          }
14228
14229          static void *
14230          allocate (unsigned length, void *arg)
14231          {
14232            return malloc (length);
14233          }
14234
14235          static void
14236          dump_gcov_info (void)
14237          {
14238            const struct gcov_info **info = __gcov_info_start;
14239            const struct gcov_info **end = __gcov_info_end;
14240
14241            /* Obfuscate variable to prevent compiler optimizations.  */
14242            __asm__ ("" : "+r" (info));
14243
14244            while (info != end)
14245            {
14246              void *arg = NULL;
14247              __gcov_info_to_gcda (*info, filename, dump, allocate, arg);
14248              putchar ('\n');
14249              ++info;
14250            }
14251          }
14252
14253          int
14254          main()
14255          {
14256            dump_gcov_info();
14257            return 0;
14258          }
14259
14260'-fprofile-note=PATH'
14261
14262     If PATH is specified, GCC saves '.gcno' file into PATH location.
14263     If you combine the option with multiple source files, the '.gcno'
14264     file will be overwritten.
14265
14266'-fprofile-prefix-path=PATH'
14267
14268     This option can be used in combination with
14269     'profile-generate='PROFILE_DIR and 'profile-use='PROFILE_DIR to
14270     inform GCC where is the base directory of built source tree.  By
14271     default PROFILE_DIR will contain files with mangled absolute paths
14272     of all object files in the built project.  This is not desirable
14273     when directory used to build the instrumented binary differs from
14274     the directory used to build the binary optimized with profile
14275     feedback because the profile data will not be found during the
14276     optimized build.  In such setups '-fprofile-prefix-path='PATH with
14277     PATH pointing to the base directory of the build can be used to
14278     strip the irrelevant part of the path and keep all file names
14279     relative to the main build directory.
14280
14281'-fprofile-prefix-map=OLD=NEW'
14282     When compiling files residing in directory 'OLD', record profiling
14283     information (with '--coverage') describing them as if the files
14284     resided in directory 'NEW' instead.  See also '-ffile-prefix-map'.
14285
14286'-fprofile-update=METHOD'
14287
14288     Alter the update method for an application instrumented for profile
14289     feedback based optimization.  The METHOD argument should be one of
14290     'single', 'atomic' or 'prefer-atomic'.  The first one is useful for
14291     single-threaded applications, while the second one prevents profile
14292     corruption by emitting thread-safe code.
14293
14294     *Warning:* When an application does not properly join all threads
14295     (or creates an detached thread), a profile file can be still
14296     corrupted.
14297
14298     Using 'prefer-atomic' would be transformed either to 'atomic', when
14299     supported by a target, or to 'single' otherwise.  The GCC driver
14300     automatically selects 'prefer-atomic' when '-pthread' is present in
14301     the command line.
14302
14303'-fprofile-filter-files=REGEX'
14304
14305     Instrument only functions from files whose name matches any of the
14306     regular expressions (separated by semi-colons).
14307
14308     For example, '-fprofile-filter-files=main\.c;module.*\.c' will
14309     instrument only 'main.c' and all C files starting with 'module'.
14310
14311'-fprofile-exclude-files=REGEX'
14312
14313     Instrument only functions from files whose name does not match any
14314     of the regular expressions (separated by semi-colons).
14315
14316     For example, '-fprofile-exclude-files=/usr/.*' will prevent
14317     instrumentation of all files that are located in the '/usr/'
14318     folder.
14319
14320'-fprofile-reproducible=[multithreaded|parallel-runs|serial]'
14321     Control level of reproducibility of profile gathered by
14322     '-fprofile-generate'.  This makes it possible to rebuild program
14323     with same outcome which is useful, for example, for distribution
14324     packages.
14325
14326     With '-fprofile-reproducible=serial' the profile gathered by
14327     '-fprofile-generate' is reproducible provided the trained program
14328     behaves the same at each invocation of the train run, it is not
14329     multi-threaded and profile data streaming is always done in the
14330     same order.  Note that profile streaming happens at the end of
14331     program run but also before 'fork' function is invoked.
14332
14333     Note that it is quite common that execution counts of some part of
14334     programs depends, for example, on length of temporary file names or
14335     memory space randomization (that may affect hash-table collision
14336     rate).  Such non-reproducible part of programs may be annotated by
14337     'no_instrument_function' function attribute.  'gcov-dump' with '-l'
14338     can be used to dump gathered data and verify that they are indeed
14339     reproducible.
14340
14341     With '-fprofile-reproducible=parallel-runs' collected profile stays
14342     reproducible regardless the order of streaming of the data into
14343     gcda files.  This setting makes it possible to run multiple
14344     instances of instrumented program in parallel (such as with 'make
14345     -j').  This reduces quality of gathered data, in particular of
14346     indirect call profiling.
14347
14348'-fsanitize=address'
14349     Enable AddressSanitizer, a fast memory error detector.  Memory
14350     access instructions are instrumented to detect out-of-bounds and
14351     use-after-free bugs.  The option enables
14352     '-fsanitize-address-use-after-scope'.  See
14353     <https://github.com/google/sanitizers/wiki/AddressSanitizer> for
14354     more details.  The run-time behavior can be influenced using the
14355     'ASAN_OPTIONS' environment variable.  When set to 'help=1', the
14356     available options are shown at startup of the instrumented program.
14357     See
14358     <https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags>
14359     for a list of supported options.  The option cannot be combined
14360     with '-fsanitize=thread' or '-fsanitize=hwaddress'.  Note that the
14361     only target '-fsanitize=hwaddress' is currently supported on is
14362     AArch64.
14363
14364'-fsanitize=kernel-address'
14365     Enable AddressSanitizer for Linux kernel.  See
14366     <https://github.com/google/kasan> for more details.
14367
14368'-fsanitize=hwaddress'
14369     Enable Hardware-assisted AddressSanitizer, which uses a hardware
14370     ability to ignore the top byte of a pointer to allow the detection
14371     of memory errors with a low memory overhead.  Memory access
14372     instructions are instrumented to detect out-of-bounds and
14373     use-after-free bugs.  The option enables
14374     '-fsanitize-address-use-after-scope'.  See
14375     <https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html>
14376     for more details.  The run-time behavior can be influenced using
14377     the 'HWASAN_OPTIONS' environment variable.  When set to 'help=1',
14378     the available options are shown at startup of the instrumented
14379     program.  The option cannot be combined with '-fsanitize=thread' or
14380     '-fsanitize=address', and is currently only available on AArch64.
14381
14382'-fsanitize=kernel-hwaddress'
14383     Enable Hardware-assisted AddressSanitizer for compilation of the
14384     Linux kernel.  Similar to '-fsanitize=kernel-address' but using an
14385     alternate instrumentation method, and similar to
14386     '-fsanitize=hwaddress' but with instrumentation differences
14387     necessary for compiling the Linux kernel.  These differences are to
14388     avoid hwasan library initialization calls and to account for the
14389     stack pointer having a different value in its top byte.
14390
14391     _Note:_ This option has different defaults to the
14392     '-fsanitize=hwaddress'.  Instrumenting the stack and alloca calls
14393     are not on by default but are still possible by specifying the
14394     command-line options '--param hwasan-instrument-stack=1' and
14395     '--param hwasan-instrument-allocas=1' respectively.  Using a random
14396     frame tag is not implemented for kernel instrumentation.
14397
14398'-fsanitize=pointer-compare'
14399     Instrument comparison operation (<, <=, >, >=) with pointer
14400     operands.  The option must be combined with either
14401     '-fsanitize=kernel-address' or '-fsanitize=address' The option
14402     cannot be combined with '-fsanitize=thread'.  Note: By default the
14403     check is disabled at run time.  To enable it, add
14404     'detect_invalid_pointer_pairs=2' to the environment variable
14405     'ASAN_OPTIONS'.  Using 'detect_invalid_pointer_pairs=1' detects
14406     invalid operation only when both pointers are non-null.
14407
14408'-fsanitize=pointer-subtract'
14409     Instrument subtraction with pointer operands.  The option must be
14410     combined with either '-fsanitize=kernel-address' or
14411     '-fsanitize=address' The option cannot be combined with
14412     '-fsanitize=thread'.  Note: By default the check is disabled at run
14413     time.  To enable it, add 'detect_invalid_pointer_pairs=2' to the
14414     environment variable 'ASAN_OPTIONS'.  Using
14415     'detect_invalid_pointer_pairs=1' detects invalid operation only
14416     when both pointers are non-null.
14417
14418'-fsanitize=shadow-call-stack'
14419     Enable ShadowCallStack, a security enhancement mechanism used to
14420     protect programs against return address overwrites (e.g.  stack
14421     buffer overflows.)  It works by saving a function's return address
14422     to a separately allocated shadow call stack in the function
14423     prologue and restoring the return address from the shadow call
14424     stack in the function epilogue.  Instrumentation only occurs in
14425     functions that need to save the return address to the stack.
14426
14427     Currently it only supports the aarch64 platform.  It is
14428     specifically designed for linux kernels that enable the
14429     CONFIG_SHADOW_CALL_STACK option.  For the user space programs,
14430     runtime support is not currently provided in libc and libgcc.
14431     Users who want to use this feature in user space need to provide
14432     their own support for the runtime.  It should be noted that this
14433     may cause the ABI rules to be broken.
14434
14435     On aarch64, the instrumentation makes use of the platform register
14436     'x18'.  This generally means that any code that may run on the same
14437     thread as code compiled with ShadowCallStack must be compiled with
14438     the flag '-ffixed-x18', otherwise functions compiled without
14439     '-ffixed-x18' might clobber 'x18' and so corrupt the shadow stack
14440     pointer.
14441
14442     Also, because there is no userspace runtime support, code compiled
14443     with ShadowCallStack cannot use exception handling.  Use
14444     '-fno-exceptions' to turn off exceptions.
14445
14446     See <https://clang.llvm.org/docs/ShadowCallStack.html> for more
14447     details.
14448
14449'-fsanitize=thread'
14450     Enable ThreadSanitizer, a fast data race detector.  Memory access
14451     instructions are instrumented to detect data race bugs.  See
14452     <https://github.com/google/sanitizers/wiki#threadsanitizer> for
14453     more details.  The run-time behavior can be influenced using the
14454     'TSAN_OPTIONS' environment variable; see
14455     <https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags>
14456     for a list of supported options.  The option cannot be combined
14457     with '-fsanitize=address', '-fsanitize=leak'.
14458
14459     Note that sanitized atomic builtins cannot throw exceptions when
14460     operating on invalid memory addresses with non-call exceptions
14461     ('-fnon-call-exceptions').
14462
14463'-fsanitize=leak'
14464     Enable LeakSanitizer, a memory leak detector.  This option only
14465     matters for linking of executables and the executable is linked
14466     against a library that overrides 'malloc' and other allocator
14467     functions.  See
14468     <https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>
14469     for more details.  The run-time behavior can be influenced using
14470     the 'LSAN_OPTIONS' environment variable.  The option cannot be
14471     combined with '-fsanitize=thread'.
14472
14473'-fsanitize=undefined'
14474     Enable UndefinedBehaviorSanitizer, a fast undefined behavior
14475     detector.  Various computations are instrumented to detect
14476     undefined behavior at runtime.  See
14477     <https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html> for
14478     more details.  The run-time behavior can be influenced using the
14479     'UBSAN_OPTIONS' environment variable.  Current suboptions are:
14480
14481     '-fsanitize=shift'
14482          This option enables checking that the result of a shift
14483          operation is not undefined.  Note that what exactly is
14484          considered undefined differs slightly between C and C++, as
14485          well as between ISO C90 and C99, etc.  This option has two
14486          suboptions, '-fsanitize=shift-base' and
14487          '-fsanitize=shift-exponent'.
14488
14489     '-fsanitize=shift-exponent'
14490          This option enables checking that the second argument of a
14491          shift operation is not negative and is smaller than the
14492          precision of the promoted first argument.
14493
14494     '-fsanitize=shift-base'
14495          If the second argument of a shift operation is within range,
14496          check that the result of a shift operation is not undefined.
14497          Note that what exactly is considered undefined differs
14498          slightly between C and C++, as well as between ISO C90 and
14499          C99, etc.
14500
14501     '-fsanitize=integer-divide-by-zero'
14502          Detect integer division by zero.
14503
14504     '-fsanitize=unreachable'
14505          With this option, the compiler turns the
14506          '__builtin_unreachable' call into a diagnostics message call
14507          instead.  When reaching the '__builtin_unreachable' call, the
14508          behavior is undefined.
14509
14510     '-fsanitize=vla-bound'
14511          This option instructs the compiler to check that the size of a
14512          variable length array is positive.
14513
14514     '-fsanitize=null'
14515          This option enables pointer checking.  Particularly, the
14516          application built with this option turned on will issue an
14517          error message when it tries to dereference a NULL pointer, or
14518          if a reference (possibly an rvalue reference) is bound to a
14519          NULL pointer, or if a method is invoked on an object pointed
14520          by a NULL pointer.
14521
14522     '-fsanitize=return'
14523          This option enables return statement checking.  Programs built
14524          with this option turned on will issue an error message when
14525          the end of a non-void function is reached without actually
14526          returning a value.  This option works in C++ only.
14527
14528     '-fsanitize=signed-integer-overflow'
14529          This option enables signed integer overflow checking.  We
14530          check that the result of '+', '*', and both unary and binary
14531          '-' does not overflow in the signed arithmetics.  This also
14532          detects 'INT_MIN / -1' signed division.  Note, integer
14533          promotion rules must be taken into account.  That is, the
14534          following is not an overflow:
14535               signed char a = SCHAR_MAX;
14536               a++;
14537
14538     '-fsanitize=bounds'
14539          This option enables instrumentation of array bounds.  Various
14540          out of bounds accesses are detected.  Flexible array members,
14541          flexible array member-like arrays, and initializers of
14542          variables with static storage are not instrumented.
14543
14544     '-fsanitize=bounds-strict'
14545          This option enables strict instrumentation of array bounds.
14546          Most out of bounds accesses are detected, including flexible
14547          array members and flexible array member-like arrays.
14548          Initializers of variables with static storage are not
14549          instrumented.
14550
14551     '-fsanitize=alignment'
14552
14553          This option enables checking of alignment of pointers when
14554          they are dereferenced, or when a reference is bound to
14555          insufficiently aligned target, or when a method or constructor
14556          is invoked on insufficiently aligned object.
14557
14558     '-fsanitize=object-size'
14559          This option enables instrumentation of memory references using
14560          the '__builtin_object_size' function.  Various out of bounds
14561          pointer accesses are detected.
14562
14563     '-fsanitize=float-divide-by-zero'
14564          Detect floating-point division by zero.  Unlike other similar
14565          options, '-fsanitize=float-divide-by-zero' is not enabled by
14566          '-fsanitize=undefined', since floating-point division by zero
14567          can be a legitimate way of obtaining infinities and NaNs.
14568
14569     '-fsanitize=float-cast-overflow'
14570          This option enables floating-point type to integer conversion
14571          checking.  We check that the result of the conversion does not
14572          overflow.  Unlike other similar options,
14573          '-fsanitize=float-cast-overflow' is not enabled by
14574          '-fsanitize=undefined'.  This option does not work well with
14575          'FE_INVALID' exceptions enabled.
14576
14577     '-fsanitize=nonnull-attribute'
14578
14579          This option enables instrumentation of calls, checking whether
14580          null values are not passed to arguments marked as requiring a
14581          non-null value by the 'nonnull' function attribute.
14582
14583     '-fsanitize=returns-nonnull-attribute'
14584
14585          This option enables instrumentation of return statements in
14586          functions marked with 'returns_nonnull' function attribute, to
14587          detect returning of null values from such functions.
14588
14589     '-fsanitize=bool'
14590
14591          This option enables instrumentation of loads from bool.  If a
14592          value other than 0/1 is loaded, a run-time error is issued.
14593
14594     '-fsanitize=enum'
14595
14596          This option enables instrumentation of loads from an enum
14597          type.  If a value outside the range of values for the enum
14598          type is loaded, a run-time error is issued.
14599
14600     '-fsanitize=vptr'
14601
14602          This option enables instrumentation of C++ member function
14603          calls, member accesses and some conversions between pointers
14604          to base and derived classes, to verify the referenced object
14605          has the correct dynamic type.
14606
14607     '-fsanitize=pointer-overflow'
14608
14609          This option enables instrumentation of pointer arithmetics.
14610          If the pointer arithmetics overflows, a run-time error is
14611          issued.
14612
14613     '-fsanitize=builtin'
14614
14615          This option enables instrumentation of arguments to selected
14616          builtin functions.  If an invalid value is passed to such
14617          arguments, a run-time error is issued.  E.g. passing 0 as the
14618          argument to '__builtin_ctz' or '__builtin_clz' invokes
14619          undefined behavior and is diagnosed by this option.
14620
14621     While '-ftrapv' causes traps for signed overflows to be emitted,
14622     '-fsanitize=undefined' gives a diagnostic message.  This currently
14623     works only for the C family of languages.
14624
14625'-fno-sanitize=all'
14626
14627     This option disables all previously enabled sanitizers.
14628     '-fsanitize=all' is not allowed, as some sanitizers cannot be used
14629     together.
14630
14631'-fasan-shadow-offset=NUMBER'
14632     This option forces GCC to use custom shadow offset in
14633     AddressSanitizer checks.  It is useful for experimenting with
14634     different shadow memory layouts in Kernel AddressSanitizer.
14635
14636'-fsanitize-sections=S1,S2,...'
14637     Sanitize global variables in selected user-defined sections.  SI
14638     may contain wildcards.
14639
14640'-fsanitize-recover[=OPTS]'
14641     '-fsanitize-recover=' controls error recovery mode for sanitizers
14642     mentioned in comma-separated list of OPTS.  Enabling this option
14643     for a sanitizer component causes it to attempt to continue running
14644     the program as if no error happened.  This means multiple runtime
14645     errors can be reported in a single program run, and the exit code
14646     of the program may indicate success even when errors have been
14647     reported.  The '-fno-sanitize-recover=' option can be used to alter
14648     this behavior: only the first detected error is reported and
14649     program then exits with a non-zero exit code.
14650
14651     Currently this feature only works for '-fsanitize=undefined' (and
14652     its suboptions except for '-fsanitize=unreachable' and
14653     '-fsanitize=return'), '-fsanitize=float-cast-overflow',
14654     '-fsanitize=float-divide-by-zero', '-fsanitize=bounds-strict',
14655     '-fsanitize=kernel-address' and '-fsanitize=address'.  For these
14656     sanitizers error recovery is turned on by default, except
14657     '-fsanitize=address', for which this feature is experimental.
14658     '-fsanitize-recover=all' and '-fno-sanitize-recover=all' is also
14659     accepted, the former enables recovery for all sanitizers that
14660     support it, the latter disables recovery for all sanitizers that
14661     support it.
14662
14663     Even if a recovery mode is turned on the compiler side, it needs to
14664     be also enabled on the runtime library side, otherwise the failures
14665     are still fatal.  The runtime library defaults to 'halt_on_error=0'
14666     for ThreadSanitizer and UndefinedBehaviorSanitizer, while default
14667     value for AddressSanitizer is 'halt_on_error=1'.  This can be
14668     overridden through setting the 'halt_on_error' flag in the
14669     corresponding environment variable.
14670
14671     Syntax without an explicit OPTS parameter is deprecated.  It is
14672     equivalent to specifying an OPTS list of:
14673
14674          undefined,float-cast-overflow,float-divide-by-zero,bounds-strict
14675
14676'-fsanitize-address-use-after-scope'
14677     Enable sanitization of local variables to detect use-after-scope
14678     bugs.  The option sets '-fstack-reuse' to 'none'.
14679
14680'-fsanitize-undefined-trap-on-error'
14681     The '-fsanitize-undefined-trap-on-error' option instructs the
14682     compiler to report undefined behavior using '__builtin_trap' rather
14683     than a 'libubsan' library routine.  The advantage of this is that
14684     the 'libubsan' library is not needed and is not linked in, so this
14685     is usable even in freestanding environments.
14686
14687'-fsanitize-coverage=trace-pc'
14688     Enable coverage-guided fuzzing code instrumentation.  Inserts a
14689     call to '__sanitizer_cov_trace_pc' into every basic block.
14690
14691'-fsanitize-coverage=trace-cmp'
14692     Enable dataflow guided fuzzing code instrumentation.  Inserts a
14693     call to '__sanitizer_cov_trace_cmp1', '__sanitizer_cov_trace_cmp2',
14694     '__sanitizer_cov_trace_cmp4' or '__sanitizer_cov_trace_cmp8' for
14695     integral comparison with both operands variable or
14696     '__sanitizer_cov_trace_const_cmp1',
14697     '__sanitizer_cov_trace_const_cmp2',
14698     '__sanitizer_cov_trace_const_cmp4' or
14699     '__sanitizer_cov_trace_const_cmp8' for integral comparison with one
14700     operand constant, '__sanitizer_cov_trace_cmpf' or
14701     '__sanitizer_cov_trace_cmpd' for float or double comparisons and
14702     '__sanitizer_cov_trace_switch' for switch statements.
14703
14704'-fcf-protection=[full|branch|return|none|check]'
14705     Enable code instrumentation of control-flow transfers to increase
14706     program security by checking that target addresses of control-flow
14707     transfer instructions (such as indirect function call, function
14708     return, indirect jump) are valid.  This prevents diverting the flow
14709     of control to an unexpected target.  This is intended to protect
14710     against such threats as Return-oriented Programming (ROP), and
14711     similarly call/jmp-oriented programming (COP/JOP).
14712
14713     The value 'branch' tells the compiler to implement checking of
14714     validity of control-flow transfer at the point of indirect branch
14715     instructions, i.e. call/jmp instructions.  The value 'return'
14716     implements checking of validity at the point of returning from a
14717     function.  The value 'full' is an alias for specifying both
14718     'branch' and 'return'.  The value 'none' turns off instrumentation.
14719
14720     The value 'check' is used for the final link with link-time
14721     optimization (LTO). An error is issued if LTO object files are
14722     compiled with different '-fcf-protection' values.  The value
14723     'check' is ignored at the compile time.
14724
14725     The macro '__CET__' is defined when '-fcf-protection' is used.  The
14726     first bit of '__CET__' is set to 1 for the value 'branch' and the
14727     second bit of '__CET__' is set to 1 for the 'return'.
14728
14729     You can also use the 'nocf_check' attribute to identify which
14730     functions and calls should be skipped from instrumentation (*note
14731     Function Attributes::).
14732
14733     Currently the x86 GNU/Linux target provides an implementation based
14734     on Intel Control-flow Enforcement Technology (CET) which works for
14735     i686 processor or newer.
14736
14737'-fharden-compares'
14738     For every logical test that survives gimple optimizations and is
14739     _not_ the condition in a conditional branch (for example,
14740     conditions tested for conditional moves, or to store in boolean
14741     variables), emit extra code to compute and verify the reversed
14742     condition, and to call '__builtin_trap' if the results do not
14743     match.  Use with '-fharden-conditional-branches' to cover all
14744     conditionals.
14745
14746'-fharden-conditional-branches'
14747     For every non-vectorized conditional branch that survives gimple
14748     optimizations, emit extra code to compute and verify the reversed
14749     condition, and to call '__builtin_trap' if the result is
14750     unexpected.  Use with '-fharden-compares' to cover all
14751     conditionals.
14752
14753'-fstack-protector'
14754     Emit extra code to check for buffer overflows, such as stack
14755     smashing attacks.  This is done by adding a guard variable to
14756     functions with vulnerable objects.  This includes functions that
14757     call 'alloca', and functions with buffers larger than or equal to 8
14758     bytes.  The guards are initialized when a function is entered and
14759     then checked when the function exits.  If a guard check fails, an
14760     error message is printed and the program exits.  Only variables
14761     that are actually allocated on the stack are considered, optimized
14762     away variables or variables allocated in registers don't count.
14763
14764'-fstack-protector-all'
14765     Like '-fstack-protector' except that all functions are protected.
14766
14767'-fstack-protector-strong'
14768     Like '-fstack-protector' but includes additional functions to be
14769     protected -- those that have local array definitions, or have
14770     references to local frame addresses.  Only variables that are
14771     actually allocated on the stack are considered, optimized away
14772     variables or variables allocated in registers don't count.
14773
14774'-fstack-protector-explicit'
14775     Like '-fstack-protector' but only protects those functions which
14776     have the 'stack_protect' attribute.
14777
14778'-fstack-check'
14779     Generate code to verify that you do not go beyond the boundary of
14780     the stack.  You should specify this flag if you are running in an
14781     environment with multiple threads, but you only rarely need to
14782     specify it in a single-threaded environment since stack overflow is
14783     automatically detected on nearly all systems if there is only one
14784     stack.
14785
14786     Note that this switch does not actually cause checking to be done;
14787     the operating system or the language runtime must do that.  The
14788     switch causes generation of code to ensure that they see the stack
14789     being extended.
14790
14791     You can additionally specify a string parameter: 'no' means no
14792     checking, 'generic' means force the use of old-style checking,
14793     'specific' means use the best checking method and is equivalent to
14794     bare '-fstack-check'.
14795
14796     Old-style checking is a generic mechanism that requires no specific
14797     target support in the compiler but comes with the following
14798     drawbacks:
14799
14800       1. Modified allocation strategy for large objects: they are
14801          always allocated dynamically if their size exceeds a fixed
14802          threshold.  Note this may change the semantics of some code.
14803
14804       2. Fixed limit on the size of the static frame of functions: when
14805          it is topped by a particular function, stack checking is not
14806          reliable and a warning is issued by the compiler.
14807
14808       3. Inefficiency: because of both the modified allocation strategy
14809          and the generic implementation, code performance is hampered.
14810
14811     Note that old-style stack checking is also the fallback method for
14812     'specific' if no target support has been added in the compiler.
14813
14814     '-fstack-check=' is designed for Ada's needs to detect infinite
14815     recursion and stack overflows.  'specific' is an excellent choice
14816     when compiling Ada code.  It is not generally sufficient to protect
14817     against stack-clash attacks.  To protect against those you want
14818     '-fstack-clash-protection'.
14819
14820'-fstack-clash-protection'
14821     Generate code to prevent stack clash style attacks.  When this
14822     option is enabled, the compiler will only allocate one page of
14823     stack space at a time and each page is accessed immediately after
14824     allocation.  Thus, it prevents allocations from jumping over any
14825     stack guard page provided by the operating system.
14826
14827     Most targets do not fully support stack clash protection.  However,
14828     on those targets '-fstack-clash-protection' will protect dynamic
14829     stack allocations.  '-fstack-clash-protection' may also provide
14830     limited protection for static stack allocations if the target
14831     supports '-fstack-check=specific'.
14832
14833'-fstack-limit-register=REG'
14834'-fstack-limit-symbol=SYM'
14835'-fno-stack-limit'
14836     Generate code to ensure that the stack does not grow beyond a
14837     certain value, either the value of a register or the address of a
14838     symbol.  If a larger stack is required, a signal is raised at run
14839     time.  For most targets, the signal is raised before the stack
14840     overruns the boundary, so it is possible to catch the signal
14841     without taking special precautions.
14842
14843     For instance, if the stack starts at absolute address '0x80000000'
14844     and grows downwards, you can use the flags
14845     '-fstack-limit-symbol=__stack_limit' and
14846     '-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit of
14847     128KB.  Note that this may only work with the GNU linker.
14848
14849     You can locally override stack limit checking by using the
14850     'no_stack_limit' function attribute (*note Function Attributes::).
14851
14852'-fsplit-stack'
14853     Generate code to automatically split the stack before it overflows.
14854     The resulting program has a discontiguous stack which can only
14855     overflow if the program is unable to allocate any more memory.
14856     This is most useful when running threaded programs, as it is no
14857     longer necessary to calculate a good stack size to use for each
14858     thread.  This is currently only implemented for the x86 targets
14859     running GNU/Linux.
14860
14861     When code compiled with '-fsplit-stack' calls code compiled without
14862     '-fsplit-stack', there may not be much stack space available for
14863     the latter code to run.  If compiling all code, including library
14864     code, with '-fsplit-stack' is not an option, then the linker can
14865     fix up these calls so that the code compiled without
14866     '-fsplit-stack' always has a large stack.  Support for this is
14867     implemented in the gold linker in GNU binutils release 2.21 and
14868     later.
14869
14870'-fvtable-verify=[std|preinit|none]'
14871     This option is only available when compiling C++ code.  It turns on
14872     (or off, if using '-fvtable-verify=none') the security feature that
14873     verifies at run time, for every virtual call, that the vtable
14874     pointer through which the call is made is valid for the type of the
14875     object, and has not been corrupted or overwritten.  If an invalid
14876     vtable pointer is detected at run time, an error is reported and
14877     execution of the program is immediately halted.
14878
14879     This option causes run-time data structures to be built at program
14880     startup, which are used for verifying the vtable pointers.  The
14881     options 'std' and 'preinit' control the timing of when these data
14882     structures are built.  In both cases the data structures are built
14883     before execution reaches 'main'.  Using '-fvtable-verify=std'
14884     causes the data structures to be built after shared libraries have
14885     been loaded and initialized.  '-fvtable-verify=preinit' causes them
14886     to be built before shared libraries have been loaded and
14887     initialized.
14888
14889     If this option appears multiple times in the command line with
14890     different values specified, 'none' takes highest priority over both
14891     'std' and 'preinit'; 'preinit' takes priority over 'std'.
14892
14893'-fvtv-debug'
14894     When used in conjunction with '-fvtable-verify=std' or
14895     '-fvtable-verify=preinit', causes debug versions of the runtime
14896     functions for the vtable verification feature to be called.  This
14897     flag also causes the compiler to log information about which vtable
14898     pointers it finds for each class.  This information is written to a
14899     file named 'vtv_set_ptr_data.log' in the directory named by the
14900     environment variable 'VTV_LOGS_DIR' if that is defined or the
14901     current working directory otherwise.
14902
14903     Note: This feature _appends_ data to the log file.  If you want a
14904     fresh log file, be sure to delete any existing one.
14905
14906'-fvtv-counts'
14907     This is a debugging flag.  When used in conjunction with
14908     '-fvtable-verify=std' or '-fvtable-verify=preinit', this causes the
14909     compiler to keep track of the total number of virtual calls it
14910     encounters and the number of verifications it inserts.  It also
14911     counts the number of calls to certain run-time library functions
14912     that it inserts and logs this information for each compilation
14913     unit.  The compiler writes this information to a file named
14914     'vtv_count_data.log' in the directory named by the environment
14915     variable 'VTV_LOGS_DIR' if that is defined or the current working
14916     directory otherwise.  It also counts the size of the vtable pointer
14917     sets for each class, and writes this information to
14918     'vtv_class_set_sizes.log' in the same directory.
14919
14920     Note: This feature _appends_ data to the log files.  To get fresh
14921     log files, be sure to delete any existing ones.
14922
14923'-finstrument-functions'
14924     Generate instrumentation calls for entry and exit to functions.
14925     Just after function entry and just before function exit, the
14926     following profiling functions are called with the address of the
14927     current function and its call site.  (On some platforms,
14928     '__builtin_return_address' does not work beyond the current
14929     function, so the call site information may not be available to the
14930     profiling functions otherwise.)
14931
14932          void __cyg_profile_func_enter (void *this_fn,
14933                                         void *call_site);
14934          void __cyg_profile_func_exit  (void *this_fn,
14935                                         void *call_site);
14936
14937     The first argument is the address of the start of the current
14938     function, which may be looked up exactly in the symbol table.
14939
14940     This instrumentation is also done for functions expanded inline in
14941     other functions.  The profiling calls indicate where, conceptually,
14942     the inline function is entered and exited.  This means that
14943     addressable versions of such functions must be available.  If all
14944     your uses of a function are expanded inline, this may mean an
14945     additional expansion of code size.  If you use 'extern inline' in
14946     your C code, an addressable version of such functions must be
14947     provided.  (This is normally the case anyway, but if you get lucky
14948     and the optimizer always expands the functions inline, you might
14949     have gotten away without providing static copies.)
14950
14951     A function may be given the attribute 'no_instrument_function', in
14952     which case this instrumentation is not done.  This can be used, for
14953     example, for the profiling functions listed above, high-priority
14954     interrupt routines, and any functions from which the profiling
14955     functions cannot safely be called (perhaps signal handlers, if the
14956     profiling routines generate output or allocate memory).  *Note
14957     Common Function Attributes::.
14958
14959'-finstrument-functions-exclude-file-list=FILE,FILE,...'
14960
14961     Set the list of functions that are excluded from instrumentation
14962     (see the description of '-finstrument-functions').  If the file
14963     that contains a function definition matches with one of FILE, then
14964     that function is not instrumented.  The match is done on
14965     substrings: if the FILE parameter is a substring of the file name,
14966     it is considered to be a match.
14967
14968     For example:
14969
14970          -finstrument-functions-exclude-file-list=/bits/stl,include/sys
14971
14972     excludes any inline function defined in files whose pathnames
14973     contain '/bits/stl' or 'include/sys'.
14974
14975     If, for some reason, you want to include letter ',' in one of SYM,
14976     write '\,'.  For example,
14977     '-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
14978     single quote surrounding the option).
14979
14980'-finstrument-functions-exclude-function-list=SYM,SYM,...'
14981
14982     This is similar to '-finstrument-functions-exclude-file-list', but
14983     this option sets the list of function names to be excluded from
14984     instrumentation.  The function name to be matched is its
14985     user-visible name, such as 'vector<int> blah(const vector<int> &)',
14986     not the internal mangled name (e.g., '_Z4blahRSt6vectorIiSaIiEE').
14987     The match is done on substrings: if the SYM parameter is a
14988     substring of the function name, it is considered to be a match.
14989     For C99 and C++ extended identifiers, the function name must be
14990     given in UTF-8, not using universal character names.
14991
14992'-fpatchable-function-entry=N[,M]'
14993     Generate N NOPs right at the beginning of each function, with the
14994     function entry point before the Mth NOP. If M is omitted, it
14995     defaults to '0' so the function entry points to the address just at
14996     the first NOP. The NOP instructions reserve extra space which can
14997     be used to patch in any desired instrumentation at run time,
14998     provided that the code segment is writable.  The amount of space is
14999     controllable indirectly via the number of NOPs; the NOP instruction
15000     used corresponds to the instruction emitted by the internal GCC
15001     back-end interface 'gen_nop'.  This behavior is target-specific and
15002     may also depend on the architecture variant and/or other
15003     compilation options.
15004
15005     For run-time identification, the starting addresses of these areas,
15006     which correspond to their respective function entries minus M, are
15007     additionally collected in the '__patchable_function_entries'
15008     section of the resulting binary.
15009
15010     Note that the value of '__attribute__ ((patchable_function_entry
15011     (N,M)))' takes precedence over command-line option
15012     '-fpatchable-function-entry=N,M'.  This can be used to increase the
15013     area size or to remove it completely on a single function.  If
15014     'N=0', no pad location is recorded.
15015
15016     The NOP instructions are inserted at--and maybe before, depending
15017     on M--the function entry address, even before the prologue.
15018
15019     The maximum value of N and M is 65535.
15020
15021
15022File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Instrumentation Options,  Up: Invoking GCC
15023
150243.13 Options Controlling the Preprocessor
15025=========================================
15026
15027These options control the C preprocessor, which is run on each C source
15028file before actual compilation.
15029
15030 If you use the '-E' option, nothing is done except preprocessing.  Some
15031of these options make sense only together with '-E' because they cause
15032the preprocessor output to be unsuitable for actual compilation.
15033
15034 In addition to the options listed here, there are a number of options
15035to control search paths for include files documented in *note Directory
15036Options::.  Options to control preprocessor diagnostics are listed in
15037*note Warning Options::.
15038
15039'-D NAME'
15040     Predefine NAME as a macro, with definition '1'.
15041
15042'-D NAME=DEFINITION'
15043     The contents of DEFINITION are tokenized and processed as if they
15044     appeared during translation phase three in a '#define' directive.
15045     In particular, the definition is truncated by embedded newline
15046     characters.
15047
15048     If you are invoking the preprocessor from a shell or shell-like
15049     program you may need to use the shell's quoting syntax to protect
15050     characters such as spaces that have a meaning in the shell syntax.
15051
15052     If you wish to define a function-like macro on the command line,
15053     write its argument list with surrounding parentheses before the
15054     equals sign (if any).  Parentheses are meaningful to most shells,
15055     so you should quote the option.  With 'sh' and 'csh',
15056     '-D'NAME(ARGS...)=DEFINITION'' works.
15057
15058     '-D' and '-U' options are processed in the order they are given on
15059     the command line.  All '-imacros FILE' and '-include FILE' options
15060     are processed after all '-D' and '-U' options.
15061
15062'-U NAME'
15063     Cancel any previous definition of NAME, either built in or provided
15064     with a '-D' option.
15065
15066'-include FILE'
15067     Process FILE as if '#include "file"' appeared as the first line of
15068     the primary source file.  However, the first directory searched for
15069     FILE is the preprocessor's working directory _instead of_ the
15070     directory containing the main source file.  If not found there, it
15071     is searched for in the remainder of the '#include "..."' search
15072     chain as normal.
15073
15074     If multiple '-include' options are given, the files are included in
15075     the order they appear on the command line.
15076
15077'-imacros FILE'
15078     Exactly like '-include', except that any output produced by
15079     scanning FILE is thrown away.  Macros it defines remain defined.
15080     This allows you to acquire all the macros from a header without
15081     also processing its declarations.
15082
15083     All files specified by '-imacros' are processed before all files
15084     specified by '-include'.
15085
15086'-undef'
15087     Do not predefine any system-specific or GCC-specific macros.  The
15088     standard predefined macros remain defined.
15089
15090'-pthread'
15091     Define additional macros required for using the POSIX threads
15092     library.  You should use this option consistently for both
15093     compilation and linking.  This option is supported on GNU/Linux
15094     targets, most other Unix derivatives, and also on x86 Cygwin and
15095     MinGW targets.
15096
15097'-M'
15098     Instead of outputting the result of preprocessing, output a rule
15099     suitable for 'make' describing the dependencies of the main source
15100     file.  The preprocessor outputs one 'make' rule containing the
15101     object file name for that source file, a colon, and the names of
15102     all the included files, including those coming from '-include' or
15103     '-imacros' command-line options.
15104
15105     Unless specified explicitly (with '-MT' or '-MQ'), the object file
15106     name consists of the name of the source file with any suffix
15107     replaced with object file suffix and with any leading directory
15108     parts removed.  If there are many included files then the rule is
15109     split into several lines using '\'-newline.  The rule has no
15110     commands.
15111
15112     This option does not suppress the preprocessor's debug output, such
15113     as '-dM'.  To avoid mixing such debug output with the dependency
15114     rules you should explicitly specify the dependency output file with
15115     '-MF', or use an environment variable like 'DEPENDENCIES_OUTPUT'
15116     (*note Environment Variables::).  Debug output is still sent to the
15117     regular output stream as normal.
15118
15119     Passing '-M' to the driver implies '-E', and suppresses warnings
15120     with an implicit '-w'.
15121
15122'-MM'
15123     Like '-M' but do not mention header files that are found in system
15124     header directories, nor header files that are included, directly or
15125     indirectly, from such a header.
15126
15127     This implies that the choice of angle brackets or double quotes in
15128     an '#include' directive does not in itself determine whether that
15129     header appears in '-MM' dependency output.
15130
15131'-MF FILE'
15132     When used with '-M' or '-MM', specifies a file to write the
15133     dependencies to.  If no '-MF' switch is given the preprocessor
15134     sends the rules to the same place it would send preprocessed
15135     output.
15136
15137     When used with the driver options '-MD' or '-MMD', '-MF' overrides
15138     the default dependency output file.
15139
15140     If FILE is '-', then the dependencies are written to 'stdout'.
15141
15142'-MG'
15143     In conjunction with an option such as '-M' requesting dependency
15144     generation, '-MG' assumes missing header files are generated files
15145     and adds them to the dependency list without raising an error.  The
15146     dependency filename is taken directly from the '#include' directive
15147     without prepending any path.  '-MG' also suppresses preprocessed
15148     output, as a missing header file renders this useless.
15149
15150     This feature is used in automatic updating of makefiles.
15151
15152'-Mno-modules'
15153     Disable dependency generation for compiled module interfaces.
15154
15155'-MP'
15156     This option instructs CPP to add a phony target for each dependency
15157     other than the main file, causing each to depend on nothing.  These
15158     dummy rules work around errors 'make' gives if you remove header
15159     files without updating the 'Makefile' to match.
15160
15161     This is typical output:
15162
15163          test.o: test.c test.h
15164
15165          test.h:
15166
15167'-MT TARGET'
15168
15169     Change the target of the rule emitted by dependency generation.  By
15170     default CPP takes the name of the main input file, deletes any
15171     directory components and any file suffix such as '.c', and appends
15172     the platform's usual object suffix.  The result is the target.
15173
15174     An '-MT' option sets the target to be exactly the string you
15175     specify.  If you want multiple targets, you can specify them as a
15176     single argument to '-MT', or use multiple '-MT' options.
15177
15178     For example, '-MT '$(objpfx)foo.o'' might give
15179
15180          $(objpfx)foo.o: foo.c
15181
15182'-MQ TARGET'
15183
15184     Same as '-MT', but it quotes any characters which are special to
15185     Make.  '-MQ '$(objpfx)foo.o'' gives
15186
15187          $$(objpfx)foo.o: foo.c
15188
15189     The default target is automatically quoted, as if it were given
15190     with '-MQ'.
15191
15192'-MD'
15193     '-MD' is equivalent to '-M -MF FILE', except that '-E' is not
15194     implied.  The driver determines FILE based on whether an '-o'
15195     option is given.  If it is, the driver uses its argument but with a
15196     suffix of '.d', otherwise it takes the name of the input file,
15197     removes any directory components and suffix, and applies a '.d'
15198     suffix.
15199
15200     If '-MD' is used in conjunction with '-E', any '-o' switch is
15201     understood to specify the dependency output file (*note -MF:
15202     dashMF.), but if used without '-E', each '-o' is understood to
15203     specify a target object file.
15204
15205     Since '-E' is not implied, '-MD' can be used to generate a
15206     dependency output file as a side effect of the compilation process.
15207
15208'-MMD'
15209     Like '-MD' except mention only user header files, not system header
15210     files.
15211
15212'-fpreprocessed'
15213     Indicate to the preprocessor that the input file has already been
15214     preprocessed.  This suppresses things like macro expansion,
15215     trigraph conversion, escaped newline splicing, and processing of
15216     most directives.  The preprocessor still recognizes and removes
15217     comments, so that you can pass a file preprocessed with '-C' to the
15218     compiler without problems.  In this mode the integrated
15219     preprocessor is little more than a tokenizer for the front ends.
15220
15221     '-fpreprocessed' is implicit if the input file has one of the
15222     extensions '.i', '.ii' or '.mi'.  These are the extensions that GCC
15223     uses for preprocessed files created by '-save-temps'.
15224
15225'-fdirectives-only'
15226     When preprocessing, handle directives, but do not expand macros.
15227
15228     The option's behavior depends on the '-E' and '-fpreprocessed'
15229     options.
15230
15231     With '-E', preprocessing is limited to the handling of directives
15232     such as '#define', '#ifdef', and '#error'.  Other preprocessor
15233     operations, such as macro expansion and trigraph conversion are not
15234     performed.  In addition, the '-dD' option is implicitly enabled.
15235
15236     With '-fpreprocessed', predefinition of command line and most
15237     builtin macros is disabled.  Macros such as '__LINE__', which are
15238     contextually dependent, are handled normally.  This enables
15239     compilation of files previously preprocessed with '-E
15240     -fdirectives-only'.
15241
15242     With both '-E' and '-fpreprocessed', the rules for '-fpreprocessed'
15243     take precedence.  This enables full preprocessing of files
15244     previously preprocessed with '-E -fdirectives-only'.
15245
15246'-fdollars-in-identifiers'
15247     Accept '$' in identifiers.
15248
15249'-fextended-identifiers'
15250     Accept universal character names and extended characters in
15251     identifiers.  This option is enabled by default for C99 (and later
15252     C standard versions) and C++.
15253
15254'-fno-canonical-system-headers'
15255     When preprocessing, do not shorten system header paths with
15256     canonicalization.
15257
15258'-fmax-include-depth=DEPTH'
15259     Set the maximum depth of the nested #include.  The default is 200.
15260
15261'-ftabstop=WIDTH'
15262     Set the distance between tab stops.  This helps the preprocessor
15263     report correct column numbers in warnings or errors, even if tabs
15264     appear on the line.  If the value is less than 1 or greater than
15265     100, the option is ignored.  The default is 8.
15266
15267'-ftrack-macro-expansion[=LEVEL]'
15268     Track locations of tokens across macro expansions.  This allows the
15269     compiler to emit diagnostic about the current macro expansion stack
15270     when a compilation error occurs in a macro expansion.  Using this
15271     option makes the preprocessor and the compiler consume more memory.
15272     The LEVEL parameter can be used to choose the level of precision of
15273     token location tracking thus decreasing the memory consumption if
15274     necessary.  Value '0' of LEVEL de-activates this option.  Value '1'
15275     tracks tokens locations in a degraded mode for the sake of minimal
15276     memory overhead.  In this mode all tokens resulting from the
15277     expansion of an argument of a function-like macro have the same
15278     location.  Value '2' tracks tokens locations completely.  This
15279     value is the most memory hungry.  When this option is given no
15280     argument, the default parameter value is '2'.
15281
15282     Note that '-ftrack-macro-expansion=2' is activated by default.
15283
15284'-fmacro-prefix-map=OLD=NEW'
15285     When preprocessing files residing in directory 'OLD', expand the
15286     '__FILE__' and '__BASE_FILE__' macros as if the files resided in
15287     directory 'NEW' instead.  This can be used to change an absolute
15288     path to a relative path by using '.' for NEW which can result in
15289     more reproducible builds that are location independent.  This
15290     option also affects '__builtin_FILE()' during compilation.  See
15291     also '-ffile-prefix-map'.
15292
15293'-fexec-charset=CHARSET'
15294     Set the execution character set, used for string and character
15295     constants.  The default is UTF-8.  CHARSET can be any encoding
15296     supported by the system's 'iconv' library routine.
15297
15298'-fwide-exec-charset=CHARSET'
15299     Set the wide execution character set, used for wide string and
15300     character constants.  The default is one of UTF-32BE, UTF-32LE,
15301     UTF-16BE, or UTF-16LE, whichever corresponds to the width of
15302     'wchar_t' and the big-endian or little-endian byte order being used
15303     for code generation.  As with '-fexec-charset', CHARSET can be any
15304     encoding supported by the system's 'iconv' library routine;
15305     however, you will have problems with encodings that do not fit
15306     exactly in 'wchar_t'.
15307
15308'-finput-charset=CHARSET'
15309     Set the input character set, used for translation from the
15310     character set of the input file to the source character set used by
15311     GCC.  If the locale does not specify, or GCC cannot get this
15312     information from the locale, the default is UTF-8.  This can be
15313     overridden by either the locale or this command-line option.
15314     Currently the command-line option takes precedence if there's a
15315     conflict.  CHARSET can be any encoding supported by the system's
15316     'iconv' library routine.
15317
15318'-fpch-deps'
15319     When using precompiled headers (*note Precompiled Headers::), this
15320     flag causes the dependency-output flags to also list the files from
15321     the precompiled header's dependencies.  If not specified, only the
15322     precompiled header are listed and not the files that were used to
15323     create it, because those files are not consulted when a precompiled
15324     header is used.
15325
15326'-fpch-preprocess'
15327     This option allows use of a precompiled header (*note Precompiled
15328     Headers::) together with '-E'.  It inserts a special '#pragma',
15329     '#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
15330     place where the precompiled header was found, and its FILENAME.
15331     When '-fpreprocessed' is in use, GCC recognizes this '#pragma' and
15332     loads the PCH.
15333
15334     This option is off by default, because the resulting preprocessed
15335     output is only really suitable as input to GCC.  It is switched on
15336     by '-save-temps'.
15337
15338     You should not write this '#pragma' in your own code, but it is
15339     safe to edit the filename if the PCH file is available in a
15340     different location.  The filename may be absolute or it may be
15341     relative to GCC's current directory.
15342
15343'-fworking-directory'
15344     Enable generation of linemarkers in the preprocessor output that
15345     let the compiler know the current working directory at the time of
15346     preprocessing.  When this option is enabled, the preprocessor
15347     emits, after the initial linemarker, a second linemarker with the
15348     current working directory followed by two slashes.  GCC uses this
15349     directory, when it's present in the preprocessed input, as the
15350     directory emitted as the current working directory in some
15351     debugging information formats.  This option is implicitly enabled
15352     if debugging information is enabled, but this can be inhibited with
15353     the negated form '-fno-working-directory'.  If the '-P' flag is
15354     present in the command line, this option has no effect, since no
15355     '#line' directives are emitted whatsoever.
15356
15357'-A PREDICATE=ANSWER'
15358     Make an assertion with the predicate PREDICATE and answer ANSWER.
15359     This form is preferred to the older form '-A PREDICATE(ANSWER)',
15360     which is still supported, because it does not use shell special
15361     characters.
15362
15363'-A -PREDICATE=ANSWER'
15364     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
15365
15366'-C'
15367     Do not discard comments.  All comments are passed through to the
15368     output file, except for comments in processed directives, which are
15369     deleted along with the directive.
15370
15371     You should be prepared for side effects when using '-C'; it causes
15372     the preprocessor to treat comments as tokens in their own right.
15373     For example, comments appearing at the start of what would be a
15374     directive line have the effect of turning that line into an
15375     ordinary source line, since the first token on the line is no
15376     longer a '#'.
15377
15378'-CC'
15379     Do not discard comments, including during macro expansion.  This is
15380     like '-C', except that comments contained within macros are also
15381     passed through to the output file where the macro is expanded.
15382
15383     In addition to the side effects of the '-C' option, the '-CC'
15384     option causes all C++-style comments inside a macro to be converted
15385     to C-style comments.  This is to prevent later use of that macro
15386     from inadvertently commenting out the remainder of the source line.
15387
15388     The '-CC' option is generally used to support lint comments.
15389
15390'-P'
15391     Inhibit generation of linemarkers in the output from the
15392     preprocessor.  This might be useful when running the preprocessor
15393     on something that is not C code, and will be sent to a program
15394     which might be confused by the linemarkers.
15395
15396'-traditional'
15397'-traditional-cpp'
15398
15399     Try to imitate the behavior of pre-standard C preprocessors, as
15400     opposed to ISO C preprocessors.  See the GNU CPP manual for
15401     details.
15402
15403     Note that GCC does not otherwise attempt to emulate a pre-standard
15404     C compiler, and these options are only supported with the '-E'
15405     switch, or when invoking CPP explicitly.
15406
15407'-trigraphs'
15408     Support ISO C trigraphs.  These are three-character sequences, all
15409     starting with '??', that are defined by ISO C to stand for single
15410     characters.  For example, '??/' stands for '\', so ''??/n'' is a
15411     character constant for a newline.
15412
15413     The nine trigraphs and their replacements are
15414
15415          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
15416          Replacement:      [    ]    {    }    #    \    ^    |    ~
15417
15418     By default, GCC ignores trigraphs, but in standard-conforming modes
15419     it converts them.  See the '-std' and '-ansi' options.
15420
15421'-remap'
15422     Enable special code to work around file systems which only permit
15423     very short file names, such as MS-DOS.
15424
15425'-H'
15426     Print the name of each header file used, in addition to other
15427     normal activities.  Each name is indented to show how deep in the
15428     '#include' stack it is.  Precompiled header files are also printed,
15429     even if they are found to be invalid; an invalid precompiled header
15430     file is printed with '...x' and a valid one with '...!' .
15431
15432'-dLETTERS'
15433     Says to make debugging dumps during compilation as specified by
15434     LETTERS.  The flags documented here are those relevant to the
15435     preprocessor.  Other LETTERS are interpreted by the compiler
15436     proper, or reserved for future versions of GCC, and so are silently
15437     ignored.  If you specify LETTERS whose behavior conflicts, the
15438     result is undefined.  *Note Developer Options::, for more
15439     information.
15440
15441     '-dM'
15442          Instead of the normal output, generate a list of '#define'
15443          directives for all the macros defined during the execution of
15444          the preprocessor, including predefined macros.  This gives you
15445          a way of finding out what is predefined in your version of the
15446          preprocessor.  Assuming you have no file 'foo.h', the command
15447
15448               touch foo.h; cpp -dM foo.h
15449
15450          shows all the predefined macros.
15451
15452          If you use '-dM' without the '-E' option, '-dM' is interpreted
15453          as a synonym for '-fdump-rtl-mach'.  *Note (gcc)Developer
15454          Options::.
15455
15456     '-dD'
15457          Like '-dM' except in two respects: it does _not_ include the
15458          predefined macros, and it outputs _both_ the '#define'
15459          directives and the result of preprocessing.  Both kinds of
15460          output go to the standard output file.
15461
15462     '-dN'
15463          Like '-dD', but emit only the macro names, not their
15464          expansions.
15465
15466     '-dI'
15467          Output '#include' directives in addition to the result of
15468          preprocessing.
15469
15470     '-dU'
15471          Like '-dD' except that only macros that are expanded, or whose
15472          definedness is tested in preprocessor directives, are output;
15473          the output is delayed until the use or test of the macro; and
15474          '#undef' directives are also output for macros tested but
15475          undefined at the time.
15476
15477'-fdebug-cpp'
15478     This option is only useful for debugging GCC. When used from CPP or
15479     with '-E', it dumps debugging information about location maps.
15480     Every token in the output is preceded by the dump of the map its
15481     location belongs to.
15482
15483     When used from GCC without '-E', this option has no effect.
15484
15485'-Wp,OPTION'
15486     You can use '-Wp,OPTION' to bypass the compiler driver and pass
15487     OPTION directly through to the preprocessor.  If OPTION contains
15488     commas, it is split into multiple options at the commas.  However,
15489     many options are modified, translated or interpreted by the
15490     compiler driver before being passed to the preprocessor, and '-Wp'
15491     forcibly bypasses this phase.  The preprocessor's direct interface
15492     is undocumented and subject to change, so whenever possible you
15493     should avoid using '-Wp' and let the driver handle the options
15494     instead.
15495
15496'-Xpreprocessor OPTION'
15497     Pass OPTION as an option to the preprocessor.  You can use this to
15498     supply system-specific preprocessor options that GCC does not
15499     recognize.
15500
15501     If you want to pass an option that takes an argument, you must use
15502     '-Xpreprocessor' twice, once for the option and once for the
15503     argument.
15504
15505'-no-integrated-cpp'
15506     Perform preprocessing as a separate pass before compilation.  By
15507     default, GCC performs preprocessing as an integrated part of input
15508     tokenization and parsing.  If this option is provided, the
15509     appropriate language front end ('cc1', 'cc1plus', or 'cc1obj' for
15510     C, C++, and Objective-C, respectively) is instead invoked twice,
15511     once for preprocessing only and once for actual compilation of the
15512     preprocessed input.  This option may be useful in conjunction with
15513     the '-B' or '-wrapper' options to specify an alternate preprocessor
15514     or perform additional processing of the program source between
15515     normal preprocessing and compilation.
15516
15517'-flarge-source-files'
15518     Adjust GCC to expect large source files, at the expense of slower
15519     compilation and higher memory usage.
15520
15521     Specifically, GCC normally tracks both column numbers and line
15522     numbers within source files and it normally prints both of these
15523     numbers in diagnostics.  However, once it has processed a certain
15524     number of source lines, it stops tracking column numbers and only
15525     tracks line numbers.  This means that diagnostics for later lines
15526     do not include column numbers.  It also means that options like
15527     '-Wmisleading-indentation' cease to work at that point, although
15528     the compiler prints a note if this happens.  Passing
15529     '-flarge-source-files' significantly increases the number of source
15530     lines that GCC can process before it stops tracking columns.
15531
15532
15533File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
15534
155353.14 Passing Options to the Assembler
15536=====================================
15537
15538You can pass options to the assembler.
15539
15540'-Wa,OPTION'
15541     Pass OPTION as an option to the assembler.  If OPTION contains
15542     commas, it is split into multiple options at the commas.
15543
15544'-Xassembler OPTION'
15545     Pass OPTION as an option to the assembler.  You can use this to
15546     supply system-specific assembler options that GCC does not
15547     recognize.
15548
15549     If you want to pass an option that takes an argument, you must use
15550     '-Xassembler' twice, once for the option and once for the argument.
15551
15552
15553File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
15554
155553.15 Options for Linking
15556========================
15557
15558These options come into play when the compiler links object files into
15559an executable output file.  They are meaningless if the compiler is not
15560doing a link step.
15561
15562'OBJECT-FILE-NAME'
15563     A file name that does not end in a special recognized suffix is
15564     considered to name an object file or library.  (Object files are
15565     distinguished from libraries by the linker according to the file
15566     contents.)  If linking is done, these object files are used as
15567     input to the linker.
15568
15569'-c'
15570'-S'
15571'-E'
15572     If any of these options is used, then the linker is not run, and
15573     object file names should not be used as arguments.  *Note Overall
15574     Options::.
15575
15576'-flinker-output=TYPE'
15577     This option controls code generation of the link-time optimizer.
15578     By default the linker output is automatically determined by the
15579     linker plugin.  For debugging the compiler and if incremental
15580     linking with a non-LTO object file is desired, it may be useful to
15581     control the type manually.
15582
15583     If TYPE is 'exec', code generation produces a static binary.  In
15584     this case '-fpic' and '-fpie' are both disabled.
15585
15586     If TYPE is 'dyn', code generation produces a shared library.  In
15587     this case '-fpic' or '-fPIC' is preserved, but not enabled
15588     automatically.  This allows to build shared libraries without
15589     position-independent code on architectures where this is possible,
15590     i.e. on x86.
15591
15592     If TYPE is 'pie', code generation produces an '-fpie' executable.
15593     This results in similar optimizations as 'exec' except that '-fpie'
15594     is not disabled if specified at compilation time.
15595
15596     If TYPE is 'rel', the compiler assumes that incremental linking is
15597     done.  The sections containing intermediate code for link-time
15598     optimization are merged, pre-optimized, and output to the resulting
15599     object file.  In addition, if '-ffat-lto-objects' is specified,
15600     binary code is produced for future non-LTO linking.  The object
15601     file produced by incremental linking is smaller than a static
15602     library produced from the same object files.  At link time the
15603     result of incremental linking also loads faster than a static
15604     library assuming that the majority of objects in the library are
15605     used.
15606
15607     Finally 'nolto-rel' configures the compiler for incremental linking
15608     where code generation is forced, a final binary is produced, and
15609     the intermediate code for later link-time optimization is stripped.
15610     When multiple object files are linked together the resulting code
15611     is better optimized than with link-time optimizations disabled (for
15612     example, cross-module inlining happens), but most of benefits of
15613     whole program optimizations are lost.
15614
15615     During the incremental link (by '-r') the linker plugin defaults to
15616     'rel'.  With current interfaces to GNU Binutils it is however not
15617     possible to incrementally link LTO objects and non-LTO objects into
15618     a single mixed object file.  If any of object files in incremental
15619     link cannot be used for link-time optimization, the linker plugin
15620     issues a warning and uses 'nolto-rel'.  To maintain whole program
15621     optimization, it is recommended to link such objects into static
15622     library instead.  Alternatively it is possible to use H.J. Lu's
15623     binutils with support for mixed objects.
15624
15625'-fuse-ld=bfd'
15626     Use the 'bfd' linker instead of the default linker.
15627
15628'-fuse-ld=gold'
15629     Use the 'gold' linker instead of the default linker.
15630
15631'-fuse-ld=lld'
15632     Use the LLVM 'lld' linker instead of the default linker.
15633
15634'-fuse-ld=mold'
15635     Use the Modern Linker ('mold') instead of the default linker.
15636
15637'-lLIBRARY'
15638'-l LIBRARY'
15639     Search the library named LIBRARY when linking.  (The second
15640     alternative with the library as a separate argument is only for
15641     POSIX compliance and is not recommended.)
15642
15643     The '-l' option is passed directly to the linker by GCC. Refer to
15644     your linker documentation for exact details.  The general
15645     description below applies to the GNU linker.
15646
15647     The linker searches a standard list of directories for the library.
15648     The directories searched include several standard system
15649     directories plus any that you specify with '-L'.
15650
15651     Static libraries are archives of object files, and have file names
15652     like 'libLIBRARY.a'.  Some targets also support shared libraries,
15653     which typically have names like 'libLIBRARY.so'.  If both static
15654     and shared libraries are found, the linker gives preference to
15655     linking with the shared library unless the '-static' option is
15656     used.
15657
15658     It makes a difference where in the command you write this option;
15659     the linker searches and processes libraries and object files in the
15660     order they are specified.  Thus, 'foo.o -lz bar.o' searches library
15661     'z' after file 'foo.o' but before 'bar.o'.  If 'bar.o' refers to
15662     functions in 'z', those functions may not be loaded.
15663
15664'-lobjc'
15665     You need this special case of the '-l' option in order to link an
15666     Objective-C or Objective-C++ program.
15667
15668'-nostartfiles'
15669     Do not use the standard system startup files when linking.  The
15670     standard system libraries are used normally, unless '-nostdlib',
15671     '-nolibc', or '-nodefaultlibs' is used.
15672
15673'-nodefaultlibs'
15674     Do not use the standard system libraries when linking.  Only the
15675     libraries you specify are passed to the linker, and options
15676     specifying linkage of the system libraries, such as
15677     '-static-libgcc' or '-shared-libgcc', are ignored.  The standard
15678     startup files are used normally, unless '-nostartfiles' is used.
15679
15680     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
15681     'memmove'.  These entries are usually resolved by entries in libc.
15682     These entry points should be supplied through some other mechanism
15683     when this option is specified.
15684
15685'-nolibc'
15686     Do not use the C library or system libraries tightly coupled with
15687     it when linking.  Still link with the startup files, 'libgcc' or
15688     toolchain provided language support libraries such as 'libgnat',
15689     'libgfortran' or 'libstdc++' unless options preventing their
15690     inclusion are used as well.  This typically removes '-lc' from the
15691     link command line, as well as system libraries that normally go
15692     with it and become meaningless when absence of a C library is
15693     assumed, for example '-lpthread' or '-lm' in some configurations.
15694     This is intended for bare-board targets when there is indeed no C
15695     library available.
15696
15697'-nostdlib'
15698     Do not use the standard system startup files or libraries when
15699     linking.  No startup files and only the libraries you specify are
15700     passed to the linker, and options specifying linkage of the system
15701     libraries, such as '-static-libgcc' or '-shared-libgcc', are
15702     ignored.
15703
15704     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
15705     'memmove'.  These entries are usually resolved by entries in libc.
15706     These entry points should be supplied through some other mechanism
15707     when this option is specified.
15708
15709     One of the standard libraries bypassed by '-nostdlib' and
15710     '-nodefaultlibs' is 'libgcc.a', a library of internal subroutines
15711     which GCC uses to overcome shortcomings of particular machines, or
15712     special needs for some languages.  (*Note Interfacing to GCC
15713     Output: (gccint)Interface, for more discussion of 'libgcc.a'.)  In
15714     most cases, you need 'libgcc.a' even when you want to avoid other
15715     standard libraries.  In other words, when you specify '-nostdlib'
15716     or '-nodefaultlibs' you should usually specify '-lgcc' as well.
15717     This ensures that you have no unresolved references to internal GCC
15718     library subroutines.  (An example of such an internal subroutine is
15719     '__main', used to ensure C++ constructors are called; *note
15720     'collect2': (gccint)Collect2.)
15721
15722'-e ENTRY'
15723'--entry=ENTRY'
15724
15725     Specify that the program entry point is ENTRY.  The argument is
15726     interpreted by the linker; the GNU linker accepts either a symbol
15727     name or an address.
15728
15729'-pie'
15730     Produce a dynamically linked position independent executable on
15731     targets that support it.  For predictable results, you must also
15732     specify the same set of options used for compilation ('-fpie',
15733     '-fPIE', or model suboptions) when you specify this linker option.
15734
15735'-no-pie'
15736     Don't produce a dynamically linked position independent executable.
15737
15738'-static-pie'
15739     Produce a static position independent executable on targets that
15740     support it.  A static position independent executable is similar to
15741     a static executable, but can be loaded at any address without a
15742     dynamic linker.  For predictable results, you must also specify the
15743     same set of options used for compilation ('-fpie', '-fPIE', or
15744     model suboptions) when you specify this linker option.
15745
15746'-pthread'
15747     Link with the POSIX threads library.  This option is supported on
15748     GNU/Linux targets, most other Unix derivatives, and also on x86
15749     Cygwin and MinGW targets.  On some targets this option also sets
15750     flags for the preprocessor, so it should be used consistently for
15751     both compilation and linking.
15752
15753'-r'
15754     Produce a relocatable object as output.  This is also known as
15755     partial linking.
15756
15757'-rdynamic'
15758     Pass the flag '-export-dynamic' to the ELF linker, on targets that
15759     support it.  This instructs the linker to add all symbols, not only
15760     used ones, to the dynamic symbol table.  This option is needed for
15761     some uses of 'dlopen' or to allow obtaining backtraces from within
15762     a program.
15763
15764'-s'
15765     Remove all symbol table and relocation information from the
15766     executable.
15767
15768'-static'
15769     On systems that support dynamic linking, this overrides '-pie' and
15770     prevents linking with the shared libraries.  On other systems, this
15771     option has no effect.
15772
15773'-shared'
15774     Produce a shared object which can then be linked with other objects
15775     to form an executable.  Not all systems support this option.  For
15776     predictable results, you must also specify the same set of options
15777     used for compilation ('-fpic', '-fPIC', or model suboptions) when
15778     you specify this linker option.(1)
15779
15780'-shared-libgcc'
15781'-static-libgcc'
15782     On systems that provide 'libgcc' as a shared library, these options
15783     force the use of either the shared or static version, respectively.
15784     If no shared version of 'libgcc' was built when the compiler was
15785     configured, these options have no effect.
15786
15787     There are several situations in which an application should use the
15788     shared 'libgcc' instead of the static version.  The most common of
15789     these is when the application wishes to throw and catch exceptions
15790     across different shared libraries.  In that case, each of the
15791     libraries as well as the application itself should use the shared
15792     'libgcc'.
15793
15794     Therefore, the G++ driver automatically adds '-shared-libgcc'
15795     whenever you build a shared library or a main executable, because
15796     C++ programs typically use exceptions, so this is the right thing
15797     to do.
15798
15799     If, instead, you use the GCC driver to create shared libraries, you
15800     may find that they are not always linked with the shared 'libgcc'.
15801     If GCC finds, at its configuration time, that you have a non-GNU
15802     linker or a GNU linker that does not support option
15803     '--eh-frame-hdr', it links the shared version of 'libgcc' into
15804     shared libraries by default.  Otherwise, it takes advantage of the
15805     linker and optimizes away the linking with the shared version of
15806     'libgcc', linking with the static version of libgcc by default.
15807     This allows exceptions to propagate through such shared libraries,
15808     without incurring relocation costs at library load time.
15809
15810     However, if a library or main executable is supposed to throw or
15811     catch exceptions, you must link it using the G++ driver, or using
15812     the option '-shared-libgcc', such that it is linked with the shared
15813     'libgcc'.
15814
15815'-static-libasan'
15816     When the '-fsanitize=address' option is used to link a program, the
15817     GCC driver automatically links against 'libasan'.  If 'libasan' is
15818     available as a shared library, and the '-static' option is not
15819     used, then this links against the shared version of 'libasan'.  The
15820     '-static-libasan' option directs the GCC driver to link 'libasan'
15821     statically, without necessarily linking other libraries statically.
15822
15823'-static-libtsan'
15824     When the '-fsanitize=thread' option is used to link a program, the
15825     GCC driver automatically links against 'libtsan'.  If 'libtsan' is
15826     available as a shared library, and the '-static' option is not
15827     used, then this links against the shared version of 'libtsan'.  The
15828     '-static-libtsan' option directs the GCC driver to link 'libtsan'
15829     statically, without necessarily linking other libraries statically.
15830
15831'-static-liblsan'
15832     When the '-fsanitize=leak' option is used to link a program, the
15833     GCC driver automatically links against 'liblsan'.  If 'liblsan' is
15834     available as a shared library, and the '-static' option is not
15835     used, then this links against the shared version of 'liblsan'.  The
15836     '-static-liblsan' option directs the GCC driver to link 'liblsan'
15837     statically, without necessarily linking other libraries statically.
15838
15839'-static-libubsan'
15840     When the '-fsanitize=undefined' option is used to link a program,
15841     the GCC driver automatically links against 'libubsan'.  If
15842     'libubsan' is available as a shared library, and the '-static'
15843     option is not used, then this links against the shared version of
15844     'libubsan'.  The '-static-libubsan' option directs the GCC driver
15845     to link 'libubsan' statically, without necessarily linking other
15846     libraries statically.
15847
15848'-static-libstdc++'
15849     When the 'g++' program is used to link a C++ program, it normally
15850     automatically links against 'libstdc++'.  If 'libstdc++' is
15851     available as a shared library, and the '-static' option is not
15852     used, then this links against the shared version of 'libstdc++'.
15853     That is normally fine.  However, it is sometimes useful to freeze
15854     the version of 'libstdc++' used by the program without going all
15855     the way to a fully static link.  The '-static-libstdc++' option
15856     directs the 'g++' driver to link 'libstdc++' statically, without
15857     necessarily linking other libraries statically.
15858
15859'-symbolic'
15860     Bind references to global symbols when building a shared object.
15861     Warn about any unresolved references (unless overridden by the link
15862     editor option '-Xlinker -z -Xlinker defs').  Only a few systems
15863     support this option.
15864
15865'-T SCRIPT'
15866     Use SCRIPT as the linker script.  This option is supported by most
15867     systems using the GNU linker.  On some targets, such as bare-board
15868     targets without an operating system, the '-T' option may be
15869     required when linking to avoid references to undefined symbols.
15870
15871'-Xlinker OPTION'
15872     Pass OPTION as an option to the linker.  You can use this to supply
15873     system-specific linker options that GCC does not recognize.
15874
15875     If you want to pass an option that takes a separate argument, you
15876     must use '-Xlinker' twice, once for the option and once for the
15877     argument.  For example, to pass '-assert definitions', you must
15878     write '-Xlinker -assert -Xlinker definitions'.  It does not work to
15879     write '-Xlinker "-assert definitions"', because this passes the
15880     entire string as a single argument, which is not what the linker
15881     expects.
15882
15883     When using the GNU linker, it is usually more convenient to pass
15884     arguments to linker options using the 'OPTION=VALUE' syntax than as
15885     separate arguments.  For example, you can specify '-Xlinker
15886     -Map=output.map' rather than '-Xlinker -Map -Xlinker output.map'.
15887     Other linkers may not support this syntax for command-line options.
15888
15889'-Wl,OPTION'
15890     Pass OPTION as an option to the linker.  If OPTION contains commas,
15891     it is split into multiple options at the commas.  You can use this
15892     syntax to pass an argument to the option.  For example,
15893     '-Wl,-Map,output.map' passes '-Map output.map' to the linker.  When
15894     using the GNU linker, you can also get the same effect with
15895     '-Wl,-Map=output.map'.
15896
15897'-u SYMBOL'
15898     Pretend the symbol SYMBOL is undefined, to force linking of library
15899     modules to define it.  You can use '-u' multiple times with
15900     different symbols to force loading of additional library modules.
15901
15902'-z KEYWORD'
15903     '-z' is passed directly on to the linker along with the keyword
15904     KEYWORD.  See the section in the documentation of your linker for
15905     permitted values and their meanings.
15906
15907   ---------- Footnotes ----------
15908
15909   (1) On some systems, 'gcc -shared' needs to build supplementary stub
15910code for constructors to work.  On multi-libbed systems, 'gcc -shared'
15911must select the correct support libraries to link against.  Failing to
15912supply the correct flags may lead to subtle defects.  Supplying them in
15913cases where they are not necessary is innocuous.
15914
15915
15916File: gcc.info,  Node: Directory Options,  Next: Code Gen Options,  Prev: Link Options,  Up: Invoking GCC
15917
159183.16 Options for Directory Search
15919=================================
15920
15921These options specify directories to search for header files, for
15922libraries and for parts of the compiler:
15923
15924'-I DIR'
15925'-iquote DIR'
15926'-isystem DIR'
15927'-idirafter DIR'
15928     Add the directory DIR to the list of directories to be searched for
15929     header files during preprocessing.  If DIR begins with '=' or
15930     '$SYSROOT', then the '=' or '$SYSROOT' is replaced by the sysroot
15931     prefix; see '--sysroot' and '-isysroot'.
15932
15933     Directories specified with '-iquote' apply only to the quote form
15934     of the directive, '#include "FILE"'.  Directories specified with
15935     '-I', '-isystem', or '-idirafter' apply to lookup for both the
15936     '#include "FILE"' and '#include <FILE>' directives.
15937
15938     You can specify any number or combination of these options on the
15939     command line to search for header files in several directories.
15940     The lookup order is as follows:
15941
15942       1. For the quote form of the include directive, the directory of
15943          the current file is searched first.
15944
15945       2. For the quote form of the include directive, the directories
15946          specified by '-iquote' options are searched in left-to-right
15947          order, as they appear on the command line.
15948
15949       3. Directories specified with '-I' options are scanned in
15950          left-to-right order.
15951
15952       4. Directories specified with '-isystem' options are scanned in
15953          left-to-right order.
15954
15955       5. Standard system directories are scanned.
15956
15957       6. Directories specified with '-idirafter' options are scanned in
15958          left-to-right order.
15959
15960     You can use '-I' to override a system header file, substituting
15961     your own version, since these directories are searched before the
15962     standard system header file directories.  However, you should not
15963     use this option to add directories that contain vendor-supplied
15964     system header files; use '-isystem' for that.
15965
15966     The '-isystem' and '-idirafter' options also mark the directory as
15967     a system directory, so that it gets the same special treatment that
15968     is applied to the standard system directories.
15969
15970     If a standard system include directory, or a directory specified
15971     with '-isystem', is also specified with '-I', the '-I' option is
15972     ignored.  The directory is still searched but as a system directory
15973     at its normal position in the system include chain.  This is to
15974     ensure that GCC's procedure to fix buggy system headers and the
15975     ordering for the '#include_next' directive are not inadvertently
15976     changed.  If you really need to change the search order for system
15977     directories, use the '-nostdinc' and/or '-isystem' options.
15978
15979'-I-'
15980     Split the include path.  This option has been deprecated.  Please
15981     use '-iquote' instead for '-I' directories before the '-I-' and
15982     remove the '-I-' option.
15983
15984     Any directories specified with '-I' options before '-I-' are
15985     searched only for headers requested with '#include "FILE"'; they
15986     are not searched for '#include <FILE>'.  If additional directories
15987     are specified with '-I' options after the '-I-', those directories
15988     are searched for all '#include' directives.
15989
15990     In addition, '-I-' inhibits the use of the directory of the current
15991     file directory as the first search directory for '#include "FILE"'.
15992     There is no way to override this effect of '-I-'.
15993
15994'-iprefix PREFIX'
15995     Specify PREFIX as the prefix for subsequent '-iwithprefix' options.
15996     If the prefix represents a directory, you should include the final
15997     '/'.
15998
15999'-iwithprefix DIR'
16000'-iwithprefixbefore DIR'
16001     Append DIR to the prefix specified previously with '-iprefix', and
16002     add the resulting directory to the include search path.
16003     '-iwithprefixbefore' puts it in the same place '-I' would;
16004     '-iwithprefix' puts it where '-idirafter' would.
16005
16006'-isysroot DIR'
16007     This option is like the '--sysroot' option, but applies only to
16008     header files (except for Darwin targets, where it applies to both
16009     header files and libraries).  See the '--sysroot' option for more
16010     information.
16011
16012'-imultilib DIR'
16013     Use DIR as a subdirectory of the directory containing
16014     target-specific C++ headers.
16015
16016'-nostdinc'
16017     Do not search the standard system directories for header files.
16018     Only the directories explicitly specified with '-I', '-iquote',
16019     '-isystem', and/or '-idirafter' options (and the directory of the
16020     current file, if appropriate) are searched.
16021
16022'-nostdinc++'
16023     Do not search for header files in the C++-specific standard
16024     directories, but do still search the other standard directories.
16025     (This option is used when building the C++ library.)
16026
16027'-iplugindir=DIR'
16028     Set the directory to search for plugins that are passed by
16029     '-fplugin=NAME' instead of '-fplugin=PATH/NAME.so'.  This option is
16030     not meant to be used by the user, but only passed by the driver.
16031
16032'-LDIR'
16033     Add directory DIR to the list of directories to be searched for
16034     '-l'.
16035
16036'-BPREFIX'
16037     This option specifies where to find the executables, libraries,
16038     include files, and data files of the compiler itself.
16039
16040     The compiler driver program runs one or more of the subprograms
16041     'cpp', 'cc1', 'as' and 'ld'.  It tries PREFIX as a prefix for each
16042     program it tries to run, both with and without 'MACHINE/VERSION/'
16043     for the corresponding target machine and compiler version.
16044
16045     For each subprogram to be run, the compiler driver first tries the
16046     '-B' prefix, if any.  If that name is not found, or if '-B' is not
16047     specified, the driver tries two standard prefixes, '/usr/lib/gcc/'
16048     and '/usr/local/lib/gcc/'.  If neither of those results in a file
16049     name that is found, the unmodified program name is searched for
16050     using the directories specified in your 'PATH' environment
16051     variable.
16052
16053     The compiler checks to see if the path provided by '-B' refers to a
16054     directory, and if necessary it adds a directory separator character
16055     at the end of the path.
16056
16057     '-B' prefixes that effectively specify directory names also apply
16058     to libraries in the linker, because the compiler translates these
16059     options into '-L' options for the linker.  They also apply to
16060     include files in the preprocessor, because the compiler translates
16061     these options into '-isystem' options for the preprocessor.  In
16062     this case, the compiler appends 'include' to the prefix.
16063
16064     The runtime support file 'libgcc.a' can also be searched for using
16065     the '-B' prefix, if needed.  If it is not found there, the two
16066     standard prefixes above are tried, and that is all.  The file is
16067     left out of the link if it is not found by those means.
16068
16069     Another way to specify a prefix much like the '-B' prefix is to use
16070     the environment variable 'GCC_EXEC_PREFIX'.  *Note Environment
16071     Variables::.
16072
16073     As a special kludge, if the path provided by '-B' is
16074     '[dir/]stageN/', where N is a number in the range 0 to 9, then it
16075     is replaced by '[dir/]include'.  This is to help with
16076     boot-strapping the compiler.
16077
16078'-no-canonical-prefixes'
16079     Do not expand any symbolic links, resolve references to '/../' or
16080     '/./', or make the path absolute when generating a relative prefix.
16081
16082'--sysroot=DIR'
16083     Use DIR as the logical root directory for headers and libraries.
16084     For example, if the compiler normally searches for headers in
16085     '/usr/include' and libraries in '/usr/lib', it instead searches
16086     'DIR/usr/include' and 'DIR/usr/lib'.
16087
16088     If you use both this option and the '-isysroot' option, then the
16089     '--sysroot' option applies to libraries, but the '-isysroot' option
16090     applies to header files.
16091
16092     The GNU linker (beginning with version 2.16) has the necessary
16093     support for this option.  If your linker does not support this
16094     option, the header file aspect of '--sysroot' still works, but the
16095     library aspect does not.
16096
16097'--no-sysroot-suffix'
16098     For some targets, a suffix is added to the root directory specified
16099     with '--sysroot', depending on the other options used, so that
16100     headers may for example be found in 'DIR/SUFFIX/usr/include'
16101     instead of 'DIR/usr/include'.  This option disables the addition of
16102     such a suffix.
16103
16104
16105File: gcc.info,  Node: Code Gen Options,  Next: Developer Options,  Prev: Directory Options,  Up: Invoking GCC
16106
161073.17 Options for Code Generation Conventions
16108============================================
16109
16110These machine-independent options control the interface conventions used
16111in code generation.
16112
16113 Most of them have both positive and negative forms; the negative form
16114of '-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
16115listed--the one that is not the default.  You can figure out the other
16116form by either removing 'no-' or adding it.
16117
16118'-fstack-reuse=REUSE-LEVEL'
16119     This option controls stack space reuse for user declared local/auto
16120     variables and compiler generated temporaries.  REUSE_LEVEL can be
16121     'all', 'named_vars', or 'none'.  'all' enables stack reuse for all
16122     local variables and temporaries, 'named_vars' enables the reuse
16123     only for user defined local variables with names, and 'none'
16124     disables stack reuse completely.  The default value is 'all'.  The
16125     option is needed when the program extends the lifetime of a scoped
16126     local variable or a compiler generated temporary beyond the end
16127     point defined by the language.  When a lifetime of a variable ends,
16128     and if the variable lives in memory, the optimizing compiler has
16129     the freedom to reuse its stack space with other temporaries or
16130     scoped local variables whose live range does not overlap with it.
16131     Legacy code extending local lifetime is likely to break with the
16132     stack reuse optimization.
16133
16134     For example,
16135
16136             int *p;
16137             {
16138               int local1;
16139
16140               p = &local1;
16141               local1 = 10;
16142               ....
16143             }
16144             {
16145                int local2;
16146                local2 = 20;
16147                ...
16148             }
16149
16150             if (*p == 10)  // out of scope use of local1
16151               {
16152
16153               }
16154
16155     Another example:
16156
16157             struct A
16158             {
16159                 A(int k) : i(k), j(k) { }
16160                 int i;
16161                 int j;
16162             };
16163
16164             A *ap;
16165
16166             void foo(const A& ar)
16167             {
16168                ap = &ar;
16169             }
16170
16171             void bar()
16172             {
16173                foo(A(10)); // temp object's lifetime ends when foo returns
16174
16175                {
16176                  A a(20);
16177                  ....
16178                }
16179                ap->i+= 10;  // ap references out of scope temp whose space
16180                             // is reused with a. What is the value of ap->i?
16181             }
16182
16183
16184     The lifetime of a compiler generated temporary is well defined by
16185     the C++ standard.  When a lifetime of a temporary ends, and if the
16186     temporary lives in memory, the optimizing compiler has the freedom
16187     to reuse its stack space with other temporaries or scoped local
16188     variables whose live range does not overlap with it.  However some
16189     of the legacy code relies on the behavior of older compilers in
16190     which temporaries' stack space is not reused, the aggressive stack
16191     reuse can lead to runtime errors.  This option is used to control
16192     the temporary stack reuse optimization.
16193
16194'-ftrapv'
16195     This option generates traps for signed overflow on addition,
16196     subtraction, multiplication operations.  The options '-ftrapv' and
16197     '-fwrapv' override each other, so using '-ftrapv' '-fwrapv' on the
16198     command-line results in '-fwrapv' being effective.  Note that only
16199     active options override, so using '-ftrapv' '-fwrapv' '-fno-wrapv'
16200     on the command-line results in '-ftrapv' being effective.
16201
16202'-fwrapv'
16203     This option instructs the compiler to assume that signed arithmetic
16204     overflow of addition, subtraction and multiplication wraps around
16205     using twos-complement representation.  This flag enables some
16206     optimizations and disables others.  The options '-ftrapv' and
16207     '-fwrapv' override each other, so using '-ftrapv' '-fwrapv' on the
16208     command-line results in '-fwrapv' being effective.  Note that only
16209     active options override, so using '-ftrapv' '-fwrapv' '-fno-wrapv'
16210     on the command-line results in '-ftrapv' being effective.
16211
16212'-fwrapv-pointer'
16213     This option instructs the compiler to assume that pointer
16214     arithmetic overflow on addition and subtraction wraps around using
16215     twos-complement representation.  This flag disables some
16216     optimizations which assume pointer overflow is invalid.
16217
16218'-fstrict-overflow'
16219     This option implies '-fno-wrapv' '-fno-wrapv-pointer' and when
16220     negated implies '-fwrapv' '-fwrapv-pointer'.
16221
16222'-fexceptions'
16223     Enable exception handling.  Generates extra code needed to
16224     propagate exceptions.  For some targets, this implies GCC generates
16225     frame unwind information for all functions, which can produce
16226     significant data size overhead, although it does not affect
16227     execution.  If you do not specify this option, GCC enables it by
16228     default for languages like C++ that normally require exception
16229     handling, and disables it for languages like C that do not normally
16230     require it.  However, you may need to enable this option when
16231     compiling C code that needs to interoperate properly with exception
16232     handlers written in C++.  You may also wish to disable this option
16233     if you are compiling older C++ programs that don't use exception
16234     handling.
16235
16236'-fnon-call-exceptions'
16237     Generate code that allows trapping instructions to throw
16238     exceptions.  Note that this requires platform-specific runtime
16239     support that does not exist everywhere.  Moreover, it only allows
16240     _trapping_ instructions to throw exceptions, i.e. memory references
16241     or floating-point instructions.  It does not allow exceptions to be
16242     thrown from arbitrary signal handlers such as 'SIGALRM'.  This
16243     enables '-fexceptions'.
16244
16245'-fdelete-dead-exceptions'
16246     Consider that instructions that may throw exceptions but don't
16247     otherwise contribute to the execution of the program can be
16248     optimized away.  This does not affect calls to functions except
16249     those with the 'pure' or 'const' attributes.  This option is
16250     enabled by default for the Ada and C++ compilers, as permitted by
16251     the language specifications.  Optimization passes that cause dead
16252     exceptions to be removed are enabled independently at different
16253     optimization levels.
16254
16255'-funwind-tables'
16256     Similar to '-fexceptions', except that it just generates any needed
16257     static data, but does not affect the generated code in any other
16258     way.  You normally do not need to enable this option; instead, a
16259     language processor that needs this handling enables it on your
16260     behalf.
16261
16262'-fasynchronous-unwind-tables'
16263     Generate unwind table in DWARF format, if supported by target
16264     machine.  The table is exact at each instruction boundary, so it
16265     can be used for stack unwinding from asynchronous events (such as
16266     debugger or garbage collector).
16267
16268'-fno-gnu-unique'
16269     On systems with recent GNU assembler and C library, the C++
16270     compiler uses the 'STB_GNU_UNIQUE' binding to make sure that
16271     definitions of template static data members and static local
16272     variables in inline functions are unique even in the presence of
16273     'RTLD_LOCAL'; this is necessary to avoid problems with a library
16274     used by two different 'RTLD_LOCAL' plugins depending on a
16275     definition in one of them and therefore disagreeing with the other
16276     one about the binding of the symbol.  But this causes 'dlclose' to
16277     be ignored for affected DSOs; if your program relies on
16278     reinitialization of a DSO via 'dlclose' and 'dlopen', you can use
16279     '-fno-gnu-unique'.
16280
16281'-fpcc-struct-return'
16282     Return "short" 'struct' and 'union' values in memory like longer
16283     ones, rather than in registers.  This convention is less efficient,
16284     but it has the advantage of allowing intercallability between
16285     GCC-compiled files and files compiled with other compilers,
16286     particularly the Portable C Compiler (pcc).
16287
16288     The precise convention for returning structures in memory depends
16289     on the target configuration macros.
16290
16291     Short structures and unions are those whose size and alignment
16292     match that of some integer type.
16293
16294     *Warning:* code compiled with the '-fpcc-struct-return' switch is
16295     not binary compatible with code compiled with the
16296     '-freg-struct-return' switch.  Use it to conform to a non-default
16297     application binary interface.
16298
16299'-freg-struct-return'
16300     Return 'struct' and 'union' values in registers when possible.
16301     This is more efficient for small structures than
16302     '-fpcc-struct-return'.
16303
16304     If you specify neither '-fpcc-struct-return' nor
16305     '-freg-struct-return', GCC defaults to whichever convention is
16306     standard for the target.  If there is no standard convention, GCC
16307     defaults to '-fpcc-struct-return', except on targets where GCC is
16308     the principal compiler.  In those cases, we can choose the
16309     standard, and we chose the more efficient register return
16310     alternative.
16311
16312     *Warning:* code compiled with the '-freg-struct-return' switch is
16313     not binary compatible with code compiled with the
16314     '-fpcc-struct-return' switch.  Use it to conform to a non-default
16315     application binary interface.
16316
16317'-fshort-enums'
16318     Allocate to an 'enum' type only as many bytes as it needs for the
16319     declared range of possible values.  Specifically, the 'enum' type
16320     is equivalent to the smallest integer type that has enough room.
16321
16322     *Warning:* the '-fshort-enums' switch causes GCC to generate code
16323     that is not binary compatible with code generated without that
16324     switch.  Use it to conform to a non-default application binary
16325     interface.
16326
16327'-fshort-wchar'
16328     Override the underlying type for 'wchar_t' to be 'short unsigned
16329     int' instead of the default for the target.  This option is useful
16330     for building programs to run under WINE.
16331
16332     *Warning:* the '-fshort-wchar' switch causes GCC to generate code
16333     that is not binary compatible with code generated without that
16334     switch.  Use it to conform to a non-default application binary
16335     interface.
16336
16337'-fcommon'
16338     In C code, this option controls the placement of global variables
16339     defined without an initializer, known as "tentative definitions" in
16340     the C standard.  Tentative definitions are distinct from
16341     declarations of a variable with the 'extern' keyword, which do not
16342     allocate storage.
16343
16344     The default is '-fno-common', which specifies that the compiler
16345     places uninitialized global variables in the BSS section of the
16346     object file.  This inhibits the merging of tentative definitions by
16347     the linker so you get a multiple-definition error if the same
16348     variable is accidentally defined in more than one compilation unit.
16349
16350     The '-fcommon' places uninitialized global variables in a common
16351     block.  This allows the linker to resolve all tentative definitions
16352     of the same variable in different compilation units to the same
16353     object, or to a non-tentative definition.  This behavior is
16354     inconsistent with C++, and on many targets implies a speed and code
16355     size penalty on global variable references.  It is mainly useful to
16356     enable legacy code to link without errors.
16357
16358'-fno-ident'
16359     Ignore the '#ident' directive.
16360
16361'-finhibit-size-directive'
16362     Don't output a '.size' assembler directive, or anything else that
16363     would cause trouble if the function is split in the middle, and the
16364     two halves are placed at locations far apart in memory.  This
16365     option is used when compiling 'crtstuff.c'; you should not need to
16366     use it for anything else.
16367
16368'-fverbose-asm'
16369     Put extra commentary information in the generated assembly code to
16370     make it more readable.  This option is generally only of use to
16371     those who actually need to read the generated assembly code
16372     (perhaps while debugging the compiler itself).
16373
16374     '-fno-verbose-asm', the default, causes the extra information to be
16375     omitted and is useful when comparing two assembler files.
16376
16377     The added comments include:
16378
16379        * information on the compiler version and command-line options,
16380
16381        * the source code lines associated with the assembly
16382          instructions, in the form FILENAME:LINENUMBER:CONTENT OF LINE,
16383
16384        * hints on which high-level expressions correspond to the
16385          various assembly instruction operands.
16386
16387     For example, given this C source file:
16388
16389          int test (int n)
16390          {
16391            int i;
16392            int total = 0;
16393
16394            for (i = 0; i < n; i++)
16395              total += i * i;
16396
16397            return total;
16398          }
16399
16400     compiling to (x86_64) assembly via '-S' and emitting the result
16401     direct to stdout via '-o' '-'
16402
16403          gcc -S test.c -fverbose-asm -Os -o -
16404
16405     gives output similar to this:
16406
16407          	.file	"test.c"
16408          # GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64-pc-linux-gnu)
16409            [...snip...]
16410          # options passed:
16411            [...snip...]
16412
16413          	.text
16414          	.globl	test
16415          	.type	test, @function
16416          test:
16417          .LFB0:
16418          	.cfi_startproc
16419          # test.c:4:   int total = 0;
16420          	xorl	%eax, %eax	# <retval>
16421          # test.c:6:   for (i = 0; i < n; i++)
16422          	xorl	%edx, %edx	# i
16423          .L2:
16424          # test.c:6:   for (i = 0; i < n; i++)
16425          	cmpl	%edi, %edx	# n, i
16426          	jge	.L5	#,
16427          # test.c:7:     total += i * i;
16428          	movl	%edx, %ecx	# i, tmp92
16429          	imull	%edx, %ecx	# i, tmp92
16430          # test.c:6:   for (i = 0; i < n; i++)
16431          	incl	%edx	# i
16432          # test.c:7:     total += i * i;
16433          	addl	%ecx, %eax	# tmp92, <retval>
16434          	jmp	.L2	#
16435          .L5:
16436          # test.c:10: }
16437          	ret
16438          	.cfi_endproc
16439          .LFE0:
16440          	.size	test, .-test
16441          	.ident	"GCC: (GNU) 7.0.0 20160809 (experimental)"
16442          	.section	.note.GNU-stack,"",@progbits
16443
16444     The comments are intended for humans rather than machines and hence
16445     the precise format of the comments is subject to change.
16446
16447'-frecord-gcc-switches'
16448     This switch causes the command line used to invoke the compiler to
16449     be recorded into the object file that is being created.  This
16450     switch is only implemented on some targets and the exact format of
16451     the recording is target and binary file format dependent, but it
16452     usually takes the form of a section containing ASCII text.  This
16453     switch is related to the '-fverbose-asm' switch, but that switch
16454     only records information in the assembler output file as comments,
16455     so it never reaches the object file.  See also
16456     '-grecord-gcc-switches' for another way of storing compiler options
16457     into the object file.
16458
16459'-fpic'
16460     Generate position-independent code (PIC) suitable for use in a
16461     shared library, if supported for the target machine.  Such code
16462     accesses all constant addresses through a global offset table
16463     (GOT).  The dynamic loader resolves the GOT entries when the
16464     program starts (the dynamic loader is not part of GCC; it is part
16465     of the operating system).  If the GOT size for the linked
16466     executable exceeds a machine-specific maximum size, you get an
16467     error message from the linker indicating that '-fpic' does not
16468     work; in that case, recompile with '-fPIC' instead.  (These
16469     maximums are 8k on the SPARC, 28k on AArch64 and 32k on the m68k
16470     and RS/6000.  The x86 has no such limit.)
16471
16472     Position-independent code requires special support, and therefore
16473     works only on certain machines.  For the x86, GCC supports PIC for
16474     System V but not for the Sun 386i.  Code generated for the IBM
16475     RS/6000 is always position-independent.
16476
16477     When this flag is set, the macros '__pic__' and '__PIC__' are
16478     defined to 1.
16479
16480'-fPIC'
16481     If supported for the target machine, emit position-independent
16482     code, suitable for dynamic linking and avoiding any limit on the
16483     size of the global offset table.  This option makes a difference on
16484     AArch64, m68k, PowerPC and SPARC.
16485
16486     Position-independent code requires special support, and therefore
16487     works only on certain machines.
16488
16489     When this flag is set, the macros '__pic__' and '__PIC__' are
16490     defined to 2.
16491
16492'-fpie'
16493'-fPIE'
16494     These options are similar to '-fpic' and '-fPIC', but the generated
16495     position-independent code can be only linked into executables.
16496     Usually these options are used to compile code that will be linked
16497     using the '-pie' GCC option.
16498
16499     '-fpie' and '-fPIE' both define the macros '__pie__' and '__PIE__'.
16500     The macros have the value 1 for '-fpie' and 2 for '-fPIE'.
16501
16502'-fno-plt'
16503     Do not use the PLT for external function calls in
16504     position-independent code.  Instead, load the callee address at
16505     call sites from the GOT and branch to it.  This leads to more
16506     efficient code by eliminating PLT stubs and exposing GOT loads to
16507     optimizations.  On architectures such as 32-bit x86 where PLT stubs
16508     expect the GOT pointer in a specific register, this gives more
16509     register allocation freedom to the compiler.  Lazy binding requires
16510     use of the PLT; with '-fno-plt' all external symbols are resolved
16511     at load time.
16512
16513     Alternatively, the function attribute 'noplt' can be used to avoid
16514     calls through the PLT for specific external functions.
16515
16516     In position-dependent code, a few targets also convert calls to
16517     functions that are marked to not use the PLT to use the GOT
16518     instead.
16519
16520'-fno-jump-tables'
16521     Do not use jump tables for switch statements even where it would be
16522     more efficient than other code generation strategies.  This option
16523     is of use in conjunction with '-fpic' or '-fPIC' for building code
16524     that forms part of a dynamic linker and cannot reference the
16525     address of a jump table.  On some targets, jump tables do not
16526     require a GOT and this option is not needed.
16527
16528'-fno-bit-tests'
16529     Do not use bit tests for switch statements even where it would be
16530     more efficient than other code generation strategies.
16531
16532'-ffixed-REG'
16533     Treat the register named REG as a fixed register; generated code
16534     should never refer to it (except perhaps as a stack pointer, frame
16535     pointer or in some other fixed role).
16536
16537     REG must be the name of a register.  The register names accepted
16538     are machine-specific and are defined in the 'REGISTER_NAMES' macro
16539     in the machine description macro file.
16540
16541     This flag does not have a negative form, because it specifies a
16542     three-way choice.
16543
16544'-fcall-used-REG'
16545     Treat the register named REG as an allocable register that is
16546     clobbered by function calls.  It may be allocated for temporaries
16547     or variables that do not live across a call.  Functions compiled
16548     this way do not save and restore the register REG.
16549
16550     It is an error to use this flag with the frame pointer or stack
16551     pointer.  Use of this flag for other registers that have fixed
16552     pervasive roles in the machine's execution model produces
16553     disastrous results.
16554
16555     This flag does not have a negative form, because it specifies a
16556     three-way choice.
16557
16558'-fcall-saved-REG'
16559     Treat the register named REG as an allocable register saved by
16560     functions.  It may be allocated even for temporaries or variables
16561     that live across a call.  Functions compiled this way save and
16562     restore the register REG if they use it.
16563
16564     It is an error to use this flag with the frame pointer or stack
16565     pointer.  Use of this flag for other registers that have fixed
16566     pervasive roles in the machine's execution model produces
16567     disastrous results.
16568
16569     A different sort of disaster results from the use of this flag for
16570     a register in which function values may be returned.
16571
16572     This flag does not have a negative form, because it specifies a
16573     three-way choice.
16574
16575'-fpack-struct[=N]'
16576     Without a value specified, pack all structure members together
16577     without holes.  When a value is specified (which must be a small
16578     power of two), pack structure members according to this value,
16579     representing the maximum alignment (that is, objects with default
16580     alignment requirements larger than this are output potentially
16581     unaligned at the next fitting location.
16582
16583     *Warning:* the '-fpack-struct' switch causes GCC to generate code
16584     that is not binary compatible with code generated without that
16585     switch.  Additionally, it makes the code suboptimal.  Use it to
16586     conform to a non-default application binary interface.
16587
16588'-fleading-underscore'
16589     This option and its counterpart, '-fno-leading-underscore',
16590     forcibly change the way C symbols are represented in the object
16591     file.  One use is to help link with legacy assembly code.
16592
16593     *Warning:* the '-fleading-underscore' switch causes GCC to generate
16594     code that is not binary compatible with code generated without that
16595     switch.  Use it to conform to a non-default application binary
16596     interface.  Not all targets provide complete support for this
16597     switch.
16598
16599'-ftls-model=MODEL'
16600     Alter the thread-local storage model to be used (*note
16601     Thread-Local::).  The MODEL argument should be one of
16602     'global-dynamic', 'local-dynamic', 'initial-exec' or 'local-exec'.
16603     Note that the choice is subject to optimization: the compiler may
16604     use a more efficient model for symbols not visible outside of the
16605     translation unit, or if '-fpic' is not given on the command line.
16606
16607     The default without '-fpic' is 'initial-exec'; with '-fpic' the
16608     default is 'global-dynamic'.
16609
16610'-ftrampolines'
16611     For targets that normally need trampolines for nested functions,
16612     always generate them instead of using descriptors.  Otherwise, for
16613     targets that do not need them, like for example HP-PA or IA-64, do
16614     nothing.
16615
16616     A trampoline is a small piece of code that is created at run time
16617     on the stack when the address of a nested function is taken, and is
16618     used to call the nested function indirectly.  Therefore, it
16619     requires the stack to be made executable in order for the program
16620     to work properly.
16621
16622     '-fno-trampolines' is enabled by default on a language by language
16623     basis to let the compiler avoid generating them, if it computes
16624     that this is safe, and replace them with descriptors.  Descriptors
16625     are made up of data only, but the generated code must be prepared
16626     to deal with them.  As of this writing, '-fno-trampolines' is
16627     enabled by default only for Ada.
16628
16629     Moreover, code compiled with '-ftrampolines' and code compiled with
16630     '-fno-trampolines' are not binary compatible if nested functions
16631     are present.  This option must therefore be used on a program-wide
16632     basis and be manipulated with extreme care.
16633
16634     For languages other than Ada, the '-ftrampolines' and
16635     '-fno-trampolines' options currently have no effect, and
16636     trampolines are always generated on platforms that need them for
16637     nested functions.
16638
16639'-fvisibility=[default|internal|hidden|protected]'
16640     Set the default ELF image symbol visibility to the specified
16641     option--all symbols are marked with this unless overridden within
16642     the code.  Using this feature can very substantially improve
16643     linking and load times of shared object libraries, produce more
16644     optimized code, provide near-perfect API export and prevent symbol
16645     clashes.  It is *strongly* recommended that you use this in any
16646     shared objects you distribute.
16647
16648     Despite the nomenclature, 'default' always means public; i.e.,
16649     available to be linked against from outside the shared object.
16650     'protected' and 'internal' are pretty useless in real-world usage
16651     so the only other commonly used option is 'hidden'.  The default if
16652     '-fvisibility' isn't specified is 'default', i.e., make every
16653     symbol public.
16654
16655     A good explanation of the benefits offered by ensuring ELF symbols
16656     have the correct visibility is given by "How To Write Shared
16657     Libraries" by Ulrich Drepper (which can be found at
16658     <https://www.akkadia.org/drepper/>)--however a superior solution
16659     made possible by this option to marking things hidden when the
16660     default is public is to make the default hidden and mark things
16661     public.  This is the norm with DLLs on Windows and with
16662     '-fvisibility=hidden' and '__attribute__ ((visibility("default")))'
16663     instead of '__declspec(dllexport)' you get almost identical
16664     semantics with identical syntax.  This is a great boon to those
16665     working with cross-platform projects.
16666
16667     For those adding visibility support to existing code, you may find
16668     '#pragma GCC visibility' of use.  This works by you enclosing the
16669     declarations you wish to set visibility for with (for example)
16670     '#pragma GCC visibility push(hidden)' and '#pragma GCC visibility
16671     pop'.  Bear in mind that symbol visibility should be viewed *as
16672     part of the API interface contract* and thus all new code should
16673     always specify visibility when it is not the default; i.e.,
16674     declarations only for use within the local DSO should *always* be
16675     marked explicitly as hidden as so to avoid PLT indirection
16676     overheads--making this abundantly clear also aids readability and
16677     self-documentation of the code.  Note that due to ISO C++
16678     specification requirements, 'operator new' and 'operator delete'
16679     must always be of default visibility.
16680
16681     Be aware that headers from outside your project, in particular
16682     system headers and headers from any other library you use, may not
16683     be expecting to be compiled with visibility other than the default.
16684     You may need to explicitly say '#pragma GCC visibility
16685     push(default)' before including any such headers.
16686
16687     'extern' declarations are not affected by '-fvisibility', so a lot
16688     of code can be recompiled with '-fvisibility=hidden' with no
16689     modifications.  However, this means that calls to 'extern'
16690     functions with no explicit visibility use the PLT, so it is more
16691     effective to use '__attribute ((visibility))' and/or '#pragma GCC
16692     visibility' to tell the compiler which 'extern' declarations should
16693     be treated as hidden.
16694
16695     Note that '-fvisibility' does affect C++ vague linkage entities.
16696     This means that, for instance, an exception class that is be thrown
16697     between DSOs must be explicitly marked with default visibility so
16698     that the 'type_info' nodes are unified between the DSOs.
16699
16700     An overview of these techniques, their benefits and how to use them
16701     is at <https://gcc.gnu.org/wiki/Visibility>.
16702
16703'-fstrict-volatile-bitfields'
16704     This option should be used if accesses to volatile bit-fields (or
16705     other structure fields, although the compiler usually honors those
16706     types anyway) should use a single access of the width of the
16707     field's type, aligned to a natural alignment if possible.  For
16708     example, targets with memory-mapped peripheral registers might
16709     require all such accesses to be 16 bits wide; with this flag you
16710     can declare all peripheral bit-fields as 'unsigned short' (assuming
16711     short is 16 bits on these targets) to force GCC to use 16-bit
16712     accesses instead of, perhaps, a more efficient 32-bit access.
16713
16714     If this option is disabled, the compiler uses the most efficient
16715     instruction.  In the previous example, that might be a 32-bit load
16716     instruction, even though that accesses bytes that do not contain
16717     any portion of the bit-field, or memory-mapped registers unrelated
16718     to the one being updated.
16719
16720     In some cases, such as when the 'packed' attribute is applied to a
16721     structure field, it may not be possible to access the field with a
16722     single read or write that is correctly aligned for the target
16723     machine.  In this case GCC falls back to generating multiple
16724     accesses rather than code that will fault or truncate the result at
16725     run time.
16726
16727     Note: Due to restrictions of the C/C++11 memory model, write
16728     accesses are not allowed to touch non bit-field members.  It is
16729     therefore recommended to define all bits of the field's type as
16730     bit-field members.
16731
16732     The default value of this option is determined by the application
16733     binary interface for the target processor.
16734
16735'-fsync-libcalls'
16736     This option controls whether any out-of-line instance of the
16737     '__sync' family of functions may be used to implement the C++11
16738     '__atomic' family of functions.
16739
16740     The default value of this option is enabled, thus the only useful
16741     form of the option is '-fno-sync-libcalls'.  This option is used in
16742     the implementation of the 'libatomic' runtime library.
16743
16744
16745File: gcc.info,  Node: Developer Options,  Next: Submodel Options,  Prev: Code Gen Options,  Up: Invoking GCC
16746
167473.18 GCC Developer Options
16748==========================
16749
16750This section describes command-line options that are primarily of
16751interest to GCC developers, including options to support compiler
16752testing and investigation of compiler bugs and compile-time performance
16753problems.  This includes options that produce debug dumps at various
16754points in the compilation; that print statistics such as memory use and
16755execution time; and that print information about GCC's configuration,
16756such as where it searches for libraries.  You should rarely need to use
16757any of these options for ordinary compilation and linking tasks.
16758
16759 Many developer options that cause GCC to dump output to a file take an
16760optional '=FILENAME' suffix.  You can specify 'stdout' or '-' to dump to
16761standard output, and 'stderr' for standard error.
16762
16763 If '=FILENAME' is omitted, a default dump file name is constructed by
16764concatenating the base dump file name, a pass number, phase letter, and
16765pass name.  The base dump file name is the name of output file produced
16766by the compiler if explicitly specified and not an executable; otherwise
16767it is the source file name.  The pass number is determined by the order
16768passes are registered with the compiler's pass manager.  This is
16769generally the same as the order of execution, but passes registered by
16770plugins, target-specific passes, or passes that are otherwise registered
16771late are numbered higher than the pass named 'final', even if they are
16772executed earlier.  The phase letter is one of 'i' (inter-procedural
16773analysis), 'l' (language-specific), 'r' (RTL), or 't' (tree).  The files
16774are created in the directory of the output file.
16775
16776'-fcallgraph-info'
16777'-fcallgraph-info=MARKERS'
16778     Makes the compiler output callgraph information for the program, on
16779     a per-object-file basis.  The information is generated in the
16780     common VCG format.  It can be decorated with additional, per-node
16781     and/or per-edge information, if a list of comma-separated markers
16782     is additionally specified.  When the 'su' marker is specified, the
16783     callgraph is decorated with stack usage information; it is
16784     equivalent to '-fstack-usage'.  When the 'da' marker is specified,
16785     the callgraph is decorated with information about dynamically
16786     allocated objects.
16787
16788     When compiling with '-flto', no callgraph information is output
16789     along with the object file.  At LTO link time, '-fcallgraph-info'
16790     may generate multiple callgraph information files next to
16791     intermediate LTO output files.
16792
16793'-dLETTERS'
16794'-fdump-rtl-PASS'
16795'-fdump-rtl-PASS=FILENAME'
16796     Says to make debugging dumps during compilation at times specified
16797     by LETTERS.  This is used for debugging the RTL-based passes of the
16798     compiler.
16799
16800     Some '-dLETTERS' switches have different meaning when '-E' is used
16801     for preprocessing.  *Note Preprocessor Options::, for information
16802     about preprocessor-specific dump options.
16803
16804     Debug dumps can be enabled with a '-fdump-rtl' switch or some '-d'
16805     option LETTERS.  Here are the possible letters for use in PASS and
16806     LETTERS, and their meanings:
16807
16808     '-fdump-rtl-alignments'
16809          Dump after branch alignments have been computed.
16810
16811     '-fdump-rtl-asmcons'
16812          Dump after fixing rtl statements that have unsatisfied in/out
16813          constraints.
16814
16815     '-fdump-rtl-auto_inc_dec'
16816          Dump after auto-inc-dec discovery.  This pass is only run on
16817          architectures that have auto inc or auto dec instructions.
16818
16819     '-fdump-rtl-barriers'
16820          Dump after cleaning up the barrier instructions.
16821
16822     '-fdump-rtl-bbpart'
16823          Dump after partitioning hot and cold basic blocks.
16824
16825     '-fdump-rtl-bbro'
16826          Dump after block reordering.
16827
16828     '-fdump-rtl-btl1'
16829     '-fdump-rtl-btl2'
16830          '-fdump-rtl-btl1' and '-fdump-rtl-btl2' enable dumping after
16831          the two branch target load optimization passes.
16832
16833     '-fdump-rtl-bypass'
16834          Dump after jump bypassing and control flow optimizations.
16835
16836     '-fdump-rtl-combine'
16837          Dump after the RTL instruction combination pass.
16838
16839     '-fdump-rtl-compgotos'
16840          Dump after duplicating the computed gotos.
16841
16842     '-fdump-rtl-ce1'
16843     '-fdump-rtl-ce2'
16844     '-fdump-rtl-ce3'
16845          '-fdump-rtl-ce1', '-fdump-rtl-ce2', and '-fdump-rtl-ce3'
16846          enable dumping after the three if conversion passes.
16847
16848     '-fdump-rtl-cprop_hardreg'
16849          Dump after hard register copy propagation.
16850
16851     '-fdump-rtl-csa'
16852          Dump after combining stack adjustments.
16853
16854     '-fdump-rtl-cse1'
16855     '-fdump-rtl-cse2'
16856          '-fdump-rtl-cse1' and '-fdump-rtl-cse2' enable dumping after
16857          the two common subexpression elimination passes.
16858
16859     '-fdump-rtl-dce'
16860          Dump after the standalone dead code elimination passes.
16861
16862     '-fdump-rtl-dbr'
16863          Dump after delayed branch scheduling.
16864
16865     '-fdump-rtl-dce1'
16866     '-fdump-rtl-dce2'
16867          '-fdump-rtl-dce1' and '-fdump-rtl-dce2' enable dumping after
16868          the two dead store elimination passes.
16869
16870     '-fdump-rtl-eh'
16871          Dump after finalization of EH handling code.
16872
16873     '-fdump-rtl-eh_ranges'
16874          Dump after conversion of EH handling range regions.
16875
16876     '-fdump-rtl-expand'
16877          Dump after RTL generation.
16878
16879     '-fdump-rtl-fwprop1'
16880     '-fdump-rtl-fwprop2'
16881          '-fdump-rtl-fwprop1' and '-fdump-rtl-fwprop2' enable dumping
16882          after the two forward propagation passes.
16883
16884     '-fdump-rtl-gcse1'
16885     '-fdump-rtl-gcse2'
16886          '-fdump-rtl-gcse1' and '-fdump-rtl-gcse2' enable dumping after
16887          global common subexpression elimination.
16888
16889     '-fdump-rtl-init-regs'
16890          Dump after the initialization of the registers.
16891
16892     '-fdump-rtl-initvals'
16893          Dump after the computation of the initial value sets.
16894
16895     '-fdump-rtl-into_cfglayout'
16896          Dump after converting to cfglayout mode.
16897
16898     '-fdump-rtl-ira'
16899          Dump after iterated register allocation.
16900
16901     '-fdump-rtl-jump'
16902          Dump after the second jump optimization.
16903
16904     '-fdump-rtl-loop2'
16905          '-fdump-rtl-loop2' enables dumping after the rtl loop
16906          optimization passes.
16907
16908     '-fdump-rtl-mach'
16909          Dump after performing the machine dependent reorganization
16910          pass, if that pass exists.
16911
16912     '-fdump-rtl-mode_sw'
16913          Dump after removing redundant mode switches.
16914
16915     '-fdump-rtl-rnreg'
16916          Dump after register renumbering.
16917
16918     '-fdump-rtl-outof_cfglayout'
16919          Dump after converting from cfglayout mode.
16920
16921     '-fdump-rtl-peephole2'
16922          Dump after the peephole pass.
16923
16924     '-fdump-rtl-postreload'
16925          Dump after post-reload optimizations.
16926
16927     '-fdump-rtl-pro_and_epilogue'
16928          Dump after generating the function prologues and epilogues.
16929
16930     '-fdump-rtl-sched1'
16931     '-fdump-rtl-sched2'
16932          '-fdump-rtl-sched1' and '-fdump-rtl-sched2' enable dumping
16933          after the basic block scheduling passes.
16934
16935     '-fdump-rtl-ree'
16936          Dump after sign/zero extension elimination.
16937
16938     '-fdump-rtl-seqabstr'
16939          Dump after common sequence discovery.
16940
16941     '-fdump-rtl-shorten'
16942          Dump after shortening branches.
16943
16944     '-fdump-rtl-sibling'
16945          Dump after sibling call optimizations.
16946
16947     '-fdump-rtl-split1'
16948     '-fdump-rtl-split2'
16949     '-fdump-rtl-split3'
16950     '-fdump-rtl-split4'
16951     '-fdump-rtl-split5'
16952          These options enable dumping after five rounds of instruction
16953          splitting.
16954
16955     '-fdump-rtl-sms'
16956          Dump after modulo scheduling.  This pass is only run on some
16957          architectures.
16958
16959     '-fdump-rtl-stack'
16960          Dump after conversion from GCC's "flat register file"
16961          registers to the x87's stack-like registers.  This pass is
16962          only run on x86 variants.
16963
16964     '-fdump-rtl-subreg1'
16965     '-fdump-rtl-subreg2'
16966          '-fdump-rtl-subreg1' and '-fdump-rtl-subreg2' enable dumping
16967          after the two subreg expansion passes.
16968
16969     '-fdump-rtl-unshare'
16970          Dump after all rtl has been unshared.
16971
16972     '-fdump-rtl-vartrack'
16973          Dump after variable tracking.
16974
16975     '-fdump-rtl-vregs'
16976          Dump after converting virtual registers to hard registers.
16977
16978     '-fdump-rtl-web'
16979          Dump after live range splitting.
16980
16981     '-fdump-rtl-regclass'
16982     '-fdump-rtl-subregs_of_mode_init'
16983     '-fdump-rtl-subregs_of_mode_finish'
16984     '-fdump-rtl-dfinit'
16985     '-fdump-rtl-dfinish'
16986          These dumps are defined but always produce empty files.
16987
16988     '-da'
16989     '-fdump-rtl-all'
16990          Produce all the dumps listed above.
16991
16992     '-dA'
16993          Annotate the assembler output with miscellaneous debugging
16994          information.
16995
16996     '-dD'
16997          Dump all macro definitions, at the end of preprocessing, in
16998          addition to normal output.
16999
17000     '-dH'
17001          Produce a core dump whenever an error occurs.
17002
17003     '-dp'
17004          Annotate the assembler output with a comment indicating which
17005          pattern and alternative is used.  The length and cost of each
17006          instruction are also printed.
17007
17008     '-dP'
17009          Dump the RTL in the assembler output as a comment before each
17010          instruction.  Also turns on '-dp' annotation.
17011
17012     '-dx'
17013          Just generate RTL for a function instead of compiling it.
17014          Usually used with '-fdump-rtl-expand'.
17015
17016'-fdump-debug'
17017     Dump debugging information generated during the debug generation
17018     phase.
17019
17020'-fdump-earlydebug'
17021     Dump debugging information generated during the early debug
17022     generation phase.
17023
17024'-fdump-noaddr'
17025     When doing debugging dumps, suppress address output.  This makes it
17026     more feasible to use diff on debugging dumps for compiler
17027     invocations with different compiler binaries and/or different text
17028     / bss / data / heap / stack / dso start locations.
17029
17030'-freport-bug'
17031     Collect and dump debug information into a temporary file if an
17032     internal compiler error (ICE) occurs.
17033
17034'-fdump-unnumbered'
17035     When doing debugging dumps, suppress instruction numbers and
17036     address output.  This makes it more feasible to use diff on
17037     debugging dumps for compiler invocations with different options, in
17038     particular with and without '-g'.
17039
17040'-fdump-unnumbered-links'
17041     When doing debugging dumps (see '-d' option above), suppress
17042     instruction numbers for the links to the previous and next
17043     instructions in a sequence.
17044
17045'-fdump-ipa-SWITCH'
17046'-fdump-ipa-SWITCH-OPTIONS'
17047     Control the dumping at various stages of inter-procedural analysis
17048     language tree to a file.  The file name is generated by appending a
17049     switch specific suffix to the source file name, and the file is
17050     created in the same directory as the output file.  The following
17051     dumps are possible:
17052
17053     'all'
17054          Enables all inter-procedural analysis dumps.
17055
17056     'cgraph'
17057          Dumps information about call-graph optimization, unused
17058          function removal, and inlining decisions.
17059
17060     'inline'
17061          Dump after function inlining.
17062
17063     Additionally, the options '-optimized', '-missed', '-note', and
17064     '-all' can be provided, with the same meaning as for '-fopt-info',
17065     defaulting to '-optimized'.
17066
17067     For example, '-fdump-ipa-inline-optimized-missed' will emit
17068     information on callsites that were inlined, along with callsites
17069     that were not inlined.
17070
17071     By default, the dump will contain messages about successful
17072     optimizations (equivalent to '-optimized') together with low-level
17073     details about the analysis.
17074
17075'-fdump-lang'
17076     Dump language-specific information.  The file name is made by
17077     appending '.lang' to the source file name.
17078
17079'-fdump-lang-all'
17080'-fdump-lang-SWITCH'
17081'-fdump-lang-SWITCH-OPTIONS'
17082'-fdump-lang-SWITCH-OPTIONS=FILENAME'
17083     Control the dumping of language-specific information.  The OPTIONS
17084     and FILENAME portions behave as described in the '-fdump-tree'
17085     option.  The following SWITCH values are accepted:
17086
17087     'all'
17088
17089          Enable all language-specific dumps.
17090
17091     'class'
17092          Dump class hierarchy information.  Virtual table information
17093          is emitted unless ''slim'' is specified.  This option is
17094          applicable to C++ only.
17095
17096     'module'
17097          Dump module information.  Options 'lineno' (locations),
17098          'graph' (reachability), 'blocks' (clusters), 'uid'
17099          (serialization), 'alias' (mergeable), 'asmname' (Elrond), 'eh'
17100          (mapper) & 'vops' (macros) may provide additional information.
17101          This option is applicable to C++ only.
17102
17103     'raw'
17104          Dump the raw internal tree data.  This option is applicable to
17105          C++ only.
17106
17107'-fdump-passes'
17108     Print on 'stderr' the list of optimization passes that are turned
17109     on and off by the current command-line options.
17110
17111'-fdump-statistics-OPTION'
17112     Enable and control dumping of pass statistics in a separate file.
17113     The file name is generated by appending a suffix ending in
17114     '.statistics' to the source file name, and the file is created in
17115     the same directory as the output file.  If the '-OPTION' form is
17116     used, '-stats' causes counters to be summed over the whole
17117     compilation unit while '-details' dumps every event as the passes
17118     generate them.  The default with no option is to sum counters for
17119     each function compiled.
17120
17121'-fdump-tree-all'
17122'-fdump-tree-SWITCH'
17123'-fdump-tree-SWITCH-OPTIONS'
17124'-fdump-tree-SWITCH-OPTIONS=FILENAME'
17125     Control the dumping at various stages of processing the
17126     intermediate language tree to a file.  If the '-OPTIONS' form is
17127     used, OPTIONS is a list of '-' separated options which control the
17128     details of the dump.  Not all options are applicable to all dumps;
17129     those that are not meaningful are ignored.  The following options
17130     are available
17131
17132     'address'
17133          Print the address of each node.  Usually this is not
17134          meaningful as it changes according to the environment and
17135          source file.  Its primary use is for tying up a dump file with
17136          a debug environment.
17137     'asmname'
17138          If 'DECL_ASSEMBLER_NAME' has been set for a given decl, use
17139          that in the dump instead of 'DECL_NAME'.  Its primary use is
17140          ease of use working backward from mangled names in the
17141          assembly file.
17142     'slim'
17143          When dumping front-end intermediate representations, inhibit
17144          dumping of members of a scope or body of a function merely
17145          because that scope has been reached.  Only dump such items
17146          when they are directly reachable by some other path.
17147
17148          When dumping pretty-printed trees, this option inhibits
17149          dumping the bodies of control structures.
17150
17151          When dumping RTL, print the RTL in slim (condensed) form
17152          instead of the default LISP-like representation.
17153     'raw'
17154          Print a raw representation of the tree.  By default, trees are
17155          pretty-printed into a C-like representation.
17156     'details'
17157          Enable more detailed dumps (not honored by every dump option).
17158          Also include information from the optimization passes.
17159     'stats'
17160          Enable dumping various statistics about the pass (not honored
17161          by every dump option).
17162     'blocks'
17163          Enable showing basic block boundaries (disabled in raw dumps).
17164     'graph'
17165          For each of the other indicated dump files
17166          ('-fdump-rtl-PASS'), dump a representation of the control flow
17167          graph suitable for viewing with GraphViz to
17168          'FILE.PASSID.PASS.dot'.  Each function in the file is
17169          pretty-printed as a subgraph, so that GraphViz can render them
17170          all in a single plot.
17171
17172          This option currently only works for RTL dumps, and the RTL is
17173          always dumped in slim form.
17174     'vops'
17175          Enable showing virtual operands for every statement.
17176     'lineno'
17177          Enable showing line numbers for statements.
17178     'uid'
17179          Enable showing the unique ID ('DECL_UID') for each variable.
17180     'verbose'
17181          Enable showing the tree dump for each statement.
17182     'eh'
17183          Enable showing the EH region number holding each statement.
17184     'scev'
17185          Enable showing scalar evolution analysis details.
17186     'optimized'
17187          Enable showing optimization information (only available in
17188          certain passes).
17189     'missed'
17190          Enable showing missed optimization information (only available
17191          in certain passes).
17192     'note'
17193          Enable other detailed optimization information (only available
17194          in certain passes).
17195     'all'
17196          Turn on all options, except 'raw', 'slim', 'verbose' and
17197          'lineno'.
17198     'optall'
17199          Turn on all optimization options, i.e., 'optimized', 'missed',
17200          and 'note'.
17201
17202     To determine what tree dumps are available or find the dump for a
17203     pass of interest follow the steps below.
17204
17205       1. Invoke GCC with '-fdump-passes' and in the 'stderr' output
17206          look for a code that corresponds to the pass you are
17207          interested in.  For example, the codes 'tree-evrp',
17208          'tree-vrp1', and 'tree-vrp2' correspond to the three Value
17209          Range Propagation passes.  The number at the end distinguishes
17210          distinct invocations of the same pass.
17211       2. To enable the creation of the dump file, append the pass code
17212          to the '-fdump-' option prefix and invoke GCC with it.  For
17213          example, to enable the dump from the Early Value Range
17214          Propagation pass, invoke GCC with the '-fdump-tree-evrp'
17215          option.  Optionally, you may specify the name of the dump
17216          file.  If you don't specify one, GCC creates as described
17217          below.
17218       3. Find the pass dump in a file whose name is composed of three
17219          components separated by a period: the name of the source file
17220          GCC was invoked to compile, a numeric suffix indicating the
17221          pass number followed by the letter 't' for tree passes (and
17222          the letter 'r' for RTL passes), and finally the pass code.
17223          For example, the Early VRP pass dump might be in a file named
17224          'myfile.c.038t.evrp' in the current working directory.  Note
17225          that the numeric codes are not stable and may change from one
17226          version of GCC to another.
17227
17228'-fopt-info'
17229'-fopt-info-OPTIONS'
17230'-fopt-info-OPTIONS=FILENAME'
17231     Controls optimization dumps from various optimization passes.  If
17232     the '-OPTIONS' form is used, OPTIONS is a list of '-' separated
17233     option keywords to select the dump details and optimizations.
17234
17235     The OPTIONS can be divided into three groups:
17236       1. options describing what kinds of messages should be emitted,
17237       2. options describing the verbosity of the dump, and
17238       3. options describing which optimizations should be included.
17239     The options from each group can be freely mixed as they are
17240     non-overlapping.  However, in case of any conflicts, the later
17241     options override the earlier options on the command line.
17242
17243     The following options control which kinds of messages should be
17244     emitted:
17245
17246     'optimized'
17247          Print information when an optimization is successfully
17248          applied.  It is up to a pass to decide which information is
17249          relevant.  For example, the vectorizer passes print the source
17250          location of loops which are successfully vectorized.
17251     'missed'
17252          Print information about missed optimizations.  Individual
17253          passes control which information to include in the output.
17254     'note'
17255          Print verbose information about optimizations, such as certain
17256          transformations, more detailed messages about decisions etc.
17257     'all'
17258          Print detailed optimization information.  This includes
17259          'optimized', 'missed', and 'note'.
17260
17261     The following option controls the dump verbosity:
17262
17263     'internals'
17264          By default, only "high-level" messages are emitted.  This
17265          option enables additional, more detailed, messages, which are
17266          likely to only be of interest to GCC developers.
17267
17268     One or more of the following option keywords can be used to
17269     describe a group of optimizations:
17270
17271     'ipa'
17272          Enable dumps from all interprocedural optimizations.
17273     'loop'
17274          Enable dumps from all loop optimizations.
17275     'inline'
17276          Enable dumps from all inlining optimizations.
17277     'omp'
17278          Enable dumps from all OMP (Offloading and Multi Processing)
17279          optimizations.
17280     'vec'
17281          Enable dumps from all vectorization optimizations.
17282     'optall'
17283          Enable dumps from all optimizations.  This is a superset of
17284          the optimization groups listed above.
17285
17286     If OPTIONS is omitted, it defaults to 'optimized-optall', which
17287     means to dump messages about successful optimizations from all the
17288     passes, omitting messages that are treated as "internals".
17289
17290     If the FILENAME is provided, then the dumps from all the applicable
17291     optimizations are concatenated into the FILENAME.  Otherwise the
17292     dump is output onto 'stderr'.  Though multiple '-fopt-info' options
17293     are accepted, only one of them can include a FILENAME.  If other
17294     filenames are provided then all but the first such option are
17295     ignored.
17296
17297     Note that the output FILENAME is overwritten in case of multiple
17298     translation units.  If a combined output from multiple translation
17299     units is desired, 'stderr' should be used instead.
17300
17301     In the following example, the optimization info is output to
17302     'stderr':
17303
17304          gcc -O3 -fopt-info
17305
17306     This example:
17307          gcc -O3 -fopt-info-missed=missed.all
17308
17309     outputs missed optimization report from all the passes into
17310     'missed.all', and this one:
17311
17312          gcc -O2 -ftree-vectorize -fopt-info-vec-missed
17313
17314     prints information about missed optimization opportunities from
17315     vectorization passes on 'stderr'.  Note that
17316     '-fopt-info-vec-missed' is equivalent to '-fopt-info-missed-vec'.
17317     The order of the optimization group names and message types listed
17318     after '-fopt-info' does not matter.
17319
17320     As another example,
17321          gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
17322
17323     outputs information about missed optimizations as well as optimized
17324     locations from all the inlining passes into 'inline.txt'.
17325
17326     Finally, consider:
17327
17328          gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
17329
17330     Here the two output filenames 'vec.miss' and 'loop.opt' are in
17331     conflict since only one output file is allowed.  In this case, only
17332     the first option takes effect and the subsequent options are
17333     ignored.  Thus only 'vec.miss' is produced which contains dumps
17334     from the vectorizer about missed opportunities.
17335
17336'-fsave-optimization-record'
17337     Write a SRCFILE.opt-record.json.gz file detailing what
17338     optimizations were performed, for those optimizations that support
17339     '-fopt-info'.
17340
17341     This option is experimental and the format of the data within the
17342     compressed JSON file is subject to change.
17343
17344     It is roughly equivalent to a machine-readable version of
17345     '-fopt-info-all', as a collection of messages with source file,
17346     line number and column number, with the following additional data
17347     for each message:
17348
17349        * the execution count of the code being optimized, along with
17350          metadata about whether this was from actual profile data, or
17351          just an estimate, allowing consumers to prioritize messages by
17352          code hotness,
17353
17354        * the function name of the code being optimized, where
17355          applicable,
17356
17357        * the "inlining chain" for the code being optimized, so that
17358          when a function is inlined into several different places
17359          (which might themselves be inlined), the reader can
17360          distinguish between the copies,
17361
17362        * objects identifying those parts of the message that refer to
17363          expressions, statements or symbol-table nodes, which of these
17364          categories they are, and, when available, their source code
17365          location,
17366
17367        * the GCC pass that emitted the message, and
17368
17369        * the location in GCC's own code from which the message was
17370          emitted
17371
17372     Additionally, some messages are logically nested within other
17373     messages, reflecting implementation details of the optimization
17374     passes.
17375
17376'-fsched-verbose=N'
17377     On targets that use instruction scheduling, this option controls
17378     the amount of debugging output the scheduler prints to the dump
17379     files.
17380
17381     For N greater than zero, '-fsched-verbose' outputs the same
17382     information as '-fdump-rtl-sched1' and '-fdump-rtl-sched2'.  For N
17383     greater than one, it also output basic block probabilities,
17384     detailed ready list information and unit/insn info.  For N greater
17385     than two, it includes RTL at abort point, control-flow and regions
17386     info.  And for N over four, '-fsched-verbose' also includes
17387     dependence info.
17388
17389'-fenable-KIND-PASS'
17390'-fdisable-KIND-PASS=RANGE-LIST'
17391
17392     This is a set of options that are used to explicitly disable/enable
17393     optimization passes.  These options are intended for use for
17394     debugging GCC. Compiler users should use regular options for
17395     enabling/disabling passes instead.
17396
17397     '-fdisable-ipa-PASS'
17398          Disable IPA pass PASS.  PASS is the pass name.  If the same
17399          pass is statically invoked in the compiler multiple times, the
17400          pass name should be appended with a sequential number starting
17401          from 1.
17402
17403     '-fdisable-rtl-PASS'
17404     '-fdisable-rtl-PASS=RANGE-LIST'
17405          Disable RTL pass PASS.  PASS is the pass name.  If the same
17406          pass is statically invoked in the compiler multiple times, the
17407          pass name should be appended with a sequential number starting
17408          from 1.  RANGE-LIST is a comma-separated list of function
17409          ranges or assembler names.  Each range is a number pair
17410          separated by a colon.  The range is inclusive in both ends.
17411          If the range is trivial, the number pair can be simplified as
17412          a single number.  If the function's call graph node's UID
17413          falls within one of the specified ranges, the PASS is disabled
17414          for that function.  The UID is shown in the function header of
17415          a dump file, and the pass names can be dumped by using option
17416          '-fdump-passes'.
17417
17418     '-fdisable-tree-PASS'
17419     '-fdisable-tree-PASS=RANGE-LIST'
17420          Disable tree pass PASS.  See '-fdisable-rtl' for the
17421          description of option arguments.
17422
17423     '-fenable-ipa-PASS'
17424          Enable IPA pass PASS.  PASS is the pass name.  If the same
17425          pass is statically invoked in the compiler multiple times, the
17426          pass name should be appended with a sequential number starting
17427          from 1.
17428
17429     '-fenable-rtl-PASS'
17430     '-fenable-rtl-PASS=RANGE-LIST'
17431          Enable RTL pass PASS.  See '-fdisable-rtl' for option argument
17432          description and examples.
17433
17434     '-fenable-tree-PASS'
17435     '-fenable-tree-PASS=RANGE-LIST'
17436          Enable tree pass PASS.  See '-fdisable-rtl' for the
17437          description of option arguments.
17438
17439     Here are some examples showing uses of these options.
17440
17441
17442          # disable ccp1 for all functions
17443             -fdisable-tree-ccp1
17444          # disable complete unroll for function whose cgraph node uid is 1
17445             -fenable-tree-cunroll=1
17446          # disable gcse2 for functions at the following ranges [1,1],
17447          # [300,400], and [400,1000]
17448          # disable gcse2 for functions foo and foo2
17449             -fdisable-rtl-gcse2=foo,foo2
17450          # disable early inlining
17451             -fdisable-tree-einline
17452          # disable ipa inlining
17453             -fdisable-ipa-inline
17454          # enable tree full unroll
17455             -fenable-tree-unroll
17456
17457
17458'-fchecking'
17459'-fchecking=N'
17460     Enable internal consistency checking.  The default depends on the
17461     compiler configuration.  '-fchecking=2' enables further internal
17462     consistency checking that might affect code generation.
17463
17464'-frandom-seed=STRING'
17465     This option provides a seed that GCC uses in place of random
17466     numbers in generating certain symbol names that have to be
17467     different in every compiled file.  It is also used to place unique
17468     stamps in coverage data files and the object files that produce
17469     them.  You can use the '-frandom-seed' option to produce
17470     reproducibly identical object files.
17471
17472     The STRING can either be a number (decimal, octal or hex) or an
17473     arbitrary string (in which case it's converted to a number by
17474     computing CRC32).
17475
17476     The STRING should be different for every file you compile.
17477
17478'-save-temps'
17479     Store the usual "temporary" intermediate files permanently; name
17480     them as auxiliary output files, as specified described under
17481     '-dumpbase' and '-dumpdir'.
17482
17483     When used in combination with the '-x' command-line option,
17484     '-save-temps' is sensible enough to avoid overwriting an input
17485     source file with the same extension as an intermediate file.  The
17486     corresponding intermediate file may be obtained by renaming the
17487     source file before using '-save-temps'.
17488
17489'-save-temps=cwd'
17490     Equivalent to '-save-temps -dumpdir ./'.
17491
17492'-save-temps=obj'
17493     Equivalent to '-save-temps -dumpdir outdir/', where 'outdir/' is
17494     the directory of the output file specified after the '-o' option,
17495     including any directory separators.  If the '-o' option is not
17496     used, the '-save-temps=obj' switch behaves like '-save-temps=cwd'.
17497
17498'-time[=FILE]'
17499     Report the CPU time taken by each subprocess in the compilation
17500     sequence.  For C source files, this is the compiler proper and
17501     assembler (plus the linker if linking is done).
17502
17503     Without the specification of an output file, the output looks like
17504     this:
17505
17506          # cc1 0.12 0.01
17507          # as 0.00 0.01
17508
17509     The first number on each line is the "user time", that is time
17510     spent executing the program itself.  The second number is "system
17511     time", time spent executing operating system routines on behalf of
17512     the program.  Both numbers are in seconds.
17513
17514     With the specification of an output file, the output is appended to
17515     the named file, and it looks like this:
17516
17517          0.12 0.01 cc1 OPTIONS
17518          0.00 0.01 as OPTIONS
17519
17520     The "user time" and the "system time" are moved before the program
17521     name, and the options passed to the program are displayed, so that
17522     one can later tell what file was being compiled, and with which
17523     options.
17524
17525'-fdump-final-insns[=FILE]'
17526     Dump the final internal representation (RTL) to FILE.  If the
17527     optional argument is omitted (or if FILE is '.'), the name of the
17528     dump file is determined by appending '.gkd' to the dump base name,
17529     see '-dumpbase'.
17530
17531'-fcompare-debug[=OPTS]'
17532     If no error occurs during compilation, run the compiler a second
17533     time, adding OPTS and '-fcompare-debug-second' to the arguments
17534     passed to the second compilation.  Dump the final internal
17535     representation in both compilations, and print an error if they
17536     differ.
17537
17538     If the equal sign is omitted, the default '-gtoggle' is used.
17539
17540     The environment variable 'GCC_COMPARE_DEBUG', if defined, non-empty
17541     and nonzero, implicitly enables '-fcompare-debug'.  If
17542     'GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
17543     then it is used for OPTS, otherwise the default '-gtoggle' is used.
17544
17545     '-fcompare-debug=', with the equal sign but without OPTS, is
17546     equivalent to '-fno-compare-debug', which disables the dumping of
17547     the final representation and the second compilation, preventing
17548     even 'GCC_COMPARE_DEBUG' from taking effect.
17549
17550     To verify full coverage during '-fcompare-debug' testing, set
17551     'GCC_COMPARE_DEBUG' to say '-fcompare-debug-not-overridden', which
17552     GCC rejects as an invalid option in any actual compilation (rather
17553     than preprocessing, assembly or linking).  To get just a warning,
17554     setting 'GCC_COMPARE_DEBUG' to '-w%n-fcompare-debug not overridden'
17555     will do.
17556
17557'-fcompare-debug-second'
17558     This option is implicitly passed to the compiler for the second
17559     compilation requested by '-fcompare-debug', along with options to
17560     silence warnings, and omitting other options that would cause the
17561     compiler to produce output to files or to standard output as a side
17562     effect.  Dump files and preserved temporary files are renamed so as
17563     to contain the '.gk' additional extension during the second
17564     compilation, to avoid overwriting those generated by the first.
17565
17566     When this option is passed to the compiler driver, it causes the
17567     _first_ compilation to be skipped, which makes it useful for little
17568     other than debugging the compiler proper.
17569
17570'-gtoggle'
17571     Turn off generation of debug info, if leaving out this option
17572     generates it, or turn it on at level 2 otherwise.  The position of
17573     this argument in the command line does not matter; it takes effect
17574     after all other options are processed, and it does so only once, no
17575     matter how many times it is given.  This is mainly intended to be
17576     used with '-fcompare-debug'.
17577
17578'-fvar-tracking-assignments-toggle'
17579     Toggle '-fvar-tracking-assignments', in the same way that
17580     '-gtoggle' toggles '-g'.
17581
17582'-Q'
17583     Makes the compiler print out each function name as it is compiled,
17584     and print some statistics about each pass when it finishes.
17585
17586'-ftime-report'
17587     Makes the compiler print some statistics about the time consumed by
17588     each pass when it finishes.
17589
17590'-ftime-report-details'
17591     Record the time consumed by infrastructure parts separately for
17592     each pass.
17593
17594'-fira-verbose=N'
17595     Control the verbosity of the dump file for the integrated register
17596     allocator.  The default value is 5.  If the value N is greater or
17597     equal to 10, the dump output is sent to stderr using the same
17598     format as N minus 10.
17599
17600'-flto-report'
17601     Prints a report with internal details on the workings of the
17602     link-time optimizer.  The contents of this report vary from version
17603     to version.  It is meant to be useful to GCC developers when
17604     processing object files in LTO mode (via '-flto').
17605
17606     Disabled by default.
17607
17608'-flto-report-wpa'
17609     Like '-flto-report', but only print for the WPA phase of link-time
17610     optimization.
17611
17612'-fmem-report'
17613     Makes the compiler print some statistics about permanent memory
17614     allocation when it finishes.
17615
17616'-fmem-report-wpa'
17617     Makes the compiler print some statistics about permanent memory
17618     allocation for the WPA phase only.
17619
17620'-fpre-ipa-mem-report'
17621'-fpost-ipa-mem-report'
17622     Makes the compiler print some statistics about permanent memory
17623     allocation before or after interprocedural optimization.
17624
17625'-fprofile-report'
17626     Makes the compiler print some statistics about consistency of the
17627     (estimated) profile and effect of individual passes.
17628
17629'-fstack-usage'
17630     Makes the compiler output stack usage information for the program,
17631     on a per-function basis.  The filename for the dump is made by
17632     appending '.su' to the AUXNAME.  AUXNAME is generated from the name
17633     of the output file, if explicitly specified and it is not an
17634     executable, otherwise it is the basename of the source file.  An
17635     entry is made up of three fields:
17636
17637        * The name of the function.
17638        * A number of bytes.
17639        * One or more qualifiers: 'static', 'dynamic', 'bounded'.
17640
17641     The qualifier 'static' means that the function manipulates the
17642     stack statically: a fixed number of bytes are allocated for the
17643     frame on function entry and released on function exit; no stack
17644     adjustments are otherwise made in the function.  The second field
17645     is this fixed number of bytes.
17646
17647     The qualifier 'dynamic' means that the function manipulates the
17648     stack dynamically: in addition to the static allocation described
17649     above, stack adjustments are made in the body of the function, for
17650     example to push/pop arguments around function calls.  If the
17651     qualifier 'bounded' is also present, the amount of these
17652     adjustments is bounded at compile time and the second field is an
17653     upper bound of the total amount of stack used by the function.  If
17654     it is not present, the amount of these adjustments is not bounded
17655     at compile time and the second field only represents the bounded
17656     part.
17657
17658'-fstats'
17659     Emit statistics about front-end processing at the end of the
17660     compilation.  This option is supported only by the C++ front end,
17661     and the information is generally only useful to the G++ development
17662     team.
17663
17664'-fdbg-cnt-list'
17665     Print the name and the counter upper bound for all debug counters.
17666
17667'-fdbg-cnt=COUNTER-VALUE-LIST'
17668     Set the internal debug counter lower and upper bound.
17669     COUNTER-VALUE-LIST is a comma-separated list of
17670     NAME:LOWER_BOUND1-UPPER_BOUND1 [:LOWER_BOUND2-UPPER_BOUND2...]
17671     tuples which sets the name of the counter and list of closed
17672     intervals.  The LOWER_BOUND is optional and is zero initialized if
17673     not set.  For example, with '-fdbg-cnt=dce:2-4:10-11,tail_call:10',
17674     'dbg_cnt(dce)' returns true only for second, third, fourth, tenth
17675     and eleventh invocation.  For 'dbg_cnt(tail_call)' true is returned
17676     for first 10 invocations.
17677
17678'-print-file-name=LIBRARY'
17679     Print the full absolute name of the library file LIBRARY that would
17680     be used when linking--and don't do anything else.  With this
17681     option, GCC does not compile or link anything; it just prints the
17682     file name.
17683
17684'-print-multi-directory'
17685     Print the directory name corresponding to the multilib selected by
17686     any other switches present in the command line.  This directory is
17687     supposed to exist in 'GCC_EXEC_PREFIX'.
17688
17689'-print-multi-lib'
17690     Print the mapping from multilib directory names to compiler
17691     switches that enable them.  The directory name is separated from
17692     the switches by ';', and each switch starts with an '@' instead of
17693     the '-', without spaces between multiple switches.  This is
17694     supposed to ease shell processing.
17695
17696'-print-multi-os-directory'
17697     Print the path to OS libraries for the selected multilib, relative
17698     to some 'lib' subdirectory.  If OS libraries are present in the
17699     'lib' subdirectory and no multilibs are used, this is usually just
17700     '.', if OS libraries are present in 'libSUFFIX' sibling directories
17701     this prints e.g. '../lib64', '../lib' or '../lib32', or if OS
17702     libraries are present in 'lib/SUBDIR' subdirectories it prints e.g.
17703     'amd64', 'sparcv9' or 'ev6'.
17704
17705'-print-multiarch'
17706     Print the path to OS libraries for the selected multiarch, relative
17707     to some 'lib' subdirectory.
17708
17709'-print-prog-name=PROGRAM'
17710     Like '-print-file-name', but searches for a program such as 'cpp'.
17711
17712'-print-libgcc-file-name'
17713     Same as '-print-file-name=libgcc.a'.
17714
17715     This is useful when you use '-nostdlib' or '-nodefaultlibs' but you
17716     do want to link with 'libgcc.a'.  You can do:
17717
17718          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
17719
17720'-print-search-dirs'
17721     Print the name of the configured installation directory and a list
17722     of program and library directories 'gcc' searches--and don't do
17723     anything else.
17724
17725     This is useful when 'gcc' prints the error message 'installation
17726     problem, cannot exec cpp0: No such file or directory'.  To resolve
17727     this you either need to put 'cpp0' and the other compiler
17728     components where 'gcc' expects to find them, or you can set the
17729     environment variable 'GCC_EXEC_PREFIX' to the directory where you
17730     installed them.  Don't forget the trailing '/'.  *Note Environment
17731     Variables::.
17732
17733'-print-sysroot'
17734     Print the target sysroot directory that is used during compilation.
17735     This is the target sysroot specified either at configure time or
17736     using the '--sysroot' option, possibly with an extra suffix that
17737     depends on compilation options.  If no target sysroot is specified,
17738     the option prints nothing.
17739
17740'-print-sysroot-headers-suffix'
17741     Print the suffix added to the target sysroot when searching for
17742     headers, or give an error if the compiler is not configured with
17743     such a suffix--and don't do anything else.
17744
17745'-dumpmachine'
17746     Print the compiler's target machine (for example,
17747     'i686-pc-linux-gnu')--and don't do anything else.
17748
17749'-dumpversion'
17750     Print the compiler version (for example, '3.0', '6.3.0' or
17751     '7')--and don't do anything else.  This is the compiler version
17752     used in filesystem paths and specs.  Depending on how the compiler
17753     has been configured it can be just a single number (major version),
17754     two numbers separated by a dot (major and minor version) or three
17755     numbers separated by dots (major, minor and patchlevel version).
17756
17757'-dumpfullversion'
17758     Print the full compiler version--and don't do anything else.  The
17759     output is always three numbers separated by dots, major, minor and
17760     patchlevel version.
17761
17762'-dumpspecs'
17763     Print the compiler's built-in specs--and don't do anything else.
17764     (This is used when GCC itself is being built.)  *Note Spec Files::.
17765
17766
17767File: gcc.info,  Node: Submodel Options,  Next: Spec Files,  Prev: Developer Options,  Up: Invoking GCC
17768
177693.19 Machine-Dependent Options
17770==============================
17771
17772Each target machine supported by GCC can have its own options--for
17773example, to allow you to compile for a particular processor variant or
17774ABI, or to control optimizations specific to that machine.  By
17775convention, the names of machine-specific options start with '-m'.
17776
17777 Some configurations of the compiler also support additional
17778target-specific options, usually for compatibility with other compilers
17779on the same platform.
17780
17781* Menu:
17782
17783* AArch64 Options::
17784* Adapteva Epiphany Options::
17785* AMD GCN Options::
17786* ARC Options::
17787* ARM Options::
17788* AVR Options::
17789* Blackfin Options::
17790* C6X Options::
17791* CRIS Options::
17792* CR16 Options::
17793* C-SKY Options::
17794* Darwin Options::
17795* DEC Alpha Options::
17796* eBPF Options::
17797* FR30 Options::
17798* FT32 Options::
17799* FRV Options::
17800* GNU/Linux Options::
17801* H8/300 Options::
17802* HPPA Options::
17803* IA-64 Options::
17804* LM32 Options::
17805* LoongArch Options::
17806* M32C Options::
17807* M32R/D Options::
17808* M680x0 Options::
17809* MCore Options::
17810* MeP Options::
17811* MicroBlaze Options::
17812* MIPS Options::
17813* MMIX Options::
17814* MN10300 Options::
17815* Moxie Options::
17816* MSP430 Options::
17817* NDS32 Options::
17818* Nios II Options::
17819* Nvidia PTX Options::
17820* OpenRISC Options::
17821* PDP-11 Options::
17822* picoChip Options::
17823* PowerPC Options::
17824* PRU Options::
17825* RISC-V Options::
17826* RL78 Options::
17827* RS/6000 and PowerPC Options::
17828* RX Options::
17829* S/390 and zSeries Options::
17830* Score Options::
17831* SH Options::
17832* Solaris 2 Options::
17833* SPARC Options::
17834* System V Options::
17835* TILE-Gx Options::
17836* TILEPro Options::
17837* V850 Options::
17838* VAX Options::
17839* Visium Options::
17840* VMS Options::
17841* VxWorks Options::
17842* x86 Options::
17843* x86 Windows Options::
17844* Xstormy16 Options::
17845* Xtensa Options::
17846* zSeries Options::
17847
17848
17849File: gcc.info,  Node: AArch64 Options,  Next: Adapteva Epiphany Options,  Up: Submodel Options
17850
178513.19.1 AArch64 Options
17852----------------------
17853
17854These options are defined for AArch64 implementations:
17855
17856'-mabi=NAME'
17857     Generate code for the specified data model.  Permissible values are
17858     'ilp32' for SysV-like data model where int, long int and pointers
17859     are 32 bits, and 'lp64' for SysV-like data model where int is 32
17860     bits, but long int and pointers are 64 bits.
17861
17862     The default depends on the specific target configuration.  Note
17863     that the LP64 and ILP32 ABIs are not link-compatible; you must
17864     compile your entire program with the same ABI, and link with a
17865     compatible set of libraries.
17866
17867'-mbig-endian'
17868     Generate big-endian code.  This is the default when GCC is
17869     configured for an 'aarch64_be-*-*' target.
17870
17871'-mgeneral-regs-only'
17872     Generate code which uses only the general-purpose registers.  This
17873     will prevent the compiler from using floating-point and Advanced
17874     SIMD registers but will not impose any restrictions on the
17875     assembler.
17876
17877'-mlittle-endian'
17878     Generate little-endian code.  This is the default when GCC is
17879     configured for an 'aarch64-*-*' but not an 'aarch64_be-*-*' target.
17880
17881'-mcmodel=tiny'
17882     Generate code for the tiny code model.  The program and its
17883     statically defined symbols must be within 1MB of each other.
17884     Programs can be statically or dynamically linked.
17885
17886'-mcmodel=small'
17887     Generate code for the small code model.  The program and its
17888     statically defined symbols must be within 4GB of each other.
17889     Programs can be statically or dynamically linked.  This is the
17890     default code model.
17891
17892'-mcmodel=large'
17893     Generate code for the large code model.  This makes no assumptions
17894     about addresses and sizes of sections.  Programs can be statically
17895     linked only.  The '-mcmodel=large' option is incompatible with
17896     '-mabi=ilp32', '-fpic' and '-fPIC'.
17897
17898'-mstrict-align'
17899'-mno-strict-align'
17900     Avoid or allow generating memory accesses that may not be aligned
17901     on a natural object boundary as described in the architecture
17902     specification.
17903
17904'-momit-leaf-frame-pointer'
17905'-mno-omit-leaf-frame-pointer'
17906     Omit or keep the frame pointer in leaf functions.  The former
17907     behavior is the default.
17908
17909'-mstack-protector-guard=GUARD'
17910'-mstack-protector-guard-reg=REG'
17911'-mstack-protector-guard-offset=OFFSET'
17912     Generate stack protection code using canary at GUARD.  Supported
17913     locations are 'global' for a global canary or 'sysreg' for a canary
17914     in an appropriate system register.
17915
17916     With the latter choice the options
17917     '-mstack-protector-guard-reg=REG' and
17918     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
17919     system register to use as base register for reading the canary, and
17920     from what offset from that base register.  There is no default
17921     register or offset as this is entirely for use within the Linux
17922     kernel.
17923
17924'-mtls-dialect=desc'
17925     Use TLS descriptors as the thread-local storage mechanism for
17926     dynamic accesses of TLS variables.  This is the default.
17927
17928'-mtls-dialect=traditional'
17929     Use traditional TLS as the thread-local storage mechanism for
17930     dynamic accesses of TLS variables.
17931
17932'-mtls-size=SIZE'
17933     Specify bit size of immediate TLS offsets.  Valid values are 12,
17934     24, 32, 48.  This option requires binutils 2.26 or newer.
17935
17936'-mfix-cortex-a53-835769'
17937'-mno-fix-cortex-a53-835769'
17938     Enable or disable the workaround for the ARM Cortex-A53 erratum
17939     number 835769.  This involves inserting a NOP instruction between
17940     memory instructions and 64-bit integer multiply-accumulate
17941     instructions.
17942
17943'-mfix-cortex-a53-843419'
17944'-mno-fix-cortex-a53-843419'
17945     Enable or disable the workaround for the ARM Cortex-A53 erratum
17946     number 843419.  This erratum workaround is made at link time and
17947     this will only pass the corresponding flag to the linker.
17948
17949'-mlow-precision-recip-sqrt'
17950'-mno-low-precision-recip-sqrt'
17951     Enable or disable the reciprocal square root approximation.  This
17952     option only has an effect if '-ffast-math' or
17953     '-funsafe-math-optimizations' is used as well.  Enabling this
17954     reduces precision of reciprocal square root results to about 16
17955     bits for single precision and to 32 bits for double precision.
17956
17957'-mlow-precision-sqrt'
17958'-mno-low-precision-sqrt'
17959     Enable or disable the square root approximation.  This option only
17960     has an effect if '-ffast-math' or '-funsafe-math-optimizations' is
17961     used as well.  Enabling this reduces precision of square root
17962     results to about 16 bits for single precision and to 32 bits for
17963     double precision.  If enabled, it implies
17964     '-mlow-precision-recip-sqrt'.
17965
17966'-mlow-precision-div'
17967'-mno-low-precision-div'
17968     Enable or disable the division approximation.  This option only has
17969     an effect if '-ffast-math' or '-funsafe-math-optimizations' is used
17970     as well.  Enabling this reduces precision of division results to
17971     about 16 bits for single precision and to 32 bits for double
17972     precision.
17973
17974'-mtrack-speculation'
17975'-mno-track-speculation'
17976     Enable or disable generation of additional code to track
17977     speculative execution through conditional branches.  The tracking
17978     state can then be used by the compiler when expanding calls to
17979     '__builtin_speculation_safe_copy' to permit a more efficient code
17980     sequence to be generated.
17981
17982'-moutline-atomics'
17983'-mno-outline-atomics'
17984     Enable or disable calls to out-of-line helpers to implement atomic
17985     operations.  These helpers will, at runtime, determine if the LSE
17986     instructions from ARMv8.1-A can be used; if not, they will use the
17987     load/store-exclusive instructions that are present in the base
17988     ARMv8.0 ISA.
17989
17990     This option is only applicable when compiling for the base ARMv8.0
17991     instruction set.  If using a later revision, e.g.
17992     '-march=armv8.1-a' or '-march=armv8-a+lse', the ARMv8.1-Atomics
17993     instructions will be used directly.  The same applies when using
17994     '-mcpu=' when the selected cpu supports the 'lse' feature.  This
17995     option is on by default.
17996
17997'-march=NAME'
17998     Specify the name of the target architecture and, optionally, one or
17999     more feature modifiers.  This option has the form
18000     '-march=ARCH{+[no]FEATURE}*'.
18001
18002     The table below summarizes the permissible values for ARCH and the
18003     features that they enable by default:
18004
18005     ARCH value     Architecture   Includes by default
18006     --------------------------------------------------------------------------
18007     'armv8-a'      Armv8-A        '+fp', '+simd'
18008     'armv8.1-a'    Armv8.1-A      'armv8-a', '+crc', '+lse', '+rdma'
18009     'armv8.2-a'    Armv8.2-A      'armv8.1-a'
18010     'armv8.3-a'    Armv8.3-A      'armv8.2-a', '+pauth'
18011     'armv8.4-a'    Armv8.4-A      'armv8.3-a', '+flagm', '+fp16fml',
18012                                   '+dotprod'
18013     'armv8.5-a'    Armv8.5-A      'armv8.4-a', '+sb', '+ssbs', '+predres'
18014     'armv8.6-a'    Armv8.6-A      'armv8.5-a', '+bf16', '+i8mm'
18015     'armv8.7-a'    Armv8.7-A      'armv8.6-a', '+ls64'
18016     'armv8.8-a'    Armv8.8-a      'armv8.7-a', '+mops'
18017     'armv9-a'      Armv9-A        'armv8.5-a', '+sve', '+sve2'
18018     'armv8-r'      Armv8-R        'armv8-r'
18019
18020     The value 'native' is available on native AArch64 GNU/Linux and
18021     causes the compiler to pick the architecture of the host system.
18022     This option has no effect if the compiler is unable to recognize
18023     the architecture of the host system,
18024
18025     The permissible values for FEATURE are listed in the sub-section on
18026     *note '-march' and '-mcpu' Feature Modifiers:
18027     aarch64-feature-modifiers.  Where conflicting feature modifiers are
18028     specified, the right-most feature is used.
18029
18030     GCC uses NAME to determine what kind of instructions it can emit
18031     when generating assembly code.  If '-march' is specified without
18032     either of '-mtune' or '-mcpu' also being specified, the code is
18033     tuned to perform well across a range of target processors
18034     implementing the target architecture.
18035
18036'-mtune=NAME'
18037     Specify the name of the target processor for which GCC should tune
18038     the performance of the code.  Permissible values for this option
18039     are: 'generic', 'cortex-a35', 'cortex-a53', 'cortex-a55',
18040     'cortex-a57', 'cortex-a72', 'cortex-a73', 'cortex-a75',
18041     'cortex-a76', 'cortex-a76ae', 'cortex-a77', 'cortex-a65',
18042     'cortex-a65ae', 'cortex-a34', 'cortex-a78', 'cortex-a78ae',
18043     'cortex-a78c', 'ares', 'exynos-m1', 'emag', 'falkor',
18044     'neoverse-512tvb', 'neoverse-e1', 'neoverse-n1', 'neoverse-n2',
18045     'neoverse-v1', 'neoverse-v2', 'qdf24xx', 'saphira', 'phecda',
18046     'xgene1', 'vulcan', 'octeontx', 'octeontx81', 'octeontx83',
18047     'octeontx2', 'octeontx2t98', 'octeontx2t96' 'octeontx2t93',
18048     'octeontx2f95', 'octeontx2f95n', 'octeontx2f95mm', 'a64fx',
18049     'thunderx', 'thunderxt88', 'thunderxt88p1', 'thunderxt81',
18050     'tsv110', 'thunderxt83', 'thunderx2t99', 'thunderx3t110', 'zeus',
18051     'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
18052     'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53',
18053     'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55', 'cortex-r82',
18054     'cortex-x1', 'cortex-x2', 'cortex-a510', 'cortex-a710', 'ampere1',
18055     'ampere1a', 'native'.
18056
18057     The values 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
18058     'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53',
18059     'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55' specify that GCC
18060     should tune for a big.LITTLE system.
18061
18062     The value 'neoverse-512tvb' specifies that GCC should tune for
18063     Neoverse cores that (a) implement SVE and (b) have a total vector
18064     bandwidth of 512 bits per cycle.  In other words, the option tells
18065     GCC to tune for Neoverse cores that can execute 4 128-bit Advanced
18066     SIMD arithmetic instructions a cycle and that can execute an
18067     equivalent number of SVE arithmetic instructions per cycle (2 for
18068     256-bit SVE, 4 for 128-bit SVE). This is more general than tuning
18069     for a specific core like Neoverse V1 but is more specific than the
18070     default tuning described below.
18071
18072     Additionally on native AArch64 GNU/Linux systems the value 'native'
18073     tunes performance to the host system.  This option has no effect if
18074     the compiler is unable to recognize the processor of the host
18075     system.
18076
18077     Where none of '-mtune=', '-mcpu=' or '-march=' are specified, the
18078     code is tuned to perform well across a range of target processors.
18079
18080     This option cannot be suffixed by feature modifiers.
18081
18082'-mcpu=NAME'
18083     Specify the name of the target processor, optionally suffixed by
18084     one or more feature modifiers.  This option has the form
18085     '-mcpu=CPU{+[no]FEATURE}*', where the permissible values for CPU
18086     are the same as those available for '-mtune'.  The permissible
18087     values for FEATURE are documented in the sub-section on *note
18088     '-march' and '-mcpu' Feature Modifiers: aarch64-feature-modifiers.
18089     Where conflicting feature modifiers are specified, the right-most
18090     feature is used.
18091
18092     GCC uses NAME to determine what kind of instructions it can emit
18093     when generating assembly code (as if by '-march') and to determine
18094     the target processor for which to tune for performance (as if by
18095     '-mtune').  Where this option is used in conjunction with '-march'
18096     or '-mtune', those options take precedence over the appropriate
18097     part of this option.
18098
18099     '-mcpu=neoverse-512tvb' is special in that it does not refer to a
18100     specific core, but instead refers to all Neoverse cores that (a)
18101     implement SVE and (b) have a total vector bandwidth of 512 bits a
18102     cycle.  Unless overridden by '-march', '-mcpu=neoverse-512tvb'
18103     generates code that can run on a Neoverse V1 core, since Neoverse
18104     V1 is the first Neoverse core with these properties.  Unless
18105     overridden by '-mtune', '-mcpu=neoverse-512tvb' tunes code in the
18106     same way as for '-mtune=neoverse-512tvb'.
18107
18108'-moverride=STRING'
18109     Override tuning decisions made by the back-end in response to a
18110     '-mtune=' switch.  The syntax, semantics, and accepted values for
18111     STRING in this option are not guaranteed to be consistent across
18112     releases.
18113
18114     This option is only intended to be useful when developing GCC.
18115
18116'-mverbose-cost-dump'
18117     Enable verbose cost model dumping in the debug dump files.  This
18118     option is provided for use in debugging the compiler.
18119
18120'-mpc-relative-literal-loads'
18121'-mno-pc-relative-literal-loads'
18122     Enable or disable PC-relative literal loads.  With this option
18123     literal pools are accessed using a single instruction and emitted
18124     after each function.  This limits the maximum size of functions to
18125     1MB. This is enabled by default for '-mcmodel=tiny'.
18126
18127'-msign-return-address=SCOPE'
18128     Select the function scope on which return address signing will be
18129     applied.  Permissible values are 'none', which disables return
18130     address signing, 'non-leaf', which enables pointer signing for
18131     functions which are not leaf functions, and 'all', which enables
18132     pointer signing for all functions.  The default value is 'none'.
18133     This option has been deprecated by -mbranch-protection.
18134
18135'-mbranch-protection=NONE|STANDARD|PAC-RET[+LEAF+B-KEY]|BTI'
18136     Select the branch protection features to use.  'none' is the
18137     default and turns off all types of branch protection.  'standard'
18138     turns on all types of branch protection features.  If a feature has
18139     additional tuning options, then 'standard' sets it to its standard
18140     level.  'pac-ret[+LEAF]' turns on return address signing to its
18141     standard level: signing functions that save the return address to
18142     memory (non-leaf functions will practically always do this) using
18143     the a-key.  The optional argument 'leaf' can be used to extend the
18144     signing to include leaf functions.  The optional argument 'b-key'
18145     can be used to sign the functions with the B-key instead of the
18146     A-key.  'bti' turns on branch target identification mechanism.
18147
18148'-mharden-sls=OPTS'
18149     Enable compiler hardening against straight line speculation (SLS).
18150     OPTS is a comma-separated list of the following options:
18151     'retbr'
18152     'blr'
18153     In addition, '-mharden-sls=all' enables all SLS hardening while
18154     '-mharden-sls=none' disables all SLS hardening.
18155
18156'-msve-vector-bits=BITS'
18157     Specify the number of bits in an SVE vector register.  This option
18158     only has an effect when SVE is enabled.
18159
18160     GCC supports two forms of SVE code generation: "vector-length
18161     agnostic" output that works with any size of vector register and
18162     "vector-length specific" output that allows GCC to make assumptions
18163     about the vector length when it is useful for optimization reasons.
18164     The possible values of 'bits' are: 'scalable', '128', '256', '512',
18165     '1024' and '2048'.  Specifying 'scalable' selects vector-length
18166     agnostic output.  At present '-msve-vector-bits=128' also generates
18167     vector-length agnostic output for big-endian targets.  All other
18168     values generate vector-length specific code.  The behavior of these
18169     values may change in future releases and no value except 'scalable'
18170     should be relied on for producing code that is portable across
18171     different hardware SVE vector lengths.
18172
18173     The default is '-msve-vector-bits=scalable', which produces
18174     vector-length agnostic code.
18175
181763.19.1.1 '-march' and '-mcpu' Feature Modifiers
18177...............................................
18178
18179Feature modifiers used with '-march' and '-mcpu' can be any of the
18180following and their inverses 'noFEATURE':
18181
18182'crc'
18183     Enable CRC extension.  This is on by default for
18184     '-march=armv8.1-a'.
18185'crypto'
18186     Enable Crypto extension.  This also enables Advanced SIMD and
18187     floating-point instructions.
18188'fp'
18189     Enable floating-point instructions.  This is on by default for all
18190     possible values for options '-march' and '-mcpu'.
18191'simd'
18192     Enable Advanced SIMD instructions.  This also enables
18193     floating-point instructions.  This is on by default for all
18194     possible values for options '-march' and '-mcpu'.
18195'sve'
18196     Enable Scalable Vector Extension instructions.  This also enables
18197     Advanced SIMD and floating-point instructions.
18198'lse'
18199     Enable Large System Extension instructions.  This is on by default
18200     for '-march=armv8.1-a'.
18201'rdma'
18202     Enable Round Double Multiply Accumulate instructions.  This is on
18203     by default for '-march=armv8.1-a'.
18204'fp16'
18205     Enable FP16 extension.  This also enables floating-point
18206     instructions.
18207'fp16fml'
18208     Enable FP16 fmla extension.  This also enables FP16 extensions and
18209     floating-point instructions.  This option is enabled by default for
18210     '-march=armv8.4-a'.  Use of this option with architectures prior to
18211     Armv8.2-A is not supported.
18212
18213'rcpc'
18214     Enable the RcPc extension.  This does not change code generation
18215     from GCC, but is passed on to the assembler, enabling inline asm
18216     statements to use instructions from the RcPc extension.
18217'dotprod'
18218     Enable the Dot Product extension.  This also enables Advanced SIMD
18219     instructions.
18220'aes'
18221     Enable the Armv8-a aes and pmull crypto extension.  This also
18222     enables Advanced SIMD instructions.
18223'sha2'
18224     Enable the Armv8-a sha2 crypto extension.  This also enables
18225     Advanced SIMD instructions.
18226'sha3'
18227     Enable the sha512 and sha3 crypto extension.  This also enables
18228     Advanced SIMD instructions.  Use of this option with architectures
18229     prior to Armv8.2-A is not supported.
18230'sm4'
18231     Enable the sm3 and sm4 crypto extension.  This also enables
18232     Advanced SIMD instructions.  Use of this option with architectures
18233     prior to Armv8.2-A is not supported.
18234'profile'
18235     Enable the Statistical Profiling extension.  This option is only to
18236     enable the extension at the assembler level and does not affect
18237     code generation.
18238'rng'
18239     Enable the Armv8.5-a Random Number instructions.  This option is
18240     only to enable the extension at the assembler level and does not
18241     affect code generation.
18242'memtag'
18243     Enable the Armv8.5-a Memory Tagging Extensions.  Use of this option
18244     with architectures prior to Armv8.5-A is not supported.
18245'sb'
18246     Enable the Armv8-a Speculation Barrier instruction.  This option is
18247     only to enable the extension at the assembler level and does not
18248     affect code generation.  This option is enabled by default for
18249     '-march=armv8.5-a'.
18250'ssbs'
18251     Enable the Armv8-a Speculative Store Bypass Safe instruction.  This
18252     option is only to enable the extension at the assembler level and
18253     does not affect code generation.  This option is enabled by default
18254     for '-march=armv8.5-a'.
18255'predres'
18256     Enable the Armv8-a Execution and Data Prediction Restriction
18257     instructions.  This option is only to enable the extension at the
18258     assembler level and does not affect code generation.  This option
18259     is enabled by default for '-march=armv8.5-a'.
18260'sve2'
18261     Enable the Armv8-a Scalable Vector Extension 2.  This also enables
18262     SVE instructions.
18263'sve2-bitperm'
18264     Enable SVE2 bitperm instructions.  This also enables SVE2
18265     instructions.
18266'sve2-sm4'
18267     Enable SVE2 sm4 instructions.  This also enables SVE2 instructions.
18268'sve2-aes'
18269     Enable SVE2 aes instructions.  This also enables SVE2 instructions.
18270'sve2-sha3'
18271     Enable SVE2 sha3 instructions.  This also enables SVE2
18272     instructions.
18273'tme'
18274     Enable the Transactional Memory Extension.
18275'i8mm'
18276     Enable 8-bit Integer Matrix Multiply instructions.  This also
18277     enables Advanced SIMD and floating-point instructions.  This option
18278     is enabled by default for '-march=armv8.6-a'.  Use of this option
18279     with architectures prior to Armv8.2-A is not supported.
18280'f32mm'
18281     Enable 32-bit Floating point Matrix Multiply instructions.  This
18282     also enables SVE instructions.  Use of this option with
18283     architectures prior to Armv8.2-A is not supported.
18284'f64mm'
18285     Enable 64-bit Floating point Matrix Multiply instructions.  This
18286     also enables SVE instructions.  Use of this option with
18287     architectures prior to Armv8.2-A is not supported.
18288'bf16'
18289     Enable brain half-precision floating-point instructions.  This also
18290     enables Advanced SIMD and floating-point instructions.  This option
18291     is enabled by default for '-march=armv8.6-a'.  Use of this option
18292     with architectures prior to Armv8.2-A is not supported.
18293'ls64'
18294     Enable the 64-byte atomic load and store instructions for
18295     accelerators.  This option is enabled by default for
18296     '-march=armv8.7-a'.
18297'mops'
18298     Enable the instructions to accelerate memory operations like
18299     'memcpy', 'memmove', 'memset'.  This option is enabled by default
18300     for '-march=armv8.8-a'
18301'flagm'
18302     Enable the Flag Manipulation instructions Extension.
18303'pauth'
18304     Enable the Pointer Authentication Extension.
18305
18306 Feature 'crypto' implies 'aes', 'sha2', and 'simd', which implies 'fp'.
18307Conversely, 'nofp' implies 'nosimd', which implies 'nocrypto', 'noaes'
18308and 'nosha2'.
18309
18310
18311File: gcc.info,  Node: Adapteva Epiphany Options,  Next: AMD GCN Options,  Prev: AArch64 Options,  Up: Submodel Options
18312
183133.19.2 Adapteva Epiphany Options
18314--------------------------------
18315
18316These '-m' options are defined for Adapteva Epiphany:
18317
18318'-mhalf-reg-file'
18319     Don't allocate any register in the range 'r32'...'r63'.  That
18320     allows code to run on hardware variants that lack these registers.
18321
18322'-mprefer-short-insn-regs'
18323     Preferentially allocate registers that allow short instruction
18324     generation.  This can result in increased instruction count, so
18325     this may either reduce or increase overall code size.
18326
18327'-mbranch-cost=NUM'
18328     Set the cost of branches to roughly NUM "simple" instructions.
18329     This cost is only a heuristic and is not guaranteed to produce
18330     consistent results across releases.
18331
18332'-mcmove'
18333     Enable the generation of conditional moves.
18334
18335'-mnops=NUM'
18336     Emit NUM NOPs before every other generated instruction.
18337
18338'-mno-soft-cmpsf'
18339     For single-precision floating-point comparisons, emit an 'fsub'
18340     instruction and test the flags.  This is faster than a software
18341     comparison, but can get incorrect results in the presence of NaNs,
18342     or when two different small numbers are compared such that their
18343     difference is calculated as zero.  The default is '-msoft-cmpsf',
18344     which uses slower, but IEEE-compliant, software comparisons.
18345
18346'-mstack-offset=NUM'
18347     Set the offset between the top of the stack and the stack pointer.
18348     E.g., a value of 8 means that the eight bytes in the range
18349     'sp+0...sp+7' can be used by leaf functions without stack
18350     allocation.  Values other than '8' or '16' are untested and
18351     unlikely to work.  Note also that this option changes the ABI;
18352     compiling a program with a different stack offset than the
18353     libraries have been compiled with generally does not work.  This
18354     option can be useful if you want to evaluate if a different stack
18355     offset would give you better code, but to actually use a different
18356     stack offset to build working programs, it is recommended to
18357     configure the toolchain with the appropriate
18358     '--with-stack-offset=NUM' option.
18359
18360'-mno-round-nearest'
18361     Make the scheduler assume that the rounding mode has been set to
18362     truncating.  The default is '-mround-nearest'.
18363
18364'-mlong-calls'
18365     If not otherwise specified by an attribute, assume all calls might
18366     be beyond the offset range of the 'b' / 'bl' instructions, and
18367     therefore load the function address into a register before
18368     performing a (otherwise direct) call.  This is the default.
18369
18370'-mshort-calls'
18371     If not otherwise specified by an attribute, assume all direct calls
18372     are in the range of the 'b' / 'bl' instructions, so use these
18373     instructions for direct calls.  The default is '-mlong-calls'.
18374
18375'-msmall16'
18376     Assume addresses can be loaded as 16-bit unsigned values.  This
18377     does not apply to function addresses for which '-mlong-calls'
18378     semantics are in effect.
18379
18380'-mfp-mode=MODE'
18381     Set the prevailing mode of the floating-point unit.  This
18382     determines the floating-point mode that is provided and expected at
18383     function call and return time.  Making this mode match the mode you
18384     predominantly need at function start can make your programs smaller
18385     and faster by avoiding unnecessary mode switches.
18386
18387     MODE can be set to one the following values:
18388
18389     'caller'
18390          Any mode at function entry is valid, and retained or restored
18391          when the function returns, and when it calls other functions.
18392          This mode is useful for compiling libraries or other
18393          compilation units you might want to incorporate into different
18394          programs with different prevailing FPU modes, and the
18395          convenience of being able to use a single object file
18396          outweighs the size and speed overhead for any extra mode
18397          switching that might be needed, compared with what would be
18398          needed with a more specific choice of prevailing FPU mode.
18399
18400     'truncate'
18401          This is the mode used for floating-point calculations with
18402          truncating (i.e. round towards zero) rounding mode.  That
18403          includes conversion from floating point to integer.
18404
18405     'round-nearest'
18406          This is the mode used for floating-point calculations with
18407          round-to-nearest-or-even rounding mode.
18408
18409     'int'
18410          This is the mode used to perform integer calculations in the
18411          FPU, e.g. integer multiply, or integer
18412          multiply-and-accumulate.
18413
18414     The default is '-mfp-mode=caller'
18415
18416'-mno-split-lohi'
18417'-mno-postinc'
18418'-mno-postmodify'
18419     Code generation tweaks that disable, respectively, splitting of
18420     32-bit loads, generation of post-increment addresses, and
18421     generation of post-modify addresses.  The defaults are
18422     'msplit-lohi', '-mpost-inc', and '-mpost-modify'.
18423
18424'-mnovect-double'
18425     Change the preferred SIMD mode to SImode.  The default is
18426     '-mvect-double', which uses DImode as preferred SIMD mode.
18427
18428'-max-vect-align=NUM'
18429     The maximum alignment for SIMD vector mode types.  NUM may be 4 or
18430     8.  The default is 8.  Note that this is an ABI change, even though
18431     many library function interfaces are unaffected if they don't use
18432     SIMD vector modes in places that affect size and/or alignment of
18433     relevant types.
18434
18435'-msplit-vecmove-early'
18436     Split vector moves into single word moves before reload.  In theory
18437     this can give better register allocation, but so far the reverse
18438     seems to be generally the case.
18439
18440'-m1reg-REG'
18441     Specify a register to hold the constant -1, which makes loading
18442     small negative constants and certain bitmasks faster.  Allowable
18443     values for REG are 'r43' and 'r63', which specify use of that
18444     register as a fixed register, and 'none', which means that no
18445     register is used for this purpose.  The default is '-m1reg-none'.
18446
18447
18448File: gcc.info,  Node: AMD GCN Options,  Next: ARC Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
18449
184503.19.3 AMD GCN Options
18451----------------------
18452
18453These options are defined specifically for the AMD GCN port.
18454
18455'-march=GPU'
18456'-mtune=GPU'
18457     Set architecture type or tuning for GPU.  Supported values for GPU
18458     are
18459
18460     'fiji'
18461          Compile for GCN3 Fiji devices (gfx803).
18462
18463     'gfx900'
18464          Compile for GCN5 Vega 10 devices (gfx900).
18465
18466     'gfx906'
18467          Compile for GCN5 Vega 20 devices (gfx906).
18468
18469'-msram-ecc=on'
18470'-msram-ecc=off'
18471'-msram-ecc=any'
18472     Compile binaries suitable for devices with the SRAM-ECC feature
18473     enabled, disabled, or either mode.  This feature can be enabled
18474     per-process on some devices.  The compiled code must match the
18475     device mode.  The default is 'any', for devices that support it.
18476
18477'-mstack-size=BYTES'
18478     Specify how many BYTES of stack space will be requested for each
18479     GPU thread (wave-front).  Beware that there may be many threads and
18480     limited memory available.  The size of the stack allocation may
18481     also have an impact on run-time performance.  The default is 32KB
18482     when using OpenACC or OpenMP, and 1MB otherwise.
18483
18484'-mxnack'
18485     Compile binaries suitable for devices with the XNACK feature
18486     enabled.  Some devices always require XNACK and some allow the user
18487     to configure XNACK. The compiled code must match the device mode.
18488     The default is '-mno-xnack'.  At present this option is a
18489     placeholder for support that is not yet implemented.
18490
18491
18492File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Prev: AMD GCN Options,  Up: Submodel Options
18493
184943.19.4 ARC Options
18495------------------
18496
18497The following options control the architecture variant for which code is
18498being compiled:
18499
18500'-mbarrel-shifter'
18501     Generate instructions supported by barrel shifter.  This is the
18502     default unless '-mcpu=ARC601' or '-mcpu=ARCEM' is in effect.
18503
18504'-mjli-always'
18505     Force to call a function using jli_s instruction.  This option is
18506     valid only for ARCv2 architecture.
18507
18508'-mcpu=CPU'
18509     Set architecture type, register usage, and instruction scheduling
18510     parameters for CPU.  There are also shortcut alias options
18511     available for backward compatibility and convenience.  Supported
18512     values for CPU are
18513
18514     'arc600'
18515          Compile for ARC600.  Aliases: '-mA6', '-mARC600'.
18516
18517     'arc601'
18518          Compile for ARC601.  Alias: '-mARC601'.
18519
18520     'arc700'
18521          Compile for ARC700.  Aliases: '-mA7', '-mARC700'.  This is the
18522          default when configured with '--with-cpu=arc700'.
18523
18524     'arcem'
18525          Compile for ARC EM.
18526
18527     'archs'
18528          Compile for ARC HS.
18529
18530     'em'
18531          Compile for ARC EM CPU with no hardware extensions.
18532
18533     'em4'
18534          Compile for ARC EM4 CPU.
18535
18536     'em4_dmips'
18537          Compile for ARC EM4 DMIPS CPU.
18538
18539     'em4_fpus'
18540          Compile for ARC EM4 DMIPS CPU with the single-precision
18541          floating-point extension.
18542
18543     'em4_fpuda'
18544          Compile for ARC EM4 DMIPS CPU with single-precision
18545          floating-point and double assist instructions.
18546
18547     'hs'
18548          Compile for ARC HS CPU with no hardware extensions except the
18549          atomic instructions.
18550
18551     'hs34'
18552          Compile for ARC HS34 CPU.
18553
18554     'hs38'
18555          Compile for ARC HS38 CPU.
18556
18557     'hs38_linux'
18558          Compile for ARC HS38 CPU with all hardware extensions on.
18559
18560     'arc600_norm'
18561          Compile for ARC 600 CPU with 'norm' instructions enabled.
18562
18563     'arc600_mul32x16'
18564          Compile for ARC 600 CPU with 'norm' and 32x16-bit multiply
18565          instructions enabled.
18566
18567     'arc600_mul64'
18568          Compile for ARC 600 CPU with 'norm' and 'mul64'-family
18569          instructions enabled.
18570
18571     'arc601_norm'
18572          Compile for ARC 601 CPU with 'norm' instructions enabled.
18573
18574     'arc601_mul32x16'
18575          Compile for ARC 601 CPU with 'norm' and 32x16-bit multiply
18576          instructions enabled.
18577
18578     'arc601_mul64'
18579          Compile for ARC 601 CPU with 'norm' and 'mul64'-family
18580          instructions enabled.
18581
18582     'nps400'
18583          Compile for ARC 700 on NPS400 chip.
18584
18585     'em_mini'
18586          Compile for ARC EM minimalist configuration featuring reduced
18587          register set.
18588
18589'-mdpfp'
18590'-mdpfp-compact'
18591     Generate double-precision FPX instructions, tuned for the compact
18592     implementation.
18593
18594'-mdpfp-fast'
18595     Generate double-precision FPX instructions, tuned for the fast
18596     implementation.
18597
18598'-mno-dpfp-lrsr'
18599     Disable 'lr' and 'sr' instructions from using FPX extension aux
18600     registers.
18601
18602'-mea'
18603     Generate extended arithmetic instructions.  Currently only 'divaw',
18604     'adds', 'subs', and 'sat16' are supported.  Only valid for
18605     '-mcpu=ARC700'.
18606
18607'-mno-mpy'
18608     Do not generate 'mpy'-family instructions for ARC700.  This option
18609     is deprecated.
18610
18611'-mmul32x16'
18612     Generate 32x16-bit multiply and multiply-accumulate instructions.
18613
18614'-mmul64'
18615     Generate 'mul64' and 'mulu64' instructions.  Only valid for
18616     '-mcpu=ARC600'.
18617
18618'-mnorm'
18619     Generate 'norm' instructions.  This is the default if
18620     '-mcpu=ARC700' is in effect.
18621
18622'-mspfp'
18623'-mspfp-compact'
18624     Generate single-precision FPX instructions, tuned for the compact
18625     implementation.
18626
18627'-mspfp-fast'
18628     Generate single-precision FPX instructions, tuned for the fast
18629     implementation.
18630
18631'-msimd'
18632     Enable generation of ARC SIMD instructions via target-specific
18633     builtins.  Only valid for '-mcpu=ARC700'.
18634
18635'-msoft-float'
18636     This option ignored; it is provided for compatibility purposes
18637     only.  Software floating-point code is emitted by default, and this
18638     default can overridden by FPX options; '-mspfp', '-mspfp-compact',
18639     or '-mspfp-fast' for single precision, and '-mdpfp',
18640     '-mdpfp-compact', or '-mdpfp-fast' for double precision.
18641
18642'-mswap'
18643     Generate 'swap' instructions.
18644
18645'-matomic'
18646     This enables use of the locked load/store conditional extension to
18647     implement atomic memory built-in functions.  Not available for ARC
18648     6xx or ARC EM cores.
18649
18650'-mdiv-rem'
18651     Enable 'div' and 'rem' instructions for ARCv2 cores.
18652
18653'-mcode-density'
18654     Enable code density instructions for ARC EM. This option is on by
18655     default for ARC HS.
18656
18657'-mll64'
18658     Enable double load/store operations for ARC HS cores.
18659
18660'-mtp-regno=REGNO'
18661     Specify thread pointer register number.
18662
18663'-mmpy-option=MULTO'
18664     Compile ARCv2 code with a multiplier design option.  You can
18665     specify the option using either a string or numeric value for
18666     MULTO.  'wlh1' is the default value.  The recognized values are:
18667
18668     '0'
18669     'none'
18670          No multiplier available.
18671
18672     '1'
18673     'w'
18674          16x16 multiplier, fully pipelined.  The following instructions
18675          are enabled: 'mpyw' and 'mpyuw'.
18676
18677     '2'
18678     'wlh1'
18679          32x32 multiplier, fully pipelined (1 stage).  The following
18680          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
18681          'mpymu', and 'mpy_s'.
18682
18683     '3'
18684     'wlh2'
18685          32x32 multiplier, fully pipelined (2 stages).  The following
18686          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
18687          'mpymu', and 'mpy_s'.
18688
18689     '4'
18690     'wlh3'
18691          Two 16x16 multipliers, blocking, sequential.  The following
18692          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
18693          'mpymu', and 'mpy_s'.
18694
18695     '5'
18696     'wlh4'
18697          One 16x16 multiplier, blocking, sequential.  The following
18698          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
18699          'mpymu', and 'mpy_s'.
18700
18701     '6'
18702     'wlh5'
18703          One 32x4 multiplier, blocking, sequential.  The following
18704          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
18705          'mpymu', and 'mpy_s'.
18706
18707     '7'
18708     'plus_dmpy'
18709          ARC HS SIMD support.
18710
18711     '8'
18712     'plus_macd'
18713          ARC HS SIMD support.
18714
18715     '9'
18716     'plus_qmacw'
18717          ARC HS SIMD support.
18718
18719     This option is only available for ARCv2 cores.
18720
18721'-mfpu=FPU'
18722     Enables support for specific floating-point hardware extensions for
18723     ARCv2 cores.  Supported values for FPU are:
18724
18725     'fpus'
18726          Enables support for single-precision floating-point hardware
18727          extensions.
18728
18729     'fpud'
18730          Enables support for double-precision floating-point hardware
18731          extensions.  The single-precision floating-point extension is
18732          also enabled.  Not available for ARC EM.
18733
18734     'fpuda'
18735          Enables support for double-precision floating-point hardware
18736          extensions using double-precision assist instructions.  The
18737          single-precision floating-point extension is also enabled.
18738          This option is only available for ARC EM.
18739
18740     'fpuda_div'
18741          Enables support for double-precision floating-point hardware
18742          extensions using double-precision assist instructions.  The
18743          single-precision floating-point, square-root, and divide
18744          extensions are also enabled.  This option is only available
18745          for ARC EM.
18746
18747     'fpuda_fma'
18748          Enables support for double-precision floating-point hardware
18749          extensions using double-precision assist instructions.  The
18750          single-precision floating-point and fused multiply and add
18751          hardware extensions are also enabled.  This option is only
18752          available for ARC EM.
18753
18754     'fpuda_all'
18755          Enables support for double-precision floating-point hardware
18756          extensions using double-precision assist instructions.  All
18757          single-precision floating-point hardware extensions are also
18758          enabled.  This option is only available for ARC EM.
18759
18760     'fpus_div'
18761          Enables support for single-precision floating-point,
18762          square-root and divide hardware extensions.
18763
18764     'fpud_div'
18765          Enables support for double-precision floating-point,
18766          square-root and divide hardware extensions.  This option
18767          includes option 'fpus_div'.  Not available for ARC EM.
18768
18769     'fpus_fma'
18770          Enables support for single-precision floating-point and fused
18771          multiply and add hardware extensions.
18772
18773     'fpud_fma'
18774          Enables support for double-precision floating-point and fused
18775          multiply and add hardware extensions.  This option includes
18776          option 'fpus_fma'.  Not available for ARC EM.
18777
18778     'fpus_all'
18779          Enables support for all single-precision floating-point
18780          hardware extensions.
18781
18782     'fpud_all'
18783          Enables support for all single- and double-precision
18784          floating-point hardware extensions.  Not available for ARC EM.
18785
18786'-mirq-ctrl-saved=REGISTER-RANGE, BLINK, LP_COUNT'
18787     Specifies general-purposes registers that the processor
18788     automatically saves/restores on interrupt entry and exit.
18789     REGISTER-RANGE is specified as two registers separated by a dash.
18790     The register range always starts with 'r0', the upper limit is 'fp'
18791     register.  BLINK and LP_COUNT are optional.  This option is only
18792     valid for ARC EM and ARC HS cores.
18793
18794'-mrgf-banked-regs=NUMBER'
18795     Specifies the number of registers replicated in second register
18796     bank on entry to fast interrupt.  Fast interrupts are interrupts
18797     with the highest priority level P0.  These interrupts save only PC
18798     and STATUS32 registers to avoid memory transactions during
18799     interrupt entry and exit sequences.  Use this option when you are
18800     using fast interrupts in an ARC V2 family processor.  Permitted
18801     values are 4, 8, 16, and 32.
18802
18803'-mlpc-width=WIDTH'
18804     Specify the width of the 'lp_count' register.  Valid values for
18805     WIDTH are 8, 16, 20, 24, 28 and 32 bits.  The default width is
18806     fixed to 32 bits.  If the width is less than 32, the compiler does
18807     not attempt to transform loops in your program to use the
18808     zero-delay loop mechanism unless it is known that the 'lp_count'
18809     register can hold the required loop-counter value.  Depending on
18810     the width specified, the compiler and run-time library might
18811     continue to use the loop mechanism for various needs.  This option
18812     defines macro '__ARC_LPC_WIDTH__' with the value of WIDTH.
18813
18814'-mrf16'
18815     This option instructs the compiler to generate code for a 16-entry
18816     register file.  This option defines the '__ARC_RF16__' preprocessor
18817     macro.
18818
18819'-mbranch-index'
18820     Enable use of 'bi' or 'bih' instructions to implement jump tables.
18821
18822 The following options are passed through to the assembler, and also
18823define preprocessor macro symbols.
18824
18825'-mdsp-packa'
18826     Passed down to the assembler to enable the DSP Pack A extensions.
18827     Also sets the preprocessor symbol '__Xdsp_packa'.  This option is
18828     deprecated.
18829
18830'-mdvbf'
18831     Passed down to the assembler to enable the dual Viterbi butterfly
18832     extension.  Also sets the preprocessor symbol '__Xdvbf'.  This
18833     option is deprecated.
18834
18835'-mlock'
18836     Passed down to the assembler to enable the locked load/store
18837     conditional extension.  Also sets the preprocessor symbol
18838     '__Xlock'.
18839
18840'-mmac-d16'
18841     Passed down to the assembler.  Also sets the preprocessor symbol
18842     '__Xxmac_d16'.  This option is deprecated.
18843
18844'-mmac-24'
18845     Passed down to the assembler.  Also sets the preprocessor symbol
18846     '__Xxmac_24'.  This option is deprecated.
18847
18848'-mrtsc'
18849     Passed down to the assembler to enable the 64-bit time-stamp
18850     counter extension instruction.  Also sets the preprocessor symbol
18851     '__Xrtsc'.  This option is deprecated.
18852
18853'-mswape'
18854     Passed down to the assembler to enable the swap byte ordering
18855     extension instruction.  Also sets the preprocessor symbol
18856     '__Xswape'.
18857
18858'-mtelephony'
18859     Passed down to the assembler to enable dual- and single-operand
18860     instructions for telephony.  Also sets the preprocessor symbol
18861     '__Xtelephony'.  This option is deprecated.
18862
18863'-mxy'
18864     Passed down to the assembler to enable the XY memory extension.
18865     Also sets the preprocessor symbol '__Xxy'.
18866
18867 The following options control how the assembly code is annotated:
18868
18869'-misize'
18870     Annotate assembler instructions with estimated addresses.
18871
18872'-mannotate-align'
18873     Explain what alignment considerations lead to the decision to make
18874     an instruction short or long.
18875
18876 The following options are passed through to the linker:
18877
18878'-marclinux'
18879     Passed through to the linker, to specify use of the 'arclinux'
18880     emulation.  This option is enabled by default in tool chains built
18881     for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
18882     profiling is not requested.
18883
18884'-marclinux_prof'
18885     Passed through to the linker, to specify use of the 'arclinux_prof'
18886     emulation.  This option is enabled by default in tool chains built
18887     for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
18888     profiling is requested.
18889
18890 The following options control the semantics of generated code:
18891
18892'-mlong-calls'
18893     Generate calls as register indirect calls, thus providing access to
18894     the full 32-bit address range.
18895
18896'-mmedium-calls'
18897     Don't use less than 25-bit addressing range for calls, which is the
18898     offset available for an unconditional branch-and-link instruction.
18899     Conditional execution of function calls is suppressed, to allow use
18900     of the 25-bit range, rather than the 21-bit range with conditional
18901     branch-and-link.  This is the default for tool chains built for
18902     'arc-linux-uclibc' and 'arceb-linux-uclibc' targets.
18903
18904'-G NUM'
18905     Put definitions of externally-visible data in a small data section
18906     if that data is no bigger than NUM bytes.  The default value of NUM
18907     is 4 for any ARC configuration, or 8 when we have double load/store
18908     operations.
18909
18910'-mno-sdata'
18911     Do not generate sdata references.  This is the default for tool
18912     chains built for 'arc-linux-uclibc' and 'arceb-linux-uclibc'
18913     targets.
18914
18915'-mvolatile-cache'
18916     Use ordinarily cached memory accesses for volatile references.
18917     This is the default.
18918
18919'-mno-volatile-cache'
18920     Enable cache bypass for volatile references.
18921
18922 The following options fine tune code generation:
18923'-malign-call'
18924     Does nothing.  Preserved for backward compatibility.
18925
18926'-mauto-modify-reg'
18927     Enable the use of pre/post modify with register displacement.
18928
18929'-mbbit-peephole'
18930     Enable bbit peephole2.
18931
18932'-mno-brcc'
18933     This option disables a target-specific pass in 'arc_reorg' to
18934     generate compare-and-branch ('brCC') instructions.  It has no
18935     effect on generation of these instructions driven by the combiner
18936     pass.
18937
18938'-mcase-vector-pcrel'
18939     Use PC-relative switch case tables to enable case table shortening.
18940     This is the default for '-Os'.
18941
18942'-mcompact-casesi'
18943     Enable compact 'casesi' pattern.  This is the default for '-Os',
18944     and only available for ARCv1 cores.  This option is deprecated.
18945
18946'-mno-cond-exec'
18947     Disable the ARCompact-specific pass to generate conditional
18948     execution instructions.
18949
18950     Due to delay slot scheduling and interactions between operand
18951     numbers, literal sizes, instruction lengths, and the support for
18952     conditional execution, the target-independent pass to generate
18953     conditional execution is often lacking, so the ARC port has kept a
18954     special pass around that tries to find more conditional execution
18955     generation opportunities after register allocation, branch
18956     shortening, and delay slot scheduling have been done.  This pass
18957     generally, but not always, improves performance and code size, at
18958     the cost of extra compilation time, which is why there is an option
18959     to switch it off.  If you have a problem with call instructions
18960     exceeding their allowable offset range because they are
18961     conditionalized, you should consider using '-mmedium-calls'
18962     instead.
18963
18964'-mearly-cbranchsi'
18965     Enable pre-reload use of the 'cbranchsi' pattern.
18966
18967'-mexpand-adddi'
18968     Expand 'adddi3' and 'subdi3' at RTL generation time into 'add.f',
18969     'adc' etc.  This option is deprecated.
18970
18971'-mindexed-loads'
18972     Enable the use of indexed loads.  This can be problematic because
18973     some optimizers then assume that indexed stores exist, which is not
18974     the case.
18975
18976'-mlra'
18977     Enable Local Register Allocation.  This is still experimental for
18978     ARC, so by default the compiler uses standard reload (i.e.
18979     '-mno-lra').
18980
18981'-mlra-priority-none'
18982     Don't indicate any priority for target registers.
18983
18984'-mlra-priority-compact'
18985     Indicate target register priority for r0..r3 / r12..r15.
18986
18987'-mlra-priority-noncompact'
18988     Reduce target register priority for r0..r3 / r12..r15.
18989
18990'-mmillicode'
18991     When optimizing for size (using '-Os'), prologues and epilogues
18992     that have to save or restore a large number of registers are often
18993     shortened by using call to a special function in libgcc; this is
18994     referred to as a _millicode_ call.  As these calls can pose
18995     performance issues, and/or cause linking issues when linking in a
18996     nonstandard way, this option is provided to turn on or off
18997     millicode call generation.
18998
18999'-mcode-density-frame'
19000     This option enable the compiler to emit 'enter' and 'leave'
19001     instructions.  These instructions are only valid for CPUs with
19002     code-density feature.
19003
19004'-mmixed-code'
19005     Does nothing.  Preserved for backward compatibility.
19006
19007'-mq-class'
19008     Ths option is deprecated.  Enable 'q' instruction alternatives.
19009     This is the default for '-Os'.
19010
19011'-mRcq'
19012     Enable 'Rcq' constraint handling.  Most short code generation
19013     depends on this.  This is the default.
19014
19015'-mRcw'
19016     Enable 'Rcw' constraint handling.  Most ccfsm condexec mostly
19017     depends on this.  This is the default.
19018
19019'-msize-level=LEVEL'
19020     Fine-tune size optimization with regards to instruction lengths and
19021     alignment.  The recognized values for LEVEL are:
19022     '0'
19023          No size optimization.  This level is deprecated and treated
19024          like '1'.
19025
19026     '1'
19027          Short instructions are used opportunistically.
19028
19029     '2'
19030          In addition, alignment of loops and of code after barriers are
19031          dropped.
19032
19033     '3'
19034          In addition, optional data alignment is dropped, and the
19035          option 'Os' is enabled.
19036
19037     This defaults to '3' when '-Os' is in effect.  Otherwise, the
19038     behavior when this is not set is equivalent to level '1'.
19039
19040'-mtune=CPU'
19041     Set instruction scheduling parameters for CPU, overriding any
19042     implied by '-mcpu='.
19043
19044     Supported values for CPU are
19045
19046     'ARC600'
19047          Tune for ARC600 CPU.
19048
19049     'ARC601'
19050          Tune for ARC601 CPU.
19051
19052     'ARC700'
19053          Tune for ARC700 CPU with standard multiplier block.
19054
19055     'ARC700-xmac'
19056          Tune for ARC700 CPU with XMAC block.
19057
19058     'ARC725D'
19059          Tune for ARC725D CPU.
19060
19061     'ARC750D'
19062          Tune for ARC750D CPU.
19063
19064'-mmultcost=NUM'
19065     Cost to assume for a multiply instruction, with '4' being equal to
19066     a normal instruction.
19067
19068'-munalign-prob-threshold=PROBABILITY'
19069     Does nothing.  Preserved for backward compatibility.
19070
19071 The following options are maintained for backward compatibility, but
19072are now deprecated and will be removed in a future release:
19073
19074'-margonaut'
19075     Obsolete FPX.
19076
19077'-mbig-endian'
19078'-EB'
19079     Compile code for big-endian targets.  Use of these options is now
19080     deprecated.  Big-endian code is supported by configuring GCC to
19081     build 'arceb-elf32' and 'arceb-linux-uclibc' targets, for which big
19082     endian is the default.
19083
19084'-mlittle-endian'
19085'-EL'
19086     Compile code for little-endian targets.  Use of these options is
19087     now deprecated.  Little-endian code is supported by configuring GCC
19088     to build 'arc-elf32' and 'arc-linux-uclibc' targets, for which
19089     little endian is the default.
19090
19091'-mbarrel_shifter'
19092     Replaced by '-mbarrel-shifter'.
19093
19094'-mdpfp_compact'
19095     Replaced by '-mdpfp-compact'.
19096
19097'-mdpfp_fast'
19098     Replaced by '-mdpfp-fast'.
19099
19100'-mdsp_packa'
19101     Replaced by '-mdsp-packa'.
19102
19103'-mEA'
19104     Replaced by '-mea'.
19105
19106'-mmac_24'
19107     Replaced by '-mmac-24'.
19108
19109'-mmac_d16'
19110     Replaced by '-mmac-d16'.
19111
19112'-mspfp_compact'
19113     Replaced by '-mspfp-compact'.
19114
19115'-mspfp_fast'
19116     Replaced by '-mspfp-fast'.
19117
19118'-mtune=CPU'
19119     Values 'arc600', 'arc601', 'arc700' and 'arc700-xmac' for CPU are
19120     replaced by 'ARC600', 'ARC601', 'ARC700' and 'ARC700-xmac'
19121     respectively.
19122
19123'-multcost=NUM'
19124     Replaced by '-mmultcost'.
19125
19126
19127File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
19128
191293.19.5 ARM Options
19130------------------
19131
19132These '-m' options are defined for the ARM port:
19133
19134'-mabi=NAME'
19135     Generate code for the specified ABI.  Permissible values are:
19136     'apcs-gnu', 'atpcs', 'aapcs', 'aapcs-linux' and 'iwmmxt'.
19137
19138'-mapcs-frame'
19139     Generate a stack frame that is compliant with the ARM Procedure
19140     Call Standard for all functions, even if this is not strictly
19141     necessary for correct execution of the code.  Specifying
19142     '-fomit-frame-pointer' with this option causes the stack frames not
19143     to be generated for leaf functions.  The default is
19144     '-mno-apcs-frame'.  This option is deprecated.
19145
19146'-mapcs'
19147     This is a synonym for '-mapcs-frame' and is deprecated.
19148
19149'-mthumb-interwork'
19150     Generate code that supports calling between the ARM and Thumb
19151     instruction sets.  Without this option, on pre-v5 architectures,
19152     the two instruction sets cannot be reliably used inside one
19153     program.  The default is '-mno-thumb-interwork', since slightly
19154     larger code is generated when '-mthumb-interwork' is specified.  In
19155     AAPCS configurations this option is meaningless.
19156
19157'-mno-sched-prolog'
19158     Prevent the reordering of instructions in the function prologue, or
19159     the merging of those instruction with the instructions in the
19160     function's body.  This means that all functions start with a
19161     recognizable set of instructions (or in fact one of a choice from a
19162     small set of different function prologues), and this information
19163     can be used to locate the start of functions inside an executable
19164     piece of code.  The default is '-msched-prolog'.
19165
19166'-mfloat-abi=NAME'
19167     Specifies which floating-point ABI to use.  Permissible values are:
19168     'soft', 'softfp' and 'hard'.
19169
19170     Specifying 'soft' causes GCC to generate output containing library
19171     calls for floating-point operations.  'softfp' allows the
19172     generation of code using hardware floating-point instructions, but
19173     still uses the soft-float calling conventions.  'hard' allows
19174     generation of floating-point instructions and uses FPU-specific
19175     calling conventions.
19176
19177     The default depends on the specific target configuration.  Note
19178     that the hard-float and soft-float ABIs are not link-compatible;
19179     you must compile your entire program with the same ABI, and link
19180     with a compatible set of libraries.
19181
19182'-mgeneral-regs-only'
19183     Generate code which uses only the general-purpose registers.  This
19184     will prevent the compiler from using floating-point and Advanced
19185     SIMD registers but will not impose any restrictions on the
19186     assembler.
19187
19188'-mlittle-endian'
19189     Generate code for a processor running in little-endian mode.  This
19190     is the default for all standard configurations.
19191
19192'-mbig-endian'
19193     Generate code for a processor running in big-endian mode; the
19194     default is to compile code for a little-endian processor.
19195
19196'-mbe8'
19197'-mbe32'
19198     When linking a big-endian image select between BE8 and BE32
19199     formats.  The option has no effect for little-endian images and is
19200     ignored.  The default is dependent on the selected target
19201     architecture.  For ARMv6 and later architectures the default is
19202     BE8, for older architectures the default is BE32.  BE32 format has
19203     been deprecated by ARM.
19204
19205'-march=NAME[+extension...]'
19206     This specifies the name of the target ARM architecture.  GCC uses
19207     this name to determine what kind of instructions it can emit when
19208     generating assembly code.  This option can be used in conjunction
19209     with or instead of the '-mcpu=' option.
19210
19211     Permissible names are: 'armv4t', 'armv5t', 'armv5te', 'armv6',
19212     'armv6j', 'armv6k', 'armv6kz', 'armv6t2', 'armv6z', 'armv6zk',
19213     'armv7', 'armv7-a', 'armv7ve', 'armv8-a', 'armv8.1-a', 'armv8.2-a',
19214     'armv8.3-a', 'armv8.4-a', 'armv8.5-a', 'armv8.6-a', 'armv9-a',
19215     'armv7-r', 'armv8-r', 'armv6-m', 'armv6s-m', 'armv7-m', 'armv7e-m',
19216     'armv8-m.base', 'armv8-m.main', 'armv8.1-m.main', 'armv9-a',
19217     'iwmmxt' and 'iwmmxt2'.
19218
19219     Additionally, the following architectures, which lack support for
19220     the Thumb execution state, are recognized but support is
19221     deprecated: 'armv4'.
19222
19223     Many of the architectures support extensions.  These can be added
19224     by appending '+EXTENSION' to the architecture name.  Extension
19225     options are processed in order and capabilities accumulate.  An
19226     extension will also enable any necessary base extensions upon which
19227     it depends.  For example, the '+crypto' extension will always
19228     enable the '+simd' extension.  The exception to the additive
19229     construction is for extensions that are prefixed with '+no...':
19230     these extensions disable the specified option and any other
19231     extensions that may depend on the presence of that extension.
19232
19233     For example, '-march=armv7-a+simd+nofp+vfpv4' is equivalent to
19234     writing '-march=armv7-a+vfpv4' since the '+simd' option is entirely
19235     disabled by the '+nofp' option that follows it.
19236
19237     Most extension names are generically named, but have an effect that
19238     is dependent upon the architecture to which it is applied.  For
19239     example, the '+simd' option can be applied to both 'armv7-a' and
19240     'armv8-a' architectures, but will enable the original ARMv7-A
19241     Advanced SIMD (Neon) extensions for 'armv7-a' and the ARMv8-A
19242     variant for 'armv8-a'.
19243
19244     The table below lists the supported extensions for each
19245     architecture.  Architectures not mentioned do not support any
19246     extensions.
19247
19248     'armv5te'
19249     'armv6'
19250     'armv6j'
19251     'armv6k'
19252     'armv6kz'
19253     'armv6t2'
19254     'armv6z'
19255     'armv6zk'
19256          '+fp'
19257               The VFPv2 floating-point instructions.  The extension
19258               '+vfpv2' can be used as an alias for this extension.
19259
19260          '+nofp'
19261               Disable the floating-point instructions.
19262
19263     'armv7'
19264          The common subset of the ARMv7-A, ARMv7-R and ARMv7-M
19265          architectures.
19266          '+fp'
19267               The VFPv3 floating-point instructions, with 16
19268               double-precision registers.  The extension '+vfpv3-d16'
19269               can be used as an alias for this extension.  Note that
19270               floating-point is not supported by the base ARMv7-M
19271               architecture, but is compatible with both the ARMv7-A and
19272               ARMv7-R architectures.
19273
19274          '+nofp'
19275               Disable the floating-point instructions.
19276
19277     'armv7-a'
19278          '+mp'
19279               The multiprocessing extension.
19280
19281          '+sec'
19282               The security extension.
19283
19284          '+fp'
19285               The VFPv3 floating-point instructions, with 16
19286               double-precision registers.  The extension '+vfpv3-d16'
19287               can be used as an alias for this extension.
19288
19289          '+simd'
19290               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
19291               instructions.  The extensions '+neon' and '+neon-vfpv3'
19292               can be used as aliases for this extension.
19293
19294          '+vfpv3'
19295               The VFPv3 floating-point instructions, with 32
19296               double-precision registers.
19297
19298          '+vfpv3-d16-fp16'
19299               The VFPv3 floating-point instructions, with 16
19300               double-precision registers and the half-precision
19301               floating-point conversion operations.
19302
19303          '+vfpv3-fp16'
19304               The VFPv3 floating-point instructions, with 32
19305               double-precision registers and the half-precision
19306               floating-point conversion operations.
19307
19308          '+vfpv4-d16'
19309               The VFPv4 floating-point instructions, with 16
19310               double-precision registers.
19311
19312          '+vfpv4'
19313               The VFPv4 floating-point instructions, with 32
19314               double-precision registers.
19315
19316          '+neon-fp16'
19317               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
19318               instructions, with the half-precision floating-point
19319               conversion operations.
19320
19321          '+neon-vfpv4'
19322               The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
19323               instructions.
19324
19325          '+nosimd'
19326               Disable the Advanced SIMD instructions (does not disable
19327               floating point).
19328
19329          '+nofp'
19330               Disable the floating-point and Advanced SIMD
19331               instructions.
19332
19333     'armv7ve'
19334          The extended version of the ARMv7-A architecture with support
19335          for virtualization.
19336          '+fp'
19337               The VFPv4 floating-point instructions, with 16
19338               double-precision registers.  The extension '+vfpv4-d16'
19339               can be used as an alias for this extension.
19340
19341          '+simd'
19342               The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
19343               instructions.  The extension '+neon-vfpv4' can be used as
19344               an alias for this extension.
19345
19346          '+vfpv3-d16'
19347               The VFPv3 floating-point instructions, with 16
19348               double-precision registers.
19349
19350          '+vfpv3'
19351               The VFPv3 floating-point instructions, with 32
19352               double-precision registers.
19353
19354          '+vfpv3-d16-fp16'
19355               The VFPv3 floating-point instructions, with 16
19356               double-precision registers and the half-precision
19357               floating-point conversion operations.
19358
19359          '+vfpv3-fp16'
19360               The VFPv3 floating-point instructions, with 32
19361               double-precision registers and the half-precision
19362               floating-point conversion operations.
19363
19364          '+vfpv4-d16'
19365               The VFPv4 floating-point instructions, with 16
19366               double-precision registers.
19367
19368          '+vfpv4'
19369               The VFPv4 floating-point instructions, with 32
19370               double-precision registers.
19371
19372          '+neon'
19373               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
19374               instructions.  The extension '+neon-vfpv3' can be used as
19375               an alias for this extension.
19376
19377          '+neon-fp16'
19378               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
19379               instructions, with the half-precision floating-point
19380               conversion operations.
19381
19382          '+nosimd'
19383               Disable the Advanced SIMD instructions (does not disable
19384               floating point).
19385
19386          '+nofp'
19387               Disable the floating-point and Advanced SIMD
19388               instructions.
19389
19390     'armv8-a'
19391          '+crc'
19392               The Cyclic Redundancy Check (CRC) instructions.
19393          '+simd'
19394               The ARMv8-A Advanced SIMD and floating-point
19395               instructions.
19396          '+crypto'
19397               The cryptographic instructions.
19398          '+nocrypto'
19399               Disable the cryptographic instructions.
19400          '+nofp'
19401               Disable the floating-point, Advanced SIMD and
19402               cryptographic instructions.
19403          '+sb'
19404               Speculation Barrier Instruction.
19405          '+predres'
19406               Execution and Data Prediction Restriction Instructions.
19407
19408     'armv8.1-a'
19409          '+simd'
19410               The ARMv8.1-A Advanced SIMD and floating-point
19411               instructions.
19412
19413          '+crypto'
19414               The cryptographic instructions.  This also enables the
19415               Advanced SIMD and floating-point instructions.
19416
19417          '+nocrypto'
19418               Disable the cryptographic instructions.
19419
19420          '+nofp'
19421               Disable the floating-point, Advanced SIMD and
19422               cryptographic instructions.
19423
19424          '+sb'
19425               Speculation Barrier Instruction.
19426
19427          '+predres'
19428               Execution and Data Prediction Restriction Instructions.
19429
19430     'armv8.2-a'
19431     'armv8.3-a'
19432          '+fp16'
19433               The half-precision floating-point data processing
19434               instructions.  This also enables the Advanced SIMD and
19435               floating-point instructions.
19436
19437          '+fp16fml'
19438               The half-precision floating-point fmla extension.  This
19439               also enables the half-precision floating-point extension
19440               and Advanced SIMD and floating-point instructions.
19441
19442          '+simd'
19443               The ARMv8.1-A Advanced SIMD and floating-point
19444               instructions.
19445
19446          '+crypto'
19447               The cryptographic instructions.  This also enables the
19448               Advanced SIMD and floating-point instructions.
19449
19450          '+dotprod'
19451               Enable the Dot Product extension.  This also enables
19452               Advanced SIMD instructions.
19453
19454          '+nocrypto'
19455               Disable the cryptographic extension.
19456
19457          '+nofp'
19458               Disable the floating-point, Advanced SIMD and
19459               cryptographic instructions.
19460
19461          '+sb'
19462               Speculation Barrier Instruction.
19463
19464          '+predres'
19465               Execution and Data Prediction Restriction Instructions.
19466
19467          '+i8mm'
19468               8-bit Integer Matrix Multiply instructions.  This also
19469               enables Advanced SIMD and floating-point instructions.
19470
19471          '+bf16'
19472               Brain half-precision floating-point instructions.  This
19473               also enables Advanced SIMD and floating-point
19474               instructions.
19475
19476     'armv8.4-a'
19477          '+fp16'
19478               The half-precision floating-point data processing
19479               instructions.  This also enables the Advanced SIMD and
19480               floating-point instructions as well as the Dot Product
19481               extension and the half-precision floating-point fmla
19482               extension.
19483
19484          '+simd'
19485               The ARMv8.3-A Advanced SIMD and floating-point
19486               instructions as well as the Dot Product extension.
19487
19488          '+crypto'
19489               The cryptographic instructions.  This also enables the
19490               Advanced SIMD and floating-point instructions as well as
19491               the Dot Product extension.
19492
19493          '+nocrypto'
19494               Disable the cryptographic extension.
19495
19496          '+nofp'
19497               Disable the floating-point, Advanced SIMD and
19498               cryptographic instructions.
19499
19500          '+sb'
19501               Speculation Barrier Instruction.
19502
19503          '+predres'
19504               Execution and Data Prediction Restriction Instructions.
19505
19506          '+i8mm'
19507               8-bit Integer Matrix Multiply instructions.  This also
19508               enables Advanced SIMD and floating-point instructions.
19509
19510          '+bf16'
19511               Brain half-precision floating-point instructions.  This
19512               also enables Advanced SIMD and floating-point
19513               instructions.
19514
19515     'armv8.5-a'
19516          '+fp16'
19517               The half-precision floating-point data processing
19518               instructions.  This also enables the Advanced SIMD and
19519               floating-point instructions as well as the Dot Product
19520               extension and the half-precision floating-point fmla
19521               extension.
19522
19523          '+simd'
19524               The ARMv8.3-A Advanced SIMD and floating-point
19525               instructions as well as the Dot Product extension.
19526
19527          '+crypto'
19528               The cryptographic instructions.  This also enables the
19529               Advanced SIMD and floating-point instructions as well as
19530               the Dot Product extension.
19531
19532          '+nocrypto'
19533               Disable the cryptographic extension.
19534
19535          '+nofp'
19536               Disable the floating-point, Advanced SIMD and
19537               cryptographic instructions.
19538
19539          '+i8mm'
19540               8-bit Integer Matrix Multiply instructions.  This also
19541               enables Advanced SIMD and floating-point instructions.
19542
19543          '+bf16'
19544               Brain half-precision floating-point instructions.  This
19545               also enables Advanced SIMD and floating-point
19546               instructions.
19547
19548     'armv8.6-a'
19549          '+fp16'
19550               The half-precision floating-point data processing
19551               instructions.  This also enables the Advanced SIMD and
19552               floating-point instructions as well as the Dot Product
19553               extension and the half-precision floating-point fmla
19554               extension.
19555
19556          '+simd'
19557               The ARMv8.3-A Advanced SIMD and floating-point
19558               instructions as well as the Dot Product extension.
19559
19560          '+crypto'
19561               The cryptographic instructions.  This also enables the
19562               Advanced SIMD and floating-point instructions as well as
19563               the Dot Product extension.
19564
19565          '+nocrypto'
19566               Disable the cryptographic extension.
19567
19568          '+nofp'
19569               Disable the floating-point, Advanced SIMD and
19570               cryptographic instructions.
19571
19572          '+i8mm'
19573               8-bit Integer Matrix Multiply instructions.  This also
19574               enables Advanced SIMD and floating-point instructions.
19575
19576          '+bf16'
19577               Brain half-precision floating-point instructions.  This
19578               also enables Advanced SIMD and floating-point
19579               instructions.
19580
19581     'armv7-r'
19582          '+fp.sp'
19583               The single-precision VFPv3 floating-point instructions.
19584               The extension '+vfpv3xd' can be used as an alias for this
19585               extension.
19586
19587          '+fp'
19588               The VFPv3 floating-point instructions with 16
19589               double-precision registers.  The extension +vfpv3-d16 can
19590               be used as an alias for this extension.
19591
19592          '+vfpv3xd-d16-fp16'
19593               The single-precision VFPv3 floating-point instructions
19594               with 16 double-precision registers and the half-precision
19595               floating-point conversion operations.
19596
19597          '+vfpv3-d16-fp16'
19598               The VFPv3 floating-point instructions with 16
19599               double-precision registers and the half-precision
19600               floating-point conversion operations.
19601
19602          '+nofp'
19603               Disable the floating-point extension.
19604
19605          '+idiv'
19606               The ARM-state integer division instructions.
19607
19608          '+noidiv'
19609               Disable the ARM-state integer division extension.
19610
19611     'armv7e-m'
19612          '+fp'
19613               The single-precision VFPv4 floating-point instructions.
19614
19615          '+fpv5'
19616               The single-precision FPv5 floating-point instructions.
19617
19618          '+fp.dp'
19619               The single- and double-precision FPv5 floating-point
19620               instructions.
19621
19622          '+nofp'
19623               Disable the floating-point extensions.
19624
19625     'armv8.1-m.main'
19626
19627          '+dsp'
19628               The DSP instructions.
19629
19630          '+mve'
19631               The M-Profile Vector Extension (MVE) integer
19632               instructions.
19633
19634          '+mve.fp'
19635               The M-Profile Vector Extension (MVE) integer and single
19636               precision floating-point instructions.
19637
19638          '+fp'
19639               The single-precision floating-point instructions.
19640
19641          '+fp.dp'
19642               The single- and double-precision floating-point
19643               instructions.
19644
19645          '+nofp'
19646               Disable the floating-point extension.
19647
19648          '+cdecp0, +cdecp1, ... , +cdecp7'
19649               Enable the Custom Datapath Extension (CDE) on selected
19650               coprocessors according to the numbers given in the
19651               options in the range 0 to 7.
19652
19653     'armv8-m.main'
19654          '+dsp'
19655               The DSP instructions.
19656
19657          '+nodsp'
19658               Disable the DSP extension.
19659
19660          '+fp'
19661               The single-precision floating-point instructions.
19662
19663          '+fp.dp'
19664               The single- and double-precision floating-point
19665               instructions.
19666
19667          '+nofp'
19668               Disable the floating-point extension.
19669
19670          '+cdecp0, +cdecp1, ... , +cdecp7'
19671               Enable the Custom Datapath Extension (CDE) on selected
19672               coprocessors according to the numbers given in the
19673               options in the range 0 to 7.
19674
19675     'armv8-r'
19676          '+crc'
19677               The Cyclic Redundancy Check (CRC) instructions.
19678          '+fp.sp'
19679               The single-precision FPv5 floating-point instructions.
19680          '+simd'
19681               The ARMv8-A Advanced SIMD and floating-point
19682               instructions.
19683          '+crypto'
19684               The cryptographic instructions.
19685          '+nocrypto'
19686               Disable the cryptographic instructions.
19687          '+nofp'
19688               Disable the floating-point, Advanced SIMD and
19689               cryptographic instructions.
19690
19691     '-march=native' causes the compiler to auto-detect the architecture
19692     of the build computer.  At present, this feature is only supported
19693     on GNU/Linux, and not all architectures are recognized.  If the
19694     auto-detect is unsuccessful the option has no effect.
19695
19696'-mtune=NAME'
19697     This option specifies the name of the target ARM processor for
19698     which GCC should tune the performance of the code.  For some ARM
19699     implementations better performance can be obtained by using this
19700     option.  Permissible names are: 'arm7tdmi', 'arm7tdmi-s',
19701     'arm710t', 'arm720t', 'arm740t', 'strongarm', 'strongarm110',
19702     'strongarm1100', 'strongarm1110', 'arm8', 'arm810', 'arm9',
19703     'arm9e', 'arm920', 'arm920t', 'arm922t', 'arm946e-s', 'arm966e-s',
19704     'arm968e-s', 'arm926ej-s', 'arm940t', 'arm9tdmi', 'arm10tdmi',
19705     'arm1020t', 'arm1026ej-s', 'arm10e', 'arm1020e', 'arm1022e',
19706     'arm1136j-s', 'arm1136jf-s', 'mpcore', 'mpcorenovfp',
19707     'arm1156t2-s', 'arm1156t2f-s', 'arm1176jz-s', 'arm1176jzf-s',
19708     'generic-armv7-a', 'cortex-a5', 'cortex-a7', 'cortex-a8',
19709     'cortex-a9', 'cortex-a12', 'cortex-a15', 'cortex-a17',
19710     'cortex-a32', 'cortex-a35', 'cortex-a53', 'cortex-a55',
19711     'cortex-a57', 'cortex-a72', 'cortex-a73', 'cortex-a75',
19712     'cortex-a76', 'cortex-a76ae', 'cortex-a77', 'cortex-a78',
19713     'cortex-a78ae', 'cortex-a78c', 'cortex-a710', 'ares', 'cortex-r4',
19714     'cortex-r4f', 'cortex-r5', 'cortex-r7', 'cortex-r8', 'cortex-r52',
19715     'cortex-r52plus', 'cortex-m0', 'cortex-m0plus', 'cortex-m1',
19716     'cortex-m3', 'cortex-m4', 'cortex-m7', 'cortex-m23', 'cortex-m33',
19717     'cortex-m35p', 'cortex-m55', 'cortex-x1',
19718     'cortex-m1.small-multiply', 'cortex-m0.small-multiply',
19719     'cortex-m0plus.small-multiply', 'exynos-m1', 'marvell-pj4',
19720     'neoverse-n1', 'neoverse-n2', 'neoverse-v1', 'xscale', 'iwmmxt',
19721     'iwmmxt2', 'ep9312', 'fa526', 'fa626', 'fa606te', 'fa626te',
19722     'fmp626', 'fa726te', 'xgene1'.
19723
19724     Additionally, this option can specify that GCC should tune the
19725     performance of the code for a big.LITTLE system.  Permissible names
19726     are: 'cortex-a15.cortex-a7', 'cortex-a17.cortex-a7',
19727     'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
19728     'cortex-a72.cortex-a35', 'cortex-a73.cortex-a53',
19729     'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55'.
19730
19731     '-mtune=generic-ARCH' specifies that GCC should tune the
19732     performance for a blend of processors within architecture ARCH.
19733     The aim is to generate code that run well on the current most
19734     popular processors, balancing between optimizations that benefit
19735     some CPUs in the range, and avoiding performance pitfalls of other
19736     CPUs.  The effects of this option may change in future GCC versions
19737     as CPU models come and go.
19738
19739     '-mtune' permits the same extension options as '-mcpu', but the
19740     extension options do not affect the tuning of the generated code.
19741
19742     '-mtune=native' causes the compiler to auto-detect the CPU of the
19743     build computer.  At present, this feature is only supported on
19744     GNU/Linux, and not all architectures are recognized.  If the
19745     auto-detect is unsuccessful the option has no effect.
19746
19747'-mcpu=NAME[+extension...]'
19748     This specifies the name of the target ARM processor.  GCC uses this
19749     name to derive the name of the target ARM architecture (as if
19750     specified by '-march') and the ARM processor type for which to tune
19751     for performance (as if specified by '-mtune').  Where this option
19752     is used in conjunction with '-march' or '-mtune', those options
19753     take precedence over the appropriate part of this option.
19754
19755     Many of the supported CPUs implement optional architectural
19756     extensions.  Where this is so the architectural extensions are
19757     normally enabled by default.  If implementations that lack the
19758     extension exist, then the extension syntax can be used to disable
19759     those extensions that have been omitted.  For floating-point and
19760     Advanced SIMD (Neon) instructions, the settings of the options
19761     '-mfloat-abi' and '-mfpu' must also be considered: floating-point
19762     and Advanced SIMD instructions will only be used if '-mfloat-abi'
19763     is not set to 'soft'; and any setting of '-mfpu' other than 'auto'
19764     will override the available floating-point and SIMD extension
19765     instructions.
19766
19767     For example, 'cortex-a9' can be found in three major
19768     configurations: integer only, with just a floating-point unit or
19769     with floating-point and Advanced SIMD. The default is to enable all
19770     the instructions, but the extensions '+nosimd' and '+nofp' can be
19771     used to disable just the SIMD or both the SIMD and floating-point
19772     instructions respectively.
19773
19774     Permissible names for this option are the same as those for
19775     '-mtune'.
19776
19777     The following extension options are common to the listed CPUs:
19778
19779     '+nodsp'
19780          Disable the DSP instructions on 'cortex-m33', 'cortex-m35p'.
19781
19782     '+nofp'
19783          Disables the floating-point instructions on 'arm9e',
19784          'arm946e-s', 'arm966e-s', 'arm968e-s', 'arm10e', 'arm1020e',
19785          'arm1022e', 'arm926ej-s', 'arm1026ej-s', 'cortex-r5',
19786          'cortex-r7', 'cortex-r8', 'cortex-m4', 'cortex-m7',
19787          'cortex-m33' and 'cortex-m35p'.  Disables the floating-point
19788          and SIMD instructions on 'generic-armv7-a', 'cortex-a5',
19789          'cortex-a7', 'cortex-a8', 'cortex-a9', 'cortex-a12',
19790          'cortex-a15', 'cortex-a17', 'cortex-a15.cortex-a7',
19791          'cortex-a17.cortex-a7', 'cortex-a32', 'cortex-a35',
19792          'cortex-a53' and 'cortex-a55'.
19793
19794     '+nofp.dp'
19795          Disables the double-precision component of the floating-point
19796          instructions on 'cortex-r5', 'cortex-r7', 'cortex-r8',
19797          'cortex-r52', 'cortex-r52plus' and 'cortex-m7'.
19798
19799     '+nosimd'
19800          Disables the SIMD (but not floating-point) instructions on
19801          'generic-armv7-a', 'cortex-a5', 'cortex-a7' and 'cortex-a9'.
19802
19803     '+crypto'
19804          Enables the cryptographic instructions on 'cortex-a32',
19805          'cortex-a35', 'cortex-a53', 'cortex-a55', 'cortex-a57',
19806          'cortex-a72', 'cortex-a73', 'cortex-a75', 'exynos-m1',
19807          'xgene1', 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
19808          'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53' and
19809          'cortex-a75.cortex-a55'.
19810
19811     Additionally the 'generic-armv7-a' pseudo target defaults to VFPv3
19812     with 16 double-precision registers.  It supports the following
19813     extension options: 'mp', 'sec', 'vfpv3-d16', 'vfpv3',
19814     'vfpv3-d16-fp16', 'vfpv3-fp16', 'vfpv4-d16', 'vfpv4', 'neon',
19815     'neon-vfpv3', 'neon-fp16', 'neon-vfpv4'.  The meanings are the same
19816     as for the extensions to '-march=armv7-a'.
19817
19818     '-mcpu=generic-ARCH' is also permissible, and is equivalent to
19819     '-march=ARCH -mtune=generic-ARCH'.  See '-mtune' for more
19820     information.
19821
19822     '-mcpu=native' causes the compiler to auto-detect the CPU of the
19823     build computer.  At present, this feature is only supported on
19824     GNU/Linux, and not all architectures are recognized.  If the
19825     auto-detect is unsuccessful the option has no effect.
19826
19827'-mfpu=NAME'
19828     This specifies what floating-point hardware (or hardware emulation)
19829     is available on the target.  Permissible names are: 'auto',
19830     'vfpv2', 'vfpv3', 'vfpv3-fp16', 'vfpv3-d16', 'vfpv3-d16-fp16',
19831     'vfpv3xd', 'vfpv3xd-fp16', 'neon-vfpv3', 'neon-fp16', 'vfpv4',
19832     'vfpv4-d16', 'fpv4-sp-d16', 'neon-vfpv4', 'fpv5-d16',
19833     'fpv5-sp-d16', 'fp-armv8', 'neon-fp-armv8' and
19834     'crypto-neon-fp-armv8'.  Note that 'neon' is an alias for
19835     'neon-vfpv3' and 'vfp' is an alias for 'vfpv2'.
19836
19837     The setting 'auto' is the default and is special.  It causes the
19838     compiler to select the floating-point and Advanced SIMD
19839     instructions based on the settings of '-mcpu' and '-march'.
19840
19841     If the selected floating-point hardware includes the NEON extension
19842     (e.g. '-mfpu=neon'), note that floating-point operations are not
19843     generated by GCC's auto-vectorization pass unless
19844     '-funsafe-math-optimizations' is also specified.  This is because
19845     NEON hardware does not fully implement the IEEE 754 standard for
19846     floating-point arithmetic (in particular denormal values are
19847     treated as zero), so the use of NEON instructions may lead to a
19848     loss of precision.
19849
19850     You can also set the fpu name at function level by using the
19851     'target("fpu=")' function attributes (*note ARM Function
19852     Attributes::) or pragmas (*note Function Specific Option
19853     Pragmas::).
19854
19855'-mfp16-format=NAME'
19856     Specify the format of the '__fp16' half-precision floating-point
19857     type.  Permissible names are 'none', 'ieee', and 'alternative'; the
19858     default is 'none', in which case the '__fp16' type is not defined.
19859     *Note Half-Precision::, for more information.
19860
19861'-mstructure-size-boundary=N'
19862     The sizes of all structures and unions are rounded up to a multiple
19863     of the number of bits set by this option.  Permissible values are
19864     8, 32 and 64.  The default value varies for different toolchains.
19865     For the COFF targeted toolchain the default value is 8.  A value of
19866     64 is only allowed if the underlying ABI supports it.
19867
19868     Specifying a larger number can produce faster, more efficient code,
19869     but can also increase the size of the program.  Different values
19870     are potentially incompatible.  Code compiled with one value cannot
19871     necessarily expect to work with code or libraries compiled with
19872     another value, if they exchange information using structures or
19873     unions.
19874
19875     This option is deprecated.
19876
19877'-mabort-on-noreturn'
19878     Generate a call to the function 'abort' at the end of a 'noreturn'
19879     function.  It is executed if the function tries to return.
19880
19881'-mlong-calls'
19882'-mno-long-calls'
19883     Tells the compiler to perform function calls by first loading the
19884     address of the function into a register and then performing a
19885     subroutine call on this register.  This switch is needed if the
19886     target function lies outside of the 64-megabyte addressing range of
19887     the offset-based version of subroutine call instruction.
19888
19889     Even if this switch is enabled, not all function calls are turned
19890     into long calls.  The heuristic is that static functions, functions
19891     that have the 'short_call' attribute, functions that are inside the
19892     scope of a '#pragma no_long_calls' directive, and functions whose
19893     definitions have already been compiled within the current
19894     compilation unit are not turned into long calls.  The exceptions to
19895     this rule are that weak function definitions, functions with the
19896     'long_call' attribute or the 'section' attribute, and functions
19897     that are within the scope of a '#pragma long_calls' directive are
19898     always turned into long calls.
19899
19900     This feature is not enabled by default.  Specifying
19901     '-mno-long-calls' restores the default behavior, as does placing
19902     the function calls within the scope of a '#pragma long_calls_off'
19903     directive.  Note these switches have no effect on how the compiler
19904     generates code to handle function calls via function pointers.
19905
19906'-msingle-pic-base'
19907     Treat the register used for PIC addressing as read-only, rather
19908     than loading it in the prologue for each function.  The runtime
19909     system is responsible for initializing this register with an
19910     appropriate value before execution begins.
19911
19912'-mpic-register=REG'
19913     Specify the register to be used for PIC addressing.  For standard
19914     PIC base case, the default is any suitable register determined by
19915     compiler.  For single PIC base case, the default is 'R9' if target
19916     is EABI based or stack-checking is enabled, otherwise the default
19917     is 'R10'.
19918
19919'-mpic-data-is-text-relative'
19920     Assume that the displacement between the text and data segments is
19921     fixed at static link time.  This permits using PC-relative
19922     addressing operations to access data known to be in the data
19923     segment.  For non-VxWorks RTP targets, this option is enabled by
19924     default.  When disabled on such targets, it will enable
19925     '-msingle-pic-base' by default.
19926
19927'-mpoke-function-name'
19928     Write the name of each function into the text section, directly
19929     preceding the function prologue.  The generated code is similar to
19930     this:
19931
19932               t0
19933                   .ascii "arm_poke_function_name", 0
19934                   .align
19935               t1
19936                   .word 0xff000000 + (t1 - t0)
19937               arm_poke_function_name
19938                   mov     ip, sp
19939                   stmfd   sp!, {fp, ip, lr, pc}
19940                   sub     fp, ip, #4
19941
19942     When performing a stack backtrace, code can inspect the value of
19943     'pc' stored at 'fp + 0'.  If the trace function then looks at
19944     location 'pc - 12' and the top 8 bits are set, then we know that
19945     there is a function name embedded immediately preceding this
19946     location and has length '((pc[-3]) & 0xff000000)'.
19947
19948'-mthumb'
19949'-marm'
19950
19951     Select between generating code that executes in ARM and Thumb
19952     states.  The default for most configurations is to generate code
19953     that executes in ARM state, but the default can be changed by
19954     configuring GCC with the '--with-mode='STATE configure option.
19955
19956     You can also override the ARM and Thumb mode for each function by
19957     using the 'target("thumb")' and 'target("arm")' function attributes
19958     (*note ARM Function Attributes::) or pragmas (*note Function
19959     Specific Option Pragmas::).
19960
19961'-mflip-thumb'
19962     Switch ARM/Thumb modes on alternating functions.  This option is
19963     provided for regression testing of mixed Thumb/ARM code generation,
19964     and is not intended for ordinary use in compiling code.
19965
19966'-mtpcs-frame'
19967     Generate a stack frame that is compliant with the Thumb Procedure
19968     Call Standard for all non-leaf functions.  (A leaf function is one
19969     that does not call any other functions.)  The default is
19970     '-mno-tpcs-frame'.
19971
19972'-mtpcs-leaf-frame'
19973     Generate a stack frame that is compliant with the Thumb Procedure
19974     Call Standard for all leaf functions.  (A leaf function is one that
19975     does not call any other functions.)  The default is
19976     '-mno-apcs-leaf-frame'.
19977
19978'-mcallee-super-interworking'
19979     Gives all externally visible functions in the file being compiled
19980     an ARM instruction set header which switches to Thumb mode before
19981     executing the rest of the function.  This allows these functions to
19982     be called from non-interworking code.  This option is not valid in
19983     AAPCS configurations because interworking is enabled by default.
19984
19985'-mcaller-super-interworking'
19986     Allows calls via function pointers (including virtual functions) to
19987     execute correctly regardless of whether the target code has been
19988     compiled for interworking or not.  There is a small overhead in the
19989     cost of executing a function pointer if this option is enabled.
19990     This option is not valid in AAPCS configurations because
19991     interworking is enabled by default.
19992
19993'-mtp=NAME'
19994     Specify the access model for the thread local storage pointer.  The
19995     valid models are 'soft', which generates calls to
19996     '__aeabi_read_tp', 'cp15', which fetches the thread pointer from
19997     'cp15' directly (supported in the arm6k architecture), and 'auto',
19998     which uses the best available method for the selected processor.
19999     The default setting is 'auto'.
20000
20001'-mtls-dialect=DIALECT'
20002     Specify the dialect to use for accessing thread local storage.  Two
20003     DIALECTs are supported--'gnu' and 'gnu2'.  The 'gnu' dialect
20004     selects the original GNU scheme for supporting local and global
20005     dynamic TLS models.  The 'gnu2' dialect selects the GNU descriptor
20006     scheme, which provides better performance for shared libraries.
20007     The GNU descriptor scheme is compatible with the original scheme,
20008     but does require new assembler, linker and library support.
20009     Initial and local exec TLS models are unaffected by this option and
20010     always use the original scheme.
20011
20012'-mword-relocations'
20013     Only generate absolute relocations on word-sized values (i.e.
20014     R_ARM_ABS32).  This is enabled by default on targets (uClinux,
20015     SymbianOS) where the runtime loader imposes this restriction, and
20016     when '-fpic' or '-fPIC' is specified.  This option conflicts with
20017     '-mslow-flash-data'.
20018
20019'-mfix-cortex-m3-ldrd'
20020     Some Cortex-M3 cores can cause data corruption when 'ldrd'
20021     instructions with overlapping destination and base registers are
20022     used.  This option avoids generating these instructions.  This
20023     option is enabled by default when '-mcpu=cortex-m3' is specified.
20024
20025'-mfix-cortex-a57-aes-1742098'
20026'-mno-fix-cortex-a57-aes-1742098'
20027'-mfix-cortex-a72-aes-1655431'
20028'-mno-fix-cortex-a72-aes-1655431'
20029     Enable (disable) mitigation for an erratum on Cortex-A57 and
20030     Cortex-A72 that affects the AES cryptographic instructions.  This
20031     option is enabled by default when either '-mcpu=cortex-a57' or
20032     '-mcpu=cortex-a72' is specified.
20033
20034'-munaligned-access'
20035'-mno-unaligned-access'
20036     Enables (or disables) reading and writing of 16- and 32- bit values
20037     from addresses that are not 16- or 32- bit aligned.  By default
20038     unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
20039     ARMv8-M Baseline architectures, and enabled for all other
20040     architectures.  If unaligned access is not enabled then words in
20041     packed data structures are accessed a byte at a time.
20042
20043     The ARM attribute 'Tag_CPU_unaligned_access' is set in the
20044     generated object file to either true or false, depending upon the
20045     setting of this option.  If unaligned access is enabled then the
20046     preprocessor symbol '__ARM_FEATURE_UNALIGNED' is also defined.
20047
20048'-mneon-for-64bits'
20049     This option is deprecated and has no effect.
20050
20051'-mslow-flash-data'
20052     Assume loading data from flash is slower than fetching instruction.
20053     Therefore literal load is minimized for better performance.  This
20054     option is only supported when compiling for ARMv7 M-profile and off
20055     by default.  It conflicts with '-mword-relocations'.
20056
20057'-masm-syntax-unified'
20058     Assume inline assembler is using unified asm syntax.  The default
20059     is currently off which implies divided syntax.  This option has no
20060     impact on Thumb2.  However, this may change in future releases of
20061     GCC. Divided syntax should be considered deprecated.
20062
20063'-mrestrict-it'
20064     Restricts generation of IT blocks to conform to the rules of
20065     ARMv8-A. IT blocks can only contain a single 16-bit instruction
20066     from a select set of instructions.  This option is on by default
20067     for ARMv8-A Thumb mode.
20068
20069'-mprint-tune-info'
20070     Print CPU tuning information as comment in assembler file.  This is
20071     an option used only for regression testing of the compiler and not
20072     intended for ordinary use in compiling code.  This option is
20073     disabled by default.
20074
20075'-mverbose-cost-dump'
20076     Enable verbose cost model dumping in the debug dump files.  This
20077     option is provided for use in debugging the compiler.
20078
20079'-mpure-code'
20080     Do not allow constant data to be placed in code sections.
20081     Additionally, when compiling for ELF object format give all text
20082     sections the ELF processor-specific section attribute
20083     'SHF_ARM_PURECODE'.  This option is only available when generating
20084     non-pic code for M-profile targets.
20085
20086'-mcmse'
20087     Generate secure code as per the "ARMv8-M Security Extensions:
20088     Requirements on Development Tools Engineering Specification", which
20089     can be found on
20090     <https://developer.arm.com/documentation/ecm0359818/latest/>.
20091
20092'-mfix-cmse-cve-2021-35465'
20093     Mitigate against a potential security issue with the 'VLLDM'
20094     instruction in some M-profile devices when using CMSE
20095     (CVE-2021-365465).  This option is enabled by default when the
20096     option '-mcpu=' is used with 'cortex-m33', 'cortex-m35p' or
20097     'cortex-m55'.  The option '-mno-fix-cmse-cve-2021-35465' can be
20098     used to disable the mitigation.
20099
20100'-mstack-protector-guard=GUARD'
20101'-mstack-protector-guard-offset=OFFSET'
20102     Generate stack protection code using canary at GUARD.  Supported
20103     locations are 'global' for a global canary or 'tls' for a canary
20104     accessible via the TLS register.  The option
20105     '-mstack-protector-guard-offset=' is for use with
20106     '-fstack-protector-guard=tls' and not for use in user-land code.
20107
20108'-mfdpic'
20109'-mno-fdpic'
20110     Select the FDPIC ABI, which uses 64-bit function descriptors to
20111     represent pointers to functions.  When the compiler is configured
20112     for 'arm-*-uclinuxfdpiceabi' targets, this option is on by default
20113     and implies '-fPIE' if none of the PIC/PIE-related options is
20114     provided.  On other targets, it only enables the FDPIC-specific
20115     code generation features, and the user should explicitly provide
20116     the PIC/PIE-related options as needed.
20117
20118     Note that static linking is not supported because it would still
20119     involve the dynamic linker when the program self-relocates.  If
20120     such behavior is acceptable, use -static and -Wl,-dynamic-linker
20121     options.
20122
20123     The opposite '-mno-fdpic' option is useful (and required) to build
20124     the Linux kernel using the same ('arm-*-uclinuxfdpiceabi')
20125     toolchain as the one used to build the userland programs.
20126
20127
20128File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
20129
201303.19.6 AVR Options
20131------------------
20132
20133These options are defined for AVR implementations:
20134
20135'-mmcu=MCU'
20136     Specify Atmel AVR instruction set architectures (ISA) or MCU type.
20137
20138     The default for this option is 'avr2'.
20139
20140     GCC supports the following AVR devices and ISAs:
20141
20142     'avr2'
20143          "Classic" devices with up to 8 KiB of program memory.
20144          MCU = 'attiny22', 'attiny26', 'at90s2313', 'at90s2323',
20145          'at90s2333', 'at90s2343', 'at90s4414', 'at90s4433',
20146          'at90s4434', 'at90c8534', 'at90s8515', 'at90s8535'.
20147
20148     'avr25'
20149          "Classic" devices with up to 8 KiB of program memory and with
20150          the 'MOVW' instruction.
20151          MCU = 'attiny13', 'attiny13a', 'attiny24', 'attiny24a',
20152          'attiny25', 'attiny261', 'attiny261a', 'attiny2313',
20153          'attiny2313a', 'attiny43u', 'attiny44', 'attiny44a',
20154          'attiny45', 'attiny48', 'attiny441', 'attiny461',
20155          'attiny461a', 'attiny4313', 'attiny84', 'attiny84a',
20156          'attiny85', 'attiny87', 'attiny88', 'attiny828', 'attiny841',
20157          'attiny861', 'attiny861a', 'ata5272', 'ata6616c', 'at86rf401'.
20158
20159     'avr3'
20160          "Classic" devices with 16 KiB up to 64 KiB of program memory.
20161          MCU = 'at76c711', 'at43usb355'.
20162
20163     'avr31'
20164          "Classic" devices with 128 KiB of program memory.
20165          MCU = 'atmega103', 'at43usb320'.
20166
20167     'avr35'
20168          "Classic" devices with 16 KiB up to 64 KiB of program memory
20169          and with the 'MOVW' instruction.
20170          MCU = 'attiny167', 'attiny1634', 'atmega8u2', 'atmega16u2',
20171          'atmega32u2', 'ata5505', 'ata6617c', 'ata664251', 'at90usb82',
20172          'at90usb162'.
20173
20174     'avr4'
20175          "Enhanced" devices with up to 8 KiB of program memory.
20176          MCU = 'atmega48', 'atmega48a', 'atmega48p', 'atmega48pa',
20177          'atmega48pb', 'atmega8', 'atmega8a', 'atmega8hva', 'atmega88',
20178          'atmega88a', 'atmega88p', 'atmega88pa', 'atmega88pb',
20179          'atmega8515', 'atmega8535', 'ata6285', 'ata6286', 'ata6289',
20180          'ata6612c', 'at90pwm1', 'at90pwm2', 'at90pwm2b', 'at90pwm3',
20181          'at90pwm3b', 'at90pwm81'.
20182
20183     'avr5'
20184          "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
20185
20186          MCU = 'atmega16', 'atmega16a', 'atmega16hva', 'atmega16hva2',
20187          'atmega16hvb', 'atmega16hvbrevb', 'atmega16m1', 'atmega16u4',
20188          'atmega161', 'atmega162', 'atmega163', 'atmega164a',
20189          'atmega164p', 'atmega164pa', 'atmega165', 'atmega165a',
20190          'atmega165p', 'atmega165pa', 'atmega168', 'atmega168a',
20191          'atmega168p', 'atmega168pa', 'atmega168pb', 'atmega169',
20192          'atmega169a', 'atmega169p', 'atmega169pa', 'atmega32',
20193          'atmega32a', 'atmega32c1', 'atmega32hvb', 'atmega32hvbrevb',
20194          'atmega32m1', 'atmega32u4', 'atmega32u6', 'atmega323',
20195          'atmega324a', 'atmega324p', 'atmega324pa', 'atmega324pb',
20196          'atmega325', 'atmega325a', 'atmega325p', 'atmega325pa',
20197          'atmega328', 'atmega328p', 'atmega328pb', 'atmega329',
20198          'atmega329a', 'atmega329p', 'atmega329pa', 'atmega3250',
20199          'atmega3250a', 'atmega3250p', 'atmega3250pa', 'atmega3290',
20200          'atmega3290a', 'atmega3290p', 'atmega3290pa', 'atmega406',
20201          'atmega64', 'atmega64a', 'atmega64c1', 'atmega64hve',
20202          'atmega64hve2', 'atmega64m1', 'atmega64rfr2', 'atmega640',
20203          'atmega644', 'atmega644a', 'atmega644p', 'atmega644pa',
20204          'atmega644rfr2', 'atmega645', 'atmega645a', 'atmega645p',
20205          'atmega649', 'atmega649a', 'atmega649p', 'atmega6450',
20206          'atmega6450a', 'atmega6450p', 'atmega6490', 'atmega6490a',
20207          'atmega6490p', 'ata5795', 'ata5790', 'ata5790n', 'ata5791',
20208          'ata6613c', 'ata6614q', 'ata5782', 'ata5831', 'ata8210',
20209          'ata8510', 'ata5702m322', 'at90pwm161', 'at90pwm216',
20210          'at90pwm316', 'at90can32', 'at90can64', 'at90scr100',
20211          'at90usb646', 'at90usb647', 'at94k', 'm3000'.
20212
20213     'avr51'
20214          "Enhanced" devices with 128 KiB of program memory.
20215          MCU = 'atmega128', 'atmega128a', 'atmega128rfa1',
20216          'atmega128rfr2', 'atmega1280', 'atmega1281', 'atmega1284',
20217          'atmega1284p', 'atmega1284rfr2', 'at90can128', 'at90usb1286',
20218          'at90usb1287'.
20219
20220     'avr6'
20221          "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB
20222          of program memory.
20223          MCU = 'atmega256rfr2', 'atmega2560', 'atmega2561',
20224          'atmega2564rfr2'.
20225
20226     'avrxmega2'
20227          "XMEGA" devices with more than 8 KiB and up to 64 KiB of
20228          program memory.
20229          MCU = 'atxmega8e5', 'atxmega16a4', 'atxmega16a4u',
20230          'atxmega16c4', 'atxmega16d4', 'atxmega16e5', 'atxmega32a4',
20231          'atxmega32a4u', 'atxmega32c3', 'atxmega32c4', 'atxmega32d3',
20232          'atxmega32d4', 'atxmega32e5'.
20233
20234     'avrxmega3'
20235          "XMEGA" devices with up to 64 KiB of combined program memory
20236          and RAM, and with program memory visible in the RAM address
20237          space.
20238          MCU = 'attiny202', 'attiny204', 'attiny212', 'attiny214',
20239          'attiny402', 'attiny404', 'attiny406', 'attiny412',
20240          'attiny414', 'attiny416', 'attiny417', 'attiny804',
20241          'attiny806', 'attiny807', 'attiny814', 'attiny816',
20242          'attiny817', 'attiny1604', 'attiny1606', 'attiny1607',
20243          'attiny1614', 'attiny1616', 'attiny1617', 'attiny3214',
20244          'attiny3216', 'attiny3217', 'atmega808', 'atmega809',
20245          'atmega1608', 'atmega1609', 'atmega3208', 'atmega3209',
20246          'atmega4808', 'atmega4809'.
20247
20248     'avrxmega4'
20249          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
20250          program memory.
20251          MCU = 'atxmega64a3', 'atxmega64a3u', 'atxmega64a4u',
20252          'atxmega64b1', 'atxmega64b3', 'atxmega64c3', 'atxmega64d3',
20253          'atxmega64d4'.
20254
20255     'avrxmega5'
20256          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
20257          program memory and more than 64 KiB of RAM.
20258          MCU = 'atxmega64a1', 'atxmega64a1u'.
20259
20260     'avrxmega6'
20261          "XMEGA" devices with more than 128 KiB of program memory.
20262          MCU = 'atxmega128a3', 'atxmega128a3u', 'atxmega128b1',
20263          'atxmega128b3', 'atxmega128c3', 'atxmega128d3',
20264          'atxmega128d4', 'atxmega192a3', 'atxmega192a3u',
20265          'atxmega192c3', 'atxmega192d3', 'atxmega256a3',
20266          'atxmega256a3b', 'atxmega256a3bu', 'atxmega256a3u',
20267          'atxmega256c3', 'atxmega256d3', 'atxmega384c3',
20268          'atxmega384d3'.
20269
20270     'avrxmega7'
20271          "XMEGA" devices with more than 128 KiB of program memory and
20272          more than 64 KiB of RAM.
20273          MCU = 'atxmega128a1', 'atxmega128a1u', 'atxmega128a4u'.
20274
20275     'avrtiny'
20276          "TINY" Tiny core devices with 512 B up to 4 KiB of program
20277          memory.
20278          MCU = 'attiny4', 'attiny5', 'attiny9', 'attiny10', 'attiny20',
20279          'attiny40'.
20280
20281     'avr1'
20282          This ISA is implemented by the minimal AVR core and supported
20283          for assembler only.
20284          MCU = 'attiny11', 'attiny12', 'attiny15', 'attiny28',
20285          'at90s1200'.
20286
20287'-mabsdata'
20288
20289     Assume that all data in static storage can be accessed by LDS / STS
20290     instructions.  This option has only an effect on reduced Tiny
20291     devices like ATtiny40.  See also the 'absdata' *note variable
20292     attribute: AVR Variable Attributes.
20293
20294'-maccumulate-args'
20295     Accumulate outgoing function arguments and acquire/release the
20296     needed stack space for outgoing function arguments once in function
20297     prologue/epilogue.  Without this option, outgoing arguments are
20298     pushed before calling a function and popped afterwards.
20299
20300     Popping the arguments after the function call can be expensive on
20301     AVR so that accumulating the stack space might lead to smaller
20302     executables because arguments need not be removed from the stack
20303     after such a function call.
20304
20305     This option can lead to reduced code size for functions that
20306     perform several calls to functions that get their arguments on the
20307     stack like calls to printf-like functions.
20308
20309'-mbranch-cost=COST'
20310     Set the branch costs for conditional branch instructions to COST.
20311     Reasonable values for COST are small, non-negative integers.  The
20312     default branch cost is 0.
20313
20314'-mcall-prologues'
20315     Functions prologues/epilogues are expanded as calls to appropriate
20316     subroutines.  Code size is smaller.
20317
20318'-mdouble=BITS'
20319'-mlong-double=BITS'
20320     Set the size (in bits) of the 'double' or 'long double' type,
20321     respectively.  Possible values for BITS are 32 and 64.  Whether or
20322     not a specific value for BITS is allowed depends on the
20323     '--with-double=' and '--with-long-double='
20324     configure options (https://gcc.gnu.org/install/configure.html#avr),
20325     and the same applies for the default values of the options.
20326
20327'-mgas-isr-prologues'
20328     Interrupt service routines (ISRs) may use the '__gcc_isr' pseudo
20329     instruction supported by GNU Binutils.  If this option is on, the
20330     feature can still be disabled for individual ISRs by means of the
20331     *note 'no_gccisr': AVR Function Attributes. function attribute.
20332     This feature is activated per default if optimization is on (but
20333     not with '-Og', *note Optimize Options::), and if GNU Binutils
20334     support PR21683 (https://sourceware.org/PR21683).
20335
20336'-mint8'
20337     Assume 'int' to be 8-bit integer.  This affects the sizes of all
20338     types: a 'char' is 1 byte, an 'int' is 1 byte, a 'long' is 2 bytes,
20339     and 'long long' is 4 bytes.  Please note that this option does not
20340     conform to the C standards, but it results in smaller code size.
20341
20342'-mmain-is-OS_task'
20343     Do not save registers in 'main'.  The effect is the same like
20344     attaching attribute *note 'OS_task': AVR Function Attributes. to
20345     'main'.  It is activated per default if optimization is on.
20346
20347'-mn-flash=NUM'
20348     Assume that the flash memory has a size of NUM times 64 KiB.
20349
20350'-mno-interrupts'
20351     Generated code is not compatible with hardware interrupts.  Code
20352     size is smaller.
20353
20354'-mrelax'
20355     Try to replace 'CALL' resp. 'JMP' instruction by the shorter
20356     'RCALL' resp. 'RJMP' instruction if applicable.  Setting '-mrelax'
20357     just adds the '--mlink-relax' option to the assembler's command
20358     line and the '--relax' option to the linker's command line.
20359
20360     Jump relaxing is performed by the linker because jump offsets are
20361     not known before code is located.  Therefore, the assembler code
20362     generated by the compiler is the same, but the instructions in the
20363     executable may differ from instructions in the assembler code.
20364
20365     Relaxing must be turned on if linker stubs are needed, see the
20366     section on 'EIND' and linker stubs below.
20367
20368'-mrmw'
20369     Assume that the device supports the Read-Modify-Write instructions
20370     'XCH', 'LAC', 'LAS' and 'LAT'.
20371
20372'-mshort-calls'
20373
20374     Assume that 'RJMP' and 'RCALL' can target the whole program memory.
20375
20376     This option is used internally for multilib selection.  It is not
20377     an optimization option, and you don't need to set it by hand.
20378
20379'-msp8'
20380     Treat the stack pointer register as an 8-bit register, i.e. assume
20381     the high byte of the stack pointer is zero.  In general, you don't
20382     need to set this option by hand.
20383
20384     This option is used internally by the compiler to select and build
20385     multilibs for architectures 'avr2' and 'avr25'.  These
20386     architectures mix devices with and without 'SPH'.  For any setting
20387     other than '-mmcu=avr2' or '-mmcu=avr25' the compiler driver adds
20388     or removes this option from the compiler proper's command line,
20389     because the compiler then knows if the device or architecture has
20390     an 8-bit stack pointer and thus no 'SPH' register or not.
20391
20392'-mstrict-X'
20393     Use address register 'X' in a way proposed by the hardware.  This
20394     means that 'X' is only used in indirect, post-increment or
20395     pre-decrement addressing.
20396
20397     Without this option, the 'X' register may be used in the same way
20398     as 'Y' or 'Z' which then is emulated by additional instructions.
20399     For example, loading a value with 'X+const' addressing with a small
20400     non-negative 'const < 64' to a register RN is performed as
20401
20402          adiw r26, const   ; X += const
20403          ld   RN, X        ; RN = *X
20404          sbiw r26, const   ; X -= const
20405
20406'-mtiny-stack'
20407     Only change the lower 8 bits of the stack pointer.
20408
20409'-mfract-convert-truncate'
20410     Allow to use truncation instead of rounding towards zero for
20411     fractional fixed-point types.
20412
20413'-nodevicelib'
20414     Don't link against AVR-LibC's device specific library 'lib<mcu>.a'.
20415
20416'-nodevicespecs'
20417     Don't add '-specs=device-specs/specs-MCU' to the compiler driver's
20418     command line.  The user takes responsibility for supplying the
20419     sub-processes like compiler proper, assembler and linker with
20420     appropriate command line options.  This means that the user has to
20421     supply her private device specs file by means of
20422     '-specs=PATH-TO-SPECS-FILE'.  There is no more need for option
20423     '-mmcu=MCU'.
20424
20425     This option can also serve as a replacement for the older way of
20426     specifying custom device-specs files that needed '-B SOME-PATH' to
20427     point to a directory which contains a folder named 'device-specs'
20428     which contains a specs file named 'specs-MCU', where MCU was
20429     specified by '-mmcu=MCU'.
20430
20431'-Waddr-space-convert'
20432     Warn about conversions between address spaces in the case where the
20433     resulting address space is not contained in the incoming address
20434     space.
20435
20436'-Wmisspelled-isr'
20437     Warn if the ISR is misspelled, i.e. without __vector prefix.
20438     Enabled by default.
20439
204403.19.6.1 'EIND' and Devices with More Than 128 Ki Bytes of Flash
20441................................................................
20442
20443Pointers in the implementation are 16 bits wide.  The address of a
20444function or label is represented as word address so that indirect jumps
20445and calls can target any code address in the range of 64 Ki words.
20446
20447 In order to facilitate indirect jump on devices with more than 128 Ki
20448bytes of program memory space, there is a special function register
20449called 'EIND' that serves as most significant part of the target address
20450when 'EICALL' or 'EIJMP' instructions are used.
20451
20452 Indirect jumps and calls on these devices are handled as follows by the
20453compiler and are subject to some limitations:
20454
20455   * The compiler never sets 'EIND'.
20456
20457   * The compiler uses 'EIND' implicitly in 'EICALL'/'EIJMP'
20458     instructions or might read 'EIND' directly in order to emulate an
20459     indirect call/jump by means of a 'RET' instruction.
20460
20461   * The compiler assumes that 'EIND' never changes during the startup
20462     code or during the application.  In particular, 'EIND' is not
20463     saved/restored in function or interrupt service routine
20464     prologue/epilogue.
20465
20466   * For indirect calls to functions and computed goto, the linker
20467     generates _stubs_.  Stubs are jump pads sometimes also called
20468     _trampolines_.  Thus, the indirect call/jump jumps to such a stub.
20469     The stub contains a direct jump to the desired address.
20470
20471   * Linker relaxation must be turned on so that the linker generates
20472     the stubs correctly in all situations.  See the compiler option
20473     '-mrelax' and the linker option '--relax'.  There are corner cases
20474     where the linker is supposed to generate stubs but aborts without
20475     relaxation and without a helpful error message.
20476
20477   * The default linker script is arranged for code with 'EIND = 0'.  If
20478     code is supposed to work for a setup with 'EIND != 0', a custom
20479     linker script has to be used in order to place the sections whose
20480     name start with '.trampolines' into the segment where 'EIND' points
20481     to.
20482
20483   * The startup code from libgcc never sets 'EIND'.  Notice that
20484     startup code is a blend of code from libgcc and AVR-LibC. For the
20485     impact of AVR-LibC on 'EIND', see the
20486     AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
20487
20488   * It is legitimate for user-specific startup code to set up 'EIND'
20489     early, for example by means of initialization code located in
20490     section '.init3'.  Such code runs prior to general startup code
20491     that initializes RAM and calls constructors, but after the bit of
20492     startup code from AVR-LibC that sets 'EIND' to the segment where
20493     the vector table is located.
20494          #include <avr/io.h>
20495
20496          static void
20497          __attribute__((section(".init3"),naked,used,no_instrument_function))
20498          init3_set_eind (void)
20499          {
20500            __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
20501                            "out %i0,r24" :: "n" (&EIND) : "r24","memory");
20502          }
20503
20504     The '__trampolines_start' symbol is defined in the linker script.
20505
20506   * Stubs are generated automatically by the linker if the following
20507     two conditions are met:
20508
20509        - The address of a label is taken by means of the 'gs' modifier
20510          (short for _generate stubs_) like so:
20511               LDI r24, lo8(gs(FUNC))
20512               LDI r25, hi8(gs(FUNC))
20513        - The final location of that label is in a code segment
20514          _outside_ the segment where the stubs are located.
20515
20516   * The compiler emits such 'gs' modifiers for code labels in the
20517     following situations:
20518        - Taking address of a function or code label.
20519        - Computed goto.
20520        - If prologue-save function is used, see '-mcall-prologues'
20521          command-line option.
20522        - Switch/case dispatch tables.  If you do not want such dispatch
20523          tables you can specify the '-fno-jump-tables' command-line
20524          option.
20525        - C and C++ constructors/destructors called during
20526          startup/shutdown.
20527        - If the tools hit a 'gs()' modifier explained above.
20528
20529   * Jumping to non-symbolic addresses like so is _not_ supported:
20530
20531          int main (void)
20532          {
20533              /* Call function at word address 0x2 */
20534              return ((int(*)(void)) 0x2)();
20535          }
20536
20537     Instead, a stub has to be set up, i.e. the function has to be
20538     called through a symbol ('func_4' in the example):
20539
20540          int main (void)
20541          {
20542              extern int func_4 (void);
20543
20544              /* Call function at byte address 0x4 */
20545              return func_4();
20546          }
20547
20548     and the application be linked with '-Wl,--defsym,func_4=0x4'.
20549     Alternatively, 'func_4' can be defined in the linker script.
20550
205513.19.6.2 Handling of the 'RAMPD', 'RAMPX', 'RAMPY' and 'RAMPZ' Special Function Registers
20552.........................................................................................
20553
20554Some AVR devices support memories larger than the 64 KiB range that can
20555be accessed with 16-bit pointers.  To access memory locations outside
20556this 64 KiB range, the content of a 'RAMP' register is used as high part
20557of the address: The 'X', 'Y', 'Z' address register is concatenated with
20558the 'RAMPX', 'RAMPY', 'RAMPZ' special function register, respectively,
20559to get a wide address.  Similarly, 'RAMPD' is used together with direct
20560addressing.
20561
20562   * The startup code initializes the 'RAMP' special function registers
20563     with zero.
20564
20565   * If a *note named address space: AVR Named Address Spaces. other
20566     than generic or '__flash' is used, then 'RAMPZ' is set as needed
20567     before the operation.
20568
20569   * If the device supports RAM larger than 64 KiB and the compiler
20570     needs to change 'RAMPZ' to accomplish an operation, 'RAMPZ' is
20571     reset to zero after the operation.
20572
20573   * If the device comes with a specific 'RAMP' register, the ISR
20574     prologue/epilogue saves/restores that SFR and initializes it with
20575     zero in case the ISR code might (implicitly) use it.
20576
20577   * RAM larger than 64 KiB is not supported by GCC for AVR targets.  If
20578     you use inline assembler to read from locations outside the 16-bit
20579     address range and change one of the 'RAMP' registers, you must
20580     reset it to zero after the access.
20581
205823.19.6.3 AVR Built-in Macros
20583............................
20584
20585GCC defines several built-in macros so that the user code can test for
20586the presence or absence of features.  Almost any of the following
20587built-in macros are deduced from device capabilities and thus triggered
20588by the '-mmcu=' command-line option.
20589
20590 For even more AVR-specific built-in macros see *note AVR Named Address
20591Spaces:: and *note AVR Built-in Functions::.
20592
20593'__AVR_ARCH__'
20594     Build-in macro that resolves to a decimal number that identifies
20595     the architecture and depends on the '-mmcu=MCU' option.  Possible
20596     values are:
20597
20598     '2', '25', '3', '31', '35', '4', '5', '51', '6'
20599
20600     for MCU='avr2', 'avr25', 'avr3', 'avr31', 'avr35', 'avr4', 'avr5',
20601     'avr51', 'avr6',
20602
20603     respectively and
20604
20605     '100', '102', '103', '104', '105', '106', '107'
20606
20607     for MCU='avrtiny', 'avrxmega2', 'avrxmega3', 'avrxmega4',
20608     'avrxmega5', 'avrxmega6', 'avrxmega7', respectively.  If MCU
20609     specifies a device, this built-in macro is set accordingly.  For
20610     example, with '-mmcu=atmega8' the macro is defined to '4'.
20611
20612'__AVR_DEVICE__'
20613     Setting '-mmcu=DEVICE' defines this built-in macro which reflects
20614     the device's name.  For example, '-mmcu=atmega8' defines the
20615     built-in macro '__AVR_ATmega8__', '-mmcu=attiny261a' defines
20616     '__AVR_ATtiny261A__', etc.
20617
20618     The built-in macros' names follow the scheme '__AVR_DEVICE__' where
20619     DEVICE is the device name as from the AVR user manual.  The
20620     difference between DEVICE in the built-in macro and DEVICE in
20621     '-mmcu=DEVICE' is that the latter is always lowercase.
20622
20623     If DEVICE is not a device but only a core architecture like
20624     'avr51', this macro is not defined.
20625
20626'__AVR_DEVICE_NAME__'
20627     Setting '-mmcu=DEVICE' defines this built-in macro to the device's
20628     name.  For example, with '-mmcu=atmega8' the macro is defined to
20629     'atmega8'.
20630
20631     If DEVICE is not a device but only a core architecture like
20632     'avr51', this macro is not defined.
20633
20634'__AVR_XMEGA__'
20635     The device / architecture belongs to the XMEGA family of devices.
20636
20637'__AVR_HAVE_ELPM__'
20638     The device has the 'ELPM' instruction.
20639
20640'__AVR_HAVE_ELPMX__'
20641     The device has the 'ELPM RN,Z' and 'ELPM RN,Z+' instructions.
20642
20643'__AVR_HAVE_MOVW__'
20644     The device has the 'MOVW' instruction to perform 16-bit
20645     register-register moves.
20646
20647'__AVR_HAVE_LPMX__'
20648     The device has the 'LPM RN,Z' and 'LPM RN,Z+' instructions.
20649
20650'__AVR_HAVE_MUL__'
20651     The device has a hardware multiplier.
20652
20653'__AVR_HAVE_JMP_CALL__'
20654     The device has the 'JMP' and 'CALL' instructions.  This is the case
20655     for devices with more than 8 KiB of program memory.
20656
20657'__AVR_HAVE_EIJMP_EICALL__'
20658'__AVR_3_BYTE_PC__'
20659     The device has the 'EIJMP' and 'EICALL' instructions.  This is the
20660     case for devices with more than 128 KiB of program memory.  This
20661     also means that the program counter (PC) is 3 bytes wide.
20662
20663'__AVR_2_BYTE_PC__'
20664     The program counter (PC) is 2 bytes wide.  This is the case for
20665     devices with up to 128 KiB of program memory.
20666
20667'__AVR_HAVE_8BIT_SP__'
20668'__AVR_HAVE_16BIT_SP__'
20669     The stack pointer (SP) register is treated as 8-bit respectively
20670     16-bit register by the compiler.  The definition of these macros is
20671     affected by '-mtiny-stack'.
20672
20673'__AVR_HAVE_SPH__'
20674'__AVR_SP8__'
20675     The device has the SPH (high part of stack pointer) special
20676     function register or has an 8-bit stack pointer, respectively.  The
20677     definition of these macros is affected by '-mmcu=' and in the cases
20678     of '-mmcu=avr2' and '-mmcu=avr25' also by '-msp8'.
20679
20680'__AVR_HAVE_RAMPD__'
20681'__AVR_HAVE_RAMPX__'
20682'__AVR_HAVE_RAMPY__'
20683'__AVR_HAVE_RAMPZ__'
20684     The device has the 'RAMPD', 'RAMPX', 'RAMPY', 'RAMPZ' special
20685     function register, respectively.
20686
20687'__NO_INTERRUPTS__'
20688     This macro reflects the '-mno-interrupts' command-line option.
20689
20690'__AVR_ERRATA_SKIP__'
20691'__AVR_ERRATA_SKIP_JMP_CALL__'
20692     Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
20693     instructions because of a hardware erratum.  Skip instructions are
20694     'SBRS', 'SBRC', 'SBIS', 'SBIC' and 'CPSE'.  The second macro is
20695     only defined if '__AVR_HAVE_JMP_CALL__' is also set.
20696
20697'__AVR_ISA_RMW__'
20698     The device has Read-Modify-Write instructions (XCH, LAC, LAS and
20699     LAT).
20700
20701'__AVR_SFR_OFFSET__=OFFSET'
20702     Instructions that can address I/O special function registers
20703     directly like 'IN', 'OUT', 'SBI', etc. may use a different address
20704     as if addressed by an instruction to access RAM like 'LD' or 'STS'.
20705     This offset depends on the device architecture and has to be
20706     subtracted from the RAM address in order to get the respective
20707     I/O address.
20708
20709'__AVR_SHORT_CALLS__'
20710     The '-mshort-calls' command line option is set.
20711
20712'__AVR_PM_BASE_ADDRESS__=ADDR'
20713     Some devices support reading from flash memory by means of 'LD*'
20714     instructions.  The flash memory is seen in the data address space
20715     at an offset of '__AVR_PM_BASE_ADDRESS__'.  If this macro is not
20716     defined, this feature is not available.  If defined, the address
20717     space is linear and there is no need to put '.rodata' into RAM.
20718     This is handled by the default linker description file, and is
20719     currently available for 'avrtiny' and 'avrxmega3'.  Even more
20720     convenient, there is no need to use address spaces like '__flash'
20721     or features like attribute 'progmem' and 'pgm_read_*'.
20722
20723'__WITH_AVRLIBC__'
20724     The compiler is configured to be used together with AVR-Libc.  See
20725     the '--with-avrlibc' configure option.
20726
20727'__HAVE_DOUBLE_MULTILIB__'
20728     Defined if '-mdouble=' acts as a multilib option.
20729
20730'__HAVE_DOUBLE32__'
20731'__HAVE_DOUBLE64__'
20732     Defined if the compiler supports 32-bit double resp.  64-bit
20733     double.  The actual layout is specified by option '-mdouble='.
20734
20735'__DEFAULT_DOUBLE__'
20736     The size in bits of 'double' if '-mdouble=' is not set.  To test
20737     the layout of 'double' in a program, use the built-in macro
20738     '__SIZEOF_DOUBLE__'.
20739
20740'__HAVE_LONG_DOUBLE32__'
20741'__HAVE_LONG_DOUBLE64__'
20742'__HAVE_LONG_DOUBLE_MULTILIB__'
20743'__DEFAULT_LONG_DOUBLE__'
20744     Same as above, but for 'long double' instead of 'double'.
20745
20746'__WITH_DOUBLE_COMPARISON__'
20747     Reflects the '--with-double-comparison={tristate|bool|libf7}'
20748     configure option (https://gcc.gnu.org/install/configure.html#avr)
20749     and is defined to '2' or '3'.
20750
20751'__WITH_LIBF7_LIBGCC__'
20752'__WITH_LIBF7_MATH__'
20753'__WITH_LIBF7_MATH_SYMBOLS__'
20754     Reflects the '--with-libf7={libgcc|math|math-symbols}'
20755     configure option (https://gcc.gnu.org/install/configure.html#avr).
20756
20757
20758File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
20759
207603.19.7 Blackfin Options
20761-----------------------
20762
20763'-mcpu=CPU[-SIREVISION]'
20764     Specifies the name of the target Blackfin processor.  Currently,
20765     CPU can be one of 'bf512', 'bf514', 'bf516', 'bf518', 'bf522',
20766     'bf523', 'bf524', 'bf525', 'bf526', 'bf527', 'bf531', 'bf532',
20767     'bf533', 'bf534', 'bf536', 'bf537', 'bf538', 'bf539', 'bf542',
20768     'bf544', 'bf547', 'bf548', 'bf549', 'bf542m', 'bf544m', 'bf547m',
20769     'bf548m', 'bf549m', 'bf561', 'bf592'.
20770
20771     The optional SIREVISION specifies the silicon revision of the
20772     target Blackfin processor.  Any workarounds available for the
20773     targeted silicon revision are enabled.  If SIREVISION is 'none', no
20774     workarounds are enabled.  If SIREVISION is 'any', all workarounds
20775     for the targeted processor are enabled.  The '__SILICON_REVISION__'
20776     macro is defined to two hexadecimal digits representing the major
20777     and minor numbers in the silicon revision.  If SIREVISION is
20778     'none', the '__SILICON_REVISION__' is not defined.  If SIREVISION
20779     is 'any', the '__SILICON_REVISION__' is defined to be '0xffff'.  If
20780     this optional SIREVISION is not used, GCC assumes the latest known
20781     silicon revision of the targeted Blackfin processor.
20782
20783     GCC defines a preprocessor macro for the specified CPU.  For the
20784     'bfin-elf' toolchain, this option causes the hardware BSP provided
20785     by libgloss to be linked in if '-msim' is not given.
20786
20787     Without this option, 'bf532' is used as the processor by default.
20788
20789     Note that support for 'bf561' is incomplete.  For 'bf561', only the
20790     preprocessor macro is defined.
20791
20792'-msim'
20793     Specifies that the program will be run on the simulator.  This
20794     causes the simulator BSP provided by libgloss to be linked in.
20795     This option has effect only for 'bfin-elf' toolchain.  Certain
20796     other options, such as '-mid-shared-library' and '-mfdpic', imply
20797     '-msim'.
20798
20799'-momit-leaf-frame-pointer'
20800     Don't keep the frame pointer in a register for leaf functions.
20801     This avoids the instructions to save, set up and restore frame
20802     pointers and makes an extra register available in leaf functions.
20803
20804'-mspecld-anomaly'
20805     When enabled, the compiler ensures that the generated code does not
20806     contain speculative loads after jump instructions.  If this option
20807     is used, '__WORKAROUND_SPECULATIVE_LOADS' is defined.
20808
20809'-mno-specld-anomaly'
20810     Don't generate extra code to prevent speculative loads from
20811     occurring.
20812
20813'-mcsync-anomaly'
20814     When enabled, the compiler ensures that the generated code does not
20815     contain CSYNC or SSYNC instructions too soon after conditional
20816     branches.  If this option is used, '__WORKAROUND_SPECULATIVE_SYNCS'
20817     is defined.
20818
20819'-mno-csync-anomaly'
20820     Don't generate extra code to prevent CSYNC or SSYNC instructions
20821     from occurring too soon after a conditional branch.
20822
20823'-mlow64k'
20824     When enabled, the compiler is free to take advantage of the
20825     knowledge that the entire program fits into the low 64k of memory.
20826
20827'-mno-low64k'
20828     Assume that the program is arbitrarily large.  This is the default.
20829
20830'-mstack-check-l1'
20831     Do stack checking using information placed into L1 scratchpad
20832     memory by the uClinux kernel.
20833
20834'-mid-shared-library'
20835     Generate code that supports shared libraries via the library ID
20836     method.  This allows for execute in place and shared libraries in
20837     an environment without virtual memory management.  This option
20838     implies '-fPIC'.  With a 'bfin-elf' target, this option implies
20839     '-msim'.
20840
20841'-mno-id-shared-library'
20842     Generate code that doesn't assume ID-based shared libraries are
20843     being used.  This is the default.
20844
20845'-mleaf-id-shared-library'
20846     Generate code that supports shared libraries via the library ID
20847     method, but assumes that this library or executable won't link
20848     against any other ID shared libraries.  That allows the compiler to
20849     use faster code for jumps and calls.
20850
20851'-mno-leaf-id-shared-library'
20852     Do not assume that the code being compiled won't link against any
20853     ID shared libraries.  Slower code is generated for jump and call
20854     insns.
20855
20856'-mshared-library-id=n'
20857     Specifies the identification number of the ID-based shared library
20858     being compiled.  Specifying a value of 0 generates more compact
20859     code; specifying other values forces the allocation of that number
20860     to the current library but is no more space- or time-efficient than
20861     omitting this option.
20862
20863'-msep-data'
20864     Generate code that allows the data segment to be located in a
20865     different area of memory from the text segment.  This allows for
20866     execute in place in an environment without virtual memory
20867     management by eliminating relocations against the text section.
20868
20869'-mno-sep-data'
20870     Generate code that assumes that the data segment follows the text
20871     segment.  This is the default.
20872
20873'-mlong-calls'
20874'-mno-long-calls'
20875     Tells the compiler to perform function calls by first loading the
20876     address of the function into a register and then performing a
20877     subroutine call on this register.  This switch is needed if the
20878     target function lies outside of the 24-bit addressing range of the
20879     offset-based version of subroutine call instruction.
20880
20881     This feature is not enabled by default.  Specifying
20882     '-mno-long-calls' restores the default behavior.  Note these
20883     switches have no effect on how the compiler generates code to
20884     handle function calls via function pointers.
20885
20886'-mfast-fp'
20887     Link with the fast floating-point library.  This library relaxes
20888     some of the IEEE floating-point standard's rules for checking
20889     inputs against Not-a-Number (NAN), in the interest of performance.
20890
20891'-minline-plt'
20892     Enable inlining of PLT entries in function calls to functions that
20893     are not known to bind locally.  It has no effect without '-mfdpic'.
20894
20895'-mmulticore'
20896     Build a standalone application for multicore Blackfin processors.
20897     This option causes proper start files and link scripts supporting
20898     multicore to be used, and defines the macro '__BFIN_MULTICORE'.  It
20899     can only be used with '-mcpu=bf561[-SIREVISION]'.
20900
20901     This option can be used with '-mcorea' or '-mcoreb', which selects
20902     the one-application-per-core programming model.  Without '-mcorea'
20903     or '-mcoreb', the single-application/dual-core programming model is
20904     used.  In this model, the main function of Core B should be named
20905     as 'coreb_main'.
20906
20907     If this option is not used, the single-core application programming
20908     model is used.
20909
20910'-mcorea'
20911     Build a standalone application for Core A of BF561 when using the
20912     one-application-per-core programming model.  Proper start files and
20913     link scripts are used to support Core A, and the macro
20914     '__BFIN_COREA' is defined.  This option can only be used in
20915     conjunction with '-mmulticore'.
20916
20917'-mcoreb'
20918     Build a standalone application for Core B of BF561 when using the
20919     one-application-per-core programming model.  Proper start files and
20920     link scripts are used to support Core B, and the macro
20921     '__BFIN_COREB' is defined.  When this option is used, 'coreb_main'
20922     should be used instead of 'main'.  This option can only be used in
20923     conjunction with '-mmulticore'.
20924
20925'-msdram'
20926     Build a standalone application for SDRAM. Proper start files and
20927     link scripts are used to put the application into SDRAM, and the
20928     macro '__BFIN_SDRAM' is defined.  The loader should initialize
20929     SDRAM before loading the application.
20930
20931'-micplb'
20932     Assume that ICPLBs are enabled at run time.  This has an effect on
20933     certain anomaly workarounds.  For Linux targets, the default is to
20934     assume ICPLBs are enabled; for standalone applications the default
20935     is off.
20936
20937
20938File: gcc.info,  Node: C6X Options,  Next: CRIS Options,  Prev: Blackfin Options,  Up: Submodel Options
20939
209403.19.8 C6X Options
20941------------------
20942
20943'-march=NAME'
20944     This specifies the name of the target architecture.  GCC uses this
20945     name to determine what kind of instructions it can emit when
20946     generating assembly code.  Permissible names are: 'c62x', 'c64x',
20947     'c64x+', 'c67x', 'c67x+', 'c674x'.
20948
20949'-mbig-endian'
20950     Generate code for a big-endian target.
20951
20952'-mlittle-endian'
20953     Generate code for a little-endian target.  This is the default.
20954
20955'-msim'
20956     Choose startup files and linker script suitable for the simulator.
20957
20958'-msdata=default'
20959     Put small global and static data in the '.neardata' section, which
20960     is pointed to by register 'B14'.  Put small uninitialized global
20961     and static data in the '.bss' section, which is adjacent to the
20962     '.neardata' section.  Put small read-only data into the '.rodata'
20963     section.  The corresponding sections used for large pieces of data
20964     are '.fardata', '.far' and '.const'.
20965
20966'-msdata=all'
20967     Put all data, not just small objects, into the sections reserved
20968     for small data, and use addressing relative to the 'B14' register
20969     to access them.
20970
20971'-msdata=none'
20972     Make no use of the sections reserved for small data, and use
20973     absolute addresses to access all data.  Put all initialized global
20974     and static data in the '.fardata' section, and all uninitialized
20975     data in the '.far' section.  Put all constant data into the
20976     '.const' section.
20977
20978
20979File: gcc.info,  Node: CRIS Options,  Next: CR16 Options,  Prev: C6X Options,  Up: Submodel Options
20980
209813.19.9 CRIS Options
20982-------------------
20983
20984These options are defined specifically for the CRIS ports.
20985
20986'-march=ARCHITECTURE-TYPE'
20987'-mcpu=ARCHITECTURE-TYPE'
20988     Generate code for the specified architecture.  The choices for
20989     ARCHITECTURE-TYPE are 'v3', 'v8' and 'v10' for respectively
20990     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is 'v0'.
20991
20992'-mtune=ARCHITECTURE-TYPE'
20993     Tune to ARCHITECTURE-TYPE everything applicable about the generated
20994     code, except for the ABI and the set of available instructions.
20995     The choices for ARCHITECTURE-TYPE are the same as for
20996     '-march=ARCHITECTURE-TYPE'.
20997
20998'-mmax-stack-frame=N'
20999     Warn when the stack frame of a function exceeds N bytes.
21000
21001'-metrax4'
21002'-metrax100'
21003     The options '-metrax4' and '-metrax100' are synonyms for
21004     '-march=v3' and '-march=v8' respectively.
21005
21006'-mmul-bug-workaround'
21007'-mno-mul-bug-workaround'
21008     Work around a bug in the 'muls' and 'mulu' instructions for CPU
21009     models where it applies.  This option is disabled by default.
21010
21011'-mpdebug'
21012     Enable CRIS-specific verbose debug-related information in the
21013     assembly code.  This option also has the effect of turning off the
21014     '#NO_APP' formatted-code indicator to the assembler at the
21015     beginning of the assembly file.
21016
21017'-mcc-init'
21018     Do not use condition-code results from previous instruction; always
21019     emit compare and test instructions before use of condition codes.
21020
21021'-mno-side-effects'
21022     Do not emit instructions with side effects in addressing modes
21023     other than post-increment.
21024
21025'-mstack-align'
21026'-mno-stack-align'
21027'-mdata-align'
21028'-mno-data-align'
21029'-mconst-align'
21030'-mno-const-align'
21031     These options ('no-' options) arrange (eliminate arrangements) for
21032     the stack frame, individual data and constants to be aligned for
21033     the maximum single data access size for the chosen CPU model.  The
21034     default is to arrange for 32-bit alignment.  ABI details such as
21035     structure layout are not affected by these options.
21036
21037'-m32-bit'
21038'-m16-bit'
21039'-m8-bit'
21040     Similar to the stack- data- and const-align options above, these
21041     options arrange for stack frame, writable data and constants to all
21042     be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
21043     alignment.
21044
21045'-mno-prologue-epilogue'
21046'-mprologue-epilogue'
21047     With '-mno-prologue-epilogue', the normal function prologue and
21048     epilogue which set up the stack frame are omitted and no return
21049     instructions or return sequences are generated in the code.  Use
21050     this option only together with visual inspection of the compiled
21051     code: no warnings or errors are generated when call-saved registers
21052     must be saved, or storage for local variables needs to be
21053     allocated.
21054
21055'-melf'
21056     Legacy no-op option.
21057
21058'-sim'
21059     This option arranges to link with input-output functions from a
21060     simulator library.  Code, initialized data and zero-initialized
21061     data are allocated consecutively.
21062
21063'-sim2'
21064     Like '-sim', but pass linker options to locate initialized data at
21065     0x40000000 and zero-initialized data at 0x80000000.
21066
21067
21068File: gcc.info,  Node: CR16 Options,  Next: C-SKY Options,  Prev: CRIS Options,  Up: Submodel Options
21069
210703.19.10 CR16 Options
21071--------------------
21072
21073These options are defined specifically for the CR16 ports.
21074
21075'-mmac'
21076     Enable the use of multiply-accumulate instructions.  Disabled by
21077     default.
21078
21079'-mcr16cplus'
21080'-mcr16c'
21081     Generate code for CR16C or CR16C+ architecture.  CR16C+
21082     architecture is default.
21083
21084'-msim'
21085     Links the library libsim.a which is in compatible with simulator.
21086     Applicable to ELF compiler only.
21087
21088'-mint32'
21089     Choose integer type as 32-bit wide.
21090
21091'-mbit-ops'
21092     Generates 'sbit'/'cbit' instructions for bit manipulations.
21093
21094'-mdata-model=MODEL'
21095     Choose a data model.  The choices for MODEL are 'near', 'far' or
21096     'medium'.  'medium' is default.  However, 'far' is not valid with
21097     '-mcr16c', as the CR16C architecture does not support the far data
21098     model.
21099
21100
21101File: gcc.info,  Node: C-SKY Options,  Next: Darwin Options,  Prev: CR16 Options,  Up: Submodel Options
21102
211033.19.11 C-SKY Options
21104---------------------
21105
21106GCC supports these options when compiling for C-SKY V2 processors.
21107
21108'-march=ARCH'
21109     Specify the C-SKY target architecture.  Valid values for ARCH are:
21110     'ck801', 'ck802', 'ck803', 'ck807', and 'ck810'.  The default is
21111     'ck810'.
21112
21113'-mcpu=CPU'
21114     Specify the C-SKY target processor.  Valid values for CPU are:
21115     'ck801', 'ck801t', 'ck802', 'ck802t', 'ck802j', 'ck803', 'ck803h',
21116     'ck803t', 'ck803ht', 'ck803f', 'ck803fh', 'ck803e', 'ck803eh',
21117     'ck803et', 'ck803eht', 'ck803ef', 'ck803efh', 'ck803ft',
21118     'ck803eft', 'ck803efht', 'ck803r1', 'ck803hr1', 'ck803tr1',
21119     'ck803htr1', 'ck803fr1', 'ck803fhr1', 'ck803er1', 'ck803ehr1',
21120     'ck803etr1', 'ck803ehtr1', 'ck803efr1', 'ck803efhr1', 'ck803ftr1',
21121     'ck803eftr1', 'ck803efhtr1', 'ck803s', 'ck803st', 'ck803se',
21122     'ck803sf', 'ck803sef', 'ck803seft', 'ck807e', 'ck807ef', 'ck807',
21123     'ck807f', 'ck810e', 'ck810et', 'ck810ef', 'ck810eft', 'ck810',
21124     'ck810v', 'ck810f', 'ck810t', 'ck810fv', 'ck810tv', 'ck810ft', and
21125     'ck810ftv'.
21126
21127'-mbig-endian'
21128'-EB'
21129'-mlittle-endian'
21130'-EL'
21131
21132     Select big- or little-endian code.  The default is little-endian.
21133
21134'-mfloat-abi=NAME'
21135     Specifies which floating-point ABI to use.  Permissible values are:
21136     'soft', 'softfp' and 'hard'.
21137
21138     Specifying 'soft' causes GCC to generate output containing library
21139     calls for floating-point operations.  'softfp' allows the
21140     generation of code using hardware floating-point instructions, but
21141     still uses the soft-float calling conventions.  'hard' allows
21142     generation of floating-point instructions and uses FPU-specific
21143     calling conventions.
21144
21145     The default depends on the specific target configuration.  Note
21146     that the hard-float and soft-float ABIs are not link-compatible;
21147     you must compile your entire program with the same ABI, and link
21148     with a compatible set of libraries.
21149
21150'-mhard-float'
21151'-msoft-float'
21152
21153     Select hardware or software floating-point implementations.  The
21154     default is soft float.
21155
21156'-mdouble-float'
21157'-mno-double-float'
21158     When '-mhard-float' is in effect, enable generation of
21159     double-precision float instructions.  This is the default except
21160     when compiling for CK803.
21161
21162'-mfdivdu'
21163'-mno-fdivdu'
21164     When '-mhard-float' is in effect, enable generation of 'frecipd',
21165     'fsqrtd', and 'fdivd' instructions.  This is the default except
21166     when compiling for CK803.
21167
21168'-mfpu=FPU'
21169     Select the floating-point processor.  This option can only be used
21170     with '-mhard-float'.  Values for FPU are 'fpv2_sf' (equivalent to
21171     '-mno-double-float -mno-fdivdu'), 'fpv2' ('-mdouble-float
21172     -mno-divdu'), and 'fpv2_divd' ('-mdouble-float -mdivdu').
21173
21174'-melrw'
21175'-mno-elrw'
21176     Enable the extended 'lrw' instruction.  This option defaults to on
21177     for CK801 and off otherwise.
21178
21179'-mistack'
21180'-mno-istack'
21181     Enable interrupt stack instructions; the default is off.
21182
21183     The '-mistack' option is required to handle the 'interrupt' and
21184     'isr' function attributes (*note C-SKY Function Attributes::).
21185
21186'-mmp'
21187     Enable multiprocessor instructions; the default is off.
21188
21189'-mcp'
21190     Enable coprocessor instructions; the default is off.
21191
21192'-mcache'
21193     Enable coprocessor instructions; the default is off.
21194
21195'-msecurity'
21196     Enable C-SKY security instructions; the default is off.
21197
21198'-mtrust'
21199     Enable C-SKY trust instructions; the default is off.
21200
21201'-mdsp'
21202'-medsp'
21203'-mvdsp'
21204     Enable C-SKY DSP, Enhanced DSP, or Vector DSP instructions,
21205     respectively.  All of these options default to off.
21206
21207'-mdiv'
21208'-mno-div'
21209     Generate divide instructions.  Default is off.
21210
21211'-msmart'
21212'-mno-smart'
21213     Generate code for Smart Mode, using only registers numbered 0-7 to
21214     allow use of 16-bit instructions.  This option is ignored for CK801
21215     where this is the required behavior, and it defaults to on for
21216     CK802.  For other targets, the default is off.
21217
21218'-mhigh-registers'
21219'-mno-high-registers'
21220     Generate code using the high registers numbered 16-31.  This option
21221     is not supported on CK801, CK802, or CK803, and is enabled by
21222     default for other processors.
21223
21224'-manchor'
21225'-mno-anchor'
21226     Generate code using global anchor symbol addresses.
21227
21228'-mpushpop'
21229'-mno-pushpop'
21230     Generate code using 'push' and 'pop' instructions.  This option
21231     defaults to on.
21232
21233'-mmultiple-stld'
21234'-mstm'
21235'-mno-multiple-stld'
21236'-mno-stm'
21237     Generate code using 'stm' and 'ldm' instructions.  This option
21238     isn't supported on CK801 but is enabled by default on other
21239     processors.
21240
21241'-mconstpool'
21242'-mno-constpool'
21243     Create constant pools in the compiler instead of deferring it to
21244     the assembler.  This option is the default and required for correct
21245     code generation on CK801 and CK802, and is optional on other
21246     processors.
21247
21248'-mstack-size'
21249'-mno-stack-size'
21250     Emit '.stack_size' directives for each function in the assembly
21251     output.  This option defaults to off.
21252
21253'-mccrt'
21254'-mno-ccrt'
21255     Generate code for the C-SKY compiler runtime instead of libgcc.
21256     This option defaults to off.
21257
21258'-mbranch-cost=N'
21259     Set the branch costs to roughly 'n' instructions.  The default is
21260     1.
21261
21262'-msched-prolog'
21263'-mno-sched-prolog'
21264     Permit scheduling of function prologue and epilogue sequences.
21265     Using this option can result in code that is not compliant with the
21266     C-SKY V2 ABI prologue requirements and that cannot be debugged or
21267     backtraced.  It is disabled by default.
21268
21269'-msim'
21270     Links the library libsemi.a which is in compatible with simulator.
21271     Applicable to ELF compiler only.
21272
21273
21274File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: C-SKY Options,  Up: Submodel Options
21275
212763.19.12 Darwin Options
21277----------------------
21278
21279These options are defined for all architectures running the Darwin
21280operating system.
21281
21282 FSF GCC on Darwin does not create "fat" object files; it creates an
21283object file for the single architecture that GCC was built to target.
21284Apple's GCC on Darwin does create "fat" files if multiple '-arch'
21285options are used; it does so by running the compiler or linker multiple
21286times and joining the results together with 'lipo'.
21287
21288 The subtype of the file created (like 'ppc7400' or 'ppc970' or 'i686')
21289is determined by the flags that specify the ISA that GCC is targeting,
21290like '-mcpu' or '-march'.  The '-force_cpusubtype_ALL' option can be
21291used to override this.
21292
21293 The Darwin tools vary in their behavior when presented with an ISA
21294mismatch.  The assembler, 'as', only permits instructions to be used
21295that are valid for the subtype of the file it is generating, so you
21296cannot put 64-bit instructions in a 'ppc750' object file.  The linker
21297for shared libraries, '/usr/bin/libtool', fails and prints an error if
21298asked to create a shared library with a less restrictive subtype than
21299its input files (for instance, trying to put a 'ppc970' object file in a
21300'ppc7400' library).  The linker for executables, 'ld', quietly gives the
21301executable the most restrictive subtype of any of its input files.
21302
21303'-FDIR'
21304     Add the framework directory DIR to the head of the list of
21305     directories to be searched for header files.  These directories are
21306     interleaved with those specified by '-I' options and are scanned in
21307     a left-to-right order.
21308
21309     A framework directory is a directory with frameworks in it.  A
21310     framework is a directory with a 'Headers' and/or 'PrivateHeaders'
21311     directory contained directly in it that ends in '.framework'.  The
21312     name of a framework is the name of this directory excluding the
21313     '.framework'.  Headers associated with the framework are found in
21314     one of those two directories, with 'Headers' being searched first.
21315     A subframework is a framework directory that is in a framework's
21316     'Frameworks' directory.  Includes of subframework headers can only
21317     appear in a header of a framework that contains the subframework,
21318     or in a sibling subframework header.  Two subframeworks are
21319     siblings if they occur in the same framework.  A subframework
21320     should not have the same name as a framework; a warning is issued
21321     if this is violated.  Currently a subframework cannot have
21322     subframeworks; in the future, the mechanism may be extended to
21323     support this.  The standard frameworks can be found in
21324     '/System/Library/Frameworks' and '/Library/Frameworks'.  An example
21325     include looks like '#include <Framework/header.h>', where
21326     'Framework' denotes the name of the framework and 'header.h' is
21327     found in the 'PrivateHeaders' or 'Headers' directory.
21328
21329'-iframeworkDIR'
21330     Like '-F' except the directory is a treated as a system directory.
21331     The main difference between this '-iframework' and '-F' is that
21332     with '-iframework' the compiler does not warn about constructs
21333     contained within header files found via DIR.  This option is valid
21334     only for the C family of languages.
21335
21336'-gused'
21337     Emit debugging information for symbols that are used.  For stabs
21338     debugging format, this enables '-feliminate-unused-debug-symbols'.
21339     This is by default ON.
21340
21341'-gfull'
21342     Emit debugging information for all symbols and types.
21343
21344'-mmacosx-version-min=VERSION'
21345     The earliest version of MacOS X that this executable will run on is
21346     VERSION.  Typical values of VERSION include '10.1', '10.2', and
21347     '10.3.9'.
21348
21349     If the compiler was built to use the system's headers by default,
21350     then the default for this option is the system version on which the
21351     compiler is running, otherwise the default is to make choices that
21352     are compatible with as many systems and code bases as possible.
21353
21354'-mkernel'
21355     Enable kernel development mode.  The '-mkernel' option sets
21356     '-static', '-fno-common', '-fno-use-cxa-atexit', '-fno-exceptions',
21357     '-fno-non-call-exceptions', '-fapple-kext', '-fno-weak' and
21358     '-fno-rtti' where applicable.  This mode also sets '-mno-altivec',
21359     '-msoft-float', '-fno-builtin' and '-mlong-branch' for PowerPC
21360     targets.
21361
21362'-mone-byte-bool'
21363     Override the defaults for 'bool' so that 'sizeof(bool)==1'.  By
21364     default 'sizeof(bool)' is '4' when compiling for Darwin/PowerPC and
21365     '1' when compiling for Darwin/x86, so this option has no effect on
21366     x86.
21367
21368     *Warning:* The '-mone-byte-bool' switch causes GCC to generate code
21369     that is not binary compatible with code generated without that
21370     switch.  Using this switch may require recompiling all other
21371     modules in a program, including system libraries.  Use this switch
21372     to conform to a non-default data model.
21373
21374'-mfix-and-continue'
21375'-ffix-and-continue'
21376'-findirect-data'
21377     Generate code suitable for fast turnaround development, such as to
21378     allow GDB to dynamically load '.o' files into already-running
21379     programs.  '-findirect-data' and '-ffix-and-continue' are provided
21380     for backwards compatibility.
21381
21382'-all_load'
21383     Loads all members of static archive libraries.  See man ld(1) for
21384     more information.
21385
21386'-arch_errors_fatal'
21387     Cause the errors having to do with files that have the wrong
21388     architecture to be fatal.
21389
21390'-bind_at_load'
21391     Causes the output file to be marked such that the dynamic linker
21392     will bind all undefined references when the file is loaded or
21393     launched.
21394
21395'-bundle'
21396     Produce a Mach-o bundle format file.  See man ld(1) for more
21397     information.
21398
21399'-bundle_loader EXECUTABLE'
21400     This option specifies the EXECUTABLE that will load the build
21401     output file being linked.  See man ld(1) for more information.
21402
21403'-dynamiclib'
21404     When passed this option, GCC produces a dynamic library instead of
21405     an executable when linking, using the Darwin 'libtool' command.
21406
21407'-force_cpusubtype_ALL'
21408     This causes GCC's output file to have the 'ALL' subtype, instead of
21409     one controlled by the '-mcpu' or '-march' option.
21410
21411'-allowable_client CLIENT_NAME'
21412'-client_name'
21413'-compatibility_version'
21414'-current_version'
21415'-dead_strip'
21416'-dependency-file'
21417'-dylib_file'
21418'-dylinker_install_name'
21419'-dynamic'
21420'-exported_symbols_list'
21421'-filelist'
21422'-flat_namespace'
21423'-force_flat_namespace'
21424'-headerpad_max_install_names'
21425'-image_base'
21426'-init'
21427'-install_name'
21428'-keep_private_externs'
21429'-multi_module'
21430'-multiply_defined'
21431'-multiply_defined_unused'
21432'-noall_load'
21433'-no_dead_strip_inits_and_terms'
21434'-nofixprebinding'
21435'-nomultidefs'
21436'-noprebind'
21437'-noseglinkedit'
21438'-pagezero_size'
21439'-prebind'
21440'-prebind_all_twolevel_modules'
21441'-private_bundle'
21442'-read_only_relocs'
21443'-sectalign'
21444'-sectobjectsymbols'
21445'-whyload'
21446'-seg1addr'
21447'-sectcreate'
21448'-sectobjectsymbols'
21449'-sectorder'
21450'-segaddr'
21451'-segs_read_only_addr'
21452'-segs_read_write_addr'
21453'-seg_addr_table'
21454'-seg_addr_table_filename'
21455'-seglinkedit'
21456'-segprot'
21457'-segs_read_only_addr'
21458'-segs_read_write_addr'
21459'-single_module'
21460'-static'
21461'-sub_library'
21462'-sub_umbrella'
21463'-twolevel_namespace'
21464'-umbrella'
21465'-undefined'
21466'-unexported_symbols_list'
21467'-weak_reference_mismatches'
21468'-whatsloaded'
21469     These options are passed to the Darwin linker.  The Darwin linker
21470     man page describes them in detail.
21471
21472
21473File: gcc.info,  Node: DEC Alpha Options,  Next: eBPF Options,  Prev: Darwin Options,  Up: Submodel Options
21474
214753.19.13 DEC Alpha Options
21476-------------------------
21477
21478These '-m' options are defined for the DEC Alpha implementations:
21479
21480'-mno-soft-float'
21481'-msoft-float'
21482     Use (do not use) the hardware floating-point instructions for
21483     floating-point operations.  When '-msoft-float' is specified,
21484     functions in 'libgcc.a' are used to perform floating-point
21485     operations.  Unless they are replaced by routines that emulate the
21486     floating-point operations, or compiled in such a way as to call
21487     such emulations routines, these routines issue floating-point
21488     operations.  If you are compiling for an Alpha without
21489     floating-point operations, you must ensure that the library is
21490     built so as not to call them.
21491
21492     Note that Alpha implementations without floating-point operations
21493     are required to have floating-point registers.
21494
21495'-mfp-reg'
21496'-mno-fp-regs'
21497     Generate code that uses (does not use) the floating-point register
21498     set.  '-mno-fp-regs' implies '-msoft-float'.  If the floating-point
21499     register set is not used, floating-point operands are passed in
21500     integer registers as if they were integers and floating-point
21501     results are passed in '$0' instead of '$f0'.  This is a
21502     non-standard calling sequence, so any function with a
21503     floating-point argument or return value called by code compiled
21504     with '-mno-fp-regs' must also be compiled with that option.
21505
21506     A typical use of this option is building a kernel that does not
21507     use, and hence need not save and restore, any floating-point
21508     registers.
21509
21510'-mieee'
21511     The Alpha architecture implements floating-point hardware optimized
21512     for maximum performance.  It is mostly compliant with the IEEE
21513     floating-point standard.  However, for full compliance, software
21514     assistance is required.  This option generates code fully
21515     IEEE-compliant code _except_ that the INEXACT-FLAG is not
21516     maintained (see below).  If this option is turned on, the
21517     preprocessor macro '_IEEE_FP' is defined during compilation.  The
21518     resulting code is less efficient but is able to correctly support
21519     denormalized numbers and exceptional IEEE values such as
21520     not-a-number and plus/minus infinity.  Other Alpha compilers call
21521     this option '-ieee_with_no_inexact'.
21522
21523'-mieee-with-inexact'
21524     This is like '-mieee' except the generated code also maintains the
21525     IEEE INEXACT-FLAG.  Turning on this option causes the generated
21526     code to implement fully-compliant IEEE math.  In addition to
21527     '_IEEE_FP', '_IEEE_FP_EXACT' is defined as a preprocessor macro.
21528     On some Alpha implementations the resulting code may execute
21529     significantly slower than the code generated by default.  Since
21530     there is very little code that depends on the INEXACT-FLAG, you
21531     should normally not specify this option.  Other Alpha compilers
21532     call this option '-ieee_with_inexact'.
21533
21534'-mfp-trap-mode=TRAP-MODE'
21535     This option controls what floating-point related traps are enabled.
21536     Other Alpha compilers call this option '-fptm TRAP-MODE'.  The trap
21537     mode can be set to one of four values:
21538
21539     'n'
21540          This is the default (normal) setting.  The only traps that are
21541          enabled are the ones that cannot be disabled in software
21542          (e.g., division by zero trap).
21543
21544     'u'
21545          In addition to the traps enabled by 'n', underflow traps are
21546          enabled as well.
21547
21548     'su'
21549          Like 'u', but the instructions are marked to be safe for
21550          software completion (see Alpha architecture manual for
21551          details).
21552
21553     'sui'
21554          Like 'su', but inexact traps are enabled as well.
21555
21556'-mfp-rounding-mode=ROUNDING-MODE'
21557     Selects the IEEE rounding mode.  Other Alpha compilers call this
21558     option '-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
21559
21560     'n'
21561          Normal IEEE rounding mode.  Floating-point numbers are rounded
21562          towards the nearest machine number or towards the even machine
21563          number in case of a tie.
21564
21565     'm'
21566          Round towards minus infinity.
21567
21568     'c'
21569          Chopped rounding mode.  Floating-point numbers are rounded
21570          towards zero.
21571
21572     'd'
21573          Dynamic rounding mode.  A field in the floating-point control
21574          register (FPCR, see Alpha architecture reference manual)
21575          controls the rounding mode in effect.  The C library
21576          initializes this register for rounding towards plus infinity.
21577          Thus, unless your program modifies the FPCR, 'd' corresponds
21578          to round towards plus infinity.
21579
21580'-mtrap-precision=TRAP-PRECISION'
21581     In the Alpha architecture, floating-point traps are imprecise.
21582     This means without software assistance it is impossible to recover
21583     from a floating trap and program execution normally needs to be
21584     terminated.  GCC can generate code that can assist operating system
21585     trap handlers in determining the exact location that caused a
21586     floating-point trap.  Depending on the requirements of an
21587     application, different levels of precisions can be selected:
21588
21589     'p'
21590          Program precision.  This option is the default and means a
21591          trap handler can only identify which program caused a
21592          floating-point exception.
21593
21594     'f'
21595          Function precision.  The trap handler can determine the
21596          function that caused a floating-point exception.
21597
21598     'i'
21599          Instruction precision.  The trap handler can determine the
21600          exact instruction that caused a floating-point exception.
21601
21602     Other Alpha compilers provide the equivalent options called
21603     '-scope_safe' and '-resumption_safe'.
21604
21605'-mieee-conformant'
21606     This option marks the generated code as IEEE conformant.  You must
21607     not use this option unless you also specify '-mtrap-precision=i'
21608     and either '-mfp-trap-mode=su' or '-mfp-trap-mode=sui'.  Its only
21609     effect is to emit the line '.eflag 48' in the function prologue of
21610     the generated assembly file.
21611
21612'-mbuild-constants'
21613     Normally GCC examines a 32- or 64-bit integer constant to see if it
21614     can construct it from smaller constants in two or three
21615     instructions.  If it cannot, it outputs the constant as a literal
21616     and generates code to load it from the data segment at run time.
21617
21618     Use this option to require GCC to construct _all_ integer constants
21619     using code, even if it takes more instructions (the maximum is
21620     six).
21621
21622     You typically use this option to build a shared library dynamic
21623     loader.  Itself a shared library, it must relocate itself in memory
21624     before it can find the variables and constants in its own data
21625     segment.
21626
21627'-mbwx'
21628'-mno-bwx'
21629'-mcix'
21630'-mno-cix'
21631'-mfix'
21632'-mno-fix'
21633'-mmax'
21634'-mno-max'
21635     Indicate whether GCC should generate code to use the optional BWX,
21636     CIX, FIX and MAX instruction sets.  The default is to use the
21637     instruction sets supported by the CPU type specified via '-mcpu='
21638     option or that of the CPU on which GCC was built if none is
21639     specified.
21640
21641'-mfloat-vax'
21642'-mfloat-ieee'
21643     Generate code that uses (does not use) VAX F and G floating-point
21644     arithmetic instead of IEEE single and double precision.
21645
21646'-mexplicit-relocs'
21647'-mno-explicit-relocs'
21648     Older Alpha assemblers provided no way to generate symbol
21649     relocations except via assembler macros.  Use of these macros does
21650     not allow optimal instruction scheduling.  GNU binutils as of
21651     version 2.12 supports a new syntax that allows the compiler to
21652     explicitly mark which relocations should apply to which
21653     instructions.  This option is mostly useful for debugging, as GCC
21654     detects the capabilities of the assembler when it is built and sets
21655     the default accordingly.
21656
21657'-msmall-data'
21658'-mlarge-data'
21659     When '-mexplicit-relocs' is in effect, static data is accessed via
21660     "gp-relative" relocations.  When '-msmall-data' is used, objects 8
21661     bytes long or smaller are placed in a "small data area" (the
21662     '.sdata' and '.sbss' sections) and are accessed via 16-bit
21663     relocations off of the '$gp' register.  This limits the size of the
21664     small data area to 64KB, but allows the variables to be directly
21665     accessed via a single instruction.
21666
21667     The default is '-mlarge-data'.  With this option the data area is
21668     limited to just below 2GB.  Programs that require more than 2GB of
21669     data must use 'malloc' or 'mmap' to allocate the data in the heap
21670     instead of in the program's data segment.
21671
21672     When generating code for shared libraries, '-fpic' implies
21673     '-msmall-data' and '-fPIC' implies '-mlarge-data'.
21674
21675'-msmall-text'
21676'-mlarge-text'
21677     When '-msmall-text' is used, the compiler assumes that the code of
21678     the entire program (or shared library) fits in 4MB, and is thus
21679     reachable with a branch instruction.  When '-msmall-data' is used,
21680     the compiler can assume that all local symbols share the same '$gp'
21681     value, and thus reduce the number of instructions required for a
21682     function call from 4 to 1.
21683
21684     The default is '-mlarge-text'.
21685
21686'-mcpu=CPU_TYPE'
21687     Set the instruction set and instruction scheduling parameters for
21688     machine type CPU_TYPE.  You can specify either the 'EV' style name
21689     or the corresponding chip number.  GCC supports scheduling
21690     parameters for the EV4, EV5 and EV6 family of processors and
21691     chooses the default values for the instruction set from the
21692     processor you specify.  If you do not specify a processor type, GCC
21693     defaults to the processor on which the compiler was built.
21694
21695     Supported values for CPU_TYPE are
21696
21697     'ev4'
21698     'ev45'
21699     '21064'
21700          Schedules as an EV4 and has no instruction set extensions.
21701
21702     'ev5'
21703     '21164'
21704          Schedules as an EV5 and has no instruction set extensions.
21705
21706     'ev56'
21707     '21164a'
21708          Schedules as an EV5 and supports the BWX extension.
21709
21710     'pca56'
21711     '21164pc'
21712     '21164PC'
21713          Schedules as an EV5 and supports the BWX and MAX extensions.
21714
21715     'ev6'
21716     '21264'
21717          Schedules as an EV6 and supports the BWX, FIX, and MAX
21718          extensions.
21719
21720     'ev67'
21721     '21264a'
21722          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
21723          extensions.
21724
21725     Native toolchains also support the value 'native', which selects
21726     the best architecture option for the host processor.
21727     '-mcpu=native' has no effect if GCC does not recognize the
21728     processor.
21729
21730'-mtune=CPU_TYPE'
21731     Set only the instruction scheduling parameters for machine type
21732     CPU_TYPE.  The instruction set is not changed.
21733
21734     Native toolchains also support the value 'native', which selects
21735     the best architecture option for the host processor.
21736     '-mtune=native' has no effect if GCC does not recognize the
21737     processor.
21738
21739'-mmemory-latency=TIME'
21740     Sets the latency the scheduler should assume for typical memory
21741     references as seen by the application.  This number is highly
21742     dependent on the memory access patterns used by the application and
21743     the size of the external cache on the machine.
21744
21745     Valid options for TIME are
21746
21747     'NUMBER'
21748          A decimal number representing clock cycles.
21749
21750     'L1'
21751     'L2'
21752     'L3'
21753     'main'
21754          The compiler contains estimates of the number of clock cycles
21755          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
21756          (also called Dcache, Scache, and Bcache), as well as to main
21757          memory.  Note that L3 is only valid for EV5.
21758
21759
21760File: gcc.info,  Node: eBPF Options,  Next: FR30 Options,  Prev: DEC Alpha Options,  Up: Submodel Options
21761
217623.19.14 eBPF Options
21763--------------------
21764
21765'-mframe-limit=BYTES'
21766     This specifies the hard limit for frame sizes, in bytes.
21767     Currently, the value that can be specified should be less than or
21768     equal to '32767'.  Defaults to whatever limit is imposed by the
21769     version of the Linux kernel targeted.
21770
21771'-mkernel=VERSION'
21772     This specifies the minimum version of the kernel that will run the
21773     compiled program.  GCC uses this version to determine which
21774     instructions to use, what kernel helpers to allow, etc.  Currently,
21775     VERSION can be one of '4.0', '4.1', '4.2', '4.3', '4.4', '4.5',
21776     '4.6', '4.7', '4.8', '4.9', '4.10', '4.11', '4.12', '4.13', '4.14',
21777     '4.15', '4.16', '4.17', '4.18', '4.19', '4.20', '5.0', '5.1',
21778     '5.2', 'latest' and 'native'.
21779
21780'-mbig-endian'
21781     Generate code for a big-endian target.
21782
21783'-mlittle-endian'
21784     Generate code for a little-endian target.  This is the default.
21785
21786'-mjmpext'
21787     Enable generation of extra conditional-branch instructions.
21788     Enabled for CPU v2 and above.
21789
21790'-mjmp32'
21791     Enable 32-bit jump instructions.  Enabled for CPU v3 and above.
21792
21793'-malu32'
21794     Enable 32-bit ALU instructions.  Enabled for CPU v3 and above.
21795
21796'-mcpu=VERSION'
21797     This specifies which version of the eBPF ISA to target.  Newer
21798     versions may not be supported by all kernels.  The default is 'v3'.
21799
21800     Supported values for VERSION are:
21801
21802     'v1'
21803          The first stable eBPF ISA with no special features or
21804          extensions.
21805
21806     'v2'
21807          Supports the jump extensions, as in '-mjmpext'.
21808
21809     'v3'
21810          All features of v2, plus:
21811             - 32-bit jump operations, as in '-mjmp32'
21812             - 32-bit ALU operations, as in '-malu32'
21813
21814'-mco-re'
21815     Enable BPF Compile Once - Run Everywhere (CO-RE) support.  Requires
21816     and is implied by '-gbtf'.
21817
21818'-mno-co-re'
21819     Disable BPF Compile Once - Run Everywhere (CO-RE) support.  BPF
21820     CO-RE support is enabled by default when generating BTF debug
21821     information for the BPF target.
21822
21823'-mxbpf'
21824     Generate code for an expanded version of BPF, which relaxes some of
21825     the restrictions imposed by the BPF architecture:
21826        - Save and restore callee-saved registers at function entry and
21827          exit, respectively.
21828
21829
21830File: gcc.info,  Node: FR30 Options,  Next: FT32 Options,  Prev: eBPF Options,  Up: Submodel Options
21831
218323.19.15 FR30 Options
21833--------------------
21834
21835These options are defined specifically for the FR30 port.
21836
21837'-msmall-model'
21838     Use the small address space model.  This can produce smaller code,
21839     but it does assume that all symbolic values and addresses fit into
21840     a 20-bit range.
21841
21842'-mno-lsim'
21843     Assume that runtime support has been provided and so there is no
21844     need to include the simulator library ('libsim.a') on the linker
21845     command line.
21846
21847
21848File: gcc.info,  Node: FT32 Options,  Next: FRV Options,  Prev: FR30 Options,  Up: Submodel Options
21849
218503.19.16 FT32 Options
21851--------------------
21852
21853These options are defined specifically for the FT32 port.
21854
21855'-msim'
21856     Specifies that the program will be run on the simulator.  This
21857     causes an alternate runtime startup and library to be linked.  You
21858     must not use this option when generating programs that will run on
21859     real hardware; you must provide your own runtime library for
21860     whatever I/O functions are needed.
21861
21862'-mlra'
21863     Enable Local Register Allocation.  This is still experimental for
21864     FT32, so by default the compiler uses standard reload.
21865
21866'-mnodiv'
21867     Do not use div and mod instructions.
21868
21869'-mft32b'
21870     Enable use of the extended instructions of the FT32B processor.
21871
21872'-mcompress'
21873     Compress all code using the Ft32B code compression scheme.
21874
21875'-mnopm'
21876     Do not generate code that reads program memory.
21877
21878
21879File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FT32 Options,  Up: Submodel Options
21880
218813.19.17 FRV Options
21882-------------------
21883
21884'-mgpr-32'
21885
21886     Only use the first 32 general-purpose registers.
21887
21888'-mgpr-64'
21889
21890     Use all 64 general-purpose registers.
21891
21892'-mfpr-32'
21893
21894     Use only the first 32 floating-point registers.
21895
21896'-mfpr-64'
21897
21898     Use all 64 floating-point registers.
21899
21900'-mhard-float'
21901
21902     Use hardware instructions for floating-point operations.
21903
21904'-msoft-float'
21905
21906     Use library routines for floating-point operations.
21907
21908'-malloc-cc'
21909
21910     Dynamically allocate condition code registers.
21911
21912'-mfixed-cc'
21913
21914     Do not try to dynamically allocate condition code registers, only
21915     use 'icc0' and 'fcc0'.
21916
21917'-mdword'
21918
21919     Change ABI to use double word insns.
21920
21921'-mno-dword'
21922
21923     Do not use double word instructions.
21924
21925'-mdouble'
21926
21927     Use floating-point double instructions.
21928
21929'-mno-double'
21930
21931     Do not use floating-point double instructions.
21932
21933'-mmedia'
21934
21935     Use media instructions.
21936
21937'-mno-media'
21938
21939     Do not use media instructions.
21940
21941'-mmuladd'
21942
21943     Use multiply and add/subtract instructions.
21944
21945'-mno-muladd'
21946
21947     Do not use multiply and add/subtract instructions.
21948
21949'-mfdpic'
21950
21951     Select the FDPIC ABI, which uses function descriptors to represent
21952     pointers to functions.  Without any PIC/PIE-related options, it
21953     implies '-fPIE'.  With '-fpic' or '-fpie', it assumes GOT entries
21954     and small data are within a 12-bit range from the GOT base address;
21955     with '-fPIC' or '-fPIE', GOT offsets are computed with 32 bits.
21956     With a 'bfin-elf' target, this option implies '-msim'.
21957
21958'-minline-plt'
21959
21960     Enable inlining of PLT entries in function calls to functions that
21961     are not known to bind locally.  It has no effect without '-mfdpic'.
21962     It's enabled by default if optimizing for speed and compiling for
21963     shared libraries (i.e., '-fPIC' or '-fpic'), or when an
21964     optimization option such as '-O3' or above is present in the
21965     command line.
21966
21967'-mTLS'
21968
21969     Assume a large TLS segment when generating thread-local code.
21970
21971'-mtls'
21972
21973     Do not assume a large TLS segment when generating thread-local
21974     code.
21975
21976'-mgprel-ro'
21977
21978     Enable the use of 'GPREL' relocations in the FDPIC ABI for data
21979     that is known to be in read-only sections.  It's enabled by
21980     default, except for '-fpic' or '-fpie': even though it may help
21981     make the global offset table smaller, it trades 1 instruction for
21982     4.  With '-fPIC' or '-fPIE', it trades 3 instructions for 4, one of
21983     which may be shared by multiple symbols, and it avoids the need for
21984     a GOT entry for the referenced symbol, so it's more likely to be a
21985     win.  If it is not, '-mno-gprel-ro' can be used to disable it.
21986
21987'-multilib-library-pic'
21988
21989     Link with the (library, not FD) pic libraries.  It's implied by
21990     '-mlibrary-pic', as well as by '-fPIC' and '-fpic' without
21991     '-mfdpic'.  You should never have to use it explicitly.
21992
21993'-mlinked-fp'
21994
21995     Follow the EABI requirement of always creating a frame pointer
21996     whenever a stack frame is allocated.  This option is enabled by
21997     default and can be disabled with '-mno-linked-fp'.
21998
21999'-mlong-calls'
22000
22001     Use indirect addressing to call functions outside the current
22002     compilation unit.  This allows the functions to be placed anywhere
22003     within the 32-bit address space.
22004
22005'-malign-labels'
22006
22007     Try to align labels to an 8-byte boundary by inserting NOPs into
22008     the previous packet.  This option only has an effect when VLIW
22009     packing is enabled.  It doesn't create new packets; it merely adds
22010     NOPs to existing ones.
22011
22012'-mlibrary-pic'
22013
22014     Generate position-independent EABI code.
22015
22016'-macc-4'
22017
22018     Use only the first four media accumulator registers.
22019
22020'-macc-8'
22021
22022     Use all eight media accumulator registers.
22023
22024'-mpack'
22025
22026     Pack VLIW instructions.
22027
22028'-mno-pack'
22029
22030     Do not pack VLIW instructions.
22031
22032'-mno-eflags'
22033
22034     Do not mark ABI switches in e_flags.
22035
22036'-mcond-move'
22037
22038     Enable the use of conditional-move instructions (default).
22039
22040     This switch is mainly for debugging the compiler and will likely be
22041     removed in a future version.
22042
22043'-mno-cond-move'
22044
22045     Disable the use of conditional-move instructions.
22046
22047     This switch is mainly for debugging the compiler and will likely be
22048     removed in a future version.
22049
22050'-mscc'
22051
22052     Enable the use of conditional set instructions (default).
22053
22054     This switch is mainly for debugging the compiler and will likely be
22055     removed in a future version.
22056
22057'-mno-scc'
22058
22059     Disable the use of conditional set instructions.
22060
22061     This switch is mainly for debugging the compiler and will likely be
22062     removed in a future version.
22063
22064'-mcond-exec'
22065
22066     Enable the use of conditional execution (default).
22067
22068     This switch is mainly for debugging the compiler and will likely be
22069     removed in a future version.
22070
22071'-mno-cond-exec'
22072
22073     Disable the use of conditional execution.
22074
22075     This switch is mainly for debugging the compiler and will likely be
22076     removed in a future version.
22077
22078'-mvliw-branch'
22079
22080     Run a pass to pack branches into VLIW instructions (default).
22081
22082     This switch is mainly for debugging the compiler and will likely be
22083     removed in a future version.
22084
22085'-mno-vliw-branch'
22086
22087     Do not run a pass to pack branches into VLIW instructions.
22088
22089     This switch is mainly for debugging the compiler and will likely be
22090     removed in a future version.
22091
22092'-mmulti-cond-exec'
22093
22094     Enable optimization of '&&' and '||' in conditional execution
22095     (default).
22096
22097     This switch is mainly for debugging the compiler and will likely be
22098     removed in a future version.
22099
22100'-mno-multi-cond-exec'
22101
22102     Disable optimization of '&&' and '||' in conditional execution.
22103
22104     This switch is mainly for debugging the compiler and will likely be
22105     removed in a future version.
22106
22107'-mnested-cond-exec'
22108
22109     Enable nested conditional execution optimizations (default).
22110
22111     This switch is mainly for debugging the compiler and will likely be
22112     removed in a future version.
22113
22114'-mno-nested-cond-exec'
22115
22116     Disable nested conditional execution optimizations.
22117
22118     This switch is mainly for debugging the compiler and will likely be
22119     removed in a future version.
22120
22121'-moptimize-membar'
22122
22123     This switch removes redundant 'membar' instructions from the
22124     compiler-generated code.  It is enabled by default.
22125
22126'-mno-optimize-membar'
22127
22128     This switch disables the automatic removal of redundant 'membar'
22129     instructions from the generated code.
22130
22131'-mtomcat-stats'
22132
22133     Cause gas to print out tomcat statistics.
22134
22135'-mcpu=CPU'
22136
22137     Select the processor type for which to generate code.  Possible
22138     values are 'frv', 'fr550', 'tomcat', 'fr500', 'fr450', 'fr405',
22139     'fr400', 'fr300' and 'simple'.
22140
22141
22142File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
22143
221443.19.18 GNU/Linux Options
22145-------------------------
22146
22147These '-m' options are defined for GNU/Linux targets:
22148
22149'-mglibc'
22150     Use the GNU C library.  This is the default except on
22151     '*-*-linux-*uclibc*', '*-*-linux-*musl*' and '*-*-linux-*android*'
22152     targets.
22153
22154'-muclibc'
22155     Use uClibc C library.  This is the default on '*-*-linux-*uclibc*'
22156     targets.
22157
22158'-mmusl'
22159     Use the musl C library.  This is the default on '*-*-linux-*musl*'
22160     targets.
22161
22162'-mbionic'
22163     Use Bionic C library.  This is the default on '*-*-linux-*android*'
22164     targets.
22165
22166'-mandroid'
22167     Compile code compatible with Android platform.  This is the default
22168     on '*-*-linux-*android*' targets.
22169
22170     When compiling, this option enables '-mbionic', '-fPIC',
22171     '-fno-exceptions' and '-fno-rtti' by default.  When linking, this
22172     option makes the GCC driver pass Android-specific options to the
22173     linker.  Finally, this option causes the preprocessor macro
22174     '__ANDROID__' to be defined.
22175
22176'-tno-android-cc'
22177     Disable compilation effects of '-mandroid', i.e., do not enable
22178     '-mbionic', '-fPIC', '-fno-exceptions' and '-fno-rtti' by default.
22179
22180'-tno-android-ld'
22181     Disable linking effects of '-mandroid', i.e., pass standard Linux
22182     linking options to the linker.
22183
22184
22185File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
22186
221873.19.19 H8/300 Options
22188----------------------
22189
22190These '-m' options are defined for the H8/300 implementations:
22191
22192'-mrelax'
22193     Shorten some address references at link time, when possible; uses
22194     the linker option '-relax'.  *Note 'ld' and the H8/300: (ld)H8/300,
22195     for a fuller description.
22196
22197'-mh'
22198     Generate code for the H8/300H.
22199
22200'-ms'
22201     Generate code for the H8S.
22202
22203'-mn'
22204     Generate code for the H8S and H8/300H in the normal mode.  This
22205     switch must be used either with '-mh' or '-ms'.
22206
22207'-ms2600'
22208     Generate code for the H8S/2600.  This switch must be used with
22209     '-ms'.
22210
22211'-mexr'
22212     Extended registers are stored on stack before execution of function
22213     with monitor attribute.  Default option is '-mexr'.  This option is
22214     valid only for H8S targets.
22215
22216'-mno-exr'
22217     Extended registers are not stored on stack before execution of
22218     function with monitor attribute.  Default option is '-mno-exr'.
22219     This option is valid only for H8S targets.
22220
22221'-mint32'
22222     Make 'int' data 32 bits by default.
22223
22224'-malign-300'
22225     On the H8/300H and H8S, use the same alignment rules as for the
22226     H8/300.  The default for the H8/300H and H8S is to align longs and
22227     floats on 4-byte boundaries.  '-malign-300' causes them to be
22228     aligned on 2-byte boundaries.  This option has no effect on the
22229     H8/300.
22230
22231
22232File: gcc.info,  Node: HPPA Options,  Next: IA-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
22233
222343.19.20 HPPA Options
22235--------------------
22236
22237These '-m' options are defined for the HPPA family of computers:
22238
22239'-march=ARCHITECTURE-TYPE'
22240     Generate code for the specified architecture.  The choices for
22241     ARCHITECTURE-TYPE are '1.0' for PA 1.0, '1.1' for PA 1.1, and '2.0'
22242     for PA 2.0 processors.  Refer to '/usr/lib/sched.models' on an
22243     HP-UX system to determine the proper architecture option for your
22244     machine.  Code compiled for lower numbered architectures runs on
22245     higher numbered architectures, but not the other way around.
22246
22247'-mpa-risc-1-0'
22248'-mpa-risc-1-1'
22249'-mpa-risc-2-0'
22250     Synonyms for '-march=1.0', '-march=1.1', and '-march=2.0'
22251     respectively.
22252
22253'-mcaller-copies'
22254     The caller copies function arguments passed by hidden reference.
22255     This option should be used with care as it is not compatible with
22256     the default 32-bit runtime.  However, only aggregates larger than
22257     eight bytes are passed by hidden reference and the option provides
22258     better compatibility with OpenMP.
22259
22260'-mjump-in-delay'
22261     This option is ignored and provided for compatibility purposes
22262     only.
22263
22264'-mdisable-fpregs'
22265     Prevent floating-point registers from being used in any manner.
22266     This is necessary for compiling kernels that perform lazy context
22267     switching of floating-point registers.  If you use this option and
22268     attempt to perform floating-point operations, the compiler aborts.
22269
22270'-mdisable-indexing'
22271     Prevent the compiler from using indexing address modes.  This
22272     avoids some rather obscure problems when compiling MIG generated
22273     code under MACH.
22274
22275'-mno-space-regs'
22276     Generate code that assumes the target has no space registers.  This
22277     allows GCC to generate faster indirect calls and use unscaled index
22278     address modes.
22279
22280     Such code is suitable for level 0 PA systems and kernels.
22281
22282'-mfast-indirect-calls'
22283     Generate code that assumes calls never cross space boundaries.
22284     This allows GCC to emit code that performs faster indirect calls.
22285
22286     This option does not work in the presence of shared libraries or
22287     nested functions.
22288
22289'-mfixed-range=REGISTER-RANGE'
22290     Generate code treating the given register range as fixed registers.
22291     A fixed register is one that the register allocator cannot use.
22292     This is useful when compiling kernel code.  A register range is
22293     specified as two registers separated by a dash.  Multiple register
22294     ranges can be specified separated by a comma.
22295
22296'-mlong-load-store'
22297     Generate 3-instruction load and store sequences as sometimes
22298     required by the HP-UX 10 linker.  This is equivalent to the '+k'
22299     option to the HP compilers.
22300
22301'-mportable-runtime'
22302     Use the portable calling conventions proposed by HP for ELF
22303     systems.
22304
22305'-mgas'
22306     Enable the use of assembler directives only GAS understands.
22307
22308'-mschedule=CPU-TYPE'
22309     Schedule code according to the constraints for the machine type
22310     CPU-TYPE.  The choices for CPU-TYPE are '700' '7100', '7100LC',
22311     '7200', '7300' and '8000'.  Refer to '/usr/lib/sched.models' on an
22312     HP-UX system to determine the proper scheduling option for your
22313     machine.  The default scheduling is '8000'.
22314
22315'-mlinker-opt'
22316     Enable the optimization pass in the HP-UX linker.  Note this makes
22317     symbolic debugging impossible.  It also triggers a bug in the HP-UX
22318     8 and HP-UX 9 linkers in which they give bogus error messages when
22319     linking some programs.
22320
22321'-msoft-float'
22322     Generate output containing library calls for floating point.
22323     *Warning:* the requisite libraries are not available for all HPPA
22324     targets.  Normally the facilities of the machine's usual C compiler
22325     are used, but this cannot be done directly in cross-compilation.
22326     You must make your own arrangements to provide suitable library
22327     functions for cross-compilation.
22328
22329     '-msoft-float' changes the calling convention in the output file;
22330     therefore, it is only useful if you compile _all_ of a program with
22331     this option.  In particular, you need to compile 'libgcc.a', the
22332     library that comes with GCC, with '-msoft-float' in order for this
22333     to work.
22334
22335'-msio'
22336     Generate the predefine, '_SIO', for server IO.  The default is
22337     '-mwsio'.  This generates the predefines, '__hp9000s700',
22338     '__hp9000s700__' and '_WSIO', for workstation IO.  These options
22339     are available under HP-UX and HI-UX.
22340
22341'-mgnu-ld'
22342     Use options specific to GNU 'ld'.  This passes '-shared' to 'ld'
22343     when building a shared library.  It is the default when GCC is
22344     configured, explicitly or implicitly, with the GNU linker.  This
22345     option does not affect which 'ld' is called; it only changes what
22346     parameters are passed to that 'ld'.  The 'ld' that is called is
22347     determined by the '--with-ld' configure option, GCC's program
22348     search path, and finally by the user's 'PATH'.  The linker used by
22349     GCC can be printed using 'which `gcc -print-prog-name=ld`'.  This
22350     option is only available on the 64-bit HP-UX GCC, i.e. configured
22351     with 'hppa*64*-*-hpux*'.
22352
22353'-mhp-ld'
22354     Use options specific to HP 'ld'.  This passes '-b' to 'ld' when
22355     building a shared library and passes '+Accept TypeMismatch' to 'ld'
22356     on all links.  It is the default when GCC is configured, explicitly
22357     or implicitly, with the HP linker.  This option does not affect
22358     which 'ld' is called; it only changes what parameters are passed to
22359     that 'ld'.  The 'ld' that is called is determined by the
22360     '--with-ld' configure option, GCC's program search path, and
22361     finally by the user's 'PATH'.  The linker used by GCC can be
22362     printed using 'which `gcc -print-prog-name=ld`'.  This option is
22363     only available on the 64-bit HP-UX GCC, i.e. configured with
22364     'hppa*64*-*-hpux*'.
22365
22366'-mlong-calls'
22367     Generate code that uses long call sequences.  This ensures that a
22368     call is always able to reach linker generated stubs.  The default
22369     is to generate long calls only when the distance from the call site
22370     to the beginning of the function or translation unit, as the case
22371     may be, exceeds a predefined limit set by the branch type being
22372     used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
22373     respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
22374     always limited at 240,000 bytes.
22375
22376     Distances are measured from the beginning of functions when using
22377     the '-ffunction-sections' option, or when using the '-mgas' and
22378     '-mno-portable-runtime' options together under HP-UX with the SOM
22379     linker.
22380
22381     It is normally not desirable to use this option as it degrades
22382     performance.  However, it may be useful in large applications,
22383     particularly when partial linking is used to build the application.
22384
22385     The types of long calls used depends on the capabilities of the
22386     assembler and linker, and the type of code being generated.  The
22387     impact on systems that support long absolute calls, and long pic
22388     symbol-difference or pc-relative calls should be relatively small.
22389     However, an indirect call is used on 32-bit ELF systems in pic code
22390     and it is quite long.
22391
22392'-munix=UNIX-STD'
22393     Generate compiler predefines and select a startfile for the
22394     specified UNIX standard.  The choices for UNIX-STD are '93', '95'
22395     and '98'.  '93' is supported on all HP-UX versions.  '95' is
22396     available on HP-UX 10.10 and later.  '98' is available on HP-UX
22397     11.11 and later.  The default values are '93' for HP-UX 10.00, '95'
22398     for HP-UX 10.10 though to 11.00, and '98' for HP-UX 11.11 and
22399     later.
22400
22401     '-munix=93' provides the same predefines as GCC 3.3 and 3.4.
22402     '-munix=95' provides additional predefines for 'XOPEN_UNIX' and
22403     '_XOPEN_SOURCE_EXTENDED', and the startfile 'unix95.o'.
22404     '-munix=98' provides additional predefines for '_XOPEN_UNIX',
22405     '_XOPEN_SOURCE_EXTENDED', '_INCLUDE__STDC_A1_SOURCE' and
22406     '_INCLUDE_XOPEN_SOURCE_500', and the startfile 'unix98.o'.
22407
22408     It is _important_ to note that this option changes the interfaces
22409     for various library routines.  It also affects the operational
22410     behavior of the C library.  Thus, _extreme_ care is needed in using
22411     this option.
22412
22413     Library code that is intended to operate with more than one UNIX
22414     standard must test, set and restore the variable
22415     '__xpg4_extended_mask' as appropriate.  Most GNU software doesn't
22416     provide this capability.
22417
22418'-nolibdld'
22419     Suppress the generation of link options to search libdld.sl when
22420     the '-static' option is specified on HP-UX 10 and later.
22421
22422'-static'
22423     The HP-UX implementation of setlocale in libc has a dependency on
22424     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
22425     when the '-static' option is specified, special link options are
22426     needed to resolve this dependency.
22427
22428     On HP-UX 10 and later, the GCC driver adds the necessary options to
22429     link with libdld.sl when the '-static' option is specified.  This
22430     causes the resulting binary to be dynamic.  On the 64-bit port, the
22431     linkers generate dynamic binaries by default in any case.  The
22432     '-nolibdld' option can be used to prevent the GCC driver from
22433     adding these link options.
22434
22435'-threads'
22436     Add support for multithreading with the "dce thread" library under
22437     HP-UX.  This option sets flags for both the preprocessor and
22438     linker.
22439
22440
22441File: gcc.info,  Node: IA-64 Options,  Next: LM32 Options,  Prev: HPPA Options,  Up: Submodel Options
22442
224433.19.21 IA-64 Options
22444---------------------
22445
22446These are the '-m' options defined for the Intel IA-64 architecture.
22447
22448'-mbig-endian'
22449     Generate code for a big-endian target.  This is the default for
22450     HP-UX.
22451
22452'-mlittle-endian'
22453     Generate code for a little-endian target.  This is the default for
22454     AIX5 and GNU/Linux.
22455
22456'-mgnu-as'
22457'-mno-gnu-as'
22458     Generate (or don't) code for the GNU assembler.  This is the
22459     default.
22460
22461'-mgnu-ld'
22462'-mno-gnu-ld'
22463     Generate (or don't) code for the GNU linker.  This is the default.
22464
22465'-mno-pic'
22466     Generate code that does not use a global pointer register.  The
22467     result is not position independent code, and violates the IA-64
22468     ABI.
22469
22470'-mvolatile-asm-stop'
22471'-mno-volatile-asm-stop'
22472     Generate (or don't) a stop bit immediately before and after
22473     volatile asm statements.
22474
22475'-mregister-names'
22476'-mno-register-names'
22477     Generate (or don't) 'in', 'loc', and 'out' register names for the
22478     stacked registers.  This may make assembler output more readable.
22479
22480'-mno-sdata'
22481'-msdata'
22482     Disable (or enable) optimizations that use the small data section.
22483     This may be useful for working around optimizer bugs.
22484
22485'-mconstant-gp'
22486     Generate code that uses a single constant global pointer value.
22487     This is useful when compiling kernel code.
22488
22489'-mauto-pic'
22490     Generate code that is self-relocatable.  This implies
22491     '-mconstant-gp'.  This is useful when compiling firmware code.
22492
22493'-minline-float-divide-min-latency'
22494     Generate code for inline divides of floating-point values using the
22495     minimum latency algorithm.
22496
22497'-minline-float-divide-max-throughput'
22498     Generate code for inline divides of floating-point values using the
22499     maximum throughput algorithm.
22500
22501'-mno-inline-float-divide'
22502     Do not generate inline code for divides of floating-point values.
22503
22504'-minline-int-divide-min-latency'
22505     Generate code for inline divides of integer values using the
22506     minimum latency algorithm.
22507
22508'-minline-int-divide-max-throughput'
22509     Generate code for inline divides of integer values using the
22510     maximum throughput algorithm.
22511
22512'-mno-inline-int-divide'
22513     Do not generate inline code for divides of integer values.
22514
22515'-minline-sqrt-min-latency'
22516     Generate code for inline square roots using the minimum latency
22517     algorithm.
22518
22519'-minline-sqrt-max-throughput'
22520     Generate code for inline square roots using the maximum throughput
22521     algorithm.
22522
22523'-mno-inline-sqrt'
22524     Do not generate inline code for 'sqrt'.
22525
22526'-mfused-madd'
22527'-mno-fused-madd'
22528     Do (don't) generate code that uses the fused multiply/add or
22529     multiply/subtract instructions.  The default is to use these
22530     instructions.
22531
22532'-mno-dwarf2-asm'
22533'-mdwarf2-asm'
22534     Don't (or do) generate assembler code for the DWARF line number
22535     debugging info.  This may be useful when not using the GNU
22536     assembler.
22537
22538'-mearly-stop-bits'
22539'-mno-early-stop-bits'
22540     Allow stop bits to be placed earlier than immediately preceding the
22541     instruction that triggered the stop bit.  This can improve
22542     instruction scheduling, but does not always do so.
22543
22544'-mfixed-range=REGISTER-RANGE'
22545     Generate code treating the given register range as fixed registers.
22546     A fixed register is one that the register allocator cannot use.
22547     This is useful when compiling kernel code.  A register range is
22548     specified as two registers separated by a dash.  Multiple register
22549     ranges can be specified separated by a comma.
22550
22551'-mtls-size=TLS-SIZE'
22552     Specify bit size of immediate TLS offsets.  Valid values are 14,
22553     22, and 64.
22554
22555'-mtune=CPU-TYPE'
22556     Tune the instruction scheduling for a particular CPU, Valid values
22557     are 'itanium', 'itanium1', 'merced', 'itanium2', and 'mckinley'.
22558
22559'-milp32'
22560'-mlp64'
22561     Generate code for a 32-bit or 64-bit environment.  The 32-bit
22562     environment sets int, long and pointer to 32 bits.  The 64-bit
22563     environment sets int to 32 bits and long and pointer to 64 bits.
22564     These are HP-UX specific flags.
22565
22566'-mno-sched-br-data-spec'
22567'-msched-br-data-spec'
22568     (Dis/En)able data speculative scheduling before reload.  This
22569     results in generation of 'ld.a' instructions and the corresponding
22570     check instructions ('ld.c' / 'chk.a').  The default setting is
22571     disabled.
22572
22573'-msched-ar-data-spec'
22574'-mno-sched-ar-data-spec'
22575     (En/Dis)able data speculative scheduling after reload.  This
22576     results in generation of 'ld.a' instructions and the corresponding
22577     check instructions ('ld.c' / 'chk.a').  The default setting is
22578     enabled.
22579
22580'-mno-sched-control-spec'
22581'-msched-control-spec'
22582     (Dis/En)able control speculative scheduling.  This feature is
22583     available only during region scheduling (i.e. before reload).  This
22584     results in generation of the 'ld.s' instructions and the
22585     corresponding check instructions 'chk.s'.  The default setting is
22586     disabled.
22587
22588'-msched-br-in-data-spec'
22589'-mno-sched-br-in-data-spec'
22590     (En/Dis)able speculative scheduling of the instructions that are
22591     dependent on the data speculative loads before reload.  This is
22592     effective only with '-msched-br-data-spec' enabled.  The default
22593     setting is enabled.
22594
22595'-msched-ar-in-data-spec'
22596'-mno-sched-ar-in-data-spec'
22597     (En/Dis)able speculative scheduling of the instructions that are
22598     dependent on the data speculative loads after reload.  This is
22599     effective only with '-msched-ar-data-spec' enabled.  The default
22600     setting is enabled.
22601
22602'-msched-in-control-spec'
22603'-mno-sched-in-control-spec'
22604     (En/Dis)able speculative scheduling of the instructions that are
22605     dependent on the control speculative loads.  This is effective only
22606     with '-msched-control-spec' enabled.  The default setting is
22607     enabled.
22608
22609'-mno-sched-prefer-non-data-spec-insns'
22610'-msched-prefer-non-data-spec-insns'
22611     If enabled, data-speculative instructions are chosen for schedule
22612     only if there are no other choices at the moment.  This makes the
22613     use of the data speculation much more conservative.  The default
22614     setting is disabled.
22615
22616'-mno-sched-prefer-non-control-spec-insns'
22617'-msched-prefer-non-control-spec-insns'
22618     If enabled, control-speculative instructions are chosen for
22619     schedule only if there are no other choices at the moment.  This
22620     makes the use of the control speculation much more conservative.
22621     The default setting is disabled.
22622
22623'-mno-sched-count-spec-in-critical-path'
22624'-msched-count-spec-in-critical-path'
22625     If enabled, speculative dependencies are considered during
22626     computation of the instructions priorities.  This makes the use of
22627     the speculation a bit more conservative.  The default setting is
22628     disabled.
22629
22630'-msched-spec-ldc'
22631     Use a simple data speculation check.  This option is on by default.
22632
22633'-msched-control-spec-ldc'
22634     Use a simple check for control speculation.  This option is on by
22635     default.
22636
22637'-msched-stop-bits-after-every-cycle'
22638     Place a stop bit after every cycle when scheduling.  This option is
22639     on by default.
22640
22641'-msched-fp-mem-deps-zero-cost'
22642     Assume that floating-point stores and loads are not likely to cause
22643     a conflict when placed into the same instruction group.  This
22644     option is disabled by default.
22645
22646'-msel-sched-dont-check-control-spec'
22647     Generate checks for control speculation in selective scheduling.
22648     This flag is disabled by default.
22649
22650'-msched-max-memory-insns=MAX-INSNS'
22651     Limit on the number of memory insns per instruction group, giving
22652     lower priority to subsequent memory insns attempting to schedule in
22653     the same instruction group.  Frequently useful to prevent cache
22654     bank conflicts.  The default value is 1.
22655
22656'-msched-max-memory-insns-hard-limit'
22657     Makes the limit specified by 'msched-max-memory-insns' a hard
22658     limit, disallowing more than that number in an instruction group.
22659     Otherwise, the limit is "soft", meaning that non-memory operations
22660     are preferred when the limit is reached, but memory operations may
22661     still be scheduled.
22662
22663
22664File: gcc.info,  Node: LM32 Options,  Next: LoongArch Options,  Prev: IA-64 Options,  Up: Submodel Options
22665
226663.19.22 LM32 Options
22667--------------------
22668
22669These '-m' options are defined for the LatticeMico32 architecture:
22670
22671'-mbarrel-shift-enabled'
22672     Enable barrel-shift instructions.
22673
22674'-mdivide-enabled'
22675     Enable divide and modulus instructions.
22676
22677'-mmultiply-enabled'
22678     Enable multiply instructions.
22679
22680'-msign-extend-enabled'
22681     Enable sign extend instructions.
22682
22683'-muser-enabled'
22684     Enable user-defined instructions.
22685
22686
22687File: gcc.info,  Node: LoongArch Options,  Next: M32C Options,  Prev: LM32 Options,  Up: Submodel Options
22688
226893.19.23 LoongArch Options
22690-------------------------
22691
22692These command-line options are defined for LoongArch targets:
22693
22694'-march=CPU-TYPE'
22695     Generate instructions for the machine type CPU-TYPE.  In contrast
22696     to '-mtune=CPU-TYPE', which merely tunes the generated code for the
22697     specified CPU-TYPE, '-march=CPU-TYPE' allows GCC to generate code
22698     that may not run at all on processors other than the one indicated.
22699     Specifying '-march=CPU-TYPE' implies '-mtune=CPU-TYPE', except
22700     where noted otherwise.
22701
22702     The choices for CPU-TYPE are:
22703
22704     'native'
22705          This selects the CPU to generate code for at compilation time
22706          by determining the processor type of the compiling machine.
22707          Using '-march=native' enables all instruction subsets
22708          supported by the local machine (hence the result might not run
22709          on different machines).  Using '-mtune=native' produces code
22710          optimized for the local machine under the constraints of the
22711          selected instruction set.
22712     'loongarch64'
22713          A generic CPU with 64-bit extensions.
22714     'la464'
22715          LoongArch LA464 CPU with LBT, LSX, LASX, LVZ.
22716
22717'-mtune=CPU-TYPE'
22718     Optimize the output for the given processor, specified by
22719     microarchitecture name.
22720
22721'-mabi=BASE-ABI-TYPE'
22722     Generate code for the specified calling convention.  BASE-ABI-TYPE
22723     can be one of:
22724     'lp64d'
22725          Uses 64-bit general purpose registers and 32/64-bit
22726          floating-point registers for parameter passing.  Data model is
22727          LP64, where 'int' is 32 bits, while 'long int' and pointers
22728          are 64 bits.
22729     'lp64f'
22730          Uses 64-bit general purpose registers and 32-bit
22731          floating-point registers for parameter passing.  Data model is
22732          LP64, where 'int' is 32 bits, while 'long int' and pointers
22733          are 64 bits.
22734     'lp64s'
22735          Uses 64-bit general purpose registers and no floating-point
22736          registers for parameter passing.  Data model is LP64, where
22737          'int' is 32 bits, while 'long int' and pointers are 64 bits.
22738
22739'-mfpu=FPU-TYPE'
22740     Generate code for the specified FPU type, which can be one of:
22741     '64'
22742          Allow the use of hardware floating-point instructions for
22743          32-bit and 64-bit operations.
22744     '32'
22745          Allow the use of hardware floating-point instructions for
22746          32-bit operations.
22747     'none'
22748     '0'
22749          Prevent the use of hardware floating-point instructions.
22750
22751'-msoft-float'
22752     Force '-mfpu=none' and prevents the use of floating-point registers
22753     for parameter passing.  This option may change the target ABI.
22754
22755'-msingle-float'
22756     Force '-mfpu=32' and allow the use of 32-bit floating-point
22757     registers for parameter passing.  This option may change the target
22758     ABI.
22759
22760'-mdouble-float'
22761     Force '-mfpu=64' and allow the use of 32/64-bit floating-point
22762     registers for parameter passing.  This option may change the target
22763     ABI.
22764
22765'-mbranch-cost=N'
22766     Set the cost of branches to roughly N instructions.
22767
22768'-mcheck-zero-division'
22769'-mno-check-zero-divison'
22770     Trap (do not trap) on integer division by zero.  The default is
22771     '-mcheck-zero-division' for '-O0' or '-Og', and
22772     '-mno-check-zero-division' for other optimization levels.
22773
22774'-mcond-move-int'
22775'-mno-cond-move-int'
22776     Conditional moves for integral data in general-purpose registers
22777     are enabled (disabled).  The default is '-mcond-move-int'.
22778
22779'-mcond-move-float'
22780'-mno-cond-move-float'
22781     Conditional moves for floating-point registers are enabled
22782     (disabled).  The default is '-mcond-move-float'.
22783
22784'-mmemcpy'
22785'-mno-memcpy'
22786     Force (do not force) the use of 'memcpy' for non-trivial block
22787     moves.  The default is '-mno-memcpy', which allows GCC to inline
22788     most constant-sized copies.  Setting optimization level to '-Os'
22789     also forces the use of 'memcpy', but '-mno-memcpy' may override
22790     this behavior if explicitly specified, regardless of the order
22791     these options on the command line.
22792
22793'-mstrict-align'
22794'-mno-strict-align'
22795     Avoid or allow generating memory accesses that may not be aligned
22796     on a natural object boundary as described in the architecture
22797     specification.  The default is '-mno-strict-align'.
22798
22799'-msmall-data-limit=NUMBER'
22800     Put global and static data smaller than NUMBER bytes into a special
22801     section (on some targets).  The default value is 0.
22802
22803'-mmax-inline-memcpy-size=N'
22804     Inline all block moves (such as calls to 'memcpy' or structure
22805     copies) less than or equal to N bytes.  The default value of N is
22806     1024.
22807
22808'-mcmodel=CODE-MODEL'
22809     Set the code model to one of:
22810     'tiny-static'
22811             * local symbol and global strong symbol: The data section
22812               must be within +/-2MiB addressing space.  The text
22813               section must be within +/-128MiB addressing space.
22814             * global weak symbol: The got table must be within +/-2GiB
22815               addressing space.
22816
22817     'tiny'
22818             * local symbol: The data section must be within +/-2MiB
22819               addressing space.  The text section must be within
22820               +/-128MiB addressing space.
22821             * global symbol: The got table must be within +/-2GiB
22822               addressing space.
22823
22824     'normal'
22825             * local symbol: The data section must be within +/-2GiB
22826               addressing space.  The text section must be within
22827               +/-128MiB addressing space.
22828             * global symbol: The got table must be within +/-2GiB
22829               addressing space.
22830
22831     'large'
22832             * local symbol: The data section must be within +/-2GiB
22833               addressing space.  The text section must be within
22834               +/-128GiB addressing space.
22835             * global symbol: The got table must be within +/-2GiB
22836               addressing space.
22837
22838     'extreme(Not implemented yet)'
22839             * local symbol: The data and text section must be within
22840               +/-8EiB addressing space.
22841             * global symbol: The data got table must be within +/-8EiB
22842               addressing space.
22843     The default code model is 'normal'.
22844
22845
22846File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LoongArch Options,  Up: Submodel Options
22847
228483.19.24 M32C Options
22849--------------------
22850
22851'-mcpu=NAME'
22852     Select the CPU for which code is generated.  NAME may be one of
22853     'r8c' for the R8C/Tiny series, 'm16c' for the M16C (up to /60)
22854     series, 'm32cm' for the M16C/80 series, or 'm32c' for the M32C/80
22855     series.
22856
22857'-msim'
22858     Specifies that the program will be run on the simulator.  This
22859     causes an alternate runtime library to be linked in which supports,
22860     for example, file I/O.  You must not use this option when
22861     generating programs that will run on real hardware; you must
22862     provide your own runtime library for whatever I/O functions are
22863     needed.
22864
22865'-memregs=NUMBER'
22866     Specifies the number of memory-based pseudo-registers GCC uses
22867     during code generation.  These pseudo-registers are used like real
22868     registers, so there is a tradeoff between GCC's ability to fit the
22869     code into available registers, and the performance penalty of using
22870     memory instead of registers.  Note that all modules in a program
22871     must be compiled with the same value for this option.  Because of
22872     that, you must not use this option with GCC's default runtime
22873     libraries.
22874
22875
22876File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
22877
228783.19.25 M32R/D Options
22879----------------------
22880
22881These '-m' options are defined for Renesas M32R/D architectures:
22882
22883'-m32r2'
22884     Generate code for the M32R/2.
22885
22886'-m32rx'
22887     Generate code for the M32R/X.
22888
22889'-m32r'
22890     Generate code for the M32R.  This is the default.
22891
22892'-mmodel=small'
22893     Assume all objects live in the lower 16MB of memory (so that their
22894     addresses can be loaded with the 'ld24' instruction), and assume
22895     all subroutines are reachable with the 'bl' instruction.  This is
22896     the default.
22897
22898     The addressability of a particular object can be set with the
22899     'model' attribute.
22900
22901'-mmodel=medium'
22902     Assume objects may be anywhere in the 32-bit address space (the
22903     compiler generates 'seth/add3' instructions to load their
22904     addresses), and assume all subroutines are reachable with the 'bl'
22905     instruction.
22906
22907'-mmodel=large'
22908     Assume objects may be anywhere in the 32-bit address space (the
22909     compiler generates 'seth/add3' instructions to load their
22910     addresses), and assume subroutines may not be reachable with the
22911     'bl' instruction (the compiler generates the much slower
22912     'seth/add3/jl' instruction sequence).
22913
22914'-msdata=none'
22915     Disable use of the small data area.  Variables are put into one of
22916     '.data', '.bss', or '.rodata' (unless the 'section' attribute has
22917     been specified).  This is the default.
22918
22919     The small data area consists of sections '.sdata' and '.sbss'.
22920     Objects may be explicitly put in the small data area with the
22921     'section' attribute using one of these sections.
22922
22923'-msdata=sdata'
22924     Put small global and static data in the small data area, but do not
22925     generate special code to reference them.
22926
22927'-msdata=use'
22928     Put small global and static data in the small data area, and
22929     generate special instructions to reference them.
22930
22931'-G NUM'
22932     Put global and static objects less than or equal to NUM bytes into
22933     the small data or BSS sections instead of the normal data or BSS
22934     sections.  The default value of NUM is 8.  The '-msdata' option
22935     must be set to one of 'sdata' or 'use' for this option to have any
22936     effect.
22937
22938     All modules should be compiled with the same '-G NUM' value.
22939     Compiling with different values of NUM may or may not work; if it
22940     doesn't the linker gives an error message--incorrect code is not
22941     generated.
22942
22943'-mdebug'
22944     Makes the M32R-specific code in the compiler display some
22945     statistics that might help in debugging programs.
22946
22947'-malign-loops'
22948     Align all loops to a 32-byte boundary.
22949
22950'-mno-align-loops'
22951     Do not enforce a 32-byte alignment for loops.  This is the default.
22952
22953'-missue-rate=NUMBER'
22954     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
22955
22956'-mbranch-cost=NUMBER'
22957     NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
22958     over conditional code, if it is 2, then the opposite applies.
22959
22960'-mflush-trap=NUMBER'
22961     Specifies the trap number to use to flush the cache.  The default
22962     is 12.  Valid numbers are between 0 and 15 inclusive.
22963
22964'-mno-flush-trap'
22965     Specifies that the cache cannot be flushed by using a trap.
22966
22967'-mflush-func=NAME'
22968     Specifies the name of the operating system function to call to
22969     flush the cache.  The default is '_flush_cache', but a function
22970     call is only used if a trap is not available.
22971
22972'-mno-flush-func'
22973     Indicates that there is no OS function for flushing the cache.
22974
22975
22976File: gcc.info,  Node: M680x0 Options,  Next: MCore Options,  Prev: M32R/D Options,  Up: Submodel Options
22977
229783.19.26 M680x0 Options
22979----------------------
22980
22981These are the '-m' options defined for M680x0 and ColdFire processors.
22982The default settings depend on which architecture was selected when the
22983compiler was configured; the defaults for the most common choices are
22984given below.
22985
22986'-march=ARCH'
22987     Generate code for a specific M680x0 or ColdFire instruction set
22988     architecture.  Permissible values of ARCH for M680x0 architectures
22989     are: '68000', '68010', '68020', '68030', '68040', '68060' and
22990     'cpu32'.  ColdFire architectures are selected according to
22991     Freescale's ISA classification and the permissible values are:
22992     'isaa', 'isaaplus', 'isab' and 'isac'.
22993
22994     GCC defines a macro '__mcfARCH__' whenever it is generating code
22995     for a ColdFire target.  The ARCH in this macro is one of the
22996     '-march' arguments given above.
22997
22998     When used together, '-march' and '-mtune' select code that runs on
22999     a family of similar processors but that is optimized for a
23000     particular microarchitecture.
23001
23002'-mcpu=CPU'
23003     Generate code for a specific M680x0 or ColdFire processor.  The
23004     M680x0 CPUs are: '68000', '68010', '68020', '68030', '68040',
23005     '68060', '68302', '68332' and 'cpu32'.  The ColdFire CPUs are given
23006     by the table below, which also classifies the CPUs into families:
23007
23008     *Family*       *'-mcpu' arguments*
23009     --------------------------------------------------------------------------
23010     '51'           '51' '51ac' '51ag' '51cn' '51em' '51je' '51jf' '51jg'
23011                    '51jm' '51mm' '51qe' '51qm'
23012     '5206'         '5202' '5204' '5206'
23013     '5206e'        '5206e'
23014     '5208'         '5207' '5208'
23015     '5211a'        '5210a' '5211a'
23016     '5213'         '5211' '5212' '5213'
23017     '5216'         '5214' '5216'
23018     '52235'        '52230' '52231' '52232' '52233' '52234' '52235'
23019     '5225'         '5224' '5225'
23020     '52259'        '52252' '52254' '52255' '52256' '52258' '52259'
23021     '5235'         '5232' '5233' '5234' '5235' '523x'
23022     '5249'         '5249'
23023     '5250'         '5250'
23024     '5271'         '5270' '5271'
23025     '5272'         '5272'
23026     '5275'         '5274' '5275'
23027     '5282'         '5280' '5281' '5282' '528x'
23028     '53017'        '53011' '53012' '53013' '53014' '53015' '53016' '53017'
23029     '5307'         '5307'
23030     '5329'         '5327' '5328' '5329' '532x'
23031     '5373'         '5372' '5373' '537x'
23032     '5407'         '5407'
23033     '5475'         '5470' '5471' '5472' '5473' '5474' '5475' '547x' '5480'
23034                    '5481' '5482' '5483' '5484' '5485'
23035
23036     '-mcpu=CPU' overrides '-march=ARCH' if ARCH is compatible with CPU.
23037     Other combinations of '-mcpu' and '-march' are rejected.
23038
23039     GCC defines the macro '__mcf_cpu_CPU' when ColdFire target CPU is
23040     selected.  It also defines '__mcf_family_FAMILY', where the value
23041     of FAMILY is given by the table above.
23042
23043'-mtune=TUNE'
23044     Tune the code for a particular microarchitecture within the
23045     constraints set by '-march' and '-mcpu'.  The M680x0
23046     microarchitectures are: '68000', '68010', '68020', '68030',
23047     '68040', '68060' and 'cpu32'.  The ColdFire microarchitectures are:
23048     'cfv1', 'cfv2', 'cfv3', 'cfv4' and 'cfv4e'.
23049
23050     You can also use '-mtune=68020-40' for code that needs to run
23051     relatively well on 68020, 68030 and 68040 targets.
23052     '-mtune=68020-60' is similar but includes 68060 targets as well.
23053     These two options select the same tuning decisions as '-m68020-40'
23054     and '-m68020-60' respectively.
23055
23056     GCC defines the macros '__mcARCH' and '__mcARCH__' when tuning for
23057     680x0 architecture ARCH.  It also defines 'mcARCH' unless either
23058     '-ansi' or a non-GNU '-std' option is used.  If GCC is tuning for a
23059     range of architectures, as selected by '-mtune=68020-40' or
23060     '-mtune=68020-60', it defines the macros for every architecture in
23061     the range.
23062
23063     GCC also defines the macro '__mUARCH__' when tuning for ColdFire
23064     microarchitecture UARCH, where UARCH is one of the arguments given
23065     above.
23066
23067'-m68000'
23068'-mc68000'
23069     Generate output for a 68000.  This is the default when the compiler
23070     is configured for 68000-based systems.  It is equivalent to
23071     '-march=68000'.
23072
23073     Use this option for microcontrollers with a 68000 or EC000 core,
23074     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
23075
23076'-m68010'
23077     Generate output for a 68010.  This is the default when the compiler
23078     is configured for 68010-based systems.  It is equivalent to
23079     '-march=68010'.
23080
23081'-m68020'
23082'-mc68020'
23083     Generate output for a 68020.  This is the default when the compiler
23084     is configured for 68020-based systems.  It is equivalent to
23085     '-march=68020'.
23086
23087'-m68030'
23088     Generate output for a 68030.  This is the default when the compiler
23089     is configured for 68030-based systems.  It is equivalent to
23090     '-march=68030'.
23091
23092'-m68040'
23093     Generate output for a 68040.  This is the default when the compiler
23094     is configured for 68040-based systems.  It is equivalent to
23095     '-march=68040'.
23096
23097     This option inhibits the use of 68881/68882 instructions that have
23098     to be emulated by software on the 68040.  Use this option if your
23099     68040 does not have code to emulate those instructions.
23100
23101'-m68060'
23102     Generate output for a 68060.  This is the default when the compiler
23103     is configured for 68060-based systems.  It is equivalent to
23104     '-march=68060'.
23105
23106     This option inhibits the use of 68020 and 68881/68882 instructions
23107     that have to be emulated by software on the 68060.  Use this option
23108     if your 68060 does not have code to emulate those instructions.
23109
23110'-mcpu32'
23111     Generate output for a CPU32.  This is the default when the compiler
23112     is configured for CPU32-based systems.  It is equivalent to
23113     '-march=cpu32'.
23114
23115     Use this option for microcontrollers with a CPU32 or CPU32+ core,
23116     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
23117     68341, 68349 and 68360.
23118
23119'-m5200'
23120     Generate output for a 520X ColdFire CPU.  This is the default when
23121     the compiler is configured for 520X-based systems.  It is
23122     equivalent to '-mcpu=5206', and is now deprecated in favor of that
23123     option.
23124
23125     Use this option for microcontroller with a 5200 core, including the
23126     MCF5202, MCF5203, MCF5204 and MCF5206.
23127
23128'-m5206e'
23129     Generate output for a 5206e ColdFire CPU.  The option is now
23130     deprecated in favor of the equivalent '-mcpu=5206e'.
23131
23132'-m528x'
23133     Generate output for a member of the ColdFire 528X family.  The
23134     option is now deprecated in favor of the equivalent '-mcpu=528x'.
23135
23136'-m5307'
23137     Generate output for a ColdFire 5307 CPU.  The option is now
23138     deprecated in favor of the equivalent '-mcpu=5307'.
23139
23140'-m5407'
23141     Generate output for a ColdFire 5407 CPU.  The option is now
23142     deprecated in favor of the equivalent '-mcpu=5407'.
23143
23144'-mcfv4e'
23145     Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
23146     This includes use of hardware floating-point instructions.  The
23147     option is equivalent to '-mcpu=547x', and is now deprecated in
23148     favor of that option.
23149
23150'-m68020-40'
23151     Generate output for a 68040, without using any of the new
23152     instructions.  This results in code that can run relatively
23153     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
23154     generated code does use the 68881 instructions that are emulated on
23155     the 68040.
23156
23157     The option is equivalent to '-march=68020' '-mtune=68020-40'.
23158
23159'-m68020-60'
23160     Generate output for a 68060, without using any of the new
23161     instructions.  This results in code that can run relatively
23162     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
23163     generated code does use the 68881 instructions that are emulated on
23164     the 68060.
23165
23166     The option is equivalent to '-march=68020' '-mtune=68020-60'.
23167
23168'-mhard-float'
23169'-m68881'
23170     Generate floating-point instructions.  This is the default for
23171     68020 and above, and for ColdFire devices that have an FPU.  It
23172     defines the macro '__HAVE_68881__' on M680x0 targets and
23173     '__mcffpu__' on ColdFire targets.
23174
23175'-msoft-float'
23176     Do not generate floating-point instructions; use library calls
23177     instead.  This is the default for 68000, 68010, and 68832 targets.
23178     It is also the default for ColdFire devices that have no FPU.
23179
23180'-mdiv'
23181'-mno-div'
23182     Generate (do not generate) ColdFire hardware divide and remainder
23183     instructions.  If '-march' is used without '-mcpu', the default is
23184     "on" for ColdFire architectures and "off" for M680x0 architectures.
23185     Otherwise, the default is taken from the target CPU (either the
23186     default CPU, or the one specified by '-mcpu').  For example, the
23187     default is "off" for '-mcpu=5206' and "on" for '-mcpu=5206e'.
23188
23189     GCC defines the macro '__mcfhwdiv__' when this option is enabled.
23190
23191'-mshort'
23192     Consider type 'int' to be 16 bits wide, like 'short int'.
23193     Additionally, parameters passed on the stack are also aligned to a
23194     16-bit boundary even on targets whose API mandates promotion to
23195     32-bit.
23196
23197'-mno-short'
23198     Do not consider type 'int' to be 16 bits wide.  This is the
23199     default.
23200
23201'-mnobitfield'
23202'-mno-bitfield'
23203     Do not use the bit-field instructions.  The '-m68000', '-mcpu32'
23204     and '-m5200' options imply '-mnobitfield'.
23205
23206'-mbitfield'
23207     Do use the bit-field instructions.  The '-m68020' option implies
23208     '-mbitfield'.  This is the default if you use a configuration
23209     designed for a 68020.
23210
23211'-mrtd'
23212     Use a different function-calling convention, in which functions
23213     that take a fixed number of arguments return with the 'rtd'
23214     instruction, which pops their arguments while returning.  This
23215     saves one instruction in the caller since there is no need to pop
23216     the arguments there.
23217
23218     This calling convention is incompatible with the one normally used
23219     on Unix, so you cannot use it if you need to call libraries
23220     compiled with the Unix compiler.
23221
23222     Also, you must provide function prototypes for all functions that
23223     take variable numbers of arguments (including 'printf'); otherwise
23224     incorrect code is generated for calls to those functions.
23225
23226     In addition, seriously incorrect code results if you call a
23227     function with too many arguments.  (Normally, extra arguments are
23228     harmlessly ignored.)
23229
23230     The 'rtd' instruction is supported by the 68010, 68020, 68030,
23231     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
23232
23233     The default is '-mno-rtd'.
23234
23235'-malign-int'
23236'-mno-align-int'
23237     Control whether GCC aligns 'int', 'long', 'long long', 'float',
23238     'double', and 'long double' variables on a 32-bit boundary
23239     ('-malign-int') or a 16-bit boundary ('-mno-align-int').  Aligning
23240     variables on 32-bit boundaries produces code that runs somewhat
23241     faster on processors with 32-bit busses at the expense of more
23242     memory.
23243
23244     *Warning:* if you use the '-malign-int' switch, GCC aligns
23245     structures containing the above types differently than most
23246     published application binary interface specifications for the m68k.
23247
23248     Use the pc-relative addressing mode of the 68000 directly, instead
23249     of using a global offset table.  At present, this option implies
23250     '-fpic', allowing at most a 16-bit offset for pc-relative
23251     addressing.  '-fPIC' is not presently supported with '-mpcrel',
23252     though this could be supported for 68020 and higher processors.
23253
23254'-mno-strict-align'
23255'-mstrict-align'
23256     Do not (do) assume that unaligned memory references are handled by
23257     the system.
23258
23259'-msep-data'
23260     Generate code that allows the data segment to be located in a
23261     different area of memory from the text segment.  This allows for
23262     execute-in-place in an environment without virtual memory
23263     management.  This option implies '-fPIC'.
23264
23265'-mno-sep-data'
23266     Generate code that assumes that the data segment follows the text
23267     segment.  This is the default.
23268
23269'-mid-shared-library'
23270     Generate code that supports shared libraries via the library ID
23271     method.  This allows for execute-in-place and shared libraries in
23272     an environment without virtual memory management.  This option
23273     implies '-fPIC'.
23274
23275'-mno-id-shared-library'
23276     Generate code that doesn't assume ID-based shared libraries are
23277     being used.  This is the default.
23278
23279'-mshared-library-id=n'
23280     Specifies the identification number of the ID-based shared library
23281     being compiled.  Specifying a value of 0 generates more compact
23282     code; specifying other values forces the allocation of that number
23283     to the current library, but is no more space- or time-efficient
23284     than omitting this option.
23285
23286'-mxgot'
23287'-mno-xgot'
23288     When generating position-independent code for ColdFire, generate
23289     code that works if the GOT has more than 8192 entries.  This code
23290     is larger and slower than code generated without this option.  On
23291     M680x0 processors, this option is not needed; '-fPIC' suffices.
23292
23293     GCC normally uses a single instruction to load values from the GOT.
23294     While this is relatively efficient, it only works if the GOT is
23295     smaller than about 64k.  Anything larger causes the linker to
23296     report an error such as:
23297
23298          relocation truncated to fit: R_68K_GOT16O foobar
23299
23300     If this happens, you should recompile your code with '-mxgot'.  It
23301     should then work with very large GOTs.  However, code generated
23302     with '-mxgot' is less efficient, since it takes 4 instructions to
23303     fetch the value of a global symbol.
23304
23305     Note that some linkers, including newer versions of the GNU linker,
23306     can create multiple GOTs and sort GOT entries.  If you have such a
23307     linker, you should only need to use '-mxgot' when compiling a
23308     single object file that accesses more than 8192 GOT entries.  Very
23309     few do.
23310
23311     These options have no effect unless GCC is generating
23312     position-independent code.
23313
23314'-mlong-jump-table-offsets'
23315     Use 32-bit offsets in 'switch' tables.  The default is to use
23316     16-bit offsets.
23317
23318
23319File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M680x0 Options,  Up: Submodel Options
23320
233213.19.27 MCore Options
23322---------------------
23323
23324These are the '-m' options defined for the Motorola M*Core processors.
23325
23326'-mhardlit'
23327'-mno-hardlit'
23328     Inline constants into the code stream if it can be done in two
23329     instructions or less.
23330
23331'-mdiv'
23332'-mno-div'
23333     Use the divide instruction.  (Enabled by default).
23334
23335'-mrelax-immediate'
23336'-mno-relax-immediate'
23337     Allow arbitrary-sized immediates in bit operations.
23338
23339'-mwide-bitfields'
23340'-mno-wide-bitfields'
23341     Always treat bit-fields as 'int'-sized.
23342
23343'-m4byte-functions'
23344'-mno-4byte-functions'
23345     Force all functions to be aligned to a 4-byte boundary.
23346
23347'-mcallgraph-data'
23348'-mno-callgraph-data'
23349     Emit callgraph information.
23350
23351'-mslow-bytes'
23352'-mno-slow-bytes'
23353     Prefer word access when reading byte quantities.
23354
23355'-mlittle-endian'
23356'-mbig-endian'
23357     Generate code for a little-endian target.
23358
23359'-m210'
23360'-m340'
23361     Generate code for the 210 processor.
23362
23363'-mno-lsim'
23364     Assume that runtime support has been provided and so omit the
23365     simulator library ('libsim.a)' from the linker command line.
23366
23367'-mstack-increment=SIZE'
23368     Set the maximum amount for a single stack increment operation.
23369     Large values can increase the speed of programs that contain
23370     functions that need a large amount of stack space, but they can
23371     also trigger a segmentation fault if the stack is extended too
23372     much.  The default value is 0x1000.
23373
23374
23375File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
23376
233773.19.28 MeP Options
23378-------------------
23379
23380'-mabsdiff'
23381     Enables the 'abs' instruction, which is the absolute difference
23382     between two registers.
23383
23384'-mall-opts'
23385     Enables all the optional instructions--average, multiply, divide,
23386     bit operations, leading zero, absolute difference, min/max, clip,
23387     and saturation.
23388
23389'-maverage'
23390     Enables the 'ave' instruction, which computes the average of two
23391     registers.
23392
23393'-mbased=N'
23394     Variables of size N bytes or smaller are placed in the '.based'
23395     section by default.  Based variables use the '$tp' register as a
23396     base register, and there is a 128-byte limit to the '.based'
23397     section.
23398
23399'-mbitops'
23400     Enables the bit operation instructions--bit test ('btstm'), set
23401     ('bsetm'), clear ('bclrm'), invert ('bnotm'), and test-and-set
23402     ('tas').
23403
23404'-mc=NAME'
23405     Selects which section constant data is placed in.  NAME may be
23406     'tiny', 'near', or 'far'.
23407
23408'-mclip'
23409     Enables the 'clip' instruction.  Note that '-mclip' is not useful
23410     unless you also provide '-mminmax'.
23411
23412'-mconfig=NAME'
23413     Selects one of the built-in core configurations.  Each MeP chip has
23414     one or more modules in it; each module has a core CPU and a variety
23415     of coprocessors, optional instructions, and peripherals.  The
23416     'MeP-Integrator' tool, not part of GCC, provides these
23417     configurations through this option; using this option is the same
23418     as using all the corresponding command-line options.  The default
23419     configuration is 'default'.
23420
23421'-mcop'
23422     Enables the coprocessor instructions.  By default, this is a 32-bit
23423     coprocessor.  Note that the coprocessor is normally enabled via the
23424     '-mconfig=' option.
23425
23426'-mcop32'
23427     Enables the 32-bit coprocessor's instructions.
23428
23429'-mcop64'
23430     Enables the 64-bit coprocessor's instructions.
23431
23432'-mivc2'
23433     Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
23434
23435'-mdc'
23436     Causes constant variables to be placed in the '.near' section.
23437
23438'-mdiv'
23439     Enables the 'div' and 'divu' instructions.
23440
23441'-meb'
23442     Generate big-endian code.
23443
23444'-mel'
23445     Generate little-endian code.
23446
23447'-mio-volatile'
23448     Tells the compiler that any variable marked with the 'io' attribute
23449     is to be considered volatile.
23450
23451'-ml'
23452     Causes variables to be assigned to the '.far' section by default.
23453
23454'-mleadz'
23455     Enables the 'leadz' (leading zero) instruction.
23456
23457'-mm'
23458     Causes variables to be assigned to the '.near' section by default.
23459
23460'-mminmax'
23461     Enables the 'min' and 'max' instructions.
23462
23463'-mmult'
23464     Enables the multiplication and multiply-accumulate instructions.
23465
23466'-mno-opts'
23467     Disables all the optional instructions enabled by '-mall-opts'.
23468
23469'-mrepeat'
23470     Enables the 'repeat' and 'erepeat' instructions, used for
23471     low-overhead looping.
23472
23473'-ms'
23474     Causes all variables to default to the '.tiny' section.  Note that
23475     there is a 65536-byte limit to this section.  Accesses to these
23476     variables use the '%gp' base register.
23477
23478'-msatur'
23479     Enables the saturation instructions.  Note that the compiler does
23480     not currently generate these itself, but this option is included
23481     for compatibility with other tools, like 'as'.
23482
23483'-msdram'
23484     Link the SDRAM-based runtime instead of the default ROM-based
23485     runtime.
23486
23487'-msim'
23488     Link the simulator run-time libraries.
23489
23490'-msimnovec'
23491     Link the simulator runtime libraries, excluding built-in support
23492     for reset and exception vectors and tables.
23493
23494'-mtf'
23495     Causes all functions to default to the '.far' section.  Without
23496     this option, functions default to the '.near' section.
23497
23498'-mtiny=N'
23499     Variables that are N bytes or smaller are allocated to the '.tiny'
23500     section.  These variables use the '$gp' base register.  The default
23501     for this option is 4, but note that there's a 65536-byte limit to
23502     the '.tiny' section.
23503
23504
23505File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
23506
235073.19.29 MicroBlaze Options
23508--------------------------
23509
23510'-msoft-float'
23511     Use software emulation for floating point (default).
23512
23513'-mhard-float'
23514     Use hardware floating-point instructions.
23515
23516'-mmemcpy'
23517     Do not optimize block moves, use 'memcpy'.
23518
23519'-mno-clearbss'
23520     This option is deprecated.  Use '-fno-zero-initialized-in-bss'
23521     instead.
23522
23523'-mcpu=CPU-TYPE'
23524     Use features of, and schedule code for, the given CPU. Supported
23525     values are in the format 'vX.YY.Z', where X is a major version, YY
23526     is the minor version, and Z is compatibility code.  Example values
23527     are 'v3.00.a', 'v4.00.b', 'v5.00.a', 'v5.00.b', 'v6.00.a'.
23528
23529'-mxl-soft-mul'
23530     Use software multiply emulation (default).
23531
23532'-mxl-soft-div'
23533     Use software emulation for divides (default).
23534
23535'-mxl-barrel-shift'
23536     Use the hardware barrel shifter.
23537
23538'-mxl-pattern-compare'
23539     Use pattern compare instructions.
23540
23541'-msmall-divides'
23542     Use table lookup optimization for small signed integer divisions.
23543
23544'-mxl-stack-check'
23545     This option is deprecated.  Use '-fstack-check' instead.
23546
23547'-mxl-gp-opt'
23548     Use GP-relative '.sdata'/'.sbss' sections.
23549
23550'-mxl-multiply-high'
23551     Use multiply high instructions for high part of 32x32 multiply.
23552
23553'-mxl-float-convert'
23554     Use hardware floating-point conversion instructions.
23555
23556'-mxl-float-sqrt'
23557     Use hardware floating-point square root instruction.
23558
23559'-mbig-endian'
23560     Generate code for a big-endian target.
23561
23562'-mlittle-endian'
23563     Generate code for a little-endian target.
23564
23565'-mxl-reorder'
23566     Use reorder instructions (swap and byte reversed load/store).
23567
23568'-mxl-mode-APP-MODEL'
23569     Select application model APP-MODEL.  Valid models are
23570     'executable'
23571          normal executable (default), uses startup code 'crt0.o'.
23572
23573     'xmdstub'
23574          for use with Xilinx Microprocessor Debugger (XMD) based
23575          software intrusive debug agent called xmdstub.  This uses
23576          startup file 'crt1.o' and sets the start address of the
23577          program to 0x800.
23578
23579     'bootstrap'
23580          for applications that are loaded using a bootloader.  This
23581          model uses startup file 'crt2.o' which does not contain a
23582          processor reset vector handler.  This is suitable for
23583          transferring control on a processor reset to the bootloader
23584          rather than the application.
23585
23586     'novectors'
23587          for applications that do not require any of the MicroBlaze
23588          vectors.  This option may be useful for applications running
23589          within a monitoring application.  This model uses 'crt3.o' as
23590          a startup file.
23591
23592     Option '-xl-mode-APP-MODEL' is a deprecated alias for
23593     '-mxl-mode-APP-MODEL'.
23594
23595'-mpic-data-is-text-relative'
23596     Assume that the displacement between the text and data segments is
23597     fixed at static link time.  This allows data to be referenced by
23598     offset from start of text address instead of GOT since PC-relative
23599     addressing is not supported.
23600
23601
23602File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
23603
236043.19.30 MIPS Options
23605--------------------
23606
23607'-EB'
23608     Generate big-endian code.
23609
23610'-EL'
23611     Generate little-endian code.  This is the default for 'mips*el-*-*'
23612     configurations.
23613
23614'-march=ARCH'
23615     Generate code that runs on ARCH, which can be the name of a generic
23616     MIPS ISA, or the name of a particular processor.  The ISA names
23617     are: 'mips1', 'mips2', 'mips3', 'mips4', 'mips32', 'mips32r2',
23618     'mips32r3', 'mips32r5', 'mips32r6', 'mips64', 'mips64r2',
23619     'mips64r3', 'mips64r5' and 'mips64r6'.  The processor names are:
23620     '4kc', '4km', '4kp', '4ksc', '4kec', '4kem', '4kep', '4ksd', '5kc',
23621     '5kf', '20kc', '24kc', '24kf2_1', '24kf1_1', '24kec', '24kef2_1',
23622     '24kef1_1', '34kc', '34kf2_1', '34kf1_1', '34kn', '74kc',
23623     '74kf2_1', '74kf1_1', '74kf3_2', '1004kc', '1004kf2_1',
23624     '1004kf1_1', 'i6400', 'i6500', 'interaptiv', 'loongson2e',
23625     'loongson2f', 'loongson3a', 'gs464', 'gs464e', 'gs264e', 'm4k',
23626     'm14k', 'm14kc', 'm14ke', 'm14kec', 'm5100', 'm5101', 'octeon',
23627     'octeon+', 'octeon2', 'octeon3', 'orion', 'p5600', 'p6600',
23628     'r2000', 'r3000', 'r3900', 'r4000', 'r4400', 'r4600', 'r4650',
23629     'r4700', 'r5900', 'r6000', 'r8000', 'rm7000', 'rm9000', 'r10000',
23630     'r12000', 'r14000', 'r16000', 'sb1', 'sr71000', 'vr4100', 'vr4111',
23631     'vr4120', 'vr4130', 'vr4300', 'vr5000', 'vr5400', 'vr5500', 'xlr'
23632     and 'xlp'.  The special value 'from-abi' selects the most
23633     compatible architecture for the selected ABI (that is, 'mips1' for
23634     32-bit ABIs and 'mips3' for 64-bit ABIs).
23635
23636     The native Linux/GNU toolchain also supports the value 'native',
23637     which selects the best architecture option for the host processor.
23638     '-march=native' has no effect if GCC does not recognize the
23639     processor.
23640
23641     In processor names, a final '000' can be abbreviated as 'k' (for
23642     example, '-march=r2k').  Prefixes are optional, and 'vr' may be
23643     written 'r'.
23644
23645     Names of the form 'Nf2_1' refer to processors with FPUs clocked at
23646     half the rate of the core, names of the form 'Nf1_1' refer to
23647     processors with FPUs clocked at the same rate as the core, and
23648     names of the form 'Nf3_2' refer to processors with FPUs clocked a
23649     ratio of 3:2 with respect to the core.  For compatibility reasons,
23650     'Nf' is accepted as a synonym for 'Nf2_1' while 'Nx' and 'Bfx' are
23651     accepted as synonyms for 'Nf1_1'.
23652
23653     GCC defines two macros based on the value of this option.  The
23654     first is '_MIPS_ARCH', which gives the name of target architecture,
23655     as a string.  The second has the form '_MIPS_ARCH_FOO', where FOO
23656     is the capitalized value of '_MIPS_ARCH'.  For example,
23657     '-march=r2000' sets '_MIPS_ARCH' to '"r2000"' and defines the macro
23658     '_MIPS_ARCH_R2000'.
23659
23660     Note that the '_MIPS_ARCH' macro uses the processor names given
23661     above.  In other words, it has the full prefix and does not
23662     abbreviate '000' as 'k'.  In the case of 'from-abi', the macro
23663     names the resolved architecture (either '"mips1"' or '"mips3"').
23664     It names the default architecture when no '-march' option is given.
23665
23666'-mtune=ARCH'
23667     Optimize for ARCH.  Among other things, this option controls the
23668     way instructions are scheduled, and the perceived cost of
23669     arithmetic operations.  The list of ARCH values is the same as for
23670     '-march'.
23671
23672     When this option is not used, GCC optimizes for the processor
23673     specified by '-march'.  By using '-march' and '-mtune' together, it
23674     is possible to generate code that runs on a family of processors,
23675     but optimize the code for one particular member of that family.
23676
23677     '-mtune' defines the macros '_MIPS_TUNE' and '_MIPS_TUNE_FOO',
23678     which work in the same way as the '-march' ones described above.
23679
23680'-mips1'
23681     Equivalent to '-march=mips1'.
23682
23683'-mips2'
23684     Equivalent to '-march=mips2'.
23685
23686'-mips3'
23687     Equivalent to '-march=mips3'.
23688
23689'-mips4'
23690     Equivalent to '-march=mips4'.
23691
23692'-mips32'
23693     Equivalent to '-march=mips32'.
23694
23695'-mips32r3'
23696     Equivalent to '-march=mips32r3'.
23697
23698'-mips32r5'
23699     Equivalent to '-march=mips32r5'.
23700
23701'-mips32r6'
23702     Equivalent to '-march=mips32r6'.
23703
23704'-mips64'
23705     Equivalent to '-march=mips64'.
23706
23707'-mips64r2'
23708     Equivalent to '-march=mips64r2'.
23709
23710'-mips64r3'
23711     Equivalent to '-march=mips64r3'.
23712
23713'-mips64r5'
23714     Equivalent to '-march=mips64r5'.
23715
23716'-mips64r6'
23717     Equivalent to '-march=mips64r6'.
23718
23719'-mips16'
23720'-mno-mips16'
23721     Generate (do not generate) MIPS16 code.  If GCC is targeting a
23722     MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
23723
23724     MIPS16 code generation can also be controlled on a per-function
23725     basis by means of 'mips16' and 'nomips16' attributes.  *Note
23726     Function Attributes::, for more information.
23727
23728'-mflip-mips16'
23729     Generate MIPS16 code on alternating functions.  This option is
23730     provided for regression testing of mixed MIPS16/non-MIPS16 code
23731     generation, and is not intended for ordinary use in compiling user
23732     code.
23733
23734'-minterlink-compressed'
23735'-mno-interlink-compressed'
23736     Require (do not require) that code using the standard
23737     (uncompressed) MIPS ISA be link-compatible with MIPS16 and
23738     microMIPS code, and vice versa.
23739
23740     For example, code using the standard ISA encoding cannot jump
23741     directly to MIPS16 or microMIPS code; it must either use a call or
23742     an indirect jump.  '-minterlink-compressed' therefore disables
23743     direct jumps unless GCC knows that the target of the jump is not
23744     compressed.
23745
23746'-minterlink-mips16'
23747'-mno-interlink-mips16'
23748     Aliases of '-minterlink-compressed' and
23749     '-mno-interlink-compressed'.  These options predate the microMIPS
23750     ASE and are retained for backwards compatibility.
23751
23752'-mabi=32'
23753'-mabi=o64'
23754'-mabi=n32'
23755'-mabi=64'
23756'-mabi=eabi'
23757     Generate code for the given ABI.
23758
23759     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
23760     generates 64-bit code when you select a 64-bit architecture, but
23761     you can use '-mgp32' to get 32-bit code instead.
23762
23763     For information about the O64 ABI, see
23764     <https://gcc.gnu.org/projects/mipso64-abi.html>.
23765
23766     GCC supports a variant of the o32 ABI in which floating-point
23767     registers are 64 rather than 32 bits wide.  You can select this
23768     combination with '-mabi=32' '-mfp64'.  This ABI relies on the
23769     'mthc1' and 'mfhc1' instructions and is therefore only supported
23770     for MIPS32R2, MIPS32R3 and MIPS32R5 processors.
23771
23772     The register assignments for arguments and return values remain the
23773     same, but each scalar value is passed in a single 64-bit register
23774     rather than a pair of 32-bit registers.  For example, scalar
23775     floating-point values are returned in '$f0' only, not a '$f0'/'$f1'
23776     pair.  The set of call-saved registers also remains the same in
23777     that the even-numbered double-precision registers are saved.
23778
23779     Two additional variants of the o32 ABI are supported to enable a
23780     transition from 32-bit to 64-bit registers.  These are FPXX
23781     ('-mfpxx') and FP64A ('-mfp64' '-mno-odd-spreg').  The FPXX
23782     extension mandates that all code must execute correctly when run
23783     using 32-bit or 64-bit registers.  The code can be interlinked with
23784     either FP32 or FP64, but not both.  The FP64A extension is similar
23785     to the FP64 extension but forbids the use of odd-numbered
23786     single-precision registers.  This can be used in conjunction with
23787     the 'FRE' mode of FPUs in MIPS32R5 processors and allows both FP32
23788     and FP64A code to interlink and run in the same process without
23789     changing FPU modes.
23790
23791'-mabicalls'
23792'-mno-abicalls'
23793     Generate (do not generate) code that is suitable for SVR4-style
23794     dynamic objects.  '-mabicalls' is the default for SVR4-based
23795     systems.
23796
23797'-mshared'
23798'-mno-shared'
23799     Generate (do not generate) code that is fully position-independent,
23800     and that can therefore be linked into shared libraries.  This
23801     option only affects '-mabicalls'.
23802
23803     All '-mabicalls' code has traditionally been position-independent,
23804     regardless of options like '-fPIC' and '-fpic'.  However, as an
23805     extension, the GNU toolchain allows executables to use absolute
23806     accesses for locally-binding symbols.  It can also use shorter GP
23807     initialization sequences and generate direct calls to
23808     locally-defined functions.  This mode is selected by '-mno-shared'.
23809
23810     '-mno-shared' depends on binutils 2.16 or higher and generates
23811     objects that can only be linked by the GNU linker.  However, the
23812     option does not affect the ABI of the final executable; it only
23813     affects the ABI of relocatable objects.  Using '-mno-shared'
23814     generally makes executables both smaller and quicker.
23815
23816     '-mshared' is the default.
23817
23818'-mplt'
23819'-mno-plt'
23820     Assume (do not assume) that the static and dynamic linkers support
23821     PLTs and copy relocations.  This option only affects '-mno-shared
23822     -mabicalls'.  For the n64 ABI, this option has no effect without
23823     '-msym32'.
23824
23825     You can make '-mplt' the default by configuring GCC with
23826     '--with-mips-plt'.  The default is '-mno-plt' otherwise.
23827
23828'-mxgot'
23829'-mno-xgot'
23830     Lift (do not lift) the usual restrictions on the size of the global
23831     offset table.
23832
23833     GCC normally uses a single instruction to load values from the GOT.
23834     While this is relatively efficient, it only works if the GOT is
23835     smaller than about 64k.  Anything larger causes the linker to
23836     report an error such as:
23837
23838          relocation truncated to fit: R_MIPS_GOT16 foobar
23839
23840     If this happens, you should recompile your code with '-mxgot'.
23841     This works with very large GOTs, although the code is also less
23842     efficient, since it takes three instructions to fetch the value of
23843     a global symbol.
23844
23845     Note that some linkers can create multiple GOTs.  If you have such
23846     a linker, you should only need to use '-mxgot' when a single object
23847     file accesses more than 64k's worth of GOT entries.  Very few do.
23848
23849     These options have no effect unless GCC is generating position
23850     independent code.
23851
23852'-mgp32'
23853     Assume that general-purpose registers are 32 bits wide.
23854
23855'-mgp64'
23856     Assume that general-purpose registers are 64 bits wide.
23857
23858'-mfp32'
23859     Assume that floating-point registers are 32 bits wide.
23860
23861'-mfp64'
23862     Assume that floating-point registers are 64 bits wide.
23863
23864'-mfpxx'
23865     Do not assume the width of floating-point registers.
23866
23867'-mhard-float'
23868     Use floating-point coprocessor instructions.
23869
23870'-msoft-float'
23871     Do not use floating-point coprocessor instructions.  Implement
23872     floating-point calculations using library calls instead.
23873
23874'-mno-float'
23875     Equivalent to '-msoft-float', but additionally asserts that the
23876     program being compiled does not perform any floating-point
23877     operations.  This option is presently supported only by some
23878     bare-metal MIPS configurations, where it may select a special set
23879     of libraries that lack all floating-point support (including, for
23880     example, the floating-point 'printf' formats).  If code compiled
23881     with '-mno-float' accidentally contains floating-point operations,
23882     it is likely to suffer a link-time or run-time failure.
23883
23884'-msingle-float'
23885     Assume that the floating-point coprocessor only supports
23886     single-precision operations.
23887
23888'-mdouble-float'
23889     Assume that the floating-point coprocessor supports
23890     double-precision operations.  This is the default.
23891
23892'-modd-spreg'
23893'-mno-odd-spreg'
23894     Enable the use of odd-numbered single-precision floating-point
23895     registers for the o32 ABI. This is the default for processors that
23896     are known to support these registers.  When using the o32 FPXX ABI,
23897     '-mno-odd-spreg' is set by default.
23898
23899'-mabs=2008'
23900'-mabs=legacy'
23901     These options control the treatment of the special not-a-number
23902     (NaN) IEEE 754 floating-point data with the 'abs.fmt' and 'neg.fmt'
23903     machine instructions.
23904
23905     By default or when '-mabs=legacy' is used the legacy treatment is
23906     selected.  In this case these instructions are considered
23907     arithmetic and avoided where correct operation is required and the
23908     input operand might be a NaN. A longer sequence of instructions
23909     that manipulate the sign bit of floating-point datum manually is
23910     used instead unless the '-ffinite-math-only' option has also been
23911     specified.
23912
23913     The '-mabs=2008' option selects the IEEE 754-2008 treatment.  In
23914     this case these instructions are considered non-arithmetic and
23915     therefore operating correctly in all cases, including in particular
23916     where the input operand is a NaN. These instructions are therefore
23917     always used for the respective operations.
23918
23919'-mnan=2008'
23920'-mnan=legacy'
23921     These options control the encoding of the special not-a-number
23922     (NaN) IEEE 754 floating-point data.
23923
23924     The '-mnan=legacy' option selects the legacy encoding.  In this
23925     case quiet NaNs (qNaNs) are denoted by the first bit of their
23926     trailing significand field being 0, whereas signaling NaNs (sNaNs)
23927     are denoted by the first bit of their trailing significand field
23928     being 1.
23929
23930     The '-mnan=2008' option selects the IEEE 754-2008 encoding.  In
23931     this case qNaNs are denoted by the first bit of their trailing
23932     significand field being 1, whereas sNaNs are denoted by the first
23933     bit of their trailing significand field being 0.
23934
23935     The default is '-mnan=legacy' unless GCC has been configured with
23936     '--with-nan=2008'.
23937
23938'-mllsc'
23939'-mno-llsc'
23940     Use (do not use) 'll', 'sc', and 'sync' instructions to implement
23941     atomic memory built-in functions.  When neither option is
23942     specified, GCC uses the instructions if the target architecture
23943     supports them.
23944
23945     '-mllsc' is useful if the runtime environment can emulate the
23946     instructions and '-mno-llsc' can be useful when compiling for
23947     nonstandard ISAs.  You can make either option the default by
23948     configuring GCC with '--with-llsc' and '--without-llsc'
23949     respectively.  '--with-llsc' is the default for some
23950     configurations; see the installation documentation for details.
23951
23952'-mdsp'
23953'-mno-dsp'
23954     Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
23955     Built-in Functions::.  This option defines the preprocessor macro
23956     '__mips_dsp'.  It also defines '__mips_dsp_rev' to 1.
23957
23958'-mdspr2'
23959'-mno-dspr2'
23960     Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
23961     Built-in Functions::.  This option defines the preprocessor macros
23962     '__mips_dsp' and '__mips_dspr2'.  It also defines '__mips_dsp_rev'
23963     to 2.
23964
23965'-msmartmips'
23966'-mno-smartmips'
23967     Use (do not use) the MIPS SmartMIPS ASE.
23968
23969'-mpaired-single'
23970'-mno-paired-single'
23971     Use (do not use) paired-single floating-point instructions.  *Note
23972     MIPS Paired-Single Support::.  This option requires hardware
23973     floating-point support to be enabled.
23974
23975'-mdmx'
23976'-mno-mdmx'
23977     Use (do not use) MIPS Digital Media Extension instructions.  This
23978     option can only be used when generating 64-bit code and requires
23979     hardware floating-point support to be enabled.
23980
23981'-mips3d'
23982'-mno-mips3d'
23983     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
23984     Functions::.  The option '-mips3d' implies '-mpaired-single'.
23985
23986'-mmicromips'
23987'-mno-micromips'
23988     Generate (do not generate) microMIPS code.
23989
23990     MicroMIPS code generation can also be controlled on a per-function
23991     basis by means of 'micromips' and 'nomicromips' attributes.  *Note
23992     Function Attributes::, for more information.
23993
23994'-mmt'
23995'-mno-mt'
23996     Use (do not use) MT Multithreading instructions.
23997
23998'-mmcu'
23999'-mno-mcu'
24000     Use (do not use) the MIPS MCU ASE instructions.
24001
24002'-meva'
24003'-mno-eva'
24004     Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
24005
24006'-mvirt'
24007'-mno-virt'
24008     Use (do not use) the MIPS Virtualization (VZ) instructions.
24009
24010'-mxpa'
24011'-mno-xpa'
24012     Use (do not use) the MIPS eXtended Physical Address (XPA)
24013     instructions.
24014
24015'-mcrc'
24016'-mno-crc'
24017     Use (do not use) the MIPS Cyclic Redundancy Check (CRC)
24018     instructions.
24019
24020'-mginv'
24021'-mno-ginv'
24022     Use (do not use) the MIPS Global INValidate (GINV) instructions.
24023
24024'-mloongson-mmi'
24025'-mno-loongson-mmi'
24026     Use (do not use) the MIPS Loongson MultiMedia extensions
24027     Instructions (MMI).
24028
24029'-mloongson-ext'
24030'-mno-loongson-ext'
24031     Use (do not use) the MIPS Loongson EXTensions (EXT) instructions.
24032
24033'-mloongson-ext2'
24034'-mno-loongson-ext2'
24035     Use (do not use) the MIPS Loongson EXTensions r2 (EXT2)
24036     instructions.
24037
24038'-mlong64'
24039     Force 'long' types to be 64 bits wide.  See '-mlong32' for an
24040     explanation of the default and the way that the pointer size is
24041     determined.
24042
24043'-mlong32'
24044     Force 'long', 'int', and pointer types to be 32 bits wide.
24045
24046     The default size of 'int's, 'long's and pointers depends on the
24047     ABI.  All the supported ABIs use 32-bit 'int's.  The n64 ABI uses
24048     64-bit 'long's, as does the 64-bit EABI; the others use 32-bit
24049     'long's.  Pointers are the same size as 'long's, or the same size
24050     as integer registers, whichever is smaller.
24051
24052'-msym32'
24053'-mno-sym32'
24054     Assume (do not assume) that all symbols have 32-bit values,
24055     regardless of the selected ABI.  This option is useful in
24056     combination with '-mabi=64' and '-mno-abicalls' because it allows
24057     GCC to generate shorter and faster references to symbolic
24058     addresses.
24059
24060'-G NUM'
24061     Put definitions of externally-visible data in a small data section
24062     if that data is no bigger than NUM bytes.  GCC can then generate
24063     more efficient accesses to the data; see '-mgpopt' for details.
24064
24065     The default '-G' option depends on the configuration.
24066
24067'-mlocal-sdata'
24068'-mno-local-sdata'
24069     Extend (do not extend) the '-G' behavior to local data too, such as
24070     to static variables in C.  '-mlocal-sdata' is the default for all
24071     configurations.
24072
24073     If the linker complains that an application is using too much small
24074     data, you might want to try rebuilding the less
24075     performance-critical parts with '-mno-local-sdata'.  You might also
24076     want to build large libraries with '-mno-local-sdata', so that the
24077     libraries leave more room for the main program.
24078
24079'-mextern-sdata'
24080'-mno-extern-sdata'
24081     Assume (do not assume) that externally-defined data is in a small
24082     data section if the size of that data is within the '-G' limit.
24083     '-mextern-sdata' is the default for all configurations.
24084
24085     If you compile a module MOD with '-mextern-sdata' '-G NUM'
24086     '-mgpopt', and MOD references a variable VAR that is no bigger than
24087     NUM bytes, you must make sure that VAR is placed in a small data
24088     section.  If VAR is defined by another module, you must either
24089     compile that module with a high-enough '-G' setting or attach a
24090     'section' attribute to VAR's definition.  If VAR is common, you
24091     must link the application with a high-enough '-G' setting.
24092
24093     The easiest way of satisfying these restrictions is to compile and
24094     link every module with the same '-G' option.  However, you may wish
24095     to build a library that supports several different small data
24096     limits.  You can do this by compiling the library with the highest
24097     supported '-G' setting and additionally using '-mno-extern-sdata'
24098     to stop the library from making assumptions about
24099     externally-defined data.
24100
24101'-mgpopt'
24102'-mno-gpopt'
24103     Use (do not use) GP-relative accesses for symbols that are known to
24104     be in a small data section; see '-G', '-mlocal-sdata' and
24105     '-mextern-sdata'.  '-mgpopt' is the default for all configurations.
24106
24107     '-mno-gpopt' is useful for cases where the '$gp' register might not
24108     hold the value of '_gp'.  For example, if the code is part of a
24109     library that might be used in a boot monitor, programs that call
24110     boot monitor routines pass an unknown value in '$gp'.  (In such
24111     situations, the boot monitor itself is usually compiled with
24112     '-G0'.)
24113
24114     '-mno-gpopt' implies '-mno-local-sdata' and '-mno-extern-sdata'.
24115
24116'-membedded-data'
24117'-mno-embedded-data'
24118     Allocate variables to the read-only data section first if possible,
24119     then next in the small data section if possible, otherwise in data.
24120     This gives slightly slower code than the default, but reduces the
24121     amount of RAM required when executing, and thus may be preferred
24122     for some embedded systems.
24123
24124'-muninit-const-in-rodata'
24125'-mno-uninit-const-in-rodata'
24126     Put uninitialized 'const' variables in the read-only data section.
24127     This option is only meaningful in conjunction with
24128     '-membedded-data'.
24129
24130'-mcode-readable=SETTING'
24131     Specify whether GCC may generate code that reads from executable
24132     sections.  There are three possible settings:
24133
24134     '-mcode-readable=yes'
24135          Instructions may freely access executable sections.  This is
24136          the default setting.
24137
24138     '-mcode-readable=pcrel'
24139          MIPS16 PC-relative load instructions can access executable
24140          sections, but other instructions must not do so.  This option
24141          is useful on 4KSc and 4KSd processors when the code TLBs have
24142          the Read Inhibit bit set.  It is also useful on processors
24143          that can be configured to have a dual instruction/data SRAM
24144          interface and that, like the M4K, automatically redirect
24145          PC-relative loads to the instruction RAM.
24146
24147     '-mcode-readable=no'
24148          Instructions must not access executable sections.  This option
24149          can be useful on targets that are configured to have a dual
24150          instruction/data SRAM interface but that (unlike the M4K) do
24151          not automatically redirect PC-relative loads to the
24152          instruction RAM.
24153
24154'-msplit-addresses'
24155'-mno-split-addresses'
24156     Enable (disable) use of the '%hi()' and '%lo()' assembler
24157     relocation operators.  This option has been superseded by
24158     '-mexplicit-relocs' but is retained for backwards compatibility.
24159
24160'-mexplicit-relocs'
24161'-mno-explicit-relocs'
24162     Use (do not use) assembler relocation operators when dealing with
24163     symbolic addresses.  The alternative, selected by
24164     '-mno-explicit-relocs', is to use assembler macros instead.
24165
24166     '-mexplicit-relocs' is the default if GCC was configured to use an
24167     assembler that supports relocation operators.
24168
24169'-mcheck-zero-division'
24170'-mno-check-zero-division'
24171     Trap (do not trap) on integer division by zero.
24172
24173     The default is '-mcheck-zero-division'.
24174
24175'-mdivide-traps'
24176'-mdivide-breaks'
24177     MIPS systems check for division by zero by generating either a
24178     conditional trap or a break instruction.  Using traps results in
24179     smaller code, but is only supported on MIPS II and later.  Also,
24180     some versions of the Linux kernel have a bug that prevents trap
24181     from generating the proper signal ('SIGFPE').  Use '-mdivide-traps'
24182     to allow conditional traps on architectures that support them and
24183     '-mdivide-breaks' to force the use of breaks.
24184
24185     The default is usually '-mdivide-traps', but this can be overridden
24186     at configure time using '--with-divide=breaks'.  Divide-by-zero
24187     checks can be completely disabled using '-mno-check-zero-division'.
24188
24189'-mload-store-pairs'
24190'-mno-load-store-pairs'
24191     Enable (disable) an optimization that pairs consecutive load or
24192     store instructions to enable load/store bonding.  This option is
24193     enabled by default but only takes effect when the selected
24194     architecture is known to support bonding.
24195
24196'-munaligned-access'
24197'-mno-unaligned-access'
24198     Enable (disable) direct unaligned access for MIPS Release 6.
24199     MIPSr6 requires load/store unaligned-access support, by hardware or
24200     trap&emulate.  So '-mno-unaligned-access' may be needed by kernel.
24201
24202'-mmemcpy'
24203'-mno-memcpy'
24204     Force (do not force) the use of 'memcpy' for non-trivial block
24205     moves.  The default is '-mno-memcpy', which allows GCC to inline
24206     most constant-sized copies.
24207
24208'-mlong-calls'
24209'-mno-long-calls'
24210     Disable (do not disable) use of the 'jal' instruction.  Calling
24211     functions using 'jal' is more efficient but requires the caller and
24212     callee to be in the same 256 megabyte segment.
24213
24214     This option has no effect on abicalls code.  The default is
24215     '-mno-long-calls'.
24216
24217'-mmad'
24218'-mno-mad'
24219     Enable (disable) use of the 'mad', 'madu' and 'mul' instructions,
24220     as provided by the R4650 ISA.
24221
24222'-mimadd'
24223'-mno-imadd'
24224     Enable (disable) use of the 'madd' and 'msub' integer instructions.
24225     The default is '-mimadd' on architectures that support 'madd' and
24226     'msub' except for the 74k architecture where it was found to
24227     generate slower code.
24228
24229'-mfused-madd'
24230'-mno-fused-madd'
24231     Enable (disable) use of the floating-point multiply-accumulate
24232     instructions, when they are available.  The default is
24233     '-mfused-madd'.
24234
24235     On the R8000 CPU when multiply-accumulate instructions are used,
24236     the intermediate product is calculated to infinite precision and is
24237     not subject to the FCSR Flush to Zero bit.  This may be undesirable
24238     in some circumstances.  On other processors the result is
24239     numerically identical to the equivalent computation using separate
24240     multiply, add, subtract and negate instructions.
24241
24242'-nocpp'
24243     Tell the MIPS assembler to not run its preprocessor over user
24244     assembler files (with a '.s' suffix) when assembling them.
24245
24246'-mfix-24k'
24247'-mno-fix-24k'
24248     Work around the 24K E48 (lost data on stores during refill) errata.
24249     The workarounds are implemented by the assembler rather than by
24250     GCC.
24251
24252'-mfix-r4000'
24253'-mno-fix-r4000'
24254     Work around certain R4000 CPU errata:
24255        - A double-word or a variable shift may give an incorrect result
24256          if executed immediately after starting an integer division.
24257        - A double-word or a variable shift may give an incorrect result
24258          if executed while an integer multiplication is in progress.
24259        - An integer division may give an incorrect result if started in
24260          a delay slot of a taken branch or a jump.
24261
24262'-mfix-r4400'
24263'-mno-fix-r4400'
24264     Work around certain R4400 CPU errata:
24265        - A double-word or a variable shift may give an incorrect result
24266          if executed immediately after starting an integer division.
24267
24268'-mfix-r10000'
24269'-mno-fix-r10000'
24270     Work around certain R10000 errata:
24271        - 'll'/'sc' sequences may not behave atomically on revisions
24272          prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
24273
24274     This option can only be used if the target architecture supports
24275     branch-likely instructions.  '-mfix-r10000' is the default when
24276     '-march=r10000' is used; '-mno-fix-r10000' is the default
24277     otherwise.
24278
24279'-mfix-r5900'
24280'-mno-fix-r5900'
24281     Do not attempt to schedule the preceding instruction into the delay
24282     slot of a branch instruction placed at the end of a short loop of
24283     six instructions or fewer and always schedule a 'nop' instruction
24284     there instead.  The short loop bug under certain conditions causes
24285     loops to execute only once or twice, due to a hardware bug in the
24286     R5900 chip.  The workaround is implemented by the assembler rather
24287     than by GCC.
24288
24289'-mfix-rm7000'
24290'-mno-fix-rm7000'
24291     Work around the RM7000 'dmult'/'dmultu' errata.  The workarounds
24292     are implemented by the assembler rather than by GCC.
24293
24294'-mfix-vr4120'
24295'-mno-fix-vr4120'
24296     Work around certain VR4120 errata:
24297        - 'dmultu' does not always produce the correct result.
24298        - 'div' and 'ddiv' do not always produce the correct result if
24299          one of the operands is negative.
24300     The workarounds for the division errata rely on special functions
24301     in 'libgcc.a'.  At present, these functions are only provided by
24302     the 'mips64vr*-elf' configurations.
24303
24304     Other VR4120 errata require a NOP to be inserted between certain
24305     pairs of instructions.  These errata are handled by the assembler,
24306     not by GCC itself.
24307
24308'-mfix-vr4130'
24309     Work around the VR4130 'mflo'/'mfhi' errata.  The workarounds are
24310     implemented by the assembler rather than by GCC, although GCC
24311     avoids using 'mflo' and 'mfhi' if the VR4130 'macc', 'macchi',
24312     'dmacc' and 'dmacchi' instructions are available instead.
24313
24314'-mfix-sb1'
24315'-mno-fix-sb1'
24316     Work around certain SB-1 CPU core errata.  (This flag currently
24317     works around the SB-1 revision 2 "F1" and "F2" floating-point
24318     errata.)
24319
24320'-mr10k-cache-barrier=SETTING'
24321     Specify whether GCC should insert cache barriers to avoid the side
24322     effects of speculation on R10K processors.
24323
24324     In common with many processors, the R10K tries to predict the
24325     outcome of a conditional branch and speculatively executes
24326     instructions from the "taken" branch.  It later aborts these
24327     instructions if the predicted outcome is wrong.  However, on the
24328     R10K, even aborted instructions can have side effects.
24329
24330     This problem only affects kernel stores and, depending on the
24331     system, kernel loads.  As an example, a speculatively-executed
24332     store may load the target memory into cache and mark the cache line
24333     as dirty, even if the store itself is later aborted.  If a DMA
24334     operation writes to the same area of memory before the "dirty" line
24335     is flushed, the cached data overwrites the DMA-ed data.  See the
24336     R10K processor manual for a full description, including other
24337     potential problems.
24338
24339     One workaround is to insert cache barrier instructions before every
24340     memory access that might be speculatively executed and that might
24341     have side effects even if aborted.  '-mr10k-cache-barrier=SETTING'
24342     controls GCC's implementation of this workaround.  It assumes that
24343     aborted accesses to any byte in the following regions does not have
24344     side effects:
24345
24346       1. the memory occupied by the current function's stack frame;
24347
24348       2. the memory occupied by an incoming stack argument;
24349
24350       3. the memory occupied by an object with a link-time-constant
24351          address.
24352
24353     It is the kernel's responsibility to ensure that speculative
24354     accesses to these regions are indeed safe.
24355
24356     If the input program contains a function declaration such as:
24357
24358          void foo (void);
24359
24360     then the implementation of 'foo' must allow 'j foo' and 'jal foo'
24361     to be executed speculatively.  GCC honors this restriction for
24362     functions it compiles itself.  It expects non-GCC functions (such
24363     as hand-written assembly code) to do the same.
24364
24365     The option has three forms:
24366
24367     '-mr10k-cache-barrier=load-store'
24368          Insert a cache barrier before a load or store that might be
24369          speculatively executed and that might have side effects even
24370          if aborted.
24371
24372     '-mr10k-cache-barrier=store'
24373          Insert a cache barrier before a store that might be
24374          speculatively executed and that might have side effects even
24375          if aborted.
24376
24377     '-mr10k-cache-barrier=none'
24378          Disable the insertion of cache barriers.  This is the default
24379          setting.
24380
24381'-mflush-func=FUNC'
24382'-mno-flush-func'
24383     Specifies the function to call to flush the I and D caches, or to
24384     not call any such function.  If called, the function must take the
24385     same arguments as the common '_flush_func', that is, the address of
24386     the memory range for which the cache is being flushed, the size of
24387     the memory range, and the number 3 (to flush both caches).  The
24388     default depends on the target GCC was configured for, but commonly
24389     is either '_flush_func' or '__cpu_flush'.
24390
24391'mbranch-cost=NUM'
24392     Set the cost of branches to roughly NUM "simple" instructions.
24393     This cost is only a heuristic and is not guaranteed to produce
24394     consistent results across releases.  A zero cost redundantly
24395     selects the default, which is based on the '-mtune' setting.
24396
24397'-mbranch-likely'
24398'-mno-branch-likely'
24399     Enable or disable use of Branch Likely instructions, regardless of
24400     the default for the selected architecture.  By default, Branch
24401     Likely instructions may be generated if they are supported by the
24402     selected architecture.  An exception is for the MIPS32 and MIPS64
24403     architectures and processors that implement those architectures;
24404     for those, Branch Likely instructions are not be generated by
24405     default because the MIPS32 and MIPS64 architectures specifically
24406     deprecate their use.
24407
24408'-mcompact-branches=never'
24409'-mcompact-branches=optimal'
24410'-mcompact-branches=always'
24411     These options control which form of branches will be generated.
24412     The default is '-mcompact-branches=optimal'.
24413
24414     The '-mcompact-branches=never' option ensures that compact branch
24415     instructions will never be generated.
24416
24417     The '-mcompact-branches=always' option ensures that a compact
24418     branch instruction will be generated if available.  If a compact
24419     branch instruction is not available, a delay slot form of the
24420     branch will be used instead.
24421
24422     This option is supported from MIPS Release 6 onwards.
24423
24424     The '-mcompact-branches=optimal' option will cause a delay slot
24425     branch to be used if one is available in the current ISA and the
24426     delay slot is successfully filled.  If the delay slot is not
24427     filled, a compact branch will be chosen if one is available.
24428
24429'-mfp-exceptions'
24430'-mno-fp-exceptions'
24431     Specifies whether FP exceptions are enabled.  This affects how FP
24432     instructions are scheduled for some processors.  The default is
24433     that FP exceptions are enabled.
24434
24435     For instance, on the SB-1, if FP exceptions are disabled, and we
24436     are emitting 64-bit code, then we can use both FP pipes.
24437     Otherwise, we can only use one FP pipe.
24438
24439'-mvr4130-align'
24440'-mno-vr4130-align'
24441     The VR4130 pipeline is two-way superscalar, but can only issue two
24442     instructions together if the first one is 8-byte aligned.  When
24443     this option is enabled, GCC aligns pairs of instructions that it
24444     thinks should execute in parallel.
24445
24446     This option only has an effect when optimizing for the VR4130.  It
24447     normally makes code faster, but at the expense of making it bigger.
24448     It is enabled by default at optimization level '-O3'.
24449
24450'-msynci'
24451'-mno-synci'
24452     Enable (disable) generation of 'synci' instructions on
24453     architectures that support it.  The 'synci' instructions (if
24454     enabled) are generated when '__builtin___clear_cache' is compiled.
24455
24456     This option defaults to '-mno-synci', but the default can be
24457     overridden by configuring GCC with '--with-synci'.
24458
24459     When compiling code for single processor systems, it is generally
24460     safe to use 'synci'.  However, on many multi-core (SMP) systems, it
24461     does not invalidate the instruction caches on all cores and may
24462     lead to undefined behavior.
24463
24464'-mrelax-pic-calls'
24465'-mno-relax-pic-calls'
24466     Try to turn PIC calls that are normally dispatched via register
24467     '$25' into direct calls.  This is only possible if the linker can
24468     resolve the destination at link time and if the destination is
24469     within range for a direct call.
24470
24471     '-mrelax-pic-calls' is the default if GCC was configured to use an
24472     assembler and a linker that support the '.reloc' assembly directive
24473     and '-mexplicit-relocs' is in effect.  With '-mno-explicit-relocs',
24474     this optimization can be performed by the assembler and the linker
24475     alone without help from the compiler.
24476
24477'-mmcount-ra-address'
24478'-mno-mcount-ra-address'
24479     Emit (do not emit) code that allows '_mcount' to modify the calling
24480     function's return address.  When enabled, this option extends the
24481     usual '_mcount' interface with a new RA-ADDRESS parameter, which
24482     has type 'intptr_t *' and is passed in register '$12'.  '_mcount'
24483     can then modify the return address by doing both of the following:
24484        * Returning the new address in register '$31'.
24485        * Storing the new address in '*RA-ADDRESS', if RA-ADDRESS is
24486          nonnull.
24487
24488     The default is '-mno-mcount-ra-address'.
24489
24490'-mframe-header-opt'
24491'-mno-frame-header-opt'
24492     Enable (disable) frame header optimization in the o32 ABI. When
24493     using the o32 ABI, calling functions will allocate 16 bytes on the
24494     stack for the called function to write out register arguments.
24495     When enabled, this optimization will suppress the allocation of the
24496     frame header if it can be determined that it is unused.
24497
24498     This optimization is off by default at all optimization levels.
24499
24500'-mlxc1-sxc1'
24501'-mno-lxc1-sxc1'
24502     When applicable, enable (disable) the generation of 'lwxc1',
24503     'swxc1', 'ldxc1', 'sdxc1' instructions.  Enabled by default.
24504
24505'-mmadd4'
24506'-mno-madd4'
24507     When applicable, enable (disable) the generation of 4-operand
24508     'madd.s', 'madd.d' and related instructions.  Enabled by default.
24509
24510
24511File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
24512
245133.19.31 MMIX Options
24514--------------------
24515
24516These options are defined for the MMIX:
24517
24518'-mlibfuncs'
24519'-mno-libfuncs'
24520     Specify that intrinsic library functions are being compiled,
24521     passing all values in registers, no matter the size.
24522
24523'-mepsilon'
24524'-mno-epsilon'
24525     Generate floating-point comparison instructions that compare with
24526     respect to the 'rE' epsilon register.
24527
24528'-mabi=mmixware'
24529'-mabi=gnu'
24530     Generate code that passes function parameters and return values
24531     that (in the called function) are seen as registers '$0' and up, as
24532     opposed to the GNU ABI which uses global registers '$231' and up.
24533
24534'-mzero-extend'
24535'-mno-zero-extend'
24536     When reading data from memory in sizes shorter than 64 bits, use
24537     (do not use) zero-extending load instructions by default, rather
24538     than sign-extending ones.
24539
24540'-mknuthdiv'
24541'-mno-knuthdiv'
24542     Make the result of a division yielding a remainder have the same
24543     sign as the divisor.  With the default, '-mno-knuthdiv', the sign
24544     of the remainder follows the sign of the dividend.  Both methods
24545     are arithmetically valid, the latter being almost exclusively used.
24546
24547'-mtoplevel-symbols'
24548'-mno-toplevel-symbols'
24549     Prepend (do not prepend) a ':' to all global symbols, so the
24550     assembly code can be used with the 'PREFIX' assembly directive.
24551
24552'-melf'
24553     Generate an executable in the ELF format, rather than the default
24554     'mmo' format used by the 'mmix' simulator.
24555
24556'-mbranch-predict'
24557'-mno-branch-predict'
24558     Use (do not use) the probable-branch instructions, when static
24559     branch prediction indicates a probable branch.
24560
24561'-mbase-addresses'
24562'-mno-base-addresses'
24563     Generate (do not generate) code that uses _base addresses_.  Using
24564     a base address automatically generates a request (handled by the
24565     assembler and the linker) for a constant to be set up in a global
24566     register.  The register is used for one or more base address
24567     requests within the range 0 to 255 from the value held in the
24568     register.  The generally leads to short and fast code, but the
24569     number of different data items that can be addressed is limited.
24570     This means that a program that uses lots of static data may require
24571     '-mno-base-addresses'.
24572
24573'-msingle-exit'
24574'-mno-single-exit'
24575     Force (do not force) generated code to have a single exit point in
24576     each function.
24577
24578
24579File: gcc.info,  Node: MN10300 Options,  Next: Moxie Options,  Prev: MMIX Options,  Up: Submodel Options
24580
245813.19.32 MN10300 Options
24582-----------------------
24583
24584These '-m' options are defined for Matsushita MN10300 architectures:
24585
24586'-mmult-bug'
24587     Generate code to avoid bugs in the multiply instructions for the
24588     MN10300 processors.  This is the default.
24589
24590'-mno-mult-bug'
24591     Do not generate code to avoid bugs in the multiply instructions for
24592     the MN10300 processors.
24593
24594'-mam33'
24595     Generate code using features specific to the AM33 processor.
24596
24597'-mno-am33'
24598     Do not generate code using features specific to the AM33 processor.
24599     This is the default.
24600
24601'-mam33-2'
24602     Generate code using features specific to the AM33/2.0 processor.
24603
24604'-mam34'
24605     Generate code using features specific to the AM34 processor.
24606
24607'-mtune=CPU-TYPE'
24608     Use the timing characteristics of the indicated CPU type when
24609     scheduling instructions.  This does not change the targeted
24610     processor type.  The CPU type must be one of 'mn10300', 'am33',
24611     'am33-2' or 'am34'.
24612
24613'-mreturn-pointer-on-d0'
24614     When generating a function that returns a pointer, return the
24615     pointer in both 'a0' and 'd0'.  Otherwise, the pointer is returned
24616     only in 'a0', and attempts to call such functions without a
24617     prototype result in errors.  Note that this option is on by
24618     default; use '-mno-return-pointer-on-d0' to disable it.
24619
24620'-mno-crt0'
24621     Do not link in the C run-time initialization object file.
24622
24623'-mrelax'
24624     Indicate to the linker that it should perform a relaxation
24625     optimization pass to shorten branches, calls and absolute memory
24626     addresses.  This option only has an effect when used on the command
24627     line for the final link step.
24628
24629     This option makes symbolic debugging impossible.
24630
24631'-mliw'
24632     Allow the compiler to generate _Long Instruction Word_ instructions
24633     if the target is the 'AM33' or later.  This is the default.  This
24634     option defines the preprocessor macro '__LIW__'.
24635
24636'-mno-liw'
24637     Do not allow the compiler to generate _Long Instruction Word_
24638     instructions.  This option defines the preprocessor macro
24639     '__NO_LIW__'.
24640
24641'-msetlb'
24642     Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
24643     if the target is the 'AM33' or later.  This is the default.  This
24644     option defines the preprocessor macro '__SETLB__'.
24645
24646'-mno-setlb'
24647     Do not allow the compiler to generate _SETLB_ or _Lcc_
24648     instructions.  This option defines the preprocessor macro
24649     '__NO_SETLB__'.
24650
24651
24652File: gcc.info,  Node: Moxie Options,  Next: MSP430 Options,  Prev: MN10300 Options,  Up: Submodel Options
24653
246543.19.33 Moxie Options
24655---------------------
24656
24657'-meb'
24658     Generate big-endian code.  This is the default for 'moxie-*-*'
24659     configurations.
24660
24661'-mel'
24662     Generate little-endian code.
24663
24664'-mmul.x'
24665     Generate mul.x and umul.x instructions.  This is the default for
24666     'moxiebox-*-*' configurations.
24667
24668'-mno-crt0'
24669     Do not link in the C run-time initialization object file.
24670
24671
24672File: gcc.info,  Node: MSP430 Options,  Next: NDS32 Options,  Prev: Moxie Options,  Up: Submodel Options
24673
246743.19.34 MSP430 Options
24675----------------------
24676
24677These options are defined for the MSP430:
24678
24679'-masm-hex'
24680     Force assembly output to always use hex constants.  Normally such
24681     constants are signed decimals, but this option is available for
24682     testsuite and/or aesthetic purposes.
24683
24684'-mmcu='
24685     Select the MCU to target.  This is used to create a C preprocessor
24686     symbol based upon the MCU name, converted to upper case and pre-
24687     and post-fixed with '__'.  This in turn is used by the 'msp430.h'
24688     header file to select an MCU-specific supplementary header file.
24689
24690     The option also sets the ISA to use.  If the MCU name is one that
24691     is known to only support the 430 ISA then that is selected,
24692     otherwise the 430X ISA is selected.  A generic MCU name of 'msp430'
24693     can also be used to select the 430 ISA. Similarly the generic
24694     'msp430x' MCU name selects the 430X ISA.
24695
24696     In addition an MCU-specific linker script is added to the linker
24697     command line.  The script's name is the name of the MCU with '.ld'
24698     appended.  Thus specifying '-mmcu=xxx' on the 'gcc' command line
24699     defines the C preprocessor symbol '__XXX__' and cause the linker to
24700     search for a script called 'xxx.ld'.
24701
24702     The ISA and hardware multiply supported for the different MCUs is
24703     hard-coded into GCC. However, an external 'devices.csv' file can be
24704     used to extend device support beyond those that have been
24705     hard-coded.
24706
24707     GCC searches for the 'devices.csv' file using the following methods
24708     in the given precedence order, where the first method takes
24709     precendence over the second which takes precedence over the third.
24710
24711     Include path specified with '-I' and '-L'
24712          'devices.csv' will be searched for in each of the directories
24713          specified by include paths and linker library search paths.
24714     Path specified by the environment variable 'MSP430_GCC_INCLUDE_DIR'
24715          Define the value of the global environment variable
24716          'MSP430_GCC_INCLUDE_DIR' to the full path to the directory
24717          containing devices.csv, and GCC will search this directory for
24718          devices.csv.  If devices.csv is found, this directory will
24719          also be registered as an include path, and linker library
24720          path.  Header files and linker scripts in this directory can
24721          therefore be used without manually specifying '-I' and '-L' on
24722          the command line.
24723     The 'msp430-elf{,bare}/include/devices' directory
24724          Finally, GCC will examine 'msp430-elf{,bare}/include/devices'
24725          from the toolchain root directory.  This directory does not
24726          exist in a default installation, but if the user has created
24727          it and copied 'devices.csv' there, then the MCU data will be
24728          read.  As above, this directory will also be registered as an
24729          include path, and linker library path.
24730
24731     If none of the above search methods find 'devices.csv', then the
24732     hard-coded MCU data is used.
24733
24734'-mwarn-mcu'
24735'-mno-warn-mcu'
24736     This option enables or disables warnings about conflicts between
24737     the MCU name specified by the '-mmcu' option and the ISA set by the
24738     '-mcpu' option and/or the hardware multiply support set by the
24739     '-mhwmult' option.  It also toggles warnings about unrecognized MCU
24740     names.  This option is on by default.
24741
24742'-mcpu='
24743     Specifies the ISA to use.  Accepted values are 'msp430', 'msp430x'
24744     and 'msp430xv2'.  This option is deprecated.  The '-mmcu=' option
24745     should be used to select the ISA.
24746
24747'-msim'
24748     Link to the simulator runtime libraries and linker script.
24749     Overrides any scripts that would be selected by the '-mmcu='
24750     option.
24751
24752'-mlarge'
24753     Use large-model addressing (20-bit pointers, 20-bit 'size_t').
24754
24755'-msmall'
24756     Use small-model addressing (16-bit pointers, 16-bit 'size_t').
24757
24758'-mrelax'
24759     This option is passed to the assembler and linker, and allows the
24760     linker to perform certain optimizations that cannot be done until
24761     the final link.
24762
24763'mhwmult='
24764     Describes the type of hardware multiply supported by the target.
24765     Accepted values are 'none' for no hardware multiply, '16bit' for
24766     the original 16-bit-only multiply supported by early MCUs.  '32bit'
24767     for the 16/32-bit multiply supported by later MCUs and 'f5series'
24768     for the 16/32-bit multiply supported by F5-series MCUs.  A value of
24769     'auto' can also be given.  This tells GCC to deduce the hardware
24770     multiply support based upon the MCU name provided by the '-mmcu'
24771     option.  If no '-mmcu' option is specified or if the MCU name is
24772     not recognized then no hardware multiply support is assumed.
24773     'auto' is the default setting.
24774
24775     Hardware multiplies are normally performed by calling a library
24776     routine.  This saves space in the generated code.  When compiling
24777     at '-O3' or higher however the hardware multiplier is invoked
24778     inline.  This makes for bigger, but faster code.
24779
24780     The hardware multiply routines disable interrupts whilst running
24781     and restore the previous interrupt state when they finish.  This
24782     makes them safe to use inside interrupt handlers as well as in
24783     normal code.
24784
24785'-minrt'
24786     Enable the use of a minimum runtime environment - no static
24787     initializers or constructors.  This is intended for
24788     memory-constrained devices.  The compiler includes special symbols
24789     in some objects that tell the linker and runtime which code
24790     fragments are required.
24791
24792'-mtiny-printf'
24793     Enable reduced code size 'printf' and 'puts' library functions.
24794     The 'tiny' implementations of these functions are not reentrant, so
24795     must be used with caution in multi-threaded applications.
24796
24797     Support for streams has been removed and the string to be printed
24798     will always be sent to stdout via the 'write' syscall.  The string
24799     is not buffered before it is sent to write.
24800
24801     This option requires Newlib Nano IO, so GCC must be configured with
24802     '--enable-newlib-nano-formatted-io'.
24803
24804'-mmax-inline-shift='
24805     This option takes an integer between 0 and 64 inclusive, and sets
24806     the maximum number of inline shift instructions which should be
24807     emitted to perform a shift operation by a constant amount.  When
24808     this value needs to be exceeded, an mspabi helper function is used
24809     instead.  The default value is 4.
24810
24811     This only affects cases where a shift by multiple positions cannot
24812     be completed with a single instruction (e.g.  all shifts >1 on the
24813     430 ISA).
24814
24815     Shifts of a 32-bit value are at least twice as costly, so the value
24816     passed for this option is divided by 2 and the resulting value used
24817     instead.
24818
24819'-mcode-region='
24820'-mdata-region='
24821     These options tell the compiler where to place functions and data
24822     that do not have one of the 'lower', 'upper', 'either' or 'section'
24823     attributes.  Possible values are 'lower', 'upper', 'either' or
24824     'any'.  The first three behave like the corresponding attribute.
24825     The fourth possible value - 'any' - is the default.  It leaves
24826     placement entirely up to the linker script and how it assigns the
24827     standard sections ('.text', '.data', etc) to the memory regions.
24828
24829'-msilicon-errata='
24830     This option passes on a request to assembler to enable the fixes
24831     for the named silicon errata.
24832
24833'-msilicon-errata-warn='
24834     This option passes on a request to the assembler to enable warning
24835     messages when a silicon errata might need to be applied.
24836
24837'-mwarn-devices-csv'
24838'-mno-warn-devices-csv'
24839     Warn if 'devices.csv' is not found or there are problem parsing it
24840     (default: on).
24841
24842
24843File: gcc.info,  Node: NDS32 Options,  Next: Nios II Options,  Prev: MSP430 Options,  Up: Submodel Options
24844
248453.19.35 NDS32 Options
24846---------------------
24847
24848These options are defined for NDS32 implementations:
24849
24850'-mbig-endian'
24851     Generate code in big-endian mode.
24852
24853'-mlittle-endian'
24854     Generate code in little-endian mode.
24855
24856'-mreduced-regs'
24857     Use reduced-set registers for register allocation.
24858
24859'-mfull-regs'
24860     Use full-set registers for register allocation.
24861
24862'-mcmov'
24863     Generate conditional move instructions.
24864
24865'-mno-cmov'
24866     Do not generate conditional move instructions.
24867
24868'-mext-perf'
24869     Generate performance extension instructions.
24870
24871'-mno-ext-perf'
24872     Do not generate performance extension instructions.
24873
24874'-mext-perf2'
24875     Generate performance extension 2 instructions.
24876
24877'-mno-ext-perf2'
24878     Do not generate performance extension 2 instructions.
24879
24880'-mext-string'
24881     Generate string extension instructions.
24882
24883'-mno-ext-string'
24884     Do not generate string extension instructions.
24885
24886'-mv3push'
24887     Generate v3 push25/pop25 instructions.
24888
24889'-mno-v3push'
24890     Do not generate v3 push25/pop25 instructions.
24891
24892'-m16-bit'
24893     Generate 16-bit instructions.
24894
24895'-mno-16-bit'
24896     Do not generate 16-bit instructions.
24897
24898'-misr-vector-size=NUM'
24899     Specify the size of each interrupt vector, which must be 4 or 16.
24900
24901'-mcache-block-size=NUM'
24902     Specify the size of each cache block, which must be a power of 2
24903     between 4 and 512.
24904
24905'-march=ARCH'
24906     Specify the name of the target architecture.
24907
24908'-mcmodel=CODE-MODEL'
24909     Set the code model to one of
24910     'small'
24911          All the data and read-only data segments must be within 512KB
24912          addressing space.  The text segment must be within 16MB
24913          addressing space.
24914     'medium'
24915          The data segment must be within 512KB while the read-only data
24916          segment can be within 4GB addressing space.  The text segment
24917          should be still within 16MB addressing space.
24918     'large'
24919          All the text and data segments can be within 4GB addressing
24920          space.
24921
24922'-mctor-dtor'
24923     Enable constructor/destructor feature.
24924
24925'-mrelax'
24926     Guide linker to relax instructions.
24927
24928
24929File: gcc.info,  Node: Nios II Options,  Next: Nvidia PTX Options,  Prev: NDS32 Options,  Up: Submodel Options
24930
249313.19.36 Nios II Options
24932-----------------------
24933
24934These are the options defined for the Altera Nios II processor.
24935
24936'-G NUM'
24937     Put global and static objects less than or equal to NUM bytes into
24938     the small data or BSS sections instead of the normal data or BSS
24939     sections.  The default value of NUM is 8.
24940
24941'-mgpopt=OPTION'
24942'-mgpopt'
24943'-mno-gpopt'
24944     Generate (do not generate) GP-relative accesses.  The following
24945     OPTION names are recognized:
24946
24947     'none'
24948          Do not generate GP-relative accesses.
24949
24950     'local'
24951          Generate GP-relative accesses for small data objects that are
24952          not external, weak, or uninitialized common symbols.  Also use
24953          GP-relative addressing for objects that have been explicitly
24954          placed in a small data section via a 'section' attribute.
24955
24956     'global'
24957          As for 'local', but also generate GP-relative accesses for
24958          small data objects that are external, weak, or common.  If you
24959          use this option, you must ensure that all parts of your
24960          program (including libraries) are compiled with the same '-G'
24961          setting.
24962
24963     'data'
24964          Generate GP-relative accesses for all data objects in the
24965          program.  If you use this option, the entire data and BSS
24966          segments of your program must fit in 64K of memory and you
24967          must use an appropriate linker script to allocate them within
24968          the addressable range of the global pointer.
24969
24970     'all'
24971          Generate GP-relative addresses for function pointers as well
24972          as data pointers.  If you use this option, the entire text,
24973          data, and BSS segments of your program must fit in 64K of
24974          memory and you must use an appropriate linker script to
24975          allocate them within the addressable range of the global
24976          pointer.
24977
24978     '-mgpopt' is equivalent to '-mgpopt=local', and '-mno-gpopt' is
24979     equivalent to '-mgpopt=none'.
24980
24981     The default is '-mgpopt' except when '-fpic' or '-fPIC' is
24982     specified to generate position-independent code.  Note that the
24983     Nios II ABI does not permit GP-relative accesses from shared
24984     libraries.
24985
24986     You may need to specify '-mno-gpopt' explicitly when building
24987     programs that include large amounts of small data, including large
24988     GOT data sections.  In this case, the 16-bit offset for GP-relative
24989     addressing may not be large enough to allow access to the entire
24990     small data section.
24991
24992'-mgprel-sec=REGEXP'
24993     This option specifies additional section names that can be accessed
24994     via GP-relative addressing.  It is most useful in conjunction with
24995     'section' attributes on variable declarations (*note Common
24996     Variable Attributes::) and a custom linker script.  The REGEXP is a
24997     POSIX Extended Regular Expression.
24998
24999     This option does not affect the behavior of the '-G' option, and
25000     the specified sections are in addition to the standard '.sdata' and
25001     '.sbss' small-data sections that are recognized by '-mgpopt'.
25002
25003'-mr0rel-sec=REGEXP'
25004     This option specifies names of sections that can be accessed via a
25005     16-bit offset from 'r0'; that is, in the low 32K or high 32K of the
25006     32-bit address space.  It is most useful in conjunction with
25007     'section' attributes on variable declarations (*note Common
25008     Variable Attributes::) and a custom linker script.  The REGEXP is a
25009     POSIX Extended Regular Expression.
25010
25011     In contrast to the use of GP-relative addressing for small data,
25012     zero-based addressing is never generated by default and there are
25013     no conventional section names used in standard linker scripts for
25014     sections in the low or high areas of memory.
25015
25016'-mel'
25017'-meb'
25018     Generate little-endian (default) or big-endian (experimental) code,
25019     respectively.
25020
25021'-march=ARCH'
25022     This specifies the name of the target Nios II architecture.  GCC
25023     uses this name to determine what kind of instructions it can emit
25024     when generating assembly code.  Permissible names are: 'r1', 'r2'.
25025
25026     The preprocessor macro '__nios2_arch__' is available to programs,
25027     with value 1 or 2, indicating the targeted ISA level.
25028
25029'-mbypass-cache'
25030'-mno-bypass-cache'
25031     Force all load and store instructions to always bypass cache by
25032     using I/O variants of the instructions.  The default is not to
25033     bypass the cache.
25034
25035'-mno-cache-volatile'
25036'-mcache-volatile'
25037     Volatile memory access bypass the cache using the I/O variants of
25038     the load and store instructions.  The default is not to bypass the
25039     cache.
25040
25041'-mno-fast-sw-div'
25042'-mfast-sw-div'
25043     Do not use table-based fast divide for small numbers.  The default
25044     is to use the fast divide at '-O3' and above.
25045
25046'-mno-hw-mul'
25047'-mhw-mul'
25048'-mno-hw-mulx'
25049'-mhw-mulx'
25050'-mno-hw-div'
25051'-mhw-div'
25052     Enable or disable emitting 'mul', 'mulx' and 'div' family of
25053     instructions by the compiler.  The default is to emit 'mul' and not
25054     emit 'div' and 'mulx'.
25055
25056'-mbmx'
25057'-mno-bmx'
25058'-mcdx'
25059'-mno-cdx'
25060     Enable or disable generation of Nios II R2 BMX (bit manipulation)
25061     and CDX (code density) instructions.  Enabling these instructions
25062     also requires '-march=r2'.  Since these instructions are optional
25063     extensions to the R2 architecture, the default is not to emit them.
25064
25065'-mcustom-INSN=N'
25066'-mno-custom-INSN'
25067     Each '-mcustom-INSN=N' option enables use of a custom instruction
25068     with encoding N when generating code that uses INSN.  For example,
25069     '-mcustom-fadds=253' generates custom instruction 253 for
25070     single-precision floating-point add operations instead of the
25071     default behavior of using a library call.
25072
25073     The following values of INSN are supported.  Except as otherwise
25074     noted, floating-point operations are expected to be implemented
25075     with normal IEEE 754 semantics and correspond directly to the C
25076     operators or the equivalent GCC built-in functions (*note Other
25077     Builtins::).
25078
25079     Single-precision floating point:
25080
25081     'fadds', 'fsubs', 'fdivs', 'fmuls'
25082          Binary arithmetic operations.
25083
25084     'fnegs'
25085          Unary negation.
25086
25087     'fabss'
25088          Unary absolute value.
25089
25090     'fcmpeqs', 'fcmpges', 'fcmpgts', 'fcmples', 'fcmplts', 'fcmpnes'
25091          Comparison operations.
25092
25093     'fmins', 'fmaxs'
25094          Floating-point minimum and maximum.  These instructions are
25095          only generated if '-ffinite-math-only' is specified.
25096
25097     'fsqrts'
25098          Unary square root operation.
25099
25100     'fcoss', 'fsins', 'ftans', 'fatans', 'fexps', 'flogs'
25101          Floating-point trigonometric and exponential functions.  These
25102          instructions are only generated if
25103          '-funsafe-math-optimizations' is also specified.
25104
25105     Double-precision floating point:
25106
25107     'faddd', 'fsubd', 'fdivd', 'fmuld'
25108          Binary arithmetic operations.
25109
25110     'fnegd'
25111          Unary negation.
25112
25113     'fabsd'
25114          Unary absolute value.
25115
25116     'fcmpeqd', 'fcmpged', 'fcmpgtd', 'fcmpled', 'fcmpltd', 'fcmpned'
25117          Comparison operations.
25118
25119     'fmind', 'fmaxd'
25120          Double-precision minimum and maximum.  These instructions are
25121          only generated if '-ffinite-math-only' is specified.
25122
25123     'fsqrtd'
25124          Unary square root operation.
25125
25126     'fcosd', 'fsind', 'ftand', 'fatand', 'fexpd', 'flogd'
25127          Double-precision trigonometric and exponential functions.
25128          These instructions are only generated if
25129          '-funsafe-math-optimizations' is also specified.
25130
25131     Conversions:
25132     'fextsd'
25133          Conversion from single precision to double precision.
25134
25135     'ftruncds'
25136          Conversion from double precision to single precision.
25137
25138     'fixsi', 'fixsu', 'fixdi', 'fixdu'
25139          Conversion from floating point to signed or unsigned integer
25140          types, with truncation towards zero.
25141
25142     'round'
25143          Conversion from single-precision floating point to signed
25144          integer, rounding to the nearest integer and ties away from
25145          zero.  This corresponds to the '__builtin_lroundf' function
25146          when '-fno-math-errno' is used.
25147
25148     'floatis', 'floatus', 'floatid', 'floatud'
25149          Conversion from signed or unsigned integer types to
25150          floating-point types.
25151
25152     In addition, all of the following transfer instructions for
25153     internal registers X and Y must be provided to use any of the
25154     double-precision floating-point instructions.  Custom instructions
25155     taking two double-precision source operands expect the first
25156     operand in the 64-bit register X. The other operand (or only
25157     operand of a unary operation) is given to the custom arithmetic
25158     instruction with the least significant half in source register SRC1
25159     and the most significant half in SRC2.  A custom instruction that
25160     returns a double-precision result returns the most significant 32
25161     bits in the destination register and the other half in 32-bit
25162     register Y. GCC automatically generates the necessary code
25163     sequences to write register X and/or read register Y when
25164     double-precision floating-point instructions are used.
25165
25166     'fwrx'
25167          Write SRC1 into the least significant half of X and SRC2 into
25168          the most significant half of X.
25169
25170     'fwry'
25171          Write SRC1 into Y.
25172
25173     'frdxhi', 'frdxlo'
25174          Read the most or least (respectively) significant half of X
25175          and store it in DEST.
25176
25177     'frdy'
25178          Read the value of Y and store it into DEST.
25179
25180     Note that you can gain more local control over generation of Nios
25181     II custom instructions by using the 'target("custom-INSN=N")' and
25182     'target("no-custom-INSN")' function attributes (*note Function
25183     Attributes::) or pragmas (*note Function Specific Option
25184     Pragmas::).
25185
25186'-mcustom-fpu-cfg=NAME'
25187
25188     This option enables a predefined, named set of custom instruction
25189     encodings (see '-mcustom-INSN' above).  Currently, the following
25190     sets are defined:
25191
25192     '-mcustom-fpu-cfg=60-1' is equivalent to:
25193          -mcustom-fmuls=252
25194          -mcustom-fadds=253
25195          -mcustom-fsubs=254
25196          -fsingle-precision-constant
25197
25198     '-mcustom-fpu-cfg=60-2' is equivalent to:
25199          -mcustom-fmuls=252
25200          -mcustom-fadds=253
25201          -mcustom-fsubs=254
25202          -mcustom-fdivs=255
25203          -fsingle-precision-constant
25204
25205     '-mcustom-fpu-cfg=72-3' is equivalent to:
25206          -mcustom-floatus=243
25207          -mcustom-fixsi=244
25208          -mcustom-floatis=245
25209          -mcustom-fcmpgts=246
25210          -mcustom-fcmples=249
25211          -mcustom-fcmpeqs=250
25212          -mcustom-fcmpnes=251
25213          -mcustom-fmuls=252
25214          -mcustom-fadds=253
25215          -mcustom-fsubs=254
25216          -mcustom-fdivs=255
25217          -fsingle-precision-constant
25218
25219     '-mcustom-fpu-cfg=fph2' is equivalent to:
25220          -mcustom-fabss=224
25221          -mcustom-fnegs=225
25222          -mcustom-fcmpnes=226
25223          -mcustom-fcmpeqs=227
25224          -mcustom-fcmpges=228
25225          -mcustom-fcmpgts=229
25226          -mcustom-fcmples=230
25227          -mcustom-fcmplts=231
25228          -mcustom-fmaxs=232
25229          -mcustom-fmins=233
25230          -mcustom-round=248
25231          -mcustom-fixsi=249
25232          -mcustom-floatis=250
25233          -mcustom-fsqrts=251
25234          -mcustom-fmuls=252
25235          -mcustom-fadds=253
25236          -mcustom-fsubs=254
25237          -mcustom-fdivs=255
25238
25239     Custom instruction assignments given by individual '-mcustom-INSN='
25240     options override those given by '-mcustom-fpu-cfg=', regardless of
25241     the order of the options on the command line.
25242
25243     Note that you can gain more local control over selection of a FPU
25244     configuration by using the 'target("custom-fpu-cfg=NAME")' function
25245     attribute (*note Function Attributes::) or pragma (*note Function
25246     Specific Option Pragmas::).
25247
25248     The name FPH2 is an abbreviation for _Nios II Floating Point
25249     Hardware 2 Component_.  Please note that the custom instructions
25250     enabled by '-mcustom-fmins=233' and '-mcustom-fmaxs=234' are only
25251     generated if '-ffinite-math-only' is specified.  The custom
25252     instruction enabled by '-mcustom-round=248' is only generated if
25253     '-fno-math-errno' is specified.  In contrast to the other
25254     configurations, '-fsingle-precision-constant' is not set.
25255
25256 These additional '-m' options are available for the Altera Nios II ELF
25257(bare-metal) target:
25258
25259'-mhal'
25260     Link with HAL BSP. This suppresses linking with the GCC-provided C
25261     runtime startup and termination code, and is typically used in
25262     conjunction with '-msys-crt0=' to specify the location of the
25263     alternate startup code provided by the HAL BSP.
25264
25265'-msmallc'
25266     Link with a limited version of the C library, '-lsmallc', rather
25267     than Newlib.
25268
25269'-msys-crt0=STARTFILE'
25270     STARTFILE is the file name of the startfile (crt0) to use when
25271     linking.  This option is only useful in conjunction with '-mhal'.
25272
25273'-msys-lib=SYSTEMLIB'
25274     SYSTEMLIB is the library name of the library that provides
25275     low-level system calls required by the C library, e.g. 'read' and
25276     'write'.  This option is typically used to link with a library
25277     provided by a HAL BSP.
25278
25279
25280File: gcc.info,  Node: Nvidia PTX Options,  Next: OpenRISC Options,  Prev: Nios II Options,  Up: Submodel Options
25281
252823.19.37 Nvidia PTX Options
25283--------------------------
25284
25285These options are defined for Nvidia PTX:
25286
25287'-m64'
25288     Ignored, but preserved for backward compatibility.  Only 64-bit ABI
25289     is supported.
25290
25291'-march=ARCHITECTURE-STRING'
25292     Generate code for the specified PTX ISA target architecture (e.g.
25293     'sm_35').  Valid architecture strings are 'sm_30', 'sm_35',
25294     'sm_53', 'sm_70', 'sm_75' and 'sm_80'.  The default target
25295     architecture is sm_30.
25296
25297     This option sets the value of the preprocessor macro '__PTX_SM__';
25298     for instance, for 'sm_35', it has the value '350'.
25299
25300'-misa=ARCHITECTURE-STRING'
25301     Alias of '-march='.
25302
25303'-march-map=ARCHITECTURE-STRING'
25304     Select the closest available '-march=' value that is not more
25305     capable.  For instance, for '-march-map=sm_50' select
25306     '-march=sm_35', and for '-march-map=sm_53' select '-march=sm_53'.
25307
25308'-mptx=VERSION-STRING'
25309     Generate code for the specified PTX ISA version (e.g. '7.0').
25310     Valid version strings include '3.1', '6.0', '6.3', and '7.0'.  The
25311     default PTX ISA version is 6.0, unless a higher version is required
25312     for specified PTX ISA target architecture via option '-march='.
25313
25314     This option sets the values of the preprocessor macros
25315     '__PTX_ISA_VERSION_MAJOR__' and '__PTX_ISA_VERSION_MINOR__'; for
25316     instance, for '3.1' the macros have the values '3' and '1',
25317     respectively.
25318
25319'-mmainkernel'
25320     Link in code for a __main kernel.  This is for stand-alone instead
25321     of offloading execution.
25322
25323'-moptimize'
25324     Apply partitioned execution optimizations.  This is the default
25325     when any level of optimization is selected.
25326
25327'-msoft-stack'
25328     Generate code that does not use '.local' memory directly for stack
25329     storage.  Instead, a per-warp stack pointer is maintained
25330     explicitly.  This enables variable-length stack allocation (with
25331     variable-length arrays or 'alloca'), and when global memory is used
25332     for underlying storage, makes it possible to access automatic
25333     variables from other threads, or with atomic instructions.  This
25334     code generation variant is used for OpenMP offloading, but the
25335     option is exposed on its own for the purpose of testing the
25336     compiler; to generate code suitable for linking into programs using
25337     OpenMP offloading, use option '-mgomp'.
25338
25339'-muniform-simt'
25340     Switch to code generation variant that allows to execute all
25341     threads in each warp, while maintaining memory state and side
25342     effects as if only one thread in each warp was active outside of
25343     OpenMP SIMD regions.  All atomic operations and calls to runtime
25344     (malloc, free, vprintf) are conditionally executed (iff current
25345     lane index equals the master lane index), and the register being
25346     assigned is copied via a shuffle instruction from the master lane.
25347     Outside of SIMD regions lane 0 is the master; inside, each thread
25348     sees itself as the master.  Shared memory array 'int __nvptx_uni[]'
25349     stores all-zeros or all-ones bitmasks for each warp, indicating
25350     current mode (0 outside of SIMD regions).  Each thread can
25351     bitwise-and the bitmask at position 'tid.y' with current lane index
25352     to compute the master lane index.
25353
25354'-mgomp'
25355     Generate code for use in OpenMP offloading: enables '-msoft-stack'
25356     and '-muniform-simt' options, and selects corresponding multilib
25357     variant.
25358
25359
25360File: gcc.info,  Node: OpenRISC Options,  Next: PDP-11 Options,  Prev: Nvidia PTX Options,  Up: Submodel Options
25361
253623.19.38 OpenRISC Options
25363------------------------
25364
25365These options are defined for OpenRISC:
25366
25367'-mboard=NAME'
25368     Configure a board specific runtime.  This will be passed to the
25369     linker for newlib board library linking.  The default is 'or1ksim'.
25370
25371'-mnewlib'
25372     This option is ignored; it is for compatibility purposes only.
25373     This used to select linker and preprocessor options for use with
25374     newlib.
25375
25376'-msoft-div'
25377'-mhard-div'
25378     Select software or hardware divide ('l.div', 'l.divu')
25379     instructions.  This default is hardware divide.
25380
25381'-msoft-mul'
25382'-mhard-mul'
25383     Select software or hardware multiply ('l.mul', 'l.muli')
25384     instructions.  This default is hardware multiply.
25385
25386'-msoft-float'
25387'-mhard-float'
25388     Select software or hardware for floating point operations.  The
25389     default is software.
25390
25391'-mdouble-float'
25392     When '-mhard-float' is selected, enables generation of
25393     double-precision floating point instructions.  By default functions
25394     from 'libgcc' are used to perform double-precision floating point
25395     operations.
25396
25397'-munordered-float'
25398     When '-mhard-float' is selected, enables generation of unordered
25399     floating point compare and set flag ('lf.sfun*') instructions.  By
25400     default functions from 'libgcc' are used to perform unordered
25401     floating point compare and set flag operations.
25402
25403'-mcmov'
25404     Enable generation of conditional move ('l.cmov') instructions.  By
25405     default the equivalent will be generated using set and branch.
25406
25407'-mror'
25408     Enable generation of rotate right ('l.ror') instructions.  By
25409     default functions from 'libgcc' are used to perform rotate right
25410     operations.
25411
25412'-mrori'
25413     Enable generation of rotate right with immediate ('l.rori')
25414     instructions.  By default functions from 'libgcc' are used to
25415     perform rotate right with immediate operations.
25416
25417'-msext'
25418     Enable generation of sign extension ('l.ext*') instructions.  By
25419     default memory loads are used to perform sign extension.
25420
25421'-msfimm'
25422     Enable generation of compare and set flag with immediate ('l.sf*i')
25423     instructions.  By default extra instructions will be generated to
25424     store the immediate to a register first.
25425
25426'-mshftimm'
25427     Enable generation of shift with immediate ('l.srai', 'l.srli',
25428     'l.slli') instructions.  By default extra instructions will be
25429     generated to store the immediate to a register first.
25430
25431'-mcmodel=small'
25432     Generate OpenRISC code for the small model: The GOT is limited to
25433     64k.  This is the default model.
25434
25435'-mcmodel=large'
25436     Generate OpenRISC code for the large model: The GOT may grow up to
25437     4G in size.
25438
25439
25440File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: OpenRISC Options,  Up: Submodel Options
25441
254423.19.39 PDP-11 Options
25443----------------------
25444
25445These options are defined for the PDP-11:
25446
25447'-mfpu'
25448     Use hardware FPP floating point.  This is the default.  (FIS
25449     floating point on the PDP-11/40 is not supported.)  Implies -m45.
25450
25451'-msoft-float'
25452     Do not use hardware floating point.
25453
25454'-mac0'
25455     Return floating-point results in ac0 (fr0 in Unix assembler
25456     syntax).
25457
25458'-mno-ac0'
25459     Return floating-point results in memory.  This is the default.
25460
25461'-m40'
25462     Generate code for a PDP-11/40.  Implies -msoft-float -mno-split.
25463
25464'-m45'
25465     Generate code for a PDP-11/45.  This is the default.
25466
25467'-m10'
25468     Generate code for a PDP-11/10.  Implies -msoft-float -mno-split.
25469
25470'-mint16'
25471'-mno-int32'
25472     Use 16-bit 'int'.  This is the default.
25473
25474'-mint32'
25475'-mno-int16'
25476     Use 32-bit 'int'.
25477
25478'-msplit'
25479     Target has split instruction and data space.  Implies -m45.
25480
25481'-munix-asm'
25482     Use Unix assembler syntax.
25483
25484'-mdec-asm'
25485     Use DEC assembler syntax.
25486
25487'-mgnu-asm'
25488     Use GNU assembler syntax.  This is the default.
25489
25490'-mlra'
25491     Use the new LRA register allocator.  By default, the old "reload"
25492     allocator is used.
25493
25494
25495File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
25496
254973.19.40 picoChip Options
25498------------------------
25499
25500These '-m' options are defined for picoChip implementations:
25501
25502'-mae=AE_TYPE'
25503     Set the instruction set, register set, and instruction scheduling
25504     parameters for array element type AE_TYPE.  Supported values for
25505     AE_TYPE are 'ANY', 'MUL', and 'MAC'.
25506
25507     '-mae=ANY' selects a completely generic AE type.  Code generated
25508     with this option runs on any of the other AE types.  The code is
25509     not as efficient as it would be if compiled for a specific AE type,
25510     and some types of operation (e.g., multiplication) do not work
25511     properly on all types of AE.
25512
25513     '-mae=MUL' selects a MUL AE type.  This is the most useful AE type
25514     for compiled code, and is the default.
25515
25516     '-mae=MAC' selects a DSP-style MAC AE. Code compiled with this
25517     option may suffer from poor performance of byte (char)
25518     manipulation, since the DSP AE does not provide hardware support
25519     for byte load/stores.
25520
25521'-msymbol-as-address'
25522     Enable the compiler to directly use a symbol name as an address in
25523     a load/store instruction, without first loading it into a register.
25524     Typically, the use of this option generates larger programs, which
25525     run faster than when the option isn't used.  However, the results
25526     vary from program to program, so it is left as a user option,
25527     rather than being permanently enabled.
25528
25529'-mno-inefficient-warnings'
25530     Disables warnings about the generation of inefficient code.  These
25531     warnings can be generated, for example, when compiling code that
25532     performs byte-level memory operations on the MAC AE type.  The MAC
25533     AE has no hardware support for byte-level memory operations, so all
25534     byte load/stores must be synthesized from word load/store
25535     operations.  This is inefficient and a warning is generated to
25536     indicate that you should rewrite the code to avoid byte operations,
25537     or to target an AE type that has the necessary hardware support.
25538     This option disables these warnings.
25539
25540
25541File: gcc.info,  Node: PowerPC Options,  Next: PRU Options,  Prev: picoChip Options,  Up: Submodel Options
25542
255433.19.41 PowerPC Options
25544-----------------------
25545
25546These are listed under *Note RS/6000 and PowerPC Options::.
25547
25548
25549File: gcc.info,  Node: PRU Options,  Next: RISC-V Options,  Prev: PowerPC Options,  Up: Submodel Options
25550
255513.19.42 PRU Options
25552-------------------
25553
25554These command-line options are defined for PRU target:
25555
25556'-minrt'
25557     Link with a minimum runtime environment, with no support for static
25558     initializers and constructors.  Using this option can significantly
25559     reduce the size of the final ELF binary.  Beware that the compiler
25560     could still generate code with static initializers and
25561     constructors.  It is up to the programmer to ensure that the source
25562     program will not use those features.
25563
25564'-mmcu=MCU'
25565     Specify the PRU MCU variant to use.  Check Newlib for the exact
25566     list of supported MCUs.
25567
25568'-mno-relax'
25569     Make GCC pass the '--no-relax' command-line option to the linker
25570     instead of the '--relax' option.
25571
25572'-mloop'
25573     Allow (or do not allow) GCC to use the LOOP instruction.
25574
25575'-mabi=VARIANT'
25576     Specify the ABI variant to output code for.  '-mabi=ti' selects the
25577     unmodified TI ABI while '-mabi=gnu' selects a GNU variant that
25578     copes more naturally with certain GCC assumptions.  These are the
25579     differences:
25580
25581     'Function Pointer Size'
25582          TI ABI specifies that function (code) pointers are 16-bit,
25583          whereas GNU supports only 32-bit data and code pointers.
25584
25585     'Optional Return Value Pointer'
25586          Function return values larger than 64 bits are passed by using
25587          a hidden pointer as the first argument of the function.  TI
25588          ABI, though, mandates that the pointer can be NULL in case the
25589          caller is not using the returned value.  GNU always passes and
25590          expects a valid return value pointer.
25591
25592     The current '-mabi=ti' implementation simply raises a compile error
25593     when any of the above code constructs is detected.  As a
25594     consequence the standard C library cannot be built and it is
25595     omitted when linking with '-mabi=ti'.
25596
25597     Relaxation is a GNU feature and for safety reasons is disabled when
25598     using '-mabi=ti'.  The TI toolchain does not emit relocations for
25599     QBBx instructions, so the GNU linker cannot adjust them when
25600     shortening adjacent LDI32 pseudo instructions.
25601
25602
25603File: gcc.info,  Node: RISC-V Options,  Next: RL78 Options,  Prev: PRU Options,  Up: Submodel Options
25604
256053.19.43 RISC-V Options
25606----------------------
25607
25608These command-line options are defined for RISC-V targets:
25609
25610'-mbranch-cost=N'
25611     Set the cost of branches to roughly N instructions.
25612
25613'-mplt'
25614'-mno-plt'
25615     When generating PIC code, do or don't allow the use of PLTs.
25616     Ignored for non-PIC. The default is '-mplt'.
25617
25618'-mabi=ABI-STRING'
25619     Specify integer and floating-point calling convention.  ABI-STRING
25620     contains two parts: the size of integer types and the registers
25621     used for floating-point types.  For example '-march=rv64ifd
25622     -mabi=lp64d' means that 'long' and pointers are 64-bit (implicitly
25623     defining 'int' to be 32-bit), and that floating-point values up to
25624     64 bits wide are passed in F registers.  Contrast this with
25625     '-march=rv64ifd -mabi=lp64f', which still allows the compiler to
25626     generate code that uses the F and D extensions but only allows
25627     floating-point values up to 32 bits long to be passed in registers;
25628     or '-march=rv64ifd -mabi=lp64', in which no floating-point
25629     arguments will be passed in registers.
25630
25631     The default for this argument is system dependent, users who want a
25632     specific calling convention should specify one explicitly.  The
25633     valid calling conventions are: 'ilp32', 'ilp32f', 'ilp32d', 'lp64',
25634     'lp64f', and 'lp64d'.  Some calling conventions are impossible to
25635     implement on some ISAs: for example, '-march=rv32if -mabi=ilp32d'
25636     is invalid because the ABI requires 64-bit values be passed in F
25637     registers, but F registers are only 32 bits wide.  There is also
25638     the 'ilp32e' ABI that can only be used with the 'rv32e'
25639     architecture.  This ABI is not well specified at present, and is
25640     subject to change.
25641
25642'-mfdiv'
25643'-mno-fdiv'
25644     Do or don't use hardware floating-point divide and square root
25645     instructions.  This requires the F or D extensions for
25646     floating-point registers.  The default is to use them if the
25647     specified architecture has these instructions.
25648
25649'-mdiv'
25650'-mno-div'
25651     Do or don't use hardware instructions for integer division.  This
25652     requires the M extension.  The default is to use them if the
25653     specified architecture has these instructions.
25654
25655'-misa-spec=ISA-SPEC-STRING'
25656     Specify the version of the RISC-V Unprivileged (formerly
25657     User-Level) ISA specification to produce code conforming to.  The
25658     possibilities for ISA-SPEC-STRING are:
25659     '2.2'
25660          Produce code conforming to version 2.2.
25661     '20190608'
25662          Produce code conforming to version 20190608.
25663     '20191213'
25664          Produce code conforming to version 20191213.
25665     The default is '-misa-spec=20191213' unless GCC has been configured
25666     with '--with-isa-spec=' specifying a different default version.
25667
25668'-march=ISA-STRING'
25669     Generate code for given RISC-V ISA (e.g. 'rv64im').  ISA strings
25670     must be lower-case.  Examples include 'rv64i', 'rv32g', 'rv32e',
25671     and 'rv32imaf'.
25672
25673     When '-march=' is not specified, use the setting from '-mcpu'.
25674
25675     If both '-march' and '-mcpu=' are not specified, the default for
25676     this argument is system dependent, users who want a specific
25677     architecture extensions should specify one explicitly.
25678
25679'-mcpu=PROCESSOR-STRING'
25680     Use architecture of and optimize the output for the given
25681     processor, specified by particular CPU name.  Permissible values
25682     for this option are: 'sifive-e20', 'sifive-e21', 'sifive-e24',
25683     'sifive-e31', 'sifive-e34', 'sifive-e76', 'sifive-s21',
25684     'sifive-s51', 'sifive-s54', 'sifive-s76', 'sifive-u54', and
25685     'sifive-u74'.
25686
25687'-mtune=PROCESSOR-STRING'
25688     Optimize the output for the given processor, specified by
25689     microarchitecture or particular CPU name.  Permissible values for
25690     this option are: 'rocket', 'sifive-3-series', 'sifive-5-series',
25691     'sifive-7-series', 'size', and all valid options for '-mcpu='.
25692
25693     When '-mtune=' is not specified, use the setting from '-mcpu', the
25694     default is 'rocket' if both are not specified.
25695
25696     The 'size' choice is not intended for use by end-users.  This is
25697     used when '-Os' is specified.  It overrides the instruction cost
25698     info provided by '-mtune=', but does not override the pipeline
25699     info.  This helps reduce code size while still giving good
25700     performance.
25701
25702'-mpreferred-stack-boundary=NUM'
25703     Attempt to keep the stack boundary aligned to a 2 raised to NUM
25704     byte boundary.  If '-mpreferred-stack-boundary' is not specified,
25705     the default is 4 (16 bytes or 128-bits).
25706
25707     *Warning:* If you use this switch, then you must build all modules
25708     with the same value, including any libraries.  This includes the
25709     system libraries and startup modules.
25710
25711'-msmall-data-limit=N'
25712     Put global and static data smaller than N bytes into a special
25713     section (on some targets).
25714
25715'-msave-restore'
25716'-mno-save-restore'
25717     Do or don't use smaller but slower prologue and epilogue code that
25718     uses library function calls.  The default is to use fast inline
25719     prologues and epilogues.
25720
25721'-mshorten-memrefs'
25722'-mno-shorten-memrefs'
25723     Do or do not attempt to make more use of compressed load/store
25724     instructions by replacing a load/store of 'base register + large
25725     offset' with a new load/store of 'new base + small offset'.  If the
25726     new base gets stored in a compressed register, then the new
25727     load/store can be compressed.  Currently targets 32-bit integer
25728     load/stores only.
25729
25730'-mstrict-align'
25731'-mno-strict-align'
25732     Do not or do generate unaligned memory accesses.  The default is
25733     set depending on whether the processor we are optimizing for
25734     supports fast unaligned access or not.
25735
25736'-mcmodel=medlow'
25737     Generate code for the medium-low code model.  The program and its
25738     statically defined symbols must lie within a single 2 GiB address
25739     range and must lie between absolute addresses -2 GiB and +2 GiB.
25740     Programs can be statically or dynamically linked.  This is the
25741     default code model.
25742
25743'-mcmodel=medany'
25744     Generate code for the medium-any code model.  The program and its
25745     statically defined symbols must be within any single 2 GiB address
25746     range.  Programs can be statically or dynamically linked.
25747
25748     The code generated by the medium-any code model is
25749     position-independent, but is not guaranteed to function correctly
25750     when linked into position-independent executables or libraries.
25751
25752'-mexplicit-relocs'
25753'-mno-exlicit-relocs'
25754     Use or do not use assembler relocation operators when dealing with
25755     symbolic addresses.  The alternative is to use assembler macros
25756     instead, which may limit optimization.
25757
25758'-mrelax'
25759'-mno-relax'
25760     Take advantage of linker relaxations to reduce the number of
25761     instructions required to materialize symbol addresses.  The default
25762     is to take advantage of linker relaxations.
25763
25764'-memit-attribute'
25765'-mno-emit-attribute'
25766     Emit (do not emit) RISC-V attribute to record extra information
25767     into ELF objects.  This feature requires at least binutils 2.32.
25768
25769'-malign-data=TYPE'
25770     Control how GCC aligns variables and constants of array, structure,
25771     or union types.  Supported values for TYPE are 'xlen' which uses x
25772     register width as the alignment value, and 'natural' which uses
25773     natural alignment.  'xlen' is the default.
25774
25775'-mbig-endian'
25776     Generate big-endian code.  This is the default when GCC is
25777     configured for a 'riscv64be-*-*' or 'riscv32be-*-*' target.
25778
25779'-mlittle-endian'
25780     Generate little-endian code.  This is the default when GCC is
25781     configured for a 'riscv64-*-*' or 'riscv32-*-*' but not a
25782     'riscv64be-*-*' or 'riscv32be-*-*' target.
25783
25784'-mstack-protector-guard=GUARD'
25785'-mstack-protector-guard-reg=REG'
25786'-mstack-protector-guard-offset=OFFSET'
25787     Generate stack protection code using canary at GUARD.  Supported
25788     locations are 'global' for a global canary or 'tls' for per-thread
25789     canary in the TLS block.
25790
25791     With the latter choice the options
25792     '-mstack-protector-guard-reg=REG' and
25793     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
25794     register to use as base register for reading the canary, and from
25795     what offset from that base register.  There is no default register
25796     or offset as this is entirely for use within the Linux kernel.
25797
25798
25799File: gcc.info,  Node: RL78 Options,  Next: RS/6000 and PowerPC Options,  Prev: RISC-V Options,  Up: Submodel Options
25800
258013.19.44 RL78 Options
25802--------------------
25803
25804'-msim'
25805     Links in additional target libraries to support operation within a
25806     simulator.
25807
25808'-mmul=none'
25809'-mmul=g10'
25810'-mmul=g13'
25811'-mmul=g14'
25812'-mmul=rl78'
25813     Specifies the type of hardware multiplication and division support
25814     to be used.  The simplest is 'none', which uses software for both
25815     multiplication and division.  This is the default.  The 'g13' value
25816     is for the hardware multiply/divide peripheral found on the
25817     RL78/G13 (S2 core) targets.  The 'g14' value selects the use of the
25818     multiplication and division instructions supported by the RL78/G14
25819     (S3 core) parts.  The value 'rl78' is an alias for 'g14' and the
25820     value 'mg10' is an alias for 'none'.
25821
25822     In addition a C preprocessor macro is defined, based upon the
25823     setting of this option.  Possible values are: '__RL78_MUL_NONE__',
25824     '__RL78_MUL_G13__' or '__RL78_MUL_G14__'.
25825
25826'-mcpu=g10'
25827'-mcpu=g13'
25828'-mcpu=g14'
25829'-mcpu=rl78'
25830     Specifies the RL78 core to target.  The default is the G14 core,
25831     also known as an S3 core or just RL78.  The G13 or S2 core does not
25832     have multiply or divide instructions, instead it uses a hardware
25833     peripheral for these operations.  The G10 or S1 core does not have
25834     register banks, so it uses a different calling convention.
25835
25836     If this option is set it also selects the type of hardware multiply
25837     support to use, unless this is overridden by an explicit
25838     '-mmul=none' option on the command line.  Thus specifying
25839     '-mcpu=g13' enables the use of the G13 hardware multiply peripheral
25840     and specifying '-mcpu=g10' disables the use of hardware
25841     multiplications altogether.
25842
25843     Note, although the RL78/G14 core is the default target, specifying
25844     '-mcpu=g14' or '-mcpu=rl78' on the command line does change the
25845     behavior of the toolchain since it also enables G14 hardware
25846     multiply support.  If these options are not specified on the
25847     command line then software multiplication routines will be used
25848     even though the code targets the RL78 core.  This is for backwards
25849     compatibility with older toolchains which did not have hardware
25850     multiply and divide support.
25851
25852     In addition a C preprocessor macro is defined, based upon the
25853     setting of this option.  Possible values are: '__RL78_G10__',
25854     '__RL78_G13__' or '__RL78_G14__'.
25855
25856'-mg10'
25857'-mg13'
25858'-mg14'
25859'-mrl78'
25860     These are aliases for the corresponding '-mcpu=' option.  They are
25861     provided for backwards compatibility.
25862
25863'-mallregs'
25864     Allow the compiler to use all of the available registers.  By
25865     default registers 'r24..r31' are reserved for use in interrupt
25866     handlers.  With this option enabled these registers can be used in
25867     ordinary functions as well.
25868
25869'-m64bit-doubles'
25870'-m32bit-doubles'
25871     Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
25872     bits ('-m32bit-doubles') in size.  The default is
25873     '-m32bit-doubles'.
25874
25875'-msave-mduc-in-interrupts'
25876'-mno-save-mduc-in-interrupts'
25877     Specifies that interrupt handler functions should preserve the MDUC
25878     registers.  This is only necessary if normal code might use the
25879     MDUC registers, for example because it performs multiplication and
25880     division operations.  The default is to ignore the MDUC registers
25881     as this makes the interrupt handlers faster.  The target option
25882     -mg13 needs to be passed for this to work as this feature is only
25883     available on the G13 target (S2 core).  The MDUC registers will
25884     only be saved if the interrupt handler performs a multiplication or
25885     division operation or it calls another function.
25886
25887
25888File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: RL78 Options,  Up: Submodel Options
25889
258903.19.45 IBM RS/6000 and PowerPC Options
25891---------------------------------------
25892
25893These '-m' options are defined for the IBM RS/6000 and PowerPC:
25894'-mpowerpc-gpopt'
25895'-mno-powerpc-gpopt'
25896'-mpowerpc-gfxopt'
25897'-mno-powerpc-gfxopt'
25898'-mpowerpc64'
25899'-mno-powerpc64'
25900'-mmfcrf'
25901'-mno-mfcrf'
25902'-mpopcntb'
25903'-mno-popcntb'
25904'-mpopcntd'
25905'-mno-popcntd'
25906'-mfprnd'
25907'-mno-fprnd'
25908'-mcmpb'
25909'-mno-cmpb'
25910'-mhard-dfp'
25911'-mno-hard-dfp'
25912     You use these options to specify which instructions are available
25913     on the processor you are using.  The default value of these options
25914     is determined when configuring GCC.  Specifying the
25915     '-mcpu=CPU_TYPE' overrides the specification of these options.  We
25916     recommend you use the '-mcpu=CPU_TYPE' option rather than the
25917     options listed above.
25918
25919     Specifying '-mpowerpc-gpopt' allows GCC to use the optional PowerPC
25920     architecture instructions in the General Purpose group, including
25921     floating-point square root.  Specifying '-mpowerpc-gfxopt' allows
25922     GCC to use the optional PowerPC architecture instructions in the
25923     Graphics group, including floating-point select.
25924
25925     The '-mmfcrf' option allows GCC to generate the move from condition
25926     register field instruction implemented on the POWER4 processor and
25927     other processors that support the PowerPC V2.01 architecture.  The
25928     '-mpopcntb' option allows GCC to generate the popcount and
25929     double-precision FP reciprocal estimate instruction implemented on
25930     the POWER5 processor and other processors that support the PowerPC
25931     V2.02 architecture.  The '-mpopcntd' option allows GCC to generate
25932     the popcount instruction implemented on the POWER7 processor and
25933     other processors that support the PowerPC V2.06 architecture.  The
25934     '-mfprnd' option allows GCC to generate the FP round to integer
25935     instructions implemented on the POWER5+ processor and other
25936     processors that support the PowerPC V2.03 architecture.  The
25937     '-mcmpb' option allows GCC to generate the compare bytes
25938     instruction implemented on the POWER6 processor and other
25939     processors that support the PowerPC V2.05 architecture.  The
25940     '-mhard-dfp' option allows GCC to generate the decimal
25941     floating-point instructions implemented on some POWER processors.
25942
25943     The '-mpowerpc64' option allows GCC to generate the additional
25944     64-bit instructions that are found in the full PowerPC64
25945     architecture and to treat GPRs as 64-bit, doubleword quantities.
25946     GCC defaults to '-mno-powerpc64'.
25947
25948'-mcpu=CPU_TYPE'
25949     Set architecture type, register usage, and instruction scheduling
25950     parameters for machine type CPU_TYPE.  Supported values for
25951     CPU_TYPE are '401', '403', '405', '405fp', '440', '440fp', '464',
25952     '464fp', '476', '476fp', '505', '601', '602', '603', '603e', '604',
25953     '604e', '620', '630', '740', '7400', '7450', '750', '801', '821',
25954     '823', '860', '970', '8540', 'a2', 'e300c2', 'e300c3', 'e500mc',
25955     'e500mc64', 'e5500', 'e6500', 'ec603e', 'G3', 'G4', 'G5', 'titan',
25956     'power3', 'power4', 'power5', 'power5+', 'power6', 'power6x',
25957     'power7', 'power8', 'power9', 'power10', 'powerpc', 'powerpc64',
25958     'powerpc64le', 'rs64', and 'native'.
25959
25960     '-mcpu=powerpc', '-mcpu=powerpc64', and '-mcpu=powerpc64le' specify
25961     pure 32-bit PowerPC (either endian), 64-bit big endian PowerPC and
25962     64-bit little endian PowerPC architecture machine types, with an
25963     appropriate, generic processor model assumed for scheduling
25964     purposes.
25965
25966     Specifying 'native' as cpu type detects and selects the
25967     architecture option that corresponds to the host processor of the
25968     system performing the compilation.  '-mcpu=native' has no effect if
25969     GCC does not recognize the processor.
25970
25971     The other options specify a specific processor.  Code generated
25972     under those options runs best on that processor, and may not run at
25973     all on others.
25974
25975     The '-mcpu' options automatically enable or disable the following
25976     options:
25977
25978          -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
25979          -mpopcntb  -mpopcntd  -mpowerpc64
25980          -mpowerpc-gpopt  -mpowerpc-gfxopt
25981          -mmulhw  -mdlmzb  -mmfpgpr  -mvsx
25982          -mcrypto  -mhtm  -mpower8-fusion  -mpower8-vector
25983          -mquad-memory  -mquad-memory-atomic  -mfloat128
25984          -mfloat128-hardware -mprefixed -mpcrel -mmma
25985          -mrop-protect
25986
25987     The particular options set for any particular CPU varies between
25988     compiler versions, depending on what setting seems to produce
25989     optimal code for that CPU; it doesn't necessarily reflect the
25990     actual hardware's capabilities.  If you wish to set an individual
25991     option to a particular value, you may specify it after the '-mcpu'
25992     option, like '-mcpu=970 -mno-altivec'.
25993
25994     On AIX, the '-maltivec' and '-mpowerpc64' options are not enabled
25995     or disabled by the '-mcpu' option at present because AIX does not
25996     have full support for these options.  You may still enable or
25997     disable them individually if you're sure it'll work in your
25998     environment.
25999
26000'-mtune=CPU_TYPE'
26001     Set the instruction scheduling parameters for machine type
26002     CPU_TYPE, but do not set the architecture type or register usage,
26003     as '-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
26004     for '-mtune' as for '-mcpu'.  If both are specified, the code
26005     generated uses the architecture and registers set by '-mcpu', but
26006     the scheduling parameters set by '-mtune'.
26007
26008'-mcmodel=small'
26009     Generate PowerPC64 code for the small model: The TOC is limited to
26010     64k.
26011
26012'-mcmodel=medium'
26013     Generate PowerPC64 code for the medium model: The TOC and other
26014     static data may be up to a total of 4G in size.  This is the
26015     default for 64-bit Linux.
26016
26017'-mcmodel=large'
26018     Generate PowerPC64 code for the large model: The TOC may be up to
26019     4G in size.  Other data and code is only limited by the 64-bit
26020     address space.
26021
26022'-maltivec'
26023'-mno-altivec'
26024     Generate code that uses (does not use) AltiVec instructions, and
26025     also enable the use of built-in functions that allow more direct
26026     access to the AltiVec instruction set.  You may also need to set
26027     '-mabi=altivec' to adjust the current ABI with AltiVec ABI
26028     enhancements.
26029
26030     When '-maltivec' is used, the element order for AltiVec intrinsics
26031     such as 'vec_splat', 'vec_extract', and 'vec_insert' match array
26032     element order corresponding to the endianness of the target.  That
26033     is, element zero identifies the leftmost element in a vector
26034     register when targeting a big-endian platform, and identifies the
26035     rightmost element in a vector register when targeting a
26036     little-endian platform.
26037
26038'-mvrsave'
26039'-mno-vrsave'
26040     Generate VRSAVE instructions when generating AltiVec code.
26041
26042'-msecure-plt'
26043     Generate code that allows 'ld' and 'ld.so' to build executables and
26044     shared libraries with non-executable '.plt' and '.got' sections.
26045     This is a PowerPC 32-bit SYSV ABI option.
26046
26047'-mbss-plt'
26048     Generate code that uses a BSS '.plt' section that 'ld.so' fills in,
26049     and requires '.plt' and '.got' sections that are both writable and
26050     executable.  This is a PowerPC 32-bit SYSV ABI option.
26051
26052'-misel'
26053'-mno-isel'
26054     This switch enables or disables the generation of ISEL
26055     instructions.
26056
26057'-mvsx'
26058'-mno-vsx'
26059     Generate code that uses (does not use) vector/scalar (VSX)
26060     instructions, and also enable the use of built-in functions that
26061     allow more direct access to the VSX instruction set.
26062
26063'-mcrypto'
26064'-mno-crypto'
26065     Enable the use (disable) of the built-in functions that allow
26066     direct access to the cryptographic instructions that were added in
26067     version 2.07 of the PowerPC ISA.
26068
26069'-mhtm'
26070'-mno-htm'
26071     Enable (disable) the use of the built-in functions that allow
26072     direct access to the Hardware Transactional Memory (HTM)
26073     instructions that were added in version 2.07 of the PowerPC ISA.
26074
26075'-mpower8-fusion'
26076'-mno-power8-fusion'
26077     Generate code that keeps (does not keeps) some integer operations
26078     adjacent so that the instructions can be fused together on power8
26079     and later processors.
26080
26081'-mpower8-vector'
26082'-mno-power8-vector'
26083     Generate code that uses (does not use) the vector and scalar
26084     instructions that were added in version 2.07 of the PowerPC ISA.
26085     Also enable the use of built-in functions that allow more direct
26086     access to the vector instructions.
26087
26088'-mquad-memory'
26089'-mno-quad-memory'
26090     Generate code that uses (does not use) the non-atomic quad word
26091     memory instructions.  The '-mquad-memory' option requires use of
26092     64-bit mode.
26093
26094'-mquad-memory-atomic'
26095'-mno-quad-memory-atomic'
26096     Generate code that uses (does not use) the atomic quad word memory
26097     instructions.  The '-mquad-memory-atomic' option requires use of
26098     64-bit mode.
26099
26100'-mfloat128'
26101'-mno-float128'
26102     Enable/disable the __FLOAT128 keyword for IEEE 128-bit floating
26103     point and use either software emulation for IEEE 128-bit floating
26104     point or hardware instructions.
26105
26106     The VSX instruction set ('-mvsx') must be enabled to use the IEEE
26107     128-bit floating point support.  The IEEE 128-bit floating point is
26108     only supported on Linux.
26109
26110     The default for '-mfloat128' is enabled on PowerPC Linux systems
26111     using the VSX instruction set, and disabled on other systems.
26112
26113     If you use the ISA 3.0 instruction set ('-mpower9-vector' or
26114     '-mcpu=power9') on a 64-bit system, the IEEE 128-bit floating point
26115     support will also enable the generation of ISA 3.0 IEEE 128-bit
26116     floating point instructions.  Otherwise, if you do not specify to
26117     generate ISA 3.0 instructions or you are targeting a 32-bit big
26118     endian system, IEEE 128-bit floating point will be done with
26119     software emulation.
26120
26121'-mfloat128-hardware'
26122'-mno-float128-hardware'
26123     Enable/disable using ISA 3.0 hardware instructions to support the
26124     __FLOAT128 data type.
26125
26126     The default for '-mfloat128-hardware' is enabled on PowerPC Linux
26127     systems using the ISA 3.0 instruction set, and disabled on other
26128     systems.
26129
26130'-m32'
26131'-m64'
26132     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
26133     targets (including GNU/Linux).  The 32-bit environment sets int,
26134     long and pointer to 32 bits and generates code that runs on any
26135     PowerPC variant.  The 64-bit environment sets int to 32 bits and
26136     long and pointer to 64 bits, and generates code for PowerPC64, as
26137     for '-mpowerpc64'.
26138
26139'-mfull-toc'
26140'-mno-fp-in-toc'
26141'-mno-sum-in-toc'
26142'-mminimal-toc'
26143     Modify generation of the TOC (Table Of Contents), which is created
26144     for every executable file.  The '-mfull-toc' option is selected by
26145     default.  In that case, GCC allocates at least one TOC entry for
26146     each unique non-automatic variable reference in your program.  GCC
26147     also places floating-point constants in the TOC.  However, only
26148     16,384 entries are available in the TOC.
26149
26150     If you receive a linker error message that saying you have
26151     overflowed the available TOC space, you can reduce the amount of
26152     TOC space used with the '-mno-fp-in-toc' and '-mno-sum-in-toc'
26153     options.  '-mno-fp-in-toc' prevents GCC from putting floating-point
26154     constants in the TOC and '-mno-sum-in-toc' forces GCC to generate
26155     code to calculate the sum of an address and a constant at run time
26156     instead of putting that sum into the TOC.  You may specify one or
26157     both of these options.  Each causes GCC to produce very slightly
26158     slower and larger code at the expense of conserving TOC space.
26159
26160     If you still run out of space in the TOC even when you specify both
26161     of these options, specify '-mminimal-toc' instead.  This option
26162     causes GCC to make only one TOC entry for every file.  When you
26163     specify this option, GCC produces code that is slower and larger
26164     but which uses extremely little TOC space.  You may wish to use
26165     this option only on files that contain less frequently-executed
26166     code.
26167
26168'-maix64'
26169'-maix32'
26170     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
26171     64-bit 'long' type, and the infrastructure needed to support them.
26172     Specifying '-maix64' implies '-mpowerpc64', while '-maix32'
26173     disables the 64-bit ABI and implies '-mno-powerpc64'.  GCC defaults
26174     to '-maix32'.
26175
26176'-mxl-compat'
26177'-mno-xl-compat'
26178     Produce code that conforms more closely to IBM XL compiler
26179     semantics when using AIX-compatible ABI.  Pass floating-point
26180     arguments to prototyped functions beyond the register save area
26181     (RSA) on the stack in addition to argument FPRs.  Do not assume
26182     that most significant double in 128-bit long double value is
26183     properly rounded when comparing values and converting to double.
26184     Use XL symbol names for long double support routines.
26185
26186     The AIX calling convention was extended but not initially
26187     documented to handle an obscure K&R C case of calling a function
26188     that takes the address of its arguments with fewer arguments than
26189     declared.  IBM XL compilers access floating-point arguments that do
26190     not fit in the RSA from the stack when a subroutine is compiled
26191     without optimization.  Because always storing floating-point
26192     arguments on the stack is inefficient and rarely needed, this
26193     option is not enabled by default and only is necessary when calling
26194     subroutines compiled by IBM XL compilers without optimization.
26195
26196'-mpe'
26197     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
26198     application written to use message passing with special startup
26199     code to enable the application to run.  The system must have PE
26200     installed in the standard location ('/usr/lpp/ppe.poe/'), or the
26201     'specs' file must be overridden with the '-specs=' option to
26202     specify the appropriate directory location.  The Parallel
26203     Environment does not support threads, so the '-mpe' option and the
26204     '-pthread' option are incompatible.
26205
26206'-malign-natural'
26207'-malign-power'
26208     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
26209     '-malign-natural' overrides the ABI-defined alignment of larger
26210     types, such as floating-point doubles, on their natural size-based
26211     boundary.  The option '-malign-power' instructs GCC to follow the
26212     ABI-specified alignment rules.  GCC defaults to the standard
26213     alignment defined in the ABI.
26214
26215     On 64-bit Darwin, natural alignment is the default, and
26216     '-malign-power' is not supported.
26217
26218'-msoft-float'
26219'-mhard-float'
26220     Generate code that does not use (uses) the floating-point register
26221     set.  Software floating-point emulation is provided if you use the
26222     '-msoft-float' option, and pass the option to GCC when linking.
26223
26224'-mmultiple'
26225'-mno-multiple'
26226     Generate code that uses (does not use) the load multiple word
26227     instructions and the store multiple word instructions.  These
26228     instructions are generated by default on POWER systems, and not
26229     generated on PowerPC systems.  Do not use '-mmultiple' on
26230     little-endian PowerPC systems, since those instructions do not work
26231     when the processor is in little-endian mode.  The exceptions are
26232     PPC740 and PPC750 which permit these instructions in little-endian
26233     mode.
26234
26235'-mupdate'
26236'-mno-update'
26237     Generate code that uses (does not use) the load or store
26238     instructions that update the base register to the address of the
26239     calculated memory location.  These instructions are generated by
26240     default.  If you use '-mno-update', there is a small window between
26241     the time that the stack pointer is updated and the address of the
26242     previous frame is stored, which means code that walks the stack
26243     frame across interrupts or signals may get corrupted data.
26244
26245'-mavoid-indexed-addresses'
26246'-mno-avoid-indexed-addresses'
26247     Generate code that tries to avoid (not avoid) the use of indexed
26248     load or store instructions.  These instructions can incur a
26249     performance penalty on Power6 processors in certain situations,
26250     such as when stepping through large arrays that cross a 16M
26251     boundary.  This option is enabled by default when targeting Power6
26252     and disabled otherwise.
26253
26254'-mfused-madd'
26255'-mno-fused-madd'
26256     Generate code that uses (does not use) the floating-point multiply
26257     and accumulate instructions.  These instructions are generated by
26258     default if hardware floating point is used.  The machine-dependent
26259     '-mfused-madd' option is now mapped to the machine-independent
26260     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
26261     '-ffp-contract=off'.
26262
26263'-mmulhw'
26264'-mno-mulhw'
26265     Generate code that uses (does not use) the half-word multiply and
26266     multiply-accumulate instructions on the IBM 405, 440, 464 and 476
26267     processors.  These instructions are generated by default when
26268     targeting those processors.
26269
26270'-mdlmzb'
26271'-mno-dlmzb'
26272     Generate code that uses (does not use) the string-search 'dlmzb'
26273     instruction on the IBM 405, 440, 464 and 476 processors.  This
26274     instruction is generated by default when targeting those
26275     processors.
26276
26277'-mno-bit-align'
26278'-mbit-align'
26279     On System V.4 and embedded PowerPC systems do not (do) force
26280     structures and unions that contain bit-fields to be aligned to the
26281     base type of the bit-field.
26282
26283     For example, by default a structure containing nothing but 8
26284     'unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
26285     and has a size of 4 bytes.  By using '-mno-bit-align', the
26286     structure is aligned to a 1-byte boundary and is 1 byte in size.
26287
26288'-mno-strict-align'
26289'-mstrict-align'
26290     On System V.4 and embedded PowerPC systems do not (do) assume that
26291     unaligned memory references are handled by the system.
26292
26293'-mrelocatable'
26294'-mno-relocatable'
26295     Generate code that allows (does not allow) a static executable to
26296     be relocated to a different address at run time.  A simple embedded
26297     PowerPC system loader should relocate the entire contents of
26298     '.got2' and 4-byte locations listed in the '.fixup' section, a
26299     table of 32-bit addresses generated by this option.  For this to
26300     work, all objects linked together must be compiled with
26301     '-mrelocatable' or '-mrelocatable-lib'.  '-mrelocatable' code
26302     aligns the stack to an 8-byte boundary.
26303
26304'-mrelocatable-lib'
26305'-mno-relocatable-lib'
26306     Like '-mrelocatable', '-mrelocatable-lib' generates a '.fixup'
26307     section to allow static executables to be relocated at run time,
26308     but '-mrelocatable-lib' does not use the smaller stack alignment of
26309     '-mrelocatable'.  Objects compiled with '-mrelocatable-lib' may be
26310     linked with objects compiled with any combination of the
26311     '-mrelocatable' options.
26312
26313'-mno-toc'
26314'-mtoc'
26315     On System V.4 and embedded PowerPC systems do not (do) assume that
26316     register 2 contains a pointer to a global area pointing to the
26317     addresses used in the program.
26318
26319'-mlittle'
26320'-mlittle-endian'
26321     On System V.4 and embedded PowerPC systems compile code for the
26322     processor in little-endian mode.  The '-mlittle-endian' option is
26323     the same as '-mlittle'.
26324
26325'-mbig'
26326'-mbig-endian'
26327     On System V.4 and embedded PowerPC systems compile code for the
26328     processor in big-endian mode.  The '-mbig-endian' option is the
26329     same as '-mbig'.
26330
26331'-mdynamic-no-pic'
26332     On Darwin and Mac OS X systems, compile code so that it is not
26333     relocatable, but that its external references are relocatable.  The
26334     resulting code is suitable for applications, but not shared
26335     libraries.
26336
26337'-msingle-pic-base'
26338     Treat the register used for PIC addressing as read-only, rather
26339     than loading it in the prologue for each function.  The runtime
26340     system is responsible for initializing this register with an
26341     appropriate value before execution begins.
26342
26343'-mprioritize-restricted-insns=PRIORITY'
26344     This option controls the priority that is assigned to dispatch-slot
26345     restricted instructions during the second scheduling pass.  The
26346     argument PRIORITY takes the value '0', '1', or '2' to assign no,
26347     highest, or second-highest (respectively) priority to dispatch-slot
26348     restricted instructions.
26349
26350'-msched-costly-dep=DEPENDENCE_TYPE'
26351     This option controls which dependences are considered costly by the
26352     target during instruction scheduling.  The argument DEPENDENCE_TYPE
26353     takes one of the following values:
26354
26355     'no'
26356          No dependence is costly.
26357
26358     'all'
26359          All dependences are costly.
26360
26361     'true_store_to_load'
26362          A true dependence from store to load is costly.
26363
26364     'store_to_load'
26365          Any dependence from store to load is costly.
26366
26367     NUMBER
26368          Any dependence for which the latency is greater than or equal
26369          to NUMBER is costly.
26370
26371'-minsert-sched-nops=SCHEME'
26372     This option controls which NOP insertion scheme is used during the
26373     second scheduling pass.  The argument SCHEME takes one of the
26374     following values:
26375
26376     'no'
26377          Don't insert NOPs.
26378
26379     'pad'
26380          Pad with NOPs any dispatch group that has vacant issue slots,
26381          according to the scheduler's grouping.
26382
26383     'regroup_exact'
26384          Insert NOPs to force costly dependent insns into separate
26385          groups.  Insert exactly as many NOPs as needed to force an
26386          insn to a new group, according to the estimated processor
26387          grouping.
26388
26389     NUMBER
26390          Insert NOPs to force costly dependent insns into separate
26391          groups.  Insert NUMBER NOPs to force an insn to a new group.
26392
26393'-mcall-sysv'
26394     On System V.4 and embedded PowerPC systems compile code using
26395     calling conventions that adhere to the March 1995 draft of the
26396     System V Application Binary Interface, PowerPC processor
26397     supplement.  This is the default unless you configured GCC using
26398     'powerpc-*-eabiaix'.
26399
26400'-mcall-sysv-eabi'
26401'-mcall-eabi'
26402     Specify both '-mcall-sysv' and '-meabi' options.
26403
26404'-mcall-sysv-noeabi'
26405     Specify both '-mcall-sysv' and '-mno-eabi' options.
26406
26407'-mcall-aixdesc'
26408     On System V.4 and embedded PowerPC systems compile code for the AIX
26409     operating system.
26410
26411'-mcall-linux'
26412     On System V.4 and embedded PowerPC systems compile code for the
26413     Linux-based GNU system.
26414
26415'-mcall-freebsd'
26416     On System V.4 and embedded PowerPC systems compile code for the
26417     FreeBSD operating system.
26418
26419'-mcall-netbsd'
26420     On System V.4 and embedded PowerPC systems compile code for the
26421     NetBSD operating system.
26422
26423'-mcall-openbsd'
26424     On System V.4 and embedded PowerPC systems compile code for the
26425     OpenBSD operating system.
26426
26427'-mtraceback=TRACEBACK_TYPE'
26428     Select the type of traceback table.  Valid values for
26429     TRACEBACK_TYPE are 'full', 'part', and 'no'.
26430
26431'-maix-struct-return'
26432     Return all structures in memory (as specified by the AIX ABI).
26433
26434'-msvr4-struct-return'
26435     Return structures smaller than 8 bytes in registers (as specified
26436     by the SVR4 ABI).
26437
26438'-mabi=ABI-TYPE'
26439     Extend the current ABI with a particular extension, or remove such
26440     extension.  Valid values are: 'altivec', 'no-altivec',
26441     'ibmlongdouble', 'ieeelongdouble', 'elfv1', 'elfv2', and for AIX:
26442     'vec-extabi', 'vec-default'.
26443
26444'-mabi=ibmlongdouble'
26445     Change the current ABI to use IBM extended-precision long double.
26446     This is not likely to work if your system defaults to using IEEE
26447     extended-precision long double.  If you change the long double type
26448     from IEEE extended-precision, the compiler will issue a warning
26449     unless you use the '-Wno-psabi' option.  Requires
26450     '-mlong-double-128' to be enabled.
26451
26452'-mabi=ieeelongdouble'
26453     Change the current ABI to use IEEE extended-precision long double.
26454     This is not likely to work if your system defaults to using IBM
26455     extended-precision long double.  If you change the long double type
26456     from IBM extended-precision, the compiler will issue a warning
26457     unless you use the '-Wno-psabi' option.  Requires
26458     '-mlong-double-128' to be enabled.
26459
26460'-mabi=elfv1'
26461     Change the current ABI to use the ELFv1 ABI. This is the default
26462     ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
26463     ABI requires special system support and is likely to fail in
26464     spectacular ways.
26465
26466'-mabi=elfv2'
26467     Change the current ABI to use the ELFv2 ABI. This is the default
26468     ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
26469     ABI requires special system support and is likely to fail in
26470     spectacular ways.
26471
26472'-mgnu-attribute'
26473'-mno-gnu-attribute'
26474     Emit .gnu_attribute assembly directives to set tag/value pairs in a
26475     .gnu.attributes section that specify ABI variations in function
26476     parameters or return values.
26477
26478'-mprototype'
26479'-mno-prototype'
26480     On System V.4 and embedded PowerPC systems assume that all calls to
26481     variable argument functions are properly prototyped.  Otherwise,
26482     the compiler must insert an instruction before every non-prototyped
26483     call to set or clear bit 6 of the condition code register ('CR') to
26484     indicate whether floating-point values are passed in the
26485     floating-point registers in case the function takes variable
26486     arguments.  With '-mprototype', only calls to prototyped variable
26487     argument functions set or clear the bit.
26488
26489'-msim'
26490     On embedded PowerPC systems, assume that the startup module is
26491     called 'sim-crt0.o' and that the standard C libraries are
26492     'libsim.a' and 'libc.a'.  This is the default for
26493     'powerpc-*-eabisim' configurations.
26494
26495'-mmvme'
26496     On embedded PowerPC systems, assume that the startup module is
26497     called 'crt0.o' and the standard C libraries are 'libmvme.a' and
26498     'libc.a'.
26499
26500'-mads'
26501     On embedded PowerPC systems, assume that the startup module is
26502     called 'crt0.o' and the standard C libraries are 'libads.a' and
26503     'libc.a'.
26504
26505'-myellowknife'
26506     On embedded PowerPC systems, assume that the startup module is
26507     called 'crt0.o' and the standard C libraries are 'libyk.a' and
26508     'libc.a'.
26509
26510'-mvxworks'
26511     On System V.4 and embedded PowerPC systems, specify that you are
26512     compiling for a VxWorks system.
26513
26514'-memb'
26515     On embedded PowerPC systems, set the 'PPC_EMB' bit in the ELF flags
26516     header to indicate that 'eabi' extended relocations are used.
26517
26518'-meabi'
26519'-mno-eabi'
26520     On System V.4 and embedded PowerPC systems do (do not) adhere to
26521     the Embedded Applications Binary Interface (EABI), which is a set
26522     of modifications to the System V.4 specifications.  Selecting
26523     '-meabi' means that the stack is aligned to an 8-byte boundary, a
26524     function '__eabi' is called from 'main' to set up the EABI
26525     environment, and the '-msdata' option can use both 'r2' and 'r13'
26526     to point to two separate small data areas.  Selecting '-mno-eabi'
26527     means that the stack is aligned to a 16-byte boundary, no EABI
26528     initialization function is called from 'main', and the '-msdata'
26529     option only uses 'r13' to point to a single small data area.  The
26530     '-meabi' option is on by default if you configured GCC using one of
26531     the 'powerpc*-*-eabi*' options.
26532
26533'-msdata=eabi'
26534     On System V.4 and embedded PowerPC systems, put small initialized
26535     'const' global and static data in the '.sdata2' section, which is
26536     pointed to by register 'r2'.  Put small initialized non-'const'
26537     global and static data in the '.sdata' section, which is pointed to
26538     by register 'r13'.  Put small uninitialized global and static data
26539     in the '.sbss' section, which is adjacent to the '.sdata' section.
26540     The '-msdata=eabi' option is incompatible with the '-mrelocatable'
26541     option.  The '-msdata=eabi' option also sets the '-memb' option.
26542
26543'-msdata=sysv'
26544     On System V.4 and embedded PowerPC systems, put small global and
26545     static data in the '.sdata' section, which is pointed to by
26546     register 'r13'.  Put small uninitialized global and static data in
26547     the '.sbss' section, which is adjacent to the '.sdata' section.
26548     The '-msdata=sysv' option is incompatible with the '-mrelocatable'
26549     option.
26550
26551'-msdata=default'
26552'-msdata'
26553     On System V.4 and embedded PowerPC systems, if '-meabi' is used,
26554     compile code the same as '-msdata=eabi', otherwise compile code the
26555     same as '-msdata=sysv'.
26556
26557'-msdata=data'
26558     On System V.4 and embedded PowerPC systems, put small global data
26559     in the '.sdata' section.  Put small uninitialized global data in
26560     the '.sbss' section.  Do not use register 'r13' to address small
26561     data however.  This is the default behavior unless other '-msdata'
26562     options are used.
26563
26564'-msdata=none'
26565'-mno-sdata'
26566     On embedded PowerPC systems, put all initialized global and static
26567     data in the '.data' section, and all uninitialized data in the
26568     '.bss' section.
26569
26570'-mreadonly-in-sdata'
26571     Put read-only objects in the '.sdata' section as well.  This is the
26572     default.
26573
26574'-mblock-move-inline-limit=NUM'
26575     Inline all block moves (such as calls to 'memcpy' or structure
26576     copies) less than or equal to NUM bytes.  The minimum value for NUM
26577     is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
26578     default value is target-specific.
26579
26580'-mblock-compare-inline-limit=NUM'
26581     Generate non-looping inline code for all block compares (such as
26582     calls to 'memcmp' or structure compares) less than or equal to NUM
26583     bytes.  If NUM is 0, all inline expansion (non-loop and loop) of
26584     block compare is disabled.  The default value is target-specific.
26585
26586'-mblock-compare-inline-loop-limit=NUM'
26587     Generate an inline expansion using loop code for all block compares
26588     that are less than or equal to NUM bytes, but greater than the
26589     limit for non-loop inline block compare expansion.  If the block
26590     length is not constant, at most NUM bytes will be compared before
26591     'memcmp' is called to compare the remainder of the block.  The
26592     default value is target-specific.
26593
26594'-mstring-compare-inline-limit=NUM'
26595     Compare at most NUM string bytes with inline code.  If the
26596     difference or end of string is not found at the end of the inline
26597     compare a call to 'strcmp' or 'strncmp' will take care of the rest
26598     of the comparison.  The default is 64 bytes.
26599
26600'-G NUM'
26601     On embedded PowerPC systems, put global and static items less than
26602     or equal to NUM bytes into the small data or BSS sections instead
26603     of the normal data or BSS section.  By default, NUM is 8.  The '-G
26604     NUM' switch is also passed to the linker.  All modules should be
26605     compiled with the same '-G NUM' value.
26606
26607'-mregnames'
26608'-mno-regnames'
26609     On System V.4 and embedded PowerPC systems do (do not) emit
26610     register names in the assembly language output using symbolic
26611     forms.
26612
26613'-mlongcall'
26614'-mno-longcall'
26615     By default assume that all calls are far away so that a longer and
26616     more expensive calling sequence is required.  This is required for
26617     calls farther than 32 megabytes (33,554,432 bytes) from the current
26618     location.  A short call is generated if the compiler knows the call
26619     cannot be that far away.  This setting can be overridden by the
26620     'shortcall' function attribute, or by '#pragma longcall(0)'.
26621
26622     Some linkers are capable of detecting out-of-range calls and
26623     generating glue code on the fly.  On these systems, long calls are
26624     unnecessary and generate slower code.  As of this writing, the AIX
26625     linker can do this, as can the GNU linker for PowerPC/64.  It is
26626     planned to add this feature to the GNU linker for 32-bit PowerPC
26627     systems as well.
26628
26629     On PowerPC64 ELFv2 and 32-bit PowerPC systems with newer GNU
26630     linkers, GCC can generate long calls using an inline PLT call
26631     sequence (see '-mpltseq').  PowerPC with '-mbss-plt' and PowerPC64
26632     ELFv1 (big-endian) do not support inline PLT calls.
26633
26634     On Darwin/PPC systems, '#pragma longcall' generates 'jbsr callee,
26635     L42', plus a "branch island" (glue code).  The two target addresses
26636     represent the callee and the branch island.  The Darwin/PPC linker
26637     prefers the first address and generates a 'bl callee' if the PPC
26638     'bl' instruction reaches the callee directly; otherwise, the linker
26639     generates 'bl L42' to call the branch island.  The branch island is
26640     appended to the body of the calling function; it computes the full
26641     32-bit address of the callee and jumps to it.
26642
26643     On Mach-O (Darwin) systems, this option directs the compiler emit
26644     to the glue for every direct call, and the Darwin linker decides
26645     whether to use or discard it.
26646
26647     In the future, GCC may ignore all longcall specifications when the
26648     linker is known to generate glue.
26649
26650'-mpltseq'
26651'-mno-pltseq'
26652     Implement (do not implement) -fno-plt and long calls using an
26653     inline PLT call sequence that supports lazy linking and long calls
26654     to functions in dlopen'd shared libraries.  Inline PLT calls are
26655     only supported on PowerPC64 ELFv2 and 32-bit PowerPC systems with
26656     newer GNU linkers, and are enabled by default if the support is
26657     detected when configuring GCC, and, in the case of 32-bit PowerPC,
26658     if GCC is configured with '--enable-secureplt'.  '-mpltseq' code
26659     and '-mbss-plt' 32-bit PowerPC relocatable objects may not be
26660     linked together.
26661
26662'-mtls-markers'
26663'-mno-tls-markers'
26664     Mark (do not mark) calls to '__tls_get_addr' with a relocation
26665     specifying the function argument.  The relocation allows the linker
26666     to reliably associate function call with argument setup
26667     instructions for TLS optimization, which in turn allows GCC to
26668     better schedule the sequence.
26669
26670'-mrecip'
26671'-mno-recip'
26672     This option enables use of the reciprocal estimate and reciprocal
26673     square root estimate instructions with additional Newton-Raphson
26674     steps to increase precision instead of doing a divide or square
26675     root and divide for floating-point arguments.  You should use the
26676     '-ffast-math' option when using '-mrecip' (or at least
26677     '-funsafe-math-optimizations', '-ffinite-math-only',
26678     '-freciprocal-math' and '-fno-trapping-math').  Note that while the
26679     throughput of the sequence is generally higher than the throughput
26680     of the non-reciprocal instruction, the precision of the sequence
26681     can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
26682     0.99999994) for reciprocal square roots.
26683
26684'-mrecip=OPT'
26685     This option controls which reciprocal estimate instructions may be
26686     used.  OPT is a comma-separated list of options, which may be
26687     preceded by a '!' to invert the option:
26688
26689     'all'
26690          Enable all estimate instructions.
26691
26692     'default'
26693          Enable the default instructions, equivalent to '-mrecip'.
26694
26695     'none'
26696          Disable all estimate instructions, equivalent to '-mno-recip'.
26697
26698     'div'
26699          Enable the reciprocal approximation instructions for both
26700          single and double precision.
26701
26702     'divf'
26703          Enable the single-precision reciprocal approximation
26704          instructions.
26705
26706     'divd'
26707          Enable the double-precision reciprocal approximation
26708          instructions.
26709
26710     'rsqrt'
26711          Enable the reciprocal square root approximation instructions
26712          for both single and double precision.
26713
26714     'rsqrtf'
26715          Enable the single-precision reciprocal square root
26716          approximation instructions.
26717
26718     'rsqrtd'
26719          Enable the double-precision reciprocal square root
26720          approximation instructions.
26721
26722     So, for example, '-mrecip=all,!rsqrtd' enables all of the
26723     reciprocal estimate instructions, except for the 'FRSQRTE',
26724     'XSRSQRTEDP', and 'XVRSQRTEDP' instructions which handle the
26725     double-precision reciprocal square root calculations.
26726
26727'-mrecip-precision'
26728'-mno-recip-precision'
26729     Assume (do not assume) that the reciprocal estimate instructions
26730     provide higher-precision estimates than is mandated by the PowerPC
26731     ABI. Selecting '-mcpu=power6', '-mcpu=power7' or '-mcpu=power8'
26732     automatically selects '-mrecip-precision'.  The double-precision
26733     square root estimate instructions are not generated by default on
26734     low-precision machines, since they do not provide an estimate that
26735     converges after three steps.
26736
26737'-mveclibabi=TYPE'
26738     Specifies the ABI type to use for vectorizing intrinsics using an
26739     external library.  The only type supported at present is 'mass',
26740     which specifies to use IBM's Mathematical Acceleration Subsystem
26741     (MASS) libraries for vectorizing intrinsics using external
26742     libraries.  GCC currently emits calls to 'acosd2', 'acosf4',
26743     'acoshd2', 'acoshf4', 'asind2', 'asinf4', 'asinhd2', 'asinhf4',
26744     'atan2d2', 'atan2f4', 'atand2', 'atanf4', 'atanhd2', 'atanhf4',
26745     'cbrtd2', 'cbrtf4', 'cosd2', 'cosf4', 'coshd2', 'coshf4', 'erfcd2',
26746     'erfcf4', 'erfd2', 'erff4', 'exp2d2', 'exp2f4', 'expd2', 'expf4',
26747     'expm1d2', 'expm1f4', 'hypotd2', 'hypotf4', 'lgammad2', 'lgammaf4',
26748     'log10d2', 'log10f4', 'log1pd2', 'log1pf4', 'log2d2', 'log2f4',
26749     'logd2', 'logf4', 'powd2', 'powf4', 'sind2', 'sinf4', 'sinhd2',
26750     'sinhf4', 'sqrtd2', 'sqrtf4', 'tand2', 'tanf4', 'tanhd2', and
26751     'tanhf4' when generating code for power7.  Both '-ftree-vectorize'
26752     and '-funsafe-math-optimizations' must also be enabled.  The MASS
26753     libraries must be specified at link time.
26754
26755'-mfriz'
26756'-mno-friz'
26757     Generate (do not generate) the 'friz' instruction when the
26758     '-funsafe-math-optimizations' option is used to optimize rounding
26759     of floating-point values to 64-bit integer and back to floating
26760     point.  The 'friz' instruction does not return the same value if
26761     the floating-point number is too large to fit in an integer.
26762
26763'-mpointers-to-nested-functions'
26764'-mno-pointers-to-nested-functions'
26765     Generate (do not generate) code to load up the static chain
26766     register ('r11') when calling through a pointer on AIX and 64-bit
26767     Linux systems where a function pointer points to a 3-word
26768     descriptor giving the function address, TOC value to be loaded in
26769     register 'r2', and static chain value to be loaded in register
26770     'r11'.  The '-mpointers-to-nested-functions' is on by default.  You
26771     cannot call through pointers to nested functions or pointers to
26772     functions compiled in other languages that use the static chain if
26773     you use '-mno-pointers-to-nested-functions'.
26774
26775'-msave-toc-indirect'
26776'-mno-save-toc-indirect'
26777     Generate (do not generate) code to save the TOC value in the
26778     reserved stack location in the function prologue if the function
26779     calls through a pointer on AIX and 64-bit Linux systems.  If the
26780     TOC value is not saved in the prologue, it is saved just before the
26781     call through the pointer.  The '-mno-save-toc-indirect' option is
26782     the default.
26783
26784'-mcompat-align-parm'
26785'-mno-compat-align-parm'
26786     Generate (do not generate) code to pass structure parameters with a
26787     maximum alignment of 64 bits, for compatibility with older versions
26788     of GCC.
26789
26790     Older versions of GCC (prior to 4.9.0) incorrectly did not align a
26791     structure parameter on a 128-bit boundary when that structure
26792     contained a member requiring 128-bit alignment.  This is corrected
26793     in more recent versions of GCC. This option may be used to generate
26794     code that is compatible with functions compiled with older versions
26795     of GCC.
26796
26797     The '-mno-compat-align-parm' option is the default.
26798
26799'-mstack-protector-guard=GUARD'
26800'-mstack-protector-guard-reg=REG'
26801'-mstack-protector-guard-offset=OFFSET'
26802'-mstack-protector-guard-symbol=SYMBOL'
26803     Generate stack protection code using canary at GUARD.  Supported
26804     locations are 'global' for global canary or 'tls' for per-thread
26805     canary in the TLS block (the default with GNU libc version 2.4 or
26806     later).
26807
26808     With the latter choice the options
26809     '-mstack-protector-guard-reg=REG' and
26810     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
26811     register to use as base register for reading the canary, and from
26812     what offset from that base register.  The default for those is as
26813     specified in the relevant ABI.
26814     '-mstack-protector-guard-symbol=SYMBOL' overrides the offset with a
26815     symbol reference to a canary in the TLS block.
26816
26817'-mpcrel'
26818'-mno-pcrel'
26819     Generate (do not generate) pc-relative addressing.  The '-mpcrel'
26820     option requires that the medium code model ('-mcmodel=medium') and
26821     prefixed addressing ('-mprefixed') options are enabled.
26822
26823'-mprefixed'
26824'-mno-prefixed'
26825     Generate (do not generate) addressing modes using prefixed load and
26826     store instructions.  The '-mprefixed' option requires that the
26827     option '-mcpu=power10' (or later) is enabled.
26828
26829'-mmma'
26830'-mno-mma'
26831     Generate (do not generate) the MMA instructions.  The '-mma' option
26832     requires that the option '-mcpu=power10' (or later) is enabled.
26833
26834'-mrop-protect'
26835'-mno-rop-protect'
26836     Generate (do not generate) ROP protection instructions when the
26837     target processor supports them.  Currently this option disables the
26838     shrink-wrap optimization ('-fshrink-wrap').
26839
26840'-mprivileged'
26841'-mno-privileged'
26842     Generate (do not generate) code that will run in privileged state.
26843
26844'-mblock-ops-unaligned-vsx'
26845'-mno-block-ops-unaligned-vsx'
26846     Generate (do not generate) unaligned vsx loads and stores for
26847     inline expansion of 'memcpy' and 'memmove'.
26848
26849
26850File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
26851
268523.19.46 RX Options
26853------------------
26854
26855These command-line options are defined for RX targets:
26856
26857'-m64bit-doubles'
26858'-m32bit-doubles'
26859     Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
26860     bits ('-m32bit-doubles') in size.  The default is
26861     '-m32bit-doubles'.  _Note_ RX floating-point hardware only works on
26862     32-bit values, which is why the default is '-m32bit-doubles'.
26863
26864'-fpu'
26865'-nofpu'
26866     Enables ('-fpu') or disables ('-nofpu') the use of RX
26867     floating-point hardware.  The default is enabled for the RX600
26868     series and disabled for the RX200 series.
26869
26870     Floating-point instructions are only generated for 32-bit
26871     floating-point values, however, so the FPU hardware is not used for
26872     doubles if the '-m64bit-doubles' option is used.
26873
26874     _Note_ If the '-fpu' option is enabled then
26875     '-funsafe-math-optimizations' is also enabled automatically.  This
26876     is because the RX FPU instructions are themselves unsafe.
26877
26878'-mcpu=NAME'
26879     Selects the type of RX CPU to be targeted.  Currently three types
26880     are supported, the generic 'RX600' and 'RX200' series hardware and
26881     the specific 'RX610' CPU. The default is 'RX600'.
26882
26883     The only difference between 'RX600' and 'RX610' is that the 'RX610'
26884     does not support the 'MVTIPL' instruction.
26885
26886     The 'RX200' series does not have a hardware floating-point unit and
26887     so '-nofpu' is enabled by default when this type is selected.
26888
26889'-mbig-endian-data'
26890'-mlittle-endian-data'
26891     Store data (but not code) in the big-endian format.  The default is
26892     '-mlittle-endian-data', i.e. to store data in the little-endian
26893     format.
26894
26895'-msmall-data-limit=N'
26896     Specifies the maximum size in bytes of global and static variables
26897     which can be placed into the small data area.  Using the small data
26898     area can lead to smaller and faster code, but the size of area is
26899     limited and it is up to the programmer to ensure that the area does
26900     not overflow.  Also when the small data area is used one of the
26901     RX's registers (usually 'r13') is reserved for use pointing to this
26902     area, so it is no longer available for use by the compiler.  This
26903     could result in slower and/or larger code if variables are pushed
26904     onto the stack instead of being held in this register.
26905
26906     Note, common variables (variables that have not been initialized)
26907     and constants are not placed into the small data area as they are
26908     assigned to other sections in the output executable.
26909
26910     The default value is zero, which disables this feature.  Note, this
26911     feature is not enabled by default with higher optimization levels
26912     ('-O2' etc) because of the potentially detrimental effects of
26913     reserving a register.  It is up to the programmer to experiment and
26914     discover whether this feature is of benefit to their program.  See
26915     the description of the '-mpid' option for a description of how the
26916     actual register to hold the small data area pointer is chosen.
26917
26918'-msim'
26919'-mno-sim'
26920     Use the simulator runtime.  The default is to use the libgloss
26921     board-specific runtime.
26922
26923'-mas100-syntax'
26924'-mno-as100-syntax'
26925     When generating assembler output use a syntax that is compatible
26926     with Renesas's AS100 assembler.  This syntax can also be handled by
26927     the GAS assembler, but it has some restrictions so it is not
26928     generated by default.
26929
26930'-mmax-constant-size=N'
26931     Specifies the maximum size, in bytes, of a constant that can be
26932     used as an operand in a RX instruction.  Although the RX
26933     instruction set does allow constants of up to 4 bytes in length to
26934     be used in instructions, a longer value equates to a longer
26935     instruction.  Thus in some circumstances it can be beneficial to
26936     restrict the size of constants that are used in instructions.
26937     Constants that are too big are instead placed into a constant pool
26938     and referenced via register indirection.
26939
26940     The value N can be between 0 and 4.  A value of 0 (the default) or
26941     4 means that constants of any size are allowed.
26942
26943'-mrelax'
26944     Enable linker relaxation.  Linker relaxation is a process whereby
26945     the linker attempts to reduce the size of a program by finding
26946     shorter versions of various instructions.  Disabled by default.
26947
26948'-mint-register=N'
26949     Specify the number of registers to reserve for fast interrupt
26950     handler functions.  The value N can be between 0 and 4.  A value of
26951     1 means that register 'r13' is reserved for the exclusive use of
26952     fast interrupt handlers.  A value of 2 reserves 'r13' and 'r12'.  A
26953     value of 3 reserves 'r13', 'r12' and 'r11', and a value of 4
26954     reserves 'r13' through 'r10'.  A value of 0, the default, does not
26955     reserve any registers.
26956
26957'-msave-acc-in-interrupts'
26958     Specifies that interrupt handler functions should preserve the
26959     accumulator register.  This is only necessary if normal code might
26960     use the accumulator register, for example because it performs
26961     64-bit multiplications.  The default is to ignore the accumulator
26962     as this makes the interrupt handlers faster.
26963
26964'-mpid'
26965'-mno-pid'
26966     Enables the generation of position independent data.  When enabled
26967     any access to constant data is done via an offset from a base
26968     address held in a register.  This allows the location of constant
26969     data to be determined at run time without requiring the executable
26970     to be relocated, which is a benefit to embedded applications with
26971     tight memory constraints.  Data that can be modified is not
26972     affected by this option.
26973
26974     Note, using this feature reserves a register, usually 'r13', for
26975     the constant data base address.  This can result in slower and/or
26976     larger code, especially in complicated functions.
26977
26978     The actual register chosen to hold the constant data base address
26979     depends upon whether the '-msmall-data-limit' and/or the
26980     '-mint-register' command-line options are enabled.  Starting with
26981     register 'r13' and proceeding downwards, registers are allocated
26982     first to satisfy the requirements of '-mint-register', then '-mpid'
26983     and finally '-msmall-data-limit'.  Thus it is possible for the
26984     small data area register to be 'r8' if both '-mint-register=4' and
26985     '-mpid' are specified on the command line.
26986
26987     By default this feature is not enabled.  The default can be
26988     restored via the '-mno-pid' command-line option.
26989
26990'-mno-warn-multiple-fast-interrupts'
26991'-mwarn-multiple-fast-interrupts'
26992     Prevents GCC from issuing a warning message if it finds more than
26993     one fast interrupt handler when it is compiling a file.  The
26994     default is to issue a warning for each extra fast interrupt handler
26995     found, as the RX only supports one such interrupt.
26996
26997'-mallow-string-insns'
26998'-mno-allow-string-insns'
26999     Enables or disables the use of the string manipulation instructions
27000     'SMOVF', 'SCMPU', 'SMOVB', 'SMOVU', 'SUNTIL' 'SWHILE' and also the
27001     'RMPA' instruction.  These instructions may prefetch data, which is
27002     not safe to do if accessing an I/O register.  (See section 12.2.7
27003     of the RX62N Group User's Manual for more information).
27004
27005     The default is to allow these instructions, but it is not possible
27006     for GCC to reliably detect all circumstances where a string
27007     instruction might be used to access an I/O register, so their use
27008     cannot be disabled automatically.  Instead it is reliant upon the
27009     programmer to use the '-mno-allow-string-insns' option if their
27010     program accesses I/O space.
27011
27012     When the instructions are enabled GCC defines the C preprocessor
27013     symbol '__RX_ALLOW_STRING_INSNS__', otherwise it defines the symbol
27014     '__RX_DISALLOW_STRING_INSNS__'.
27015
27016'-mjsr'
27017'-mno-jsr'
27018     Use only (or not only) 'JSR' instructions to access functions.
27019     This option can be used when code size exceeds the range of 'BSR'
27020     instructions.  Note that '-mno-jsr' does not mean to not use 'JSR'
27021     but instead means that any type of branch may be used.
27022
27023 _Note:_ The generic GCC command-line option '-ffixed-REG' has special
27024significance to the RX port when used with the 'interrupt' function
27025attribute.  This attribute indicates a function intended to process fast
27026interrupts.  GCC ensures that it only uses the registers 'r10', 'r11',
27027'r12' and/or 'r13' and only provided that the normal use of the
27028corresponding registers have been restricted via the '-ffixed-REG' or
27029'-mint-register' command-line options.
27030
27031
27032File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
27033
270343.19.47 S/390 and zSeries Options
27035---------------------------------
27036
27037These are the '-m' options defined for the S/390 and zSeries
27038architecture.
27039
27040'-mhard-float'
27041'-msoft-float'
27042     Use (do not use) the hardware floating-point instructions and
27043     registers for floating-point operations.  When '-msoft-float' is
27044     specified, functions in 'libgcc.a' are used to perform
27045     floating-point operations.  When '-mhard-float' is specified, the
27046     compiler generates IEEE floating-point instructions.  This is the
27047     default.
27048
27049'-mhard-dfp'
27050'-mno-hard-dfp'
27051     Use (do not use) the hardware decimal-floating-point instructions
27052     for decimal-floating-point operations.  When '-mno-hard-dfp' is
27053     specified, functions in 'libgcc.a' are used to perform
27054     decimal-floating-point operations.  When '-mhard-dfp' is specified,
27055     the compiler generates decimal-floating-point hardware
27056     instructions.  This is the default for '-march=z9-ec' or higher.
27057
27058'-mlong-double-64'
27059'-mlong-double-128'
27060     These switches control the size of 'long double' type.  A size of
27061     64 bits makes the 'long double' type equivalent to the 'double'
27062     type.  This is the default.
27063
27064'-mbackchain'
27065'-mno-backchain'
27066     Store (do not store) the address of the caller's frame as backchain
27067     pointer into the callee's stack frame.  A backchain may be needed
27068     to allow debugging using tools that do not understand DWARF call
27069     frame information.  When '-mno-packed-stack' is in effect, the
27070     backchain pointer is stored at the bottom of the stack frame; when
27071     '-mpacked-stack' is in effect, the backchain is placed into the
27072     topmost word of the 96/160 byte register save area.
27073
27074     In general, code compiled with '-mbackchain' is call-compatible
27075     with code compiled with '-mno-backchain'; however, use of the
27076     backchain for debugging purposes usually requires that the whole
27077     binary is built with '-mbackchain'.  Note that the combination of
27078     '-mbackchain', '-mpacked-stack' and '-mhard-float' is not
27079     supported.  In order to build a linux kernel use '-msoft-float'.
27080
27081     The default is to not maintain the backchain.
27082
27083'-mpacked-stack'
27084'-mno-packed-stack'
27085     Use (do not use) the packed stack layout.  When '-mno-packed-stack'
27086     is specified, the compiler uses the all fields of the 96/160 byte
27087     register save area only for their default purpose; unused fields
27088     still take up stack space.  When '-mpacked-stack' is specified,
27089     register save slots are densely packed at the top of the register
27090     save area; unused space is reused for other purposes, allowing for
27091     more efficient use of the available stack space.  However, when
27092     '-mbackchain' is also in effect, the topmost word of the save area
27093     is always used to store the backchain, and the return address
27094     register is always saved two words below the backchain.
27095
27096     As long as the stack frame backchain is not used, code generated
27097     with '-mpacked-stack' is call-compatible with code generated with
27098     '-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
27099     for S/390 or zSeries generated code that uses the stack frame
27100     backchain at run time, not just for debugging purposes.  Such code
27101     is not call-compatible with code compiled with '-mpacked-stack'.
27102     Also, note that the combination of '-mbackchain', '-mpacked-stack'
27103     and '-mhard-float' is not supported.  In order to build a linux
27104     kernel use '-msoft-float'.
27105
27106     The default is to not use the packed stack layout.
27107
27108'-msmall-exec'
27109'-mno-small-exec'
27110     Generate (or do not generate) code using the 'bras' instruction to
27111     do subroutine calls.  This only works reliably if the total
27112     executable size does not exceed 64k.  The default is to use the
27113     'basr' instruction instead, which does not have this limitation.
27114
27115'-m64'
27116'-m31'
27117     When '-m31' is specified, generate code compliant to the GNU/Linux
27118     for S/390 ABI.  When '-m64' is specified, generate code compliant
27119     to the GNU/Linux for zSeries ABI.  This allows GCC in particular to
27120     generate 64-bit instructions.  For the 's390' targets, the default
27121     is '-m31', while the 's390x' targets default to '-m64'.
27122
27123'-mzarch'
27124'-mesa'
27125     When '-mzarch' is specified, generate code using the instructions
27126     available on z/Architecture.  When '-mesa' is specified, generate
27127     code using the instructions available on ESA/390.  Note that
27128     '-mesa' is not possible with '-m64'.  When generating code
27129     compliant to the GNU/Linux for S/390 ABI, the default is '-mesa'.
27130     When generating code compliant to the GNU/Linux for zSeries ABI,
27131     the default is '-mzarch'.
27132
27133'-mhtm'
27134'-mno-htm'
27135     The '-mhtm' option enables a set of builtins making use of
27136     instructions available with the transactional execution facility
27137     introduced with the IBM zEnterprise EC12 machine generation *note
27138     S/390 System z Built-in Functions::.  '-mhtm' is enabled by default
27139     when using '-march=zEC12'.
27140
27141'-mvx'
27142'-mno-vx'
27143     When '-mvx' is specified, generate code using the instructions
27144     available with the vector extension facility introduced with the
27145     IBM z13 machine generation.  This option changes the ABI for some
27146     vector type values with regard to alignment and calling
27147     conventions.  In case vector type values are being used in an
27148     ABI-relevant context a GAS '.gnu_attribute' command will be added
27149     to mark the resulting binary with the ABI used.  '-mvx' is enabled
27150     by default when using '-march=z13'.
27151
27152'-mzvector'
27153'-mno-zvector'
27154     The '-mzvector' option enables vector language extensions and
27155     builtins using instructions available with the vector extension
27156     facility introduced with the IBM z13 machine generation.  This
27157     option adds support for 'vector' to be used as a keyword to define
27158     vector type variables and arguments.  'vector' is only available
27159     when GNU extensions are enabled.  It will not be expanded when
27160     requesting strict standard compliance e.g. with '-std=c99'.  In
27161     addition to the GCC low-level builtins '-mzvector' enables a set of
27162     builtins added for compatibility with AltiVec-style implementations
27163     like Power and Cell.  In order to make use of these builtins the
27164     header file 'vecintrin.h' needs to be included.  '-mzvector' is
27165     disabled by default.
27166
27167'-mmvcle'
27168'-mno-mvcle'
27169     Generate (or do not generate) code using the 'mvcle' instruction to
27170     perform block moves.  When '-mno-mvcle' is specified, use a 'mvc'
27171     loop instead.  This is the default unless optimizing for size.
27172
27173'-mdebug'
27174'-mno-debug'
27175     Print (or do not print) additional debug information when
27176     compiling.  The default is to not print debug information.
27177
27178'-march=CPU-TYPE'
27179     Generate code that runs on CPU-TYPE, which is the name of a system
27180     representing a certain processor type.  Possible values for
27181     CPU-TYPE are 'z900'/'arch5', 'z990'/'arch6', 'z9-109',
27182     'z9-ec'/'arch7', 'z10'/'arch8', 'z196'/'arch9', 'zEC12',
27183     'z13'/'arch11', 'z14'/'arch12', 'z15'/'arch13', 'z16'/'arch14', and
27184     'native'.
27185
27186     The default is '-march=z900'.
27187
27188     Specifying 'native' as cpu type can be used to select the best
27189     architecture option for the host processor.  '-march=native' has no
27190     effect if GCC does not recognize the processor.
27191
27192'-mtune=CPU-TYPE'
27193     Tune to CPU-TYPE everything applicable about the generated code,
27194     except for the ABI and the set of available instructions.  The list
27195     of CPU-TYPE values is the same as for '-march'.  The default is the
27196     value used for '-march'.
27197
27198'-mtpf-trace'
27199'-mno-tpf-trace'
27200     Generate code that adds (does not add) in TPF OS specific branches
27201     to trace routines in the operating system.  This option is off by
27202     default, even when compiling for the TPF OS.
27203
27204'-mtpf-trace-skip'
27205'-mno-tpf-trace-skip'
27206     Generate code that changes (does not change) the default branch
27207     targets enabled by '-mtpf-trace' to point to specialized trace
27208     routines providing the ability of selectively skipping function
27209     trace entries for the TPF OS. This option is off by default, even
27210     when compiling for the TPF OS and specifying '-mtpf-trace'.
27211
27212'-mfused-madd'
27213'-mno-fused-madd'
27214     Generate code that uses (does not use) the floating-point multiply
27215     and accumulate instructions.  These instructions are generated by
27216     default if hardware floating point is used.
27217
27218'-mwarn-framesize=FRAMESIZE'
27219     Emit a warning if the current function exceeds the given frame
27220     size.  Because this is a compile-time check it doesn't need to be a
27221     real problem when the program runs.  It is intended to identify
27222     functions that most probably cause a stack overflow.  It is useful
27223     to be used in an environment with limited stack size e.g. the linux
27224     kernel.
27225
27226'-mwarn-dynamicstack'
27227     Emit a warning if the function calls 'alloca' or uses
27228     dynamically-sized arrays.  This is generally a bad idea with a
27229     limited stack size.
27230
27231'-mstack-guard=STACK-GUARD'
27232'-mstack-size=STACK-SIZE'
27233     If these options are provided the S/390 back end emits additional
27234     instructions in the function prologue that trigger a trap if the
27235     stack size is STACK-GUARD bytes above the STACK-SIZE (remember that
27236     the stack on S/390 grows downward).  If the STACK-GUARD option is
27237     omitted the smallest power of 2 larger than the frame size of the
27238     compiled function is chosen.  These options are intended to be used
27239     to help debugging stack overflow problems.  The additionally
27240     emitted code causes only little overhead and hence can also be used
27241     in production-like systems without greater performance degradation.
27242     The given values have to be exact powers of 2 and STACK-SIZE has to
27243     be greater than STACK-GUARD without exceeding 64k.  In order to be
27244     efficient the extra code makes the assumption that the stack starts
27245     at an address aligned to the value given by STACK-SIZE.  The
27246     STACK-GUARD option can only be used in conjunction with STACK-SIZE.
27247
27248'-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS'
27249     If the hotpatch option is enabled, a "hot-patching" function
27250     prologue is generated for all functions in the compilation unit.
27251     The funtion label is prepended with the given number of two-byte
27252     NOP instructions (PRE-HALFWORDS, maximum 1000000).  After the
27253     label, 2 * POST-HALFWORDS bytes are appended, using the largest NOP
27254     like instructions the architecture allows (maximum 1000000).
27255
27256     If both arguments are zero, hotpatching is disabled.
27257
27258     This option can be overridden for individual functions with the
27259     'hotpatch' attribute.
27260
27261
27262File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
27263
272643.19.48 Score Options
27265---------------------
27266
27267These options are defined for Score implementations:
27268
27269'-meb'
27270     Compile code for big-endian mode.  This is the default.
27271
27272'-mel'
27273     Compile code for little-endian mode.
27274
27275'-mnhwloop'
27276     Disable generation of 'bcnz' instructions.
27277
27278'-muls'
27279     Enable generation of unaligned load and store instructions.
27280
27281'-mmac'
27282     Enable the use of multiply-accumulate instructions.  Disabled by
27283     default.
27284
27285'-mscore5'
27286     Specify the SCORE5 as the target architecture.
27287
27288'-mscore5u'
27289     Specify the SCORE5U of the target architecture.
27290
27291'-mscore7'
27292     Specify the SCORE7 as the target architecture.  This is the
27293     default.
27294
27295'-mscore7d'
27296     Specify the SCORE7D as the target architecture.
27297
27298
27299File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
27300
273013.19.49 SH Options
27302------------------
27303
27304These '-m' options are defined for the SH implementations:
27305
27306'-m1'
27307     Generate code for the SH1.
27308
27309'-m2'
27310     Generate code for the SH2.
27311
27312'-m2e'
27313     Generate code for the SH2e.
27314
27315'-m2a-nofpu'
27316     Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
27317     way that the floating-point unit is not used.
27318
27319'-m2a-single-only'
27320     Generate code for the SH2a-FPU, in such a way that no
27321     double-precision floating-point operations are used.
27322
27323'-m2a-single'
27324     Generate code for the SH2a-FPU assuming the floating-point unit is
27325     in single-precision mode by default.
27326
27327'-m2a'
27328     Generate code for the SH2a-FPU assuming the floating-point unit is
27329     in double-precision mode by default.
27330
27331'-m3'
27332     Generate code for the SH3.
27333
27334'-m3e'
27335     Generate code for the SH3e.
27336
27337'-m4-nofpu'
27338     Generate code for the SH4 without a floating-point unit.
27339
27340'-m4-single-only'
27341     Generate code for the SH4 with a floating-point unit that only
27342     supports single-precision arithmetic.
27343
27344'-m4-single'
27345     Generate code for the SH4 assuming the floating-point unit is in
27346     single-precision mode by default.
27347
27348'-m4'
27349     Generate code for the SH4.
27350
27351'-m4-100'
27352     Generate code for SH4-100.
27353
27354'-m4-100-nofpu'
27355     Generate code for SH4-100 in such a way that the floating-point
27356     unit is not used.
27357
27358'-m4-100-single'
27359     Generate code for SH4-100 assuming the floating-point unit is in
27360     single-precision mode by default.
27361
27362'-m4-100-single-only'
27363     Generate code for SH4-100 in such a way that no double-precision
27364     floating-point operations are used.
27365
27366'-m4-200'
27367     Generate code for SH4-200.
27368
27369'-m4-200-nofpu'
27370     Generate code for SH4-200 without in such a way that the
27371     floating-point unit is not used.
27372
27373'-m4-200-single'
27374     Generate code for SH4-200 assuming the floating-point unit is in
27375     single-precision mode by default.
27376
27377'-m4-200-single-only'
27378     Generate code for SH4-200 in such a way that no double-precision
27379     floating-point operations are used.
27380
27381'-m4-300'
27382     Generate code for SH4-300.
27383
27384'-m4-300-nofpu'
27385     Generate code for SH4-300 without in such a way that the
27386     floating-point unit is not used.
27387
27388'-m4-300-single'
27389     Generate code for SH4-300 in such a way that no double-precision
27390     floating-point operations are used.
27391
27392'-m4-300-single-only'
27393     Generate code for SH4-300 in such a way that no double-precision
27394     floating-point operations are used.
27395
27396'-m4-340'
27397     Generate code for SH4-340 (no MMU, no FPU).
27398
27399'-m4-500'
27400     Generate code for SH4-500 (no FPU). Passes '-isa=sh4-nofpu' to the
27401     assembler.
27402
27403'-m4a-nofpu'
27404     Generate code for the SH4al-dsp, or for a SH4a in such a way that
27405     the floating-point unit is not used.
27406
27407'-m4a-single-only'
27408     Generate code for the SH4a, in such a way that no double-precision
27409     floating-point operations are used.
27410
27411'-m4a-single'
27412     Generate code for the SH4a assuming the floating-point unit is in
27413     single-precision mode by default.
27414
27415'-m4a'
27416     Generate code for the SH4a.
27417
27418'-m4al'
27419     Same as '-m4a-nofpu', except that it implicitly passes '-dsp' to
27420     the assembler.  GCC doesn't generate any DSP instructions at the
27421     moment.
27422
27423'-mb'
27424     Compile code for the processor in big-endian mode.
27425
27426'-ml'
27427     Compile code for the processor in little-endian mode.
27428
27429'-mdalign'
27430     Align doubles at 64-bit boundaries.  Note that this changes the
27431     calling conventions, and thus some functions from the standard C
27432     library do not work unless you recompile it first with '-mdalign'.
27433
27434'-mrelax'
27435     Shorten some address references at link time, when possible; uses
27436     the linker option '-relax'.
27437
27438'-mbigtable'
27439     Use 32-bit offsets in 'switch' tables.  The default is to use
27440     16-bit offsets.
27441
27442'-mbitops'
27443     Enable the use of bit manipulation instructions on SH2A.
27444
27445'-mfmovd'
27446     Enable the use of the instruction 'fmovd'.  Check '-mdalign' for
27447     alignment constraints.
27448
27449'-mrenesas'
27450     Comply with the calling conventions defined by Renesas.
27451
27452'-mno-renesas'
27453     Comply with the calling conventions defined for GCC before the
27454     Renesas conventions were available.  This option is the default for
27455     all targets of the SH toolchain.
27456
27457'-mnomacsave'
27458     Mark the 'MAC' register as call-clobbered, even if '-mrenesas' is
27459     given.
27460
27461'-mieee'
27462'-mno-ieee'
27463     Control the IEEE compliance of floating-point comparisons, which
27464     affects the handling of cases where the result of a comparison is
27465     unordered.  By default '-mieee' is implicitly enabled.  If
27466     '-ffinite-math-only' is enabled '-mno-ieee' is implicitly set,
27467     which results in faster floating-point greater-equal and less-equal
27468     comparisons.  The implicit settings can be overridden by specifying
27469     either '-mieee' or '-mno-ieee'.
27470
27471'-minline-ic_invalidate'
27472     Inline code to invalidate instruction cache entries after setting
27473     up nested function trampolines.  This option has no effect if
27474     '-musermode' is in effect and the selected code generation option
27475     (e.g. '-m4') does not allow the use of the 'icbi' instruction.  If
27476     the selected code generation option does not allow the use of the
27477     'icbi' instruction, and '-musermode' is not in effect, the inlined
27478     code manipulates the instruction cache address array directly with
27479     an associative write.  This not only requires privileged mode at
27480     run time, but it also fails if the cache line had been mapped via
27481     the TLB and has become unmapped.
27482
27483'-misize'
27484     Dump instruction size and location in the assembly code.
27485
27486'-mpadstruct'
27487     This option is deprecated.  It pads structures to multiple of 4
27488     bytes, which is incompatible with the SH ABI.
27489
27490'-matomic-model=MODEL'
27491     Sets the model of atomic operations and additional parameters as a
27492     comma separated list.  For details on the atomic built-in functions
27493     see *note __atomic Builtins::.  The following models and parameters
27494     are supported:
27495
27496     'none'
27497          Disable compiler generated atomic sequences and emit library
27498          calls for atomic operations.  This is the default if the
27499          target is not 'sh*-*-linux*'.
27500
27501     'soft-gusa'
27502          Generate GNU/Linux compatible gUSA software atomic sequences
27503          for the atomic built-in functions.  The generated atomic
27504          sequences require additional support from the
27505          interrupt/exception handling code of the system and are only
27506          suitable for SH3* and SH4* single-core systems.  This option
27507          is enabled by default when the target is 'sh*-*-linux*' and
27508          SH3* or SH4*.  When the target is SH4A, this option also
27509          partially utilizes the hardware atomic instructions 'movli.l'
27510          and 'movco.l' to create more efficient code, unless 'strict'
27511          is specified.
27512
27513     'soft-tcb'
27514          Generate software atomic sequences that use a variable in the
27515          thread control block.  This is a variation of the gUSA
27516          sequences which can also be used on SH1* and SH2* targets.
27517          The generated atomic sequences require additional support from
27518          the interrupt/exception handling code of the system and are
27519          only suitable for single-core systems.  When using this model,
27520          the 'gbr-offset=' parameter has to be specified as well.
27521
27522     'soft-imask'
27523          Generate software atomic sequences that temporarily disable
27524          interrupts by setting 'SR.IMASK = 1111'.  This model works
27525          only when the program runs in privileged mode and is only
27526          suitable for single-core systems.  Additional support from the
27527          interrupt/exception handling code of the system is not
27528          required.  This model is enabled by default when the target is
27529          'sh*-*-linux*' and SH1* or SH2*.
27530
27531     'hard-llcs'
27532          Generate hardware atomic sequences using the 'movli.l' and
27533          'movco.l' instructions only.  This is only available on SH4A
27534          and is suitable for multi-core systems.  Since the hardware
27535          instructions support only 32 bit atomic variables access to 8
27536          or 16 bit variables is emulated with 32 bit accesses.  Code
27537          compiled with this option is also compatible with other
27538          software atomic model interrupt/exception handling systems if
27539          executed on an SH4A system.  Additional support from the
27540          interrupt/exception handling code of the system is not
27541          required for this model.
27542
27543     'gbr-offset='
27544          This parameter specifies the offset in bytes of the variable
27545          in the thread control block structure that should be used by
27546          the generated atomic sequences when the 'soft-tcb' model has
27547          been selected.  For other models this parameter is ignored.
27548          The specified value must be an integer multiple of four and in
27549          the range 0-1020.
27550
27551     'strict'
27552          This parameter prevents mixed usage of multiple atomic models,
27553          even if they are compatible, and makes the compiler generate
27554          atomic sequences of the specified model only.
27555
27556'-mtas'
27557     Generate the 'tas.b' opcode for '__atomic_test_and_set'.  Notice
27558     that depending on the particular hardware and software
27559     configuration this can degrade overall performance due to the
27560     operand cache line flushes that are implied by the 'tas.b'
27561     instruction.  On multi-core SH4A processors the 'tas.b' instruction
27562     must be used with caution since it can result in data corruption
27563     for certain cache configurations.
27564
27565'-mprefergot'
27566     When generating position-independent code, emit function calls
27567     using the Global Offset Table instead of the Procedure Linkage
27568     Table.
27569
27570'-musermode'
27571'-mno-usermode'
27572     Don't allow (allow) the compiler generating privileged mode code.
27573     Specifying '-musermode' also implies '-mno-inline-ic_invalidate' if
27574     the inlined code would not work in user mode.  '-musermode' is the
27575     default when the target is 'sh*-*-linux*'.  If the target is SH1*
27576     or SH2* '-musermode' has no effect, since there is no user mode.
27577
27578'-multcost=NUMBER'
27579     Set the cost to assume for a multiply insn.
27580
27581'-mdiv=STRATEGY'
27582     Set the division strategy to be used for integer division
27583     operations.  STRATEGY can be one of:
27584
27585     'call-div1'
27586          Calls a library function that uses the single-step division
27587          instruction 'div1' to perform the operation.  Division by zero
27588          calculates an unspecified result and does not trap.  This is
27589          the default except for SH4, SH2A and SHcompact.
27590
27591     'call-fp'
27592          Calls a library function that performs the operation in double
27593          precision floating point.  Division by zero causes a
27594          floating-point exception.  This is the default for SHcompact
27595          with FPU. Specifying this for targets that do not have a
27596          double precision FPU defaults to 'call-div1'.
27597
27598     'call-table'
27599          Calls a library function that uses a lookup table for small
27600          divisors and the 'div1' instruction with case distinction for
27601          larger divisors.  Division by zero calculates an unspecified
27602          result and does not trap.  This is the default for SH4.
27603          Specifying this for targets that do not have dynamic shift
27604          instructions defaults to 'call-div1'.
27605
27606     When a division strategy has not been specified the default
27607     strategy is selected based on the current target.  For SH2A the
27608     default strategy is to use the 'divs' and 'divu' instructions
27609     instead of library function calls.
27610
27611'-maccumulate-outgoing-args'
27612     Reserve space once for outgoing arguments in the function prologue
27613     rather than around each call.  Generally beneficial for performance
27614     and size.  Also needed for unwinding to avoid changing the stack
27615     frame around conditional code.
27616
27617'-mdivsi3_libfunc=NAME'
27618     Set the name of the library function used for 32-bit signed
27619     division to NAME.  This only affects the name used in the 'call'
27620     division strategies, and the compiler still expects the same sets
27621     of input/output/clobbered registers as if this option were not
27622     present.
27623
27624'-mfixed-range=REGISTER-RANGE'
27625     Generate code treating the given register range as fixed registers.
27626     A fixed register is one that the register allocator cannot use.
27627     This is useful when compiling kernel code.  A register range is
27628     specified as two registers separated by a dash.  Multiple register
27629     ranges can be specified separated by a comma.
27630
27631'-mbranch-cost=NUM'
27632     Assume NUM to be the cost for a branch instruction.  Higher numbers
27633     make the compiler try to generate more branch-free code if
27634     possible.  If not specified the value is selected depending on the
27635     processor type that is being compiled for.
27636
27637'-mzdcbranch'
27638'-mno-zdcbranch'
27639     Assume (do not assume) that zero displacement conditional branch
27640     instructions 'bt' and 'bf' are fast.  If '-mzdcbranch' is
27641     specified, the compiler prefers zero displacement branch code
27642     sequences.  This is enabled by default when generating code for SH4
27643     and SH4A. It can be explicitly disabled by specifying
27644     '-mno-zdcbranch'.
27645
27646'-mcbranch-force-delay-slot'
27647     Force the usage of delay slots for conditional branches, which
27648     stuffs the delay slot with a 'nop' if a suitable instruction cannot
27649     be found.  By default this option is disabled.  It can be enabled
27650     to work around hardware bugs as found in the original SH7055.
27651
27652'-mfused-madd'
27653'-mno-fused-madd'
27654     Generate code that uses (does not use) the floating-point multiply
27655     and accumulate instructions.  These instructions are generated by
27656     default if hardware floating point is used.  The machine-dependent
27657     '-mfused-madd' option is now mapped to the machine-independent
27658     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
27659     '-ffp-contract=off'.
27660
27661'-mfsca'
27662'-mno-fsca'
27663     Allow or disallow the compiler to emit the 'fsca' instruction for
27664     sine and cosine approximations.  The option '-mfsca' must be used
27665     in combination with '-funsafe-math-optimizations'.  It is enabled
27666     by default when generating code for SH4A. Using '-mno-fsca'
27667     disables sine and cosine approximations even if
27668     '-funsafe-math-optimizations' is in effect.
27669
27670'-mfsrra'
27671'-mno-fsrra'
27672     Allow or disallow the compiler to emit the 'fsrra' instruction for
27673     reciprocal square root approximations.  The option '-mfsrra' must
27674     be used in combination with '-funsafe-math-optimizations' and
27675     '-ffinite-math-only'.  It is enabled by default when generating
27676     code for SH4A. Using '-mno-fsrra' disables reciprocal square root
27677     approximations even if '-funsafe-math-optimizations' and
27678     '-ffinite-math-only' are in effect.
27679
27680'-mpretend-cmove'
27681     Prefer zero-displacement conditional branches for conditional move
27682     instruction patterns.  This can result in faster code on the SH4
27683     processor.
27684
27685'-mfdpic'
27686     Generate code using the FDPIC ABI.
27687
27688
27689File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
27690
276913.19.50 Solaris 2 Options
27692-------------------------
27693
27694These '-m' options are supported on Solaris 2:
27695
27696'-mclear-hwcap'
27697     '-mclear-hwcap' tells the compiler to remove the hardware
27698     capabilities generated by the Solaris assembler.  This is only
27699     necessary when object files use ISA extensions not supported by the
27700     current machine, but check at runtime whether or not to use them.
27701
27702'-mimpure-text'
27703     '-mimpure-text', used in addition to '-shared', tells the compiler
27704     to not pass '-z text' to the linker when linking a shared object.
27705     Using this option, you can link position-dependent code into a
27706     shared object.
27707
27708     '-mimpure-text' suppresses the "relocations remain against
27709     allocatable but non-writable sections" linker error message.
27710     However, the necessary relocations trigger copy-on-write, and the
27711     shared object is not actually shared across processes.  Instead of
27712     using '-mimpure-text', you should compile all source code with
27713     '-fpic' or '-fPIC'.
27714
27715 These switches are supported in addition to the above on Solaris 2:
27716
27717'-pthreads'
27718     This is a synonym for '-pthread'.
27719
27720
27721File: gcc.info,  Node: SPARC Options,  Next: System V Options,  Prev: Solaris 2 Options,  Up: Submodel Options
27722
277233.19.51 SPARC Options
27724---------------------
27725
27726These '-m' options are supported on the SPARC:
27727
27728'-mno-app-regs'
27729'-mapp-regs'
27730     Specify '-mapp-regs' to generate output using the global registers
27731     2 through 4, which the SPARC SVR4 ABI reserves for applications.
27732     Like the global register 1, each global register 2 through 4 is
27733     then treated as an allocable register that is clobbered by function
27734     calls.  This is the default.
27735
27736     To be fully SVR4 ABI-compliant at the cost of some performance
27737     loss, specify '-mno-app-regs'.  You should compile libraries and
27738     system software with this option.
27739
27740'-mflat'
27741'-mno-flat'
27742     With '-mflat', the compiler does not generate save/restore
27743     instructions and uses a "flat" or single register window model.
27744     This model is compatible with the regular register window model.
27745     The local registers and the input registers (0-5) are still treated
27746     as "call-saved" registers and are saved on the stack as needed.
27747
27748     With '-mno-flat' (the default), the compiler generates save/restore
27749     instructions (except for leaf functions).  This is the normal
27750     operating mode.
27751
27752'-mfpu'
27753'-mhard-float'
27754     Generate output containing floating-point instructions.  This is
27755     the default.
27756
27757'-mno-fpu'
27758'-msoft-float'
27759     Generate output containing library calls for floating point.
27760     *Warning:* the requisite libraries are not available for all SPARC
27761     targets.  Normally the facilities of the machine's usual C compiler
27762     are used, but this cannot be done directly in cross-compilation.
27763     You must make your own arrangements to provide suitable library
27764     functions for cross-compilation.  The embedded targets
27765     'sparc-*-aout' and 'sparclite-*-*' do provide software
27766     floating-point support.
27767
27768     '-msoft-float' changes the calling convention in the output file;
27769     therefore, it is only useful if you compile _all_ of a program with
27770     this option.  In particular, you need to compile 'libgcc.a', the
27771     library that comes with GCC, with '-msoft-float' in order for this
27772     to work.
27773
27774'-mhard-quad-float'
27775     Generate output containing quad-word (long double) floating-point
27776     instructions.
27777
27778'-msoft-quad-float'
27779     Generate output containing library calls for quad-word (long
27780     double) floating-point instructions.  The functions called are
27781     those specified in the SPARC ABI.  This is the default.
27782
27783     As of this writing, there are no SPARC implementations that have
27784     hardware support for the quad-word floating-point instructions.
27785     They all invoke a trap handler for one of these instructions, and
27786     then the trap handler emulates the effect of the instruction.
27787     Because of the trap handler overhead, this is much slower than
27788     calling the ABI library routines.  Thus the '-msoft-quad-float'
27789     option is the default.
27790
27791'-mno-unaligned-doubles'
27792'-munaligned-doubles'
27793     Assume that doubles have 8-byte alignment.  This is the default.
27794
27795     With '-munaligned-doubles', GCC assumes that doubles have 8-byte
27796     alignment only if they are contained in another type, or if they
27797     have an absolute address.  Otherwise, it assumes they have 4-byte
27798     alignment.  Specifying this option avoids some rare compatibility
27799     problems with code generated by other compilers.  It is not the
27800     default because it results in a performance loss, especially for
27801     floating-point code.
27802
27803'-muser-mode'
27804'-mno-user-mode'
27805     Do not generate code that can only run in supervisor mode.  This is
27806     relevant only for the 'casa' instruction emitted for the LEON3
27807     processor.  This is the default.
27808
27809'-mfaster-structs'
27810'-mno-faster-structs'
27811     With '-mfaster-structs', the compiler assumes that structures
27812     should have 8-byte alignment.  This enables the use of pairs of
27813     'ldd' and 'std' instructions for copies in structure assignment, in
27814     place of twice as many 'ld' and 'st' pairs.  However, the use of
27815     this changed alignment directly violates the SPARC ABI.  Thus, it's
27816     intended only for use on targets where the developer acknowledges
27817     that their resulting code is not directly in line with the rules of
27818     the ABI.
27819
27820'-mstd-struct-return'
27821'-mno-std-struct-return'
27822     With '-mstd-struct-return', the compiler generates checking code in
27823     functions returning structures or unions to detect size mismatches
27824     between the two sides of function calls, as per the 32-bit ABI.
27825
27826     The default is '-mno-std-struct-return'.  This option has no effect
27827     in 64-bit mode.
27828
27829'-mlra'
27830'-mno-lra'
27831     Enable Local Register Allocation.  This is the default for SPARC
27832     since GCC 7 so '-mno-lra' needs to be passed to get old Reload.
27833
27834'-mcpu=CPU_TYPE'
27835     Set the instruction set, register set, and instruction scheduling
27836     parameters for machine type CPU_TYPE.  Supported values for
27837     CPU_TYPE are 'v7', 'cypress', 'v8', 'supersparc', 'hypersparc',
27838     'leon', 'leon3', 'leon3v7', 'leon5', 'sparclite', 'f930', 'f934',
27839     'sparclite86x', 'sparclet', 'tsc701', 'v9', 'ultrasparc',
27840     'ultrasparc3', 'niagara', 'niagara2', 'niagara3', 'niagara4',
27841     'niagara7' and 'm8'.
27842
27843     Native Solaris and GNU/Linux toolchains also support the value
27844     'native', which selects the best architecture option for the host
27845     processor.  '-mcpu=native' has no effect if GCC does not recognize
27846     the processor.
27847
27848     Default instruction scheduling parameters are used for values that
27849     select an architecture and not an implementation.  These are 'v7',
27850     'v8', 'sparclite', 'sparclet', 'v9'.
27851
27852     Here is a list of each supported architecture and their supported
27853     implementations.
27854
27855     v7
27856          cypress, leon3v7
27857
27858     v8
27859          supersparc, hypersparc, leon, leon3, leon5
27860
27861     sparclite
27862          f930, f934, sparclite86x
27863
27864     sparclet
27865          tsc701
27866
27867     v9
27868          ultrasparc, ultrasparc3, niagara, niagara2, niagara3,
27869          niagara4, niagara7, m8
27870
27871     By default (unless configured otherwise), GCC generates code for
27872     the V7 variant of the SPARC architecture.  With '-mcpu=cypress',
27873     the compiler additionally optimizes it for the Cypress CY7C602
27874     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
27875     also appropriate for the older SPARCStation 1, 2, IPX etc.
27876
27877     With '-mcpu=v8', GCC generates code for the V8 variant of the SPARC
27878     architecture.  The only difference from V7 code is that the
27879     compiler emits the integer multiply and integer divide instructions
27880     which exist in SPARC-V8 but not in SPARC-V7.  With
27881     '-mcpu=supersparc', the compiler additionally optimizes it for the
27882     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
27883     series.
27884
27885     With '-mcpu=sparclite', GCC generates code for the SPARClite
27886     variant of the SPARC architecture.  This adds the integer multiply,
27887     integer divide step and scan ('ffs') instructions which exist in
27888     SPARClite but not in SPARC-V7.  With '-mcpu=f930', the compiler
27889     additionally optimizes it for the Fujitsu MB86930 chip, which is
27890     the original SPARClite, with no FPU.  With '-mcpu=f934', the
27891     compiler additionally optimizes it for the Fujitsu MB86934 chip,
27892     which is the more recent SPARClite with FPU.
27893
27894     With '-mcpu=sparclet', GCC generates code for the SPARClet variant
27895     of the SPARC architecture.  This adds the integer multiply,
27896     multiply/accumulate, integer divide step and scan ('ffs')
27897     instructions which exist in SPARClet but not in SPARC-V7.  With
27898     '-mcpu=tsc701', the compiler additionally optimizes it for the
27899     TEMIC SPARClet chip.
27900
27901     With '-mcpu=v9', GCC generates code for the V9 variant of the SPARC
27902     architecture.  This adds 64-bit integer and floating-point move
27903     instructions, 3 additional floating-point condition code registers
27904     and conditional move instructions.  With '-mcpu=ultrasparc', the
27905     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
27906     chips.  With '-mcpu=ultrasparc3', the compiler additionally
27907     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
27908     chips.  With '-mcpu=niagara', the compiler additionally optimizes
27909     it for Sun UltraSPARC T1 chips.  With '-mcpu=niagara2', the
27910     compiler additionally optimizes it for Sun UltraSPARC T2 chips.
27911     With '-mcpu=niagara3', the compiler additionally optimizes it for
27912     Sun UltraSPARC T3 chips.  With '-mcpu=niagara4', the compiler
27913     additionally optimizes it for Sun UltraSPARC T4 chips.  With
27914     '-mcpu=niagara7', the compiler additionally optimizes it for Oracle
27915     SPARC M7 chips.  With '-mcpu=m8', the compiler additionally
27916     optimizes it for Oracle M8 chips.
27917
27918'-mtune=CPU_TYPE'
27919     Set the instruction scheduling parameters for machine type
27920     CPU_TYPE, but do not set the instruction set or register set that
27921     the option '-mcpu=CPU_TYPE' does.
27922
27923     The same values for '-mcpu=CPU_TYPE' can be used for
27924     '-mtune=CPU_TYPE', but the only useful values are those that select
27925     a particular CPU implementation.  Those are 'cypress',
27926     'supersparc', 'hypersparc', 'leon', 'leon3', 'leon3v7', 'leon5',
27927     'f930', 'f934', 'sparclite86x', 'tsc701', 'ultrasparc',
27928     'ultrasparc3', 'niagara', 'niagara2', 'niagara3', 'niagara4',
27929     'niagara7' and 'm8'.  With native Solaris and GNU/Linux toolchains,
27930     'native' can also be used.
27931
27932'-mv8plus'
27933'-mno-v8plus'
27934     With '-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
27935     difference from the V8 ABI is that the global and out registers are
27936     considered 64 bits wide.  This is enabled by default on Solaris in
27937     32-bit mode for all SPARC-V9 processors.
27938
27939'-mvis'
27940'-mno-vis'
27941     With '-mvis', GCC generates code that takes advantage of the
27942     UltraSPARC Visual Instruction Set extensions.  The default is
27943     '-mno-vis'.
27944
27945'-mvis2'
27946'-mno-vis2'
27947     With '-mvis2', GCC generates code that takes advantage of version
27948     2.0 of the UltraSPARC Visual Instruction Set extensions.  The
27949     default is '-mvis2' when targeting a cpu that supports such
27950     instructions, such as UltraSPARC-III and later.  Setting '-mvis2'
27951     also sets '-mvis'.
27952
27953'-mvis3'
27954'-mno-vis3'
27955     With '-mvis3', GCC generates code that takes advantage of version
27956     3.0 of the UltraSPARC Visual Instruction Set extensions.  The
27957     default is '-mvis3' when targeting a cpu that supports such
27958     instructions, such as niagara-3 and later.  Setting '-mvis3' also
27959     sets '-mvis2' and '-mvis'.
27960
27961'-mvis4'
27962'-mno-vis4'
27963     With '-mvis4', GCC generates code that takes advantage of version
27964     4.0 of the UltraSPARC Visual Instruction Set extensions.  The
27965     default is '-mvis4' when targeting a cpu that supports such
27966     instructions, such as niagara-7 and later.  Setting '-mvis4' also
27967     sets '-mvis3', '-mvis2' and '-mvis'.
27968
27969'-mvis4b'
27970'-mno-vis4b'
27971     With '-mvis4b', GCC generates code that takes advantage of version
27972     4.0 of the UltraSPARC Visual Instruction Set extensions, plus the
27973     additional VIS instructions introduced in the Oracle SPARC
27974     Architecture 2017.  The default is '-mvis4b' when targeting a cpu
27975     that supports such instructions, such as m8 and later.  Setting
27976     '-mvis4b' also sets '-mvis4', '-mvis3', '-mvis2' and '-mvis'.
27977
27978'-mcbcond'
27979'-mno-cbcond'
27980     With '-mcbcond', GCC generates code that takes advantage of the
27981     UltraSPARC Compare-and-Branch-on-Condition instructions.  The
27982     default is '-mcbcond' when targeting a CPU that supports such
27983     instructions, such as Niagara-4 and later.
27984
27985'-mfmaf'
27986'-mno-fmaf'
27987     With '-mfmaf', GCC generates code that takes advantage of the
27988     UltraSPARC Fused Multiply-Add Floating-point instructions.  The
27989     default is '-mfmaf' when targeting a CPU that supports such
27990     instructions, such as Niagara-3 and later.
27991
27992'-mfsmuld'
27993'-mno-fsmuld'
27994     With '-mfsmuld', GCC generates code that takes advantage of the
27995     Floating-point Multiply Single to Double (FsMULd) instruction.  The
27996     default is '-mfsmuld' when targeting a CPU supporting the
27997     architecture versions V8 or V9 with FPU except '-mcpu=leon'.
27998
27999'-mpopc'
28000'-mno-popc'
28001     With '-mpopc', GCC generates code that takes advantage of the
28002     UltraSPARC Population Count instruction.  The default is '-mpopc'
28003     when targeting a CPU that supports such an instruction, such as
28004     Niagara-2 and later.
28005
28006'-msubxc'
28007'-mno-subxc'
28008     With '-msubxc', GCC generates code that takes advantage of the
28009     UltraSPARC Subtract-Extended-with-Carry instruction.  The default
28010     is '-msubxc' when targeting a CPU that supports such an
28011     instruction, such as Niagara-7 and later.
28012
28013'-mfix-at697f'
28014     Enable the documented workaround for the single erratum of the
28015     Atmel AT697F processor (which corresponds to erratum #13 of the
28016     AT697E processor).
28017
28018'-mfix-ut699'
28019     Enable the documented workarounds for the floating-point errata and
28020     the data cache nullify errata of the UT699 processor.
28021
28022'-mfix-ut700'
28023     Enable the documented workaround for the back-to-back store errata
28024     of the UT699E/UT700 processor.
28025
28026'-mfix-gr712rc'
28027     Enable the documented workaround for the back-to-back store errata
28028     of the GR712RC processor.
28029
28030 These '-m' options are supported in addition to the above on SPARC-V9
28031processors in 64-bit environments:
28032
28033'-m32'
28034'-m64'
28035     Generate code for a 32-bit or 64-bit environment.  The 32-bit
28036     environment sets int, long and pointer to 32 bits.  The 64-bit
28037     environment sets int to 32 bits and long and pointer to 64 bits.
28038
28039'-mcmodel=WHICH'
28040     Set the code model to one of
28041
28042     'medlow'
28043          The Medium/Low code model: 64-bit addresses, programs must be
28044          linked in the low 32 bits of memory.  Programs can be
28045          statically or dynamically linked.
28046
28047     'medmid'
28048          The Medium/Middle code model: 64-bit addresses, programs must
28049          be linked in the low 44 bits of memory, the text and data
28050          segments must be less than 2GB in size and the data segment
28051          must be located within 2GB of the text segment.
28052
28053     'medany'
28054          The Medium/Anywhere code model: 64-bit addresses, programs may
28055          be linked anywhere in memory, the text and data segments must
28056          be less than 2GB in size and the data segment must be located
28057          within 2GB of the text segment.
28058
28059     'embmedany'
28060          The Medium/Anywhere code model for embedded systems: 64-bit
28061          addresses, the text and data segments must be less than 2GB in
28062          size, both starting anywhere in memory (determined at link
28063          time).  The global register %g4 points to the base of the data
28064          segment.  Programs are statically linked and PIC is not
28065          supported.
28066
28067'-mmemory-model=MEM-MODEL'
28068     Set the memory model in force on the processor to one of
28069
28070     'default'
28071          The default memory model for the processor and operating
28072          system.
28073
28074     'rmo'
28075          Relaxed Memory Order
28076
28077     'pso'
28078          Partial Store Order
28079
28080     'tso'
28081          Total Store Order
28082
28083     'sc'
28084          Sequential Consistency
28085
28086     These memory models are formally defined in Appendix D of the
28087     SPARC-V9 architecture manual, as set in the processor's 'PSTATE.MM'
28088     field.
28089
28090'-mstack-bias'
28091'-mno-stack-bias'
28092     With '-mstack-bias', GCC assumes that the stack pointer, and frame
28093     pointer if present, are offset by -2047 which must be added back
28094     when making stack frame references.  This is the default in 64-bit
28095     mode.  Otherwise, assume no such offset is present.
28096
28097
28098File: gcc.info,  Node: System V Options,  Next: TILE-Gx Options,  Prev: SPARC Options,  Up: Submodel Options
28099
281003.19.52 Options for System V
28101----------------------------
28102
28103These additional options are available on System V Release 4 for
28104compatibility with other compilers on those systems:
28105
28106'-G'
28107     Create a shared object.  It is recommended that '-symbolic' or
28108     '-shared' be used instead.
28109
28110'-Qy'
28111     Identify the versions of each tool used by the compiler, in a
28112     '.ident' assembler directive in the output.
28113
28114'-Qn'
28115     Refrain from adding '.ident' directives to the output file (this is
28116     the default).
28117
28118'-YP,DIRS'
28119     Search the directories DIRS, and no others, for libraries specified
28120     with '-l'.
28121
28122'-Ym,DIR'
28123     Look in the directory DIR to find the M4 preprocessor.  The
28124     assembler uses this option.
28125
28126
28127File: gcc.info,  Node: TILE-Gx Options,  Next: TILEPro Options,  Prev: System V Options,  Up: Submodel Options
28128
281293.19.53 TILE-Gx Options
28130-----------------------
28131
28132These '-m' options are supported on the TILE-Gx:
28133
28134'-mcmodel=small'
28135     Generate code for the small model.  The distance for direct calls
28136     is limited to 500M in either direction.  PC-relative addresses are
28137     32 bits.  Absolute addresses support the full address range.
28138
28139'-mcmodel=large'
28140     Generate code for the large model.  There is no limitation on call
28141     distance, pc-relative addresses, or absolute addresses.
28142
28143'-mcpu=NAME'
28144     Selects the type of CPU to be targeted.  Currently the only
28145     supported type is 'tilegx'.
28146
28147'-m32'
28148'-m64'
28149     Generate code for a 32-bit or 64-bit environment.  The 32-bit
28150     environment sets int, long, and pointer to 32 bits.  The 64-bit
28151     environment sets int to 32 bits and long and pointer to 64 bits.
28152
28153'-mbig-endian'
28154'-mlittle-endian'
28155     Generate code in big/little endian mode, respectively.
28156
28157
28158File: gcc.info,  Node: TILEPro Options,  Next: V850 Options,  Prev: TILE-Gx Options,  Up: Submodel Options
28159
281603.19.54 TILEPro Options
28161-----------------------
28162
28163These '-m' options are supported on the TILEPro:
28164
28165'-mcpu=NAME'
28166     Selects the type of CPU to be targeted.  Currently the only
28167     supported type is 'tilepro'.
28168
28169'-m32'
28170     Generate code for a 32-bit environment, which sets int, long, and
28171     pointer to 32 bits.  This is the only supported behavior so the
28172     flag is essentially ignored.
28173
28174
28175File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TILEPro Options,  Up: Submodel Options
28176
281773.19.55 V850 Options
28178--------------------
28179
28180These '-m' options are defined for V850 implementations:
28181
28182'-mlong-calls'
28183'-mno-long-calls'
28184     Treat all calls as being far away (near).  If calls are assumed to
28185     be far away, the compiler always loads the function's address into
28186     a register, and calls indirect through the pointer.
28187
28188'-mno-ep'
28189'-mep'
28190     Do not optimize (do optimize) basic blocks that use the same index
28191     pointer 4 or more times to copy pointer into the 'ep' register, and
28192     use the shorter 'sld' and 'sst' instructions.  The '-mep' option is
28193     on by default if you optimize.
28194
28195'-mno-prolog-function'
28196'-mprolog-function'
28197     Do not use (do use) external functions to save and restore
28198     registers at the prologue and epilogue of a function.  The external
28199     functions are slower, but use less code space if more than one
28200     function saves the same number of registers.  The
28201     '-mprolog-function' option is on by default if you optimize.
28202
28203'-mspace'
28204     Try to make the code as small as possible.  At present, this just
28205     turns on the '-mep' and '-mprolog-function' options.
28206
28207'-mtda=N'
28208     Put static or global variables whose size is N bytes or less into
28209     the tiny data area that register 'ep' points to.  The tiny data
28210     area can hold up to 256 bytes in total (128 bytes for byte
28211     references).
28212
28213'-msda=N'
28214     Put static or global variables whose size is N bytes or less into
28215     the small data area that register 'gp' points to.  The small data
28216     area can hold up to 64 kilobytes.
28217
28218'-mzda=N'
28219     Put static or global variables whose size is N bytes or less into
28220     the first 32 kilobytes of memory.
28221
28222'-mv850'
28223     Specify that the target processor is the V850.
28224
28225'-mv850e3v5'
28226     Specify that the target processor is the V850E3V5.  The
28227     preprocessor constant '__v850e3v5__' is defined if this option is
28228     used.
28229
28230'-mv850e2v4'
28231     Specify that the target processor is the V850E3V5.  This is an
28232     alias for the '-mv850e3v5' option.
28233
28234'-mv850e2v3'
28235     Specify that the target processor is the V850E2V3.  The
28236     preprocessor constant '__v850e2v3__' is defined if this option is
28237     used.
28238
28239'-mv850e2'
28240     Specify that the target processor is the V850E2.  The preprocessor
28241     constant '__v850e2__' is defined if this option is used.
28242
28243'-mv850e1'
28244     Specify that the target processor is the V850E1.  The preprocessor
28245     constants '__v850e1__' and '__v850e__' are defined if this option
28246     is used.
28247
28248'-mv850es'
28249     Specify that the target processor is the V850ES. This is an alias
28250     for the '-mv850e1' option.
28251
28252'-mv850e'
28253     Specify that the target processor is the V850E.  The preprocessor
28254     constant '__v850e__' is defined if this option is used.
28255
28256     If neither '-mv850' nor '-mv850e' nor '-mv850e1' nor '-mv850e2' nor
28257     '-mv850e2v3' nor '-mv850e3v5' are defined then a default target
28258     processor is chosen and the relevant '__v850*__' preprocessor
28259     constant is defined.
28260
28261     The preprocessor constants '__v850' and '__v851__' are always
28262     defined, regardless of which processor variant is the target.
28263
28264'-mdisable-callt'
28265'-mno-disable-callt'
28266     This option suppresses generation of the 'CALLT' instruction for
28267     the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
28268     v850 architecture.
28269
28270     This option is enabled by default when the RH850 ABI is in use (see
28271     '-mrh850-abi'), and disabled by default when the GCC ABI is in use.
28272     If 'CALLT' instructions are being generated then the C preprocessor
28273     symbol '__V850_CALLT__' is defined.
28274
28275'-mrelax'
28276'-mno-relax'
28277     Pass on (or do not pass on) the '-mrelax' command-line option to
28278     the assembler.
28279
28280'-mlong-jumps'
28281'-mno-long-jumps'
28282     Disable (or re-enable) the generation of PC-relative jump
28283     instructions.
28284
28285'-msoft-float'
28286'-mhard-float'
28287     Disable (or re-enable) the generation of hardware floating point
28288     instructions.  This option is only significant when the target
28289     architecture is 'V850E2V3' or higher.  If hardware floating point
28290     instructions are being generated then the C preprocessor symbol
28291     '__FPU_OK__' is defined, otherwise the symbol '__NO_FPU__' is
28292     defined.
28293
28294'-mloop'
28295     Enables the use of the e3v5 LOOP instruction.  The use of this
28296     instruction is not enabled by default when the e3v5 architecture is
28297     selected because its use is still experimental.
28298
28299'-mrh850-abi'
28300'-mghs'
28301     Enables support for the RH850 version of the V850 ABI. This is the
28302     default.  With this version of the ABI the following rules apply:
28303
28304        * Integer sized structures and unions are returned via a memory
28305          pointer rather than a register.
28306
28307        * Large structures and unions (more than 8 bytes in size) are
28308          passed by value.
28309
28310        * Functions are aligned to 16-bit boundaries.
28311
28312        * The '-m8byte-align' command-line option is supported.
28313
28314        * The '-mdisable-callt' command-line option is enabled by
28315          default.  The '-mno-disable-callt' command-line option is not
28316          supported.
28317
28318     When this version of the ABI is enabled the C preprocessor symbol
28319     '__V850_RH850_ABI__' is defined.
28320
28321'-mgcc-abi'
28322     Enables support for the old GCC version of the V850 ABI. With this
28323     version of the ABI the following rules apply:
28324
28325        * Integer sized structures and unions are returned in register
28326          'r10'.
28327
28328        * Large structures and unions (more than 8 bytes in size) are
28329          passed by reference.
28330
28331        * Functions are aligned to 32-bit boundaries, unless optimizing
28332          for size.
28333
28334        * The '-m8byte-align' command-line option is not supported.
28335
28336        * The '-mdisable-callt' command-line option is supported but not
28337          enabled by default.
28338
28339     When this version of the ABI is enabled the C preprocessor symbol
28340     '__V850_GCC_ABI__' is defined.
28341
28342'-m8byte-align'
28343'-mno-8byte-align'
28344     Enables support for 'double' and 'long long' types to be aligned on
28345     8-byte boundaries.  The default is to restrict the alignment of all
28346     objects to at most 4-bytes.  When '-m8byte-align' is in effect the
28347     C preprocessor symbol '__V850_8BYTE_ALIGN__' is defined.
28348
28349'-mbig-switch'
28350     Generate code suitable for big switch tables.  Use this option only
28351     if the assembler/linker complain about out of range branches within
28352     a switch table.
28353
28354'-mapp-regs'
28355     This option causes r2 and r5 to be used in the code generated by
28356     the compiler.  This setting is the default.
28357
28358'-mno-app-regs'
28359     This option causes r2 and r5 to be treated as fixed registers.
28360
28361
28362File: gcc.info,  Node: VAX Options,  Next: Visium Options,  Prev: V850 Options,  Up: Submodel Options
28363
283643.19.56 VAX Options
28365-------------------
28366
28367These '-m' options are defined for the VAX:
28368
28369'-munix'
28370     Do not output certain jump instructions ('aobleq' and so on) that
28371     the Unix assembler for the VAX cannot handle across long ranges.
28372
28373'-mgnu'
28374     Do output those jump instructions, on the assumption that the GNU
28375     assembler is being used.
28376
28377'-mg'
28378     Output code for G-format floating-point numbers instead of
28379     D-format.
28380
28381'-mlra'
28382'-mno-lra'
28383     Enable Local Register Allocation.  This is still experimental for
28384     the VAX, so by default the compiler uses standard reload.
28385
28386
28387File: gcc.info,  Node: Visium Options,  Next: VMS Options,  Prev: VAX Options,  Up: Submodel Options
28388
283893.19.57 Visium Options
28390----------------------
28391
28392'-mdebug'
28393     A program which performs file I/O and is destined to run on an MCM
28394     target should be linked with this option.  It causes the libraries
28395     libc.a and libdebug.a to be linked.  The program should be run on
28396     the target under the control of the GDB remote debugging stub.
28397
28398'-msim'
28399     A program which performs file I/O and is destined to run on the
28400     simulator should be linked with option.  This causes libraries
28401     libc.a and libsim.a to be linked.
28402
28403'-mfpu'
28404'-mhard-float'
28405     Generate code containing floating-point instructions.  This is the
28406     default.
28407
28408'-mno-fpu'
28409'-msoft-float'
28410     Generate code containing library calls for floating-point.
28411
28412     '-msoft-float' changes the calling convention in the output file;
28413     therefore, it is only useful if you compile _all_ of a program with
28414     this option.  In particular, you need to compile 'libgcc.a', the
28415     library that comes with GCC, with '-msoft-float' in order for this
28416     to work.
28417
28418'-mcpu=CPU_TYPE'
28419     Set the instruction set, register set, and instruction scheduling
28420     parameters for machine type CPU_TYPE.  Supported values for
28421     CPU_TYPE are 'mcm', 'gr5' and 'gr6'.
28422
28423     'mcm' is a synonym of 'gr5' present for backward compatibility.
28424
28425     By default (unless configured otherwise), GCC generates code for
28426     the GR5 variant of the Visium architecture.
28427
28428     With '-mcpu=gr6', GCC generates code for the GR6 variant of the
28429     Visium architecture.  The only difference from GR5 code is that the
28430     compiler will generate block move instructions.
28431
28432'-mtune=CPU_TYPE'
28433     Set the instruction scheduling parameters for machine type
28434     CPU_TYPE, but do not set the instruction set or register set that
28435     the option '-mcpu=CPU_TYPE' would.
28436
28437'-msv-mode'
28438     Generate code for the supervisor mode, where there are no
28439     restrictions on the access to general registers.  This is the
28440     default.
28441
28442'-muser-mode'
28443     Generate code for the user mode, where the access to some general
28444     registers is forbidden: on the GR5, registers r24 to r31 cannot be
28445     accessed in this mode; on the GR6, only registers r29 to r31 are
28446     affected.
28447
28448
28449File: gcc.info,  Node: VMS Options,  Next: VxWorks Options,  Prev: Visium Options,  Up: Submodel Options
28450
284513.19.58 VMS Options
28452-------------------
28453
28454These '-m' options are defined for the VMS implementations:
28455
28456'-mvms-return-codes'
28457     Return VMS condition codes from 'main'.  The default is to return
28458     POSIX-style condition (e.g. error) codes.
28459
28460'-mdebug-main=PREFIX'
28461     Flag the first routine whose name starts with PREFIX as the main
28462     routine for the debugger.
28463
28464'-mmalloc64'
28465     Default to 64-bit memory allocation routines.
28466
28467'-mpointer-size=SIZE'
28468     Set the default size of pointers.  Possible options for SIZE are
28469     '32' or 'short' for 32 bit pointers, '64' or 'long' for 64 bit
28470     pointers, and 'no' for supporting only 32 bit pointers.  The later
28471     option disables 'pragma pointer_size'.
28472
28473
28474File: gcc.info,  Node: VxWorks Options,  Next: x86 Options,  Prev: VMS Options,  Up: Submodel Options
28475
284763.19.59 VxWorks Options
28477-----------------------
28478
28479The options in this section are defined for all VxWorks targets.
28480Options specific to the target hardware are listed with the other
28481options for that target.
28482
28483'-mrtp'
28484     GCC can generate code for both VxWorks kernels and real time
28485     processes (RTPs).  This option switches from the former to the
28486     latter.  It also defines the preprocessor macro '__RTP__'.
28487
28488'-non-static'
28489     Link an RTP executable against shared libraries rather than static
28490     libraries.  The options '-static' and '-shared' can also be used
28491     for RTPs (*note Link Options::); '-static' is the default.
28492
28493'-Bstatic'
28494'-Bdynamic'
28495     These options are passed down to the linker.  They are defined for
28496     compatibility with Diab.
28497
28498'-Xbind-lazy'
28499     Enable lazy binding of function calls.  This option is equivalent
28500     to '-Wl,-z,now' and is defined for compatibility with Diab.
28501
28502'-Xbind-now'
28503     Disable lazy binding of function calls.  This option is the default
28504     and is defined for compatibility with Diab.
28505
28506
28507File: gcc.info,  Node: x86 Options,  Next: x86 Windows Options,  Prev: VxWorks Options,  Up: Submodel Options
28508
285093.19.60 x86 Options
28510-------------------
28511
28512These '-m' options are defined for the x86 family of computers.
28513
28514'-march=CPU-TYPE'
28515     Generate instructions for the machine type CPU-TYPE.  In contrast
28516     to '-mtune=CPU-TYPE', which merely tunes the generated code for the
28517     specified CPU-TYPE, '-march=CPU-TYPE' allows GCC to generate code
28518     that may not run at all on processors other than the one indicated.
28519     Specifying '-march=CPU-TYPE' implies '-mtune=CPU-TYPE', except
28520     where noted otherwise.
28521
28522     The choices for CPU-TYPE are:
28523
28524     'native'
28525          This selects the CPU to generate code for at compilation time
28526          by determining the processor type of the compiling machine.
28527          Using '-march=native' enables all instruction subsets
28528          supported by the local machine (hence the result might not run
28529          on different machines).  Using '-mtune=native' produces code
28530          optimized for the local machine under the constraints of the
28531          selected instruction set.
28532
28533     'x86-64'
28534          A generic CPU with 64-bit extensions.
28535
28536     'x86-64-v2'
28537     'x86-64-v3'
28538     'x86-64-v4'
28539          These choices for CPU-TYPE select the corresponding
28540          micro-architecture level from the x86-64 psABI. On ABIs other
28541          than the x86-64 psABI they select the same CPU features as the
28542          x86-64 psABI documents for the particular micro-architecture
28543          level.
28544
28545          Since these CPU-TYPE values do not have a corresponding
28546          '-mtune' setting, using '-march' with these values enables
28547          generic tuning.  Specific tuning can be enabled using the
28548          '-mtune=OTHER-CPU-TYPE' option with an appropriate
28549          OTHER-CPU-TYPE value.
28550
28551     'i386'
28552          Original Intel i386 CPU.
28553
28554     'i486'
28555          Intel i486 CPU.  (No scheduling is implemented for this chip.)
28556
28557     'i586'
28558     'pentium'
28559          Intel Pentium CPU with no MMX support.
28560
28561     'lakemont'
28562          Intel Lakemont MCU, based on Intel Pentium CPU.
28563
28564     'pentium-mmx'
28565          Intel Pentium MMX CPU, based on Pentium core with MMX
28566          instruction set support.
28567
28568     'pentiumpro'
28569          Intel Pentium Pro CPU.
28570
28571     'i686'
28572          When used with '-march', the Pentium Pro instruction set is
28573          used, so the code runs on all i686 family chips.  When used
28574          with '-mtune', it has the same meaning as 'generic'.
28575
28576     'pentium2'
28577          Intel Pentium II CPU, based on Pentium Pro core with MMX and
28578          FXSR instruction set support.
28579
28580     'pentium3'
28581     'pentium3m'
28582          Intel Pentium III CPU, based on Pentium Pro core with MMX,
28583          FXSR and SSE instruction set support.
28584
28585     'pentium-m'
28586          Intel Pentium M; low-power version of Intel Pentium III CPU
28587          with MMX, SSE, SSE2 and FXSR instruction set support.  Used by
28588          Centrino notebooks.
28589
28590     'pentium4'
28591     'pentium4m'
28592          Intel Pentium 4 CPU with MMX, SSE, SSE2 and FXSR instruction
28593          set support.
28594
28595     'prescott'
28596          Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2,
28597          SSE3 and FXSR instruction set support.
28598
28599     'nocona'
28600          Improved version of Intel Pentium 4 CPU with 64-bit
28601          extensions, MMX, SSE, SSE2, SSE3 and FXSR instruction set
28602          support.
28603
28604     'core2'
28605          Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
28606          SSSE3, CX16, SAHF and FXSR instruction set support.
28607
28608     'nehalem'
28609          Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2,
28610          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF and FXSR
28611          instruction set support.
28612
28613     'westmere'
28614          Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
28615          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR and
28616          PCLMUL instruction set support.
28617
28618     'sandybridge'
28619          Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
28620          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
28621          XSAVE and PCLMUL instruction set support.
28622
28623     'ivybridge'
28624          Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
28625          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
28626          XSAVE, PCLMUL, FSGSBASE, RDRND and F16C instruction set
28627          support.
28628
28629     'haswell'
28630          Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
28631          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
28632          AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
28633          LZCNT, FMA, MOVBE and HLE instruction set support.
28634
28635     'broadwell'
28636          Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
28637          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
28638          AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
28639          LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX and PREFETCHW instruction
28640          set support.
28641
28642     'skylake'
28643          Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE,
28644          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
28645          AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
28646          LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
28647          CLFLUSHOPT, XSAVEC, XSAVES and SGX instruction set support.
28648
28649     'bonnell'
28650          Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
28651          SSE2, SSE3 and SSSE3 instruction set support.
28652
28653     'silvermont'
28654          Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
28655          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
28656          PCLMUL, PREFETCHW and RDRND instruction set support.
28657
28658     'goldmont'
28659          Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE,
28660          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
28661          PCLMUL, PREFETCHW, RDRND, AES, SHA, RDSEED, XSAVE, XSAVEC,
28662          XSAVES, XSAVEOPT, CLFLUSHOPT and FSGSBASE instruction set
28663          support.
28664
28665     'goldmont-plus'
28666          Intel Goldmont Plus CPU with 64-bit extensions, MOVBE, MMX,
28667          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
28668          FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, RDSEED, XSAVE,
28669          XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID
28670          and SGX instruction set support.
28671
28672     'tremont'
28673          Intel Tremont CPU with 64-bit extensions, MOVBE, MMX, SSE,
28674          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
28675          PCLMUL, PREFETCHW, RDRND, AES, SHA, RDSEED, XSAVE, XSAVEC,
28676          XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID, SGX,
28677          CLWB, GFNI-SSE, MOVDIRI, MOVDIR64B, CLDEMOTE and WAITPKG
28678          instruction set support.
28679
28680     'knl'
28681          Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX,
28682          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
28683          FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
28684          BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
28685          AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1
28686          instruction set support.
28687
28688     'knm'
28689          Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX,
28690          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
28691          FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
28692          BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
28693          AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1,
28694          AVX5124VNNIW, AVX5124FMAPS and AVX512VPOPCNTDQ instruction set
28695          support.
28696
28697     'skylake-avx512'
28698          Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX,
28699          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
28700          FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
28701          BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
28702          CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL,
28703          AVX512BW, AVX512DQ and AVX512CD instruction set support.
28704
28705     'cannonlake'
28706          Intel Cannonlake Server CPU with 64-bit extensions, MOVBE,
28707          MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16,
28708          SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2,
28709          BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
28710          AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL,
28711          AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and
28712          SHA instruction set support.
28713
28714     'icelake-client'
28715          Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX,
28716          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
28717          FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
28718          BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
28719          CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
28720          AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
28721          AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ,
28722          AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set
28723          support.
28724
28725     'icelake-server'
28726          Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX,
28727          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
28728          FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
28729          BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
28730          CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
28731          AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
28732          AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ,
28733          AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and
28734          CLWB instruction set support.
28735
28736     'cascadelake'
28737          Intel Cascadelake CPU with 64-bit extensions, MOVBE, MMX, SSE,
28738          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
28739          AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
28740          LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
28741          CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL,
28742          AVX512BW, AVX512DQ, AVX512CD and AVX512VNNI instruction set
28743          support.
28744
28745     'cooperlake'
28746          Intel cooperlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
28747          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
28748          AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
28749          LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
28750          CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL,
28751          AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI and AVX512BF16
28752          instruction set support.
28753
28754     'tigerlake'
28755          Intel Tigerlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
28756          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
28757          AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
28758          LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
28759          CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
28760          AVX512DQ, AVX512CD PKU, AVX512VBMI, AVX512IFMA, SHA,
28761          AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
28762          RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB,
28763          AVX512VP2INTERSECT and KEYLOCKER instruction set support.
28764
28765     'sapphirerapids'
28766          Intel sapphirerapids CPU with 64-bit extensions, MOVBE, MMX,
28767          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
28768          FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
28769          BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
28770          CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
28771          AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
28772          AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
28773          RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI,
28774          MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE,
28775          TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI,
28776          AVX512-FP16 and AVX512BF16 instruction set support.
28777
28778     'alderlake'
28779          Intel Alderlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
28780          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
28781          PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE,
28782          PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B,
28783          CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
28784          LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL,
28785          WIDEKL and AVX-VNNI instruction set support.
28786
28787     'rocketlake'
28788          Intel Rocketlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
28789          SSE2, SSE3, SSSE3 , SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
28790          AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
28791          LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
28792          CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW,
28793          AVX512DQ, AVX512CD PKU, AVX512VBMI, AVX512IFMA, SHA,
28794          AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
28795          RDPID and AVX512VPOPCNTDQ instruction set support.
28796
28797     'k6'
28798          AMD K6 CPU with MMX instruction set support.
28799
28800     'k6-2'
28801     'k6-3'
28802          Improved versions of AMD K6 CPU with MMX and 3DNow!
28803          instruction set support.
28804
28805     'athlon'
28806     'athlon-tbird'
28807          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
28808          prefetch instructions support.
28809
28810     'athlon-4'
28811     'athlon-xp'
28812     'athlon-mp'
28813          Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
28814          full SSE instruction set support.
28815
28816     'k8'
28817     'opteron'
28818     'athlon64'
28819     'athlon-fx'
28820          Processors based on the AMD K8 core with x86-64 instruction
28821          set support, including the AMD Opteron, Athlon 64, and Athlon
28822          64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
28823          enhanced 3DNow! and 64-bit instruction set extensions.)
28824
28825     'k8-sse3'
28826     'opteron-sse3'
28827     'athlon64-sse3'
28828          Improved versions of AMD K8 cores with SSE3 instruction set
28829          support.
28830
28831     'amdfam10'
28832     'barcelona'
28833          CPUs based on AMD Family 10h cores with x86-64 instruction set
28834          support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
28835          enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
28836
28837     'bdver1'
28838          CPUs based on AMD Family 15h cores with x86-64 instruction set
28839          support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCLMUL,
28840          CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
28841          and 64-bit instruction set extensions.)
28842
28843     'bdver2'
28844          AMD Family 15h core based CPUs with x86-64 instruction set
28845          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP,
28846          LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
28847          SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
28848
28849     'bdver3'
28850          AMD Family 15h core based CPUs with x86-64 instruction set
28851          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE,
28852          AVX, XOP, LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
28853          SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
28854          extensions.)
28855
28856     'bdver4'
28857          AMD Family 15h core based CPUs with x86-64 instruction set
28858          support.  (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
28859          FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCLMUL, CX16, MOVBE, MMX,
28860          SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
28861          instruction set extensions.)
28862
28863     'znver1'
28864          AMD Family 17h core based CPUs with x86-64 instruction set
28865          support.  (This supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX,
28866          AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCLMUL, CX16,
28867          MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2,
28868          ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit
28869          instruction set extensions.)
28870
28871     'znver2'
28872          AMD Family 17h core based CPUs with x86-64 instruction set
28873          support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
28874          FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
28875          PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
28876          SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT,
28877          RDPID, WBNOINVD, and 64-bit instruction set extensions.)
28878
28879     'znver3'
28880          AMD Family 19h core based CPUs with x86-64 instruction set
28881          support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
28882          FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
28883          PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
28884          SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT,
28885          RDPID, WBNOINVD, PKU, VPCLMULQDQ, VAES, and 64-bit instruction
28886          set extensions.)
28887
28888     'znver4'
28889          AMD Family 19h core based CPUs with x86-64 instruction set
28890          support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
28891          FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
28892          PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
28893          SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT,
28894          RDPID, WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ,
28895          AVX512IFMA, AVX512CD, AVX512BW, AVX512VL, AVX512BF16,
28896          AVX512VBMI, AVX512VBMI2, AVX512VNNI, AVX512BITALG,
28897          AVX512VPOPCNTDQ, GFNI and 64-bit instruction set extensions.)
28898
28899     'btver1'
28900          CPUs based on AMD Family 14h cores with x86-64 instruction set
28901          support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
28902          CX16, ABM and 64-bit instruction set extensions.)
28903
28904     'btver2'
28905          CPUs based on AMD Family 16h cores with x86-64 instruction set
28906          support.  This includes MOVBE, F16C, BMI, AVX, PCLMUL, AES,
28907          SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
28908          and 64-bit instruction set extensions.
28909
28910     'winchip-c6'
28911          IDT WinChip C6 CPU, dealt in same way as i486 with additional
28912          MMX instruction set support.
28913
28914     'winchip2'
28915          IDT WinChip 2 CPU, dealt in same way as i486 with additional
28916          MMX and 3DNow! instruction set support.
28917
28918     'c3'
28919          VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
28920          scheduling is implemented for this chip.)
28921
28922     'c3-2'
28923          VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
28924          support.  (No scheduling is implemented for this chip.)
28925
28926     'c7'
28927          VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction
28928          set support.  (No scheduling is implemented for this chip.)
28929
28930     'samuel-2'
28931          VIA Eden Samuel 2 CPU with MMX and 3DNow! instruction set
28932          support.  (No scheduling is implemented for this chip.)
28933
28934     'nehemiah'
28935          VIA Eden Nehemiah CPU with MMX and SSE instruction set
28936          support.  (No scheduling is implemented for this chip.)
28937
28938     'esther'
28939          VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction
28940          set support.  (No scheduling is implemented for this chip.)
28941
28942     'eden-x2'
28943          VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3
28944          instruction set support.  (No scheduling is implemented for
28945          this chip.)
28946
28947     'eden-x4'
28948          VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3,
28949          SSE4.1, SSE4.2, AVX and AVX2 instruction set support.  (No
28950          scheduling is implemented for this chip.)
28951
28952     'nano'
28953          Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and
28954          SSSE3 instruction set support.  (No scheduling is implemented
28955          for this chip.)
28956
28957     'nano-1000'
28958          VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
28959          instruction set support.  (No scheduling is implemented for
28960          this chip.)
28961
28962     'nano-2000'
28963          VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
28964          instruction set support.  (No scheduling is implemented for
28965          this chip.)
28966
28967     'nano-3000'
28968          VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and
28969          SSE4.1 instruction set support.  (No scheduling is implemented
28970          for this chip.)
28971
28972     'nano-x2'
28973          VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3,
28974          SSSE3 and SSE4.1 instruction set support.  (No scheduling is
28975          implemented for this chip.)
28976
28977     'nano-x4'
28978          VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3,
28979          SSSE3 and SSE4.1 instruction set support.  (No scheduling is
28980          implemented for this chip.)
28981
28982     'geode'
28983          AMD Geode embedded processor with MMX and 3DNow! instruction
28984          set support.
28985
28986'-mtune=CPU-TYPE'
28987     Tune to CPU-TYPE everything applicable about the generated code,
28988     except for the ABI and the set of available instructions.  While
28989     picking a specific CPU-TYPE schedules things appropriately for that
28990     particular chip, the compiler does not generate any code that
28991     cannot run on the default machine type unless you use a
28992     '-march=CPU-TYPE' option.  For example, if GCC is configured for
28993     i686-pc-linux-gnu then '-mtune=pentium4' generates code that is
28994     tuned for Pentium 4 but still runs on i686 machines.
28995
28996     The choices for CPU-TYPE are the same as for '-march'.  In
28997     addition, '-mtune' supports 2 extra choices for CPU-TYPE:
28998
28999     'generic'
29000          Produce code optimized for the most common IA32/AMD64/EM64T
29001          processors.  If you know the CPU on which your code will run,
29002          then you should use the corresponding '-mtune' or '-march'
29003          option instead of '-mtune=generic'.  But, if you do not know
29004          exactly what CPU users of your application will have, then you
29005          should use this option.
29006
29007          As new processors are deployed in the marketplace, the
29008          behavior of this option will change.  Therefore, if you
29009          upgrade to a newer version of GCC, code generation controlled
29010          by this option will change to reflect the processors that are
29011          most common at the time that version of GCC is released.
29012
29013          There is no '-march=generic' option because '-march' indicates
29014          the instruction set the compiler can use, and there is no
29015          generic instruction set applicable to all processors.  In
29016          contrast, '-mtune' indicates the processor (or, in this case,
29017          collection of processors) for which the code is optimized.
29018
29019     'intel'
29020          Produce code optimized for the most current Intel processors,
29021          which are Haswell and Silvermont for this version of GCC. If
29022          you know the CPU on which your code will run, then you should
29023          use the corresponding '-mtune' or '-march' option instead of
29024          '-mtune=intel'.  But, if you want your application performs
29025          better on both Haswell and Silvermont, then you should use
29026          this option.
29027
29028          As new Intel processors are deployed in the marketplace, the
29029          behavior of this option will change.  Therefore, if you
29030          upgrade to a newer version of GCC, code generation controlled
29031          by this option will change to reflect the most current Intel
29032          processors at the time that version of GCC is released.
29033
29034          There is no '-march=intel' option because '-march' indicates
29035          the instruction set the compiler can use, and there is no
29036          common instruction set applicable to all processors.  In
29037          contrast, '-mtune' indicates the processor (or, in this case,
29038          collection of processors) for which the code is optimized.
29039
29040'-mcpu=CPU-TYPE'
29041     A deprecated synonym for '-mtune'.
29042
29043'-mfpmath=UNIT'
29044     Generate floating-point arithmetic for selected unit UNIT.  The
29045     choices for UNIT are:
29046
29047     '387'
29048          Use the standard 387 floating-point coprocessor present on the
29049          majority of chips and emulated otherwise.  Code compiled with
29050          this option runs almost everywhere.  The temporary results are
29051          computed in 80-bit precision instead of the precision
29052          specified by the type, resulting in slightly different results
29053          compared to most of other chips.  See '-ffloat-store' for more
29054          detailed description.
29055
29056          This is the default choice for non-Darwin x86-32 targets.
29057
29058     'sse'
29059          Use scalar floating-point instructions present in the SSE
29060          instruction set.  This instruction set is supported by Pentium
29061          III and newer chips, and in the AMD line by Athlon-4, Athlon
29062          XP and Athlon MP chips.  The earlier version of the SSE
29063          instruction set supports only single-precision arithmetic,
29064          thus the double and extended-precision arithmetic are still
29065          done using 387.  A later version, present only in Pentium 4
29066          and AMD x86-64 chips, supports double-precision arithmetic
29067          too.
29068
29069          For the x86-32 compiler, you must use '-march=CPU-TYPE',
29070          '-msse' or '-msse2' switches to enable SSE extensions and make
29071          this option effective.  For the x86-64 compiler, these
29072          extensions are enabled by default.
29073
29074          The resulting code should be considerably faster in the
29075          majority of cases and avoid the numerical instability problems
29076          of 387 code, but may break some existing code that expects
29077          temporaries to be 80 bits.
29078
29079          This is the default choice for the x86-64 compiler, Darwin
29080          x86-32 targets, and the default choice for x86-32 targets with
29081          the SSE2 instruction set when '-ffast-math' is enabled.
29082
29083     'sse,387'
29084     'sse+387'
29085     'both'
29086          Attempt to utilize both instruction sets at once.  This
29087          effectively doubles the amount of available registers, and on
29088          chips with separate execution units for 387 and SSE the
29089          execution resources too.  Use this option with care, as it is
29090          still experimental, because the GCC register allocator does
29091          not model separate functional units well, resulting in
29092          unstable performance.
29093
29094'-masm=DIALECT'
29095     Output assembly instructions using selected DIALECT.  Also affects
29096     which dialect is used for basic 'asm' (*note Basic Asm::) and
29097     extended 'asm' (*note Extended Asm::).  Supported choices (in
29098     dialect order) are 'att' or 'intel'.  The default is 'att'.  Darwin
29099     does not support 'intel'.
29100
29101'-mieee-fp'
29102'-mno-ieee-fp'
29103     Control whether or not the compiler uses IEEE floating-point
29104     comparisons.  These correctly handle the case where the result of a
29105     comparison is unordered.
29106
29107'-m80387'
29108'-mhard-float'
29109     Generate output containing 80387 instructions for floating point.
29110
29111'-mno-80387'
29112'-msoft-float'
29113     Generate output containing library calls for floating point.
29114
29115     *Warning:* the requisite libraries are not part of GCC.  Normally
29116     the facilities of the machine's usual C compiler are used, but this
29117     cannot be done directly in cross-compilation.  You must make your
29118     own arrangements to provide suitable library functions for
29119     cross-compilation.
29120
29121     On machines where a function returns floating-point results in the
29122     80387 register stack, some floating-point opcodes may be emitted
29123     even if '-msoft-float' is used.
29124
29125'-mno-fp-ret-in-387'
29126     Do not use the FPU registers for return values of functions.
29127
29128     The usual calling convention has functions return values of types
29129     'float' and 'double' in an FPU register, even if there is no FPU.
29130     The idea is that the operating system should emulate an FPU.
29131
29132     The option '-mno-fp-ret-in-387' causes such values to be returned
29133     in ordinary CPU registers instead.
29134
29135'-mno-fancy-math-387'
29136     Some 387 emulators do not support the 'sin', 'cos' and 'sqrt'
29137     instructions for the 387.  Specify this option to avoid generating
29138     those instructions.  This option is overridden when '-march'
29139     indicates that the target CPU always has an FPU and so the
29140     instruction does not need emulation.  These instructions are not
29141     generated unless you also use the '-funsafe-math-optimizations'
29142     switch.
29143
29144'-malign-double'
29145'-mno-align-double'
29146     Control whether GCC aligns 'double', 'long double', and 'long long'
29147     variables on a two-word boundary or a one-word boundary.  Aligning
29148     'double' variables on a two-word boundary produces code that runs
29149     somewhat faster on a Pentium at the expense of more memory.
29150
29151     On x86-64, '-malign-double' is enabled by default.
29152
29153     *Warning:* if you use the '-malign-double' switch, structures
29154     containing the above types are aligned differently than the
29155     published application binary interface specifications for the
29156     x86-32 and are not binary compatible with structures in code
29157     compiled without that switch.
29158
29159'-m96bit-long-double'
29160'-m128bit-long-double'
29161     These switches control the size of 'long double' type.  The x86-32
29162     application binary interface specifies the size to be 96 bits, so
29163     '-m96bit-long-double' is the default in 32-bit mode.
29164
29165     Modern architectures (Pentium and newer) prefer 'long double' to be
29166     aligned to an 8- or 16-byte boundary.  In arrays or structures
29167     conforming to the ABI, this is not possible.  So specifying
29168     '-m128bit-long-double' aligns 'long double' to a 16-byte boundary
29169     by padding the 'long double' with an additional 32-bit zero.
29170
29171     In the x86-64 compiler, '-m128bit-long-double' is the default
29172     choice as its ABI specifies that 'long double' is aligned on
29173     16-byte boundary.
29174
29175     Notice that neither of these options enable any extra precision
29176     over the x87 standard of 80 bits for a 'long double'.
29177
29178     *Warning:* if you override the default value for your target ABI,
29179     this changes the size of structures and arrays containing 'long
29180     double' variables, as well as modifying the function calling
29181     convention for functions taking 'long double'.  Hence they are not
29182     binary-compatible with code compiled without that switch.
29183
29184'-mlong-double-64'
29185'-mlong-double-80'
29186'-mlong-double-128'
29187     These switches control the size of 'long double' type.  A size of
29188     64 bits makes the 'long double' type equivalent to the 'double'
29189     type.  This is the default for 32-bit Bionic C library.  A size of
29190     128 bits makes the 'long double' type equivalent to the
29191     '__float128' type.  This is the default for 64-bit Bionic C
29192     library.
29193
29194     *Warning:* if you override the default value for your target ABI,
29195     this changes the size of structures and arrays containing 'long
29196     double' variables, as well as modifying the function calling
29197     convention for functions taking 'long double'.  Hence they are not
29198     binary-compatible with code compiled without that switch.
29199
29200'-malign-data=TYPE'
29201     Control how GCC aligns variables.  Supported values for TYPE are
29202     'compat' uses increased alignment value compatible uses GCC 4.8 and
29203     earlier, 'abi' uses alignment value as specified by the psABI, and
29204     'cacheline' uses increased alignment value to match the cache line
29205     size.  'compat' is the default.
29206
29207'-mlarge-data-threshold=THRESHOLD'
29208     When '-mcmodel=medium' is specified, data objects larger than
29209     THRESHOLD are placed in the large data section.  This value must be
29210     the same across all objects linked into the binary, and defaults to
29211     65535.
29212
29213'-mrtd'
29214     Use a different function-calling convention, in which functions
29215     that take a fixed number of arguments return with the 'ret NUM'
29216     instruction, which pops their arguments while returning.  This
29217     saves one instruction in the caller since there is no need to pop
29218     the arguments there.
29219
29220     You can specify that an individual function is called with this
29221     calling sequence with the function attribute 'stdcall'.  You can
29222     also override the '-mrtd' option by using the function attribute
29223     'cdecl'.  *Note Function Attributes::.
29224
29225     *Warning:* this calling convention is incompatible with the one
29226     normally used on Unix, so you cannot use it if you need to call
29227     libraries compiled with the Unix compiler.
29228
29229     Also, you must provide function prototypes for all functions that
29230     take variable numbers of arguments (including 'printf'); otherwise
29231     incorrect code is generated for calls to those functions.
29232
29233     In addition, seriously incorrect code results if you call a
29234     function with too many arguments.  (Normally, extra arguments are
29235     harmlessly ignored.)
29236
29237'-mregparm=NUM'
29238     Control how many registers are used to pass integer arguments.  By
29239     default, no registers are used to pass arguments, and at most 3
29240     registers can be used.  You can control this behavior for a
29241     specific function by using the function attribute 'regparm'.  *Note
29242     Function Attributes::.
29243
29244     *Warning:* if you use this switch, and NUM is nonzero, then you
29245     must build all modules with the same value, including any
29246     libraries.  This includes the system libraries and startup modules.
29247
29248'-msseregparm'
29249     Use SSE register passing conventions for float and double arguments
29250     and return values.  You can control this behavior for a specific
29251     function by using the function attribute 'sseregparm'.  *Note
29252     Function Attributes::.
29253
29254     *Warning:* if you use this switch then you must build all modules
29255     with the same value, including any libraries.  This includes the
29256     system libraries and startup modules.
29257
29258'-mvect8-ret-in-mem'
29259     Return 8-byte vectors in memory instead of MMX registers.  This is
29260     the default on VxWorks to match the ABI of the Sun Studio compilers
29261     until version 12.  _Only_ use this option if you need to remain
29262     compatible with existing code produced by those previous compiler
29263     versions or older versions of GCC.
29264
29265'-mpc32'
29266'-mpc64'
29267'-mpc80'
29268
29269     Set 80387 floating-point precision to 32, 64 or 80 bits.  When
29270     '-mpc32' is specified, the significands of results of
29271     floating-point operations are rounded to 24 bits (single
29272     precision); '-mpc64' rounds the significands of results of
29273     floating-point operations to 53 bits (double precision) and
29274     '-mpc80' rounds the significands of results of floating-point
29275     operations to 64 bits (extended double precision), which is the
29276     default.  When this option is used, floating-point operations in
29277     higher precisions are not available to the programmer without
29278     setting the FPU control word explicitly.
29279
29280     Setting the rounding of floating-point operations to less than the
29281     default 80 bits can speed some programs by 2% or more.  Note that
29282     some mathematical libraries assume that extended-precision (80-bit)
29283     floating-point operations are enabled by default; routines in such
29284     libraries could suffer significant loss of accuracy, typically
29285     through so-called "catastrophic cancellation", when this option is
29286     used to set the precision to less than extended precision.
29287
29288'-mstackrealign'
29289     Realign the stack at entry.  On the x86, the '-mstackrealign'
29290     option generates an alternate prologue and epilogue that realigns
29291     the run-time stack if necessary.  This supports mixing legacy codes
29292     that keep 4-byte stack alignment with modern codes that keep
29293     16-byte stack alignment for SSE compatibility.  See also the
29294     attribute 'force_align_arg_pointer', applicable to individual
29295     functions.
29296
29297'-mpreferred-stack-boundary=NUM'
29298     Attempt to keep the stack boundary aligned to a 2 raised to NUM
29299     byte boundary.  If '-mpreferred-stack-boundary' is not specified,
29300     the default is 4 (16 bytes or 128 bits).
29301
29302     *Warning:* When generating code for the x86-64 architecture with
29303     SSE extensions disabled, '-mpreferred-stack-boundary=3' can be used
29304     to keep the stack boundary aligned to 8 byte boundary.  Since
29305     x86-64 ABI require 16 byte stack alignment, this is ABI
29306     incompatible and intended to be used in controlled environment
29307     where stack space is important limitation.  This option leads to
29308     wrong code when functions compiled with 16 byte stack alignment
29309     (such as functions from a standard library) are called with
29310     misaligned stack.  In this case, SSE instructions may lead to
29311     misaligned memory access traps.  In addition, variable arguments
29312     are handled incorrectly for 16 byte aligned objects (including x87
29313     long double and __int128), leading to wrong results.  You must
29314     build all modules with '-mpreferred-stack-boundary=3', including
29315     any libraries.  This includes the system libraries and startup
29316     modules.
29317
29318'-mincoming-stack-boundary=NUM'
29319     Assume the incoming stack is aligned to a 2 raised to NUM byte
29320     boundary.  If '-mincoming-stack-boundary' is not specified, the one
29321     specified by '-mpreferred-stack-boundary' is used.
29322
29323     On Pentium and Pentium Pro, 'double' and 'long double' values
29324     should be aligned to an 8-byte boundary (see '-malign-double') or
29325     suffer significant run time performance penalties.  On Pentium III,
29326     the Streaming SIMD Extension (SSE) data type '__m128' may not work
29327     properly if it is not 16-byte aligned.
29328
29329     To ensure proper alignment of this values on the stack, the stack
29330     boundary must be as aligned as that required by any value stored on
29331     the stack.  Further, every function must be generated such that it
29332     keeps the stack aligned.  Thus calling a function compiled with a
29333     higher preferred stack boundary from a function compiled with a
29334     lower preferred stack boundary most likely misaligns the stack.  It
29335     is recommended that libraries that use callbacks always use the
29336     default setting.
29337
29338     This extra alignment does consume extra stack space, and generally
29339     increases code size.  Code that is sensitive to stack space usage,
29340     such as embedded systems and operating system kernels, may want to
29341     reduce the preferred alignment to '-mpreferred-stack-boundary=2'.
29342
29343'-mmmx'
29344'-msse'
29345'-msse2'
29346'-msse3'
29347'-mssse3'
29348'-msse4'
29349'-msse4a'
29350'-msse4.1'
29351'-msse4.2'
29352'-mavx'
29353'-mavx2'
29354'-mavx512f'
29355'-mavx512pf'
29356'-mavx512er'
29357'-mavx512cd'
29358'-mavx512vl'
29359'-mavx512bw'
29360'-mavx512dq'
29361'-mavx512ifma'
29362'-mavx512vbmi'
29363'-msha'
29364'-maes'
29365'-mpclmul'
29366'-mclflushopt'
29367'-mclwb'
29368'-mfsgsbase'
29369'-mptwrite'
29370'-mrdrnd'
29371'-mf16c'
29372'-mfma'
29373'-mpconfig'
29374'-mwbnoinvd'
29375'-mfma4'
29376'-mprfchw'
29377'-mrdpid'
29378'-mprefetchwt1'
29379'-mrdseed'
29380'-msgx'
29381'-mxop'
29382'-mlwp'
29383'-m3dnow'
29384'-m3dnowa'
29385'-mpopcnt'
29386'-mabm'
29387'-madx'
29388'-mbmi'
29389'-mbmi2'
29390'-mlzcnt'
29391'-mfxsr'
29392'-mxsave'
29393'-mxsaveopt'
29394'-mxsavec'
29395'-mxsaves'
29396'-mrtm'
29397'-mhle'
29398'-mtbm'
29399'-mmwaitx'
29400'-mclzero'
29401'-mpku'
29402'-mavx512vbmi2'
29403'-mavx512bf16'
29404'-mavx512fp16'
29405'-mgfni'
29406'-mvaes'
29407'-mwaitpkg'
29408'-mvpclmulqdq'
29409'-mavx512bitalg'
29410'-mmovdiri'
29411'-mmovdir64b'
29412'-menqcmd'
29413'-muintr'
29414'-mtsxldtrk'
29415'-mavx512vpopcntdq'
29416'-mavx512vp2intersect'
29417'-mavx5124fmaps'
29418'-mavx512vnni'
29419'-mavxvnni'
29420'-mavx5124vnniw'
29421'-mcldemote'
29422'-mserialize'
29423'-mamx-tile'
29424'-mamx-int8'
29425'-mamx-bf16'
29426'-mhreset'
29427'-mkl'
29428'-mwidekl'
29429     These switches enable the use of instructions in the MMX, SSE,
29430     SSE2, SSE3, SSSE3, SSE4, SSE4A, SSE4.1, SSE4.2, AVX, AVX2, AVX512F,
29431     AVX512PF, AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ,
29432     AVX512IFMA, AVX512VBMI, SHA, AES, PCLMUL, CLFLUSHOPT, CLWB,
29433     FSGSBASE, PTWRITE, RDRND, F16C, FMA, PCONFIG, WBNOINVD, FMA4,
29434     PREFETCHW, RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP, 3DNow!,
29435     enhanced 3DNow!, POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE,
29436     XSAVEOPT, XSAVEC, XSAVES, RTM, HLE, TBM, MWAITX, CLZERO, PKU,
29437     AVX512VBMI2, GFNI, VAES, WAITPKG, VPCLMULQDQ, AVX512BITALG,
29438     MOVDIRI, MOVDIR64B, AVX512BF16, ENQCMD, AVX512VPOPCNTDQ,
29439     AVX5124FMAPS, AVX512VNNI, AVX5124VNNIW, SERIALIZE, UINTR, HRESET,
29440     AMXTILE, AMXINT8, AMXBF16, KL, WIDEKL, AVXVNNI, AVX512-FP16 or
29441     CLDEMOTE extended instruction sets.  Each has a corresponding
29442     '-mno-' option to disable use of these instructions.
29443
29444     These extensions are also available as built-in functions: see
29445     *note x86 Built-in Functions::, for details of the functions
29446     enabled and disabled by these switches.
29447
29448     To generate SSE/SSE2 instructions automatically from floating-point
29449     code (as opposed to 387 instructions), see '-mfpmath=sse'.
29450
29451     GCC depresses SSEx instructions when '-mavx' is used.  Instead, it
29452     generates new AVX instructions or AVX equivalence for all SSEx
29453     instructions when needed.
29454
29455     These options enable GCC to use these extended instructions in
29456     generated code, even without '-mfpmath=sse'.  Applications that
29457     perform run-time CPU detection must compile separate files for each
29458     supported architecture, using the appropriate flags.  In
29459     particular, the file containing the CPU detection code should be
29460     compiled without these options.
29461
29462'-mdump-tune-features'
29463     This option instructs GCC to dump the names of the x86 performance
29464     tuning features and default settings.  The names can be used in
29465     '-mtune-ctrl=FEATURE-LIST'.
29466
29467'-mtune-ctrl=FEATURE-LIST'
29468     This option is used to do fine grain control of x86 code generation
29469     features.  FEATURE-LIST is a comma separated list of FEATURE names.
29470     See also '-mdump-tune-features'.  When specified, the FEATURE is
29471     turned on if it is not preceded with '^', otherwise, it is turned
29472     off.  '-mtune-ctrl=FEATURE-LIST' is intended to be used by GCC
29473     developers.  Using it may lead to code paths not covered by testing
29474     and can potentially result in compiler ICEs or runtime errors.
29475
29476'-mno-default'
29477     This option instructs GCC to turn off all tunable features.  See
29478     also '-mtune-ctrl=FEATURE-LIST' and '-mdump-tune-features'.
29479
29480'-mcld'
29481     This option instructs GCC to emit a 'cld' instruction in the
29482     prologue of functions that use string instructions.  String
29483     instructions depend on the DF flag to select between autoincrement
29484     or autodecrement mode.  While the ABI specifies the DF flag to be
29485     cleared on function entry, some operating systems violate this
29486     specification by not clearing the DF flag in their exception
29487     dispatchers.  The exception handler can be invoked with the DF flag
29488     set, which leads to wrong direction mode when string instructions
29489     are used.  This option can be enabled by default on 32-bit x86
29490     targets by configuring GCC with the '--enable-cld' configure
29491     option.  Generation of 'cld' instructions can be suppressed with
29492     the '-mno-cld' compiler option in this case.
29493
29494'-mvzeroupper'
29495     This option instructs GCC to emit a 'vzeroupper' instruction before
29496     a transfer of control flow out of the function to minimize the AVX
29497     to SSE transition penalty as well as remove unnecessary 'zeroupper'
29498     intrinsics.
29499
29500'-mprefer-avx128'
29501     This option instructs GCC to use 128-bit AVX instructions instead
29502     of 256-bit AVX instructions in the auto-vectorizer.
29503
29504'-mprefer-vector-width=OPT'
29505     This option instructs GCC to use OPT-bit vector width in
29506     instructions instead of default on the selected platform.
29507
29508'-mmove-max=BITS'
29509     This option instructs GCC to set the maximum number of bits can be
29510     moved from memory to memory efficiently to BITS.  The valid BITS
29511     are 128, 256 and 512.
29512
29513'-mstore-max=BITS'
29514     This option instructs GCC to set the maximum number of bits can be
29515     stored to memory efficiently to BITS.  The valid BITS are 128, 256
29516     and 512.
29517
29518     'none'
29519          No extra limitations applied to GCC other than defined by the
29520          selected platform.
29521
29522     '128'
29523          Prefer 128-bit vector width for instructions.
29524
29525     '256'
29526          Prefer 256-bit vector width for instructions.
29527
29528     '512'
29529          Prefer 512-bit vector width for instructions.
29530
29531'-mcx16'
29532     This option enables GCC to generate 'CMPXCHG16B' instructions in
29533     64-bit code to implement compare-and-exchange operations on 16-byte
29534     aligned 128-bit objects.  This is useful for atomic updates of data
29535     structures exceeding one machine word in size.  The compiler uses
29536     this instruction to implement *note __sync Builtins::.  However,
29537     for *note __atomic Builtins:: operating on 128-bit integers, a
29538     library call is always used.
29539
29540'-msahf'
29541     This option enables generation of 'SAHF' instructions in 64-bit
29542     code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
29543     the introduction of Pentium 4 G1 step in December 2005, lacked the
29544     'LAHF' and 'SAHF' instructions which are supported by AMD64.  These
29545     are load and store instructions, respectively, for certain status
29546     flags.  In 64-bit mode, the 'SAHF' instruction is used to optimize
29547     'fmod', 'drem', and 'remainder' built-in functions; see *note Other
29548     Builtins:: for details.
29549
29550'-mmovbe'
29551     This option enables use of the 'movbe' instruction to implement
29552     '__builtin_bswap32' and '__builtin_bswap64'.
29553
29554'-mshstk'
29555     The '-mshstk' option enables shadow stack built-in functions from
29556     x86 Control-flow Enforcement Technology (CET).
29557
29558'-mcrc32'
29559     This option enables built-in functions '__builtin_ia32_crc32qi',
29560     '__builtin_ia32_crc32hi', '__builtin_ia32_crc32si' and
29561     '__builtin_ia32_crc32di' to generate the 'crc32' machine
29562     instruction.
29563
29564'-mmwait'
29565     This option enables built-in functions '__builtin_ia32_monitor',
29566     and '__builtin_ia32_mwait' to generate the 'monitor' and 'mwait'
29567     machine instructions.
29568
29569'-mrecip'
29570     This option enables use of 'RCPSS' and 'RSQRTSS' instructions (and
29571     their vectorized variants 'RCPPS' and 'RSQRTPS') with an additional
29572     Newton-Raphson step to increase precision instead of 'DIVSS' and
29573     'SQRTSS' (and their vectorized variants) for single-precision
29574     floating-point arguments.  These instructions are generated only
29575     when '-funsafe-math-optimizations' is enabled together with
29576     '-ffinite-math-only' and '-fno-trapping-math'.  Note that while the
29577     throughput of the sequence is higher than the throughput of the
29578     non-reciprocal instruction, the precision of the sequence can be
29579     decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
29580     0.99999994).
29581
29582     Note that GCC implements '1.0f/sqrtf(X)' in terms of 'RSQRTSS' (or
29583     'RSQRTPS') already with '-ffast-math' (or the above option
29584     combination), and doesn't need '-mrecip'.
29585
29586     Also note that GCC emits the above sequence with additional
29587     Newton-Raphson step for vectorized single-float division and
29588     vectorized 'sqrtf(X)' already with '-ffast-math' (or the above
29589     option combination), and doesn't need '-mrecip'.
29590
29591'-mrecip=OPT'
29592     This option controls which reciprocal estimate instructions may be
29593     used.  OPT is a comma-separated list of options, which may be
29594     preceded by a '!' to invert the option:
29595
29596     'all'
29597          Enable all estimate instructions.
29598
29599     'default'
29600          Enable the default instructions, equivalent to '-mrecip'.
29601
29602     'none'
29603          Disable all estimate instructions, equivalent to '-mno-recip'.
29604
29605     'div'
29606          Enable the approximation for scalar division.
29607
29608     'vec-div'
29609          Enable the approximation for vectorized division.
29610
29611     'sqrt'
29612          Enable the approximation for scalar square root.
29613
29614     'vec-sqrt'
29615          Enable the approximation for vectorized square root.
29616
29617     So, for example, '-mrecip=all,!sqrt' enables all of the reciprocal
29618     approximations, except for square root.
29619
29620'-mveclibabi=TYPE'
29621     Specifies the ABI type to use for vectorizing intrinsics using an
29622     external library.  Supported values for TYPE are 'svml' for the
29623     Intel short vector math library and 'acml' for the AMD math core
29624     library.  To use this option, both '-ftree-vectorize' and
29625     '-funsafe-math-optimizations' have to be enabled, and an SVML or
29626     ACML ABI-compatible library must be specified at link time.
29627
29628     GCC currently emits calls to 'vmldExp2', 'vmldLn2', 'vmldLog102',
29629     'vmldPow2', 'vmldTanh2', 'vmldTan2', 'vmldAtan2', 'vmldAtanh2',
29630     'vmldCbrt2', 'vmldSinh2', 'vmldSin2', 'vmldAsinh2', 'vmldAsin2',
29631     'vmldCosh2', 'vmldCos2', 'vmldAcosh2', 'vmldAcos2', 'vmlsExp4',
29632     'vmlsLn4', 'vmlsLog104', 'vmlsPow4', 'vmlsTanh4', 'vmlsTan4',
29633     'vmlsAtan4', 'vmlsAtanh4', 'vmlsCbrt4', 'vmlsSinh4', 'vmlsSin4',
29634     'vmlsAsinh4', 'vmlsAsin4', 'vmlsCosh4', 'vmlsCos4', 'vmlsAcosh4'
29635     and 'vmlsAcos4' for corresponding function type when
29636     '-mveclibabi=svml' is used, and '__vrd2_sin', '__vrd2_cos',
29637     '__vrd2_exp', '__vrd2_log', '__vrd2_log2', '__vrd2_log10',
29638     '__vrs4_sinf', '__vrs4_cosf', '__vrs4_expf', '__vrs4_logf',
29639     '__vrs4_log2f', '__vrs4_log10f' and '__vrs4_powf' for the
29640     corresponding function type when '-mveclibabi=acml' is used.
29641
29642'-mabi=NAME'
29643     Generate code for the specified calling convention.  Permissible
29644     values are 'sysv' for the ABI used on GNU/Linux and other systems,
29645     and 'ms' for the Microsoft ABI. The default is to use the Microsoft
29646     ABI when targeting Microsoft Windows and the SysV ABI on all other
29647     systems.  You can control this behavior for specific functions by
29648     using the function attributes 'ms_abi' and 'sysv_abi'.  *Note
29649     Function Attributes::.
29650
29651'-mforce-indirect-call'
29652     Force all calls to functions to be indirect.  This is useful when
29653     using Intel Processor Trace where it generates more precise timing
29654     information for function calls.
29655
29656'-mmanual-endbr'
29657     Insert ENDBR instruction at function entry only via the 'cf_check'
29658     function attribute.  This is useful when used with the option
29659     '-fcf-protection=branch' to control ENDBR insertion at the function
29660     entry.
29661
29662'-mcall-ms2sysv-xlogues'
29663     Due to differences in 64-bit ABIs, any Microsoft ABI function that
29664     calls a System V ABI function must consider RSI, RDI and XMM6-15 as
29665     clobbered.  By default, the code for saving and restoring these
29666     registers is emitted inline, resulting in fairly lengthy prologues
29667     and epilogues.  Using '-mcall-ms2sysv-xlogues' emits prologues and
29668     epilogues that use stubs in the static portion of libgcc to perform
29669     these saves and restores, thus reducing function size at the cost
29670     of a few extra instructions.
29671
29672'-mtls-dialect=TYPE'
29673     Generate code to access thread-local storage using the 'gnu' or
29674     'gnu2' conventions.  'gnu' is the conservative default; 'gnu2' is
29675     more efficient, but it may add compile- and run-time requirements
29676     that cannot be satisfied on all systems.
29677
29678'-mpush-args'
29679'-mno-push-args'
29680     Use PUSH operations to store outgoing parameters.  This method is
29681     shorter and usually equally fast as method using SUB/MOV operations
29682     and is enabled by default.  In some cases disabling it may improve
29683     performance because of improved scheduling and reduced
29684     dependencies.
29685
29686'-maccumulate-outgoing-args'
29687     If enabled, the maximum amount of space required for outgoing
29688     arguments is computed in the function prologue.  This is faster on
29689     most modern CPUs because of reduced dependencies, improved
29690     scheduling and reduced stack usage when the preferred stack
29691     boundary is not equal to 2.  The drawback is a notable increase in
29692     code size.  This switch implies '-mno-push-args'.
29693
29694'-mthreads'
29695     Support thread-safe exception handling on MinGW. Programs that rely
29696     on thread-safe exception handling must compile and link all code
29697     with the '-mthreads' option.  When compiling, '-mthreads' defines
29698     '-D_MT'; when linking, it links in a special thread helper library
29699     '-lmingwthrd' which cleans up per-thread exception-handling data.
29700
29701'-mms-bitfields'
29702'-mno-ms-bitfields'
29703
29704     Enable/disable bit-field layout compatible with the native
29705     Microsoft Windows compiler.
29706
29707     If 'packed' is used on a structure, or if bit-fields are used, it
29708     may be that the Microsoft ABI lays out the structure differently
29709     than the way GCC normally does.  Particularly when moving packed
29710     data between functions compiled with GCC and the native Microsoft
29711     compiler (either via function call or as data in a file), it may be
29712     necessary to access either format.
29713
29714     This option is enabled by default for Microsoft Windows targets.
29715     This behavior can also be controlled locally by use of variable or
29716     type attributes.  For more information, see *note x86 Variable
29717     Attributes:: and *note x86 Type Attributes::.
29718
29719     The Microsoft structure layout algorithm is fairly simple with the
29720     exception of the bit-field packing.  The padding and alignment of
29721     members of structures and whether a bit-field can straddle a
29722     storage-unit boundary are determine by these rules:
29723
29724       1. Structure members are stored sequentially in the order in
29725          which they are declared: the first member has the lowest
29726          memory address and the last member the highest.
29727
29728       2. Every data object has an alignment requirement.  The alignment
29729          requirement for all data except structures, unions, and arrays
29730          is either the size of the object or the current packing size
29731          (specified with either the 'aligned' attribute or the 'pack'
29732          pragma), whichever is less.  For structures, unions, and
29733          arrays, the alignment requirement is the largest alignment
29734          requirement of its members.  Every object is allocated an
29735          offset so that:
29736
29737               offset % alignment_requirement == 0
29738
29739       3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte
29740          allocation unit if the integral types are the same size and if
29741          the next bit-field fits into the current allocation unit
29742          without crossing the boundary imposed by the common alignment
29743          requirements of the bit-fields.
29744
29745     MSVC interprets zero-length bit-fields in the following ways:
29746
29747       1. If a zero-length bit-field is inserted between two bit-fields
29748          that are normally coalesced, the bit-fields are not coalesced.
29749
29750          For example:
29751
29752               struct
29753                {
29754                  unsigned long bf_1 : 12;
29755                  unsigned long : 0;
29756                  unsigned long bf_2 : 12;
29757                } t1;
29758
29759          The size of 't1' is 8 bytes with the zero-length bit-field.
29760          If the zero-length bit-field were removed, 't1''s size would
29761          be 4 bytes.
29762
29763       2. If a zero-length bit-field is inserted after a bit-field,
29764          'foo', and the alignment of the zero-length bit-field is
29765          greater than the member that follows it, 'bar', 'bar' is
29766          aligned as the type of the zero-length bit-field.
29767
29768          For example:
29769
29770               struct
29771                {
29772                  char foo : 4;
29773                  short : 0;
29774                  char bar;
29775                } t2;
29776
29777               struct
29778                {
29779                  char foo : 4;
29780                  short : 0;
29781                  double bar;
29782                } t3;
29783
29784          For 't2', 'bar' is placed at offset 2, rather than offset 1.
29785          Accordingly, the size of 't2' is 4.  For 't3', the zero-length
29786          bit-field does not affect the alignment of 'bar' or, as a
29787          result, the size of the structure.
29788
29789          Taking this into account, it is important to note the
29790          following:
29791
29792            1. If a zero-length bit-field follows a normal bit-field,
29793               the type of the zero-length bit-field may affect the
29794               alignment of the structure as whole.  For example, 't2'
29795               has a size of 4 bytes, since the zero-length bit-field
29796               follows a normal bit-field, and is of type short.
29797
29798            2. Even if a zero-length bit-field is not followed by a
29799               normal bit-field, it may still affect the alignment of
29800               the structure:
29801
29802                    struct
29803                     {
29804                       char foo : 6;
29805                       long : 0;
29806                     } t4;
29807
29808               Here, 't4' takes up 4 bytes.
29809
29810       3. Zero-length bit-fields following non-bit-field members are
29811          ignored:
29812
29813               struct
29814                {
29815                  char foo;
29816                  long : 0;
29817                  char bar;
29818                } t5;
29819
29820          Here, 't5' takes up 2 bytes.
29821
29822'-mno-align-stringops'
29823     Do not align the destination of inlined string operations.  This
29824     switch reduces code size and improves performance in case the
29825     destination is already aligned, but GCC doesn't know about it.
29826
29827'-minline-all-stringops'
29828     By default GCC inlines string operations only when the destination
29829     is known to be aligned to least a 4-byte boundary.  This enables
29830     more inlining and increases code size, but may improve performance
29831     of code that depends on fast 'memcpy' and 'memset' for short
29832     lengths.  The option enables inline expansion of 'strlen' for all
29833     pointer alignments.
29834
29835'-minline-stringops-dynamically'
29836     For string operations of unknown size, use run-time checks with
29837     inline code for small blocks and a library call for large blocks.
29838
29839'-mstringop-strategy=ALG'
29840     Override the internal decision heuristic for the particular
29841     algorithm to use for inlining string operations.  The allowed
29842     values for ALG are:
29843
29844     'rep_byte'
29845     'rep_4byte'
29846     'rep_8byte'
29847          Expand using i386 'rep' prefix of the specified size.
29848
29849     'byte_loop'
29850     'loop'
29851     'unrolled_loop'
29852          Expand into an inline loop.
29853
29854     'libcall'
29855          Always use a library call.
29856
29857'-mmemcpy-strategy=STRATEGY'
29858     Override the internal decision heuristic to decide if
29859     '__builtin_memcpy' should be inlined and what inline algorithm to
29860     use when the expected size of the copy operation is known.
29861     STRATEGY is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN
29862     triplets.  ALG is specified in '-mstringop-strategy', MAX_SIZE
29863     specifies the max byte size with which inline algorithm ALG is
29864     allowed.  For the last triplet, the MAX_SIZE must be '-1'.  The
29865     MAX_SIZE of the triplets in the list must be specified in
29866     increasing order.  The minimal byte size for ALG is '0' for the
29867     first triplet and 'MAX_SIZE + 1' of the preceding range.
29868
29869'-mmemset-strategy=STRATEGY'
29870     The option is similar to '-mmemcpy-strategy=' except that it is to
29871     control '__builtin_memset' expansion.
29872
29873'-momit-leaf-frame-pointer'
29874     Don't keep the frame pointer in a register for leaf functions.
29875     This avoids the instructions to save, set up, and restore frame
29876     pointers and makes an extra register available in leaf functions.
29877     The option '-fomit-leaf-frame-pointer' removes the frame pointer
29878     for leaf functions, which might make debugging harder.
29879
29880'-mtls-direct-seg-refs'
29881'-mno-tls-direct-seg-refs'
29882     Controls whether TLS variables may be accessed with offsets from
29883     the TLS segment register ('%gs' for 32-bit, '%fs' for 64-bit), or
29884     whether the thread base pointer must be added.  Whether or not this
29885     is valid depends on the operating system, and whether it maps the
29886     segment to cover the entire TLS area.
29887
29888     For systems that use the GNU C Library, the default is on.
29889
29890'-msse2avx'
29891'-mno-sse2avx'
29892     Specify that the assembler should encode SSE instructions with VEX
29893     prefix.  The option '-mavx' turns this on by default.
29894
29895'-mfentry'
29896'-mno-fentry'
29897     If profiling is active ('-pg'), put the profiling counter call
29898     before the prologue.  Note: On x86 architectures the attribute
29899     'ms_hook_prologue' isn't possible at the moment for '-mfentry' and
29900     '-pg'.
29901
29902'-mrecord-mcount'
29903'-mno-record-mcount'
29904     If profiling is active ('-pg'), generate a __mcount_loc section
29905     that contains pointers to each profiling call.  This is useful for
29906     automatically patching and out calls.
29907
29908'-mnop-mcount'
29909'-mno-nop-mcount'
29910     If profiling is active ('-pg'), generate the calls to the profiling
29911     functions as NOPs.  This is useful when they should be patched in
29912     later dynamically.  This is likely only useful together with
29913     '-mrecord-mcount'.
29914
29915'-minstrument-return=TYPE'
29916     Instrument function exit in -pg -mfentry instrumented functions
29917     with call to specified function.  This only instruments true
29918     returns ending with ret, but not sibling calls ending with jump.
29919     Valid types are NONE to not instrument, CALL to generate a call to
29920     __return__, or NOP5 to generate a 5 byte nop.
29921
29922'-mrecord-return'
29923'-mno-record-return'
29924     Generate a __return_loc section pointing to all return
29925     instrumentation code.
29926
29927'-mfentry-name=NAME'
29928     Set name of __fentry__ symbol called at function entry for -pg
29929     -mfentry functions.
29930
29931'-mfentry-section=NAME'
29932     Set name of section to record -mrecord-mcount calls (default
29933     __mcount_loc).
29934
29935'-mskip-rax-setup'
29936'-mno-skip-rax-setup'
29937     When generating code for the x86-64 architecture with SSE
29938     extensions disabled, '-mskip-rax-setup' can be used to skip setting
29939     up RAX register when there are no variable arguments passed in
29940     vector registers.
29941
29942     *Warning:* Since RAX register is used to avoid unnecessarily saving
29943     vector registers on stack when passing variable arguments, the
29944     impacts of this option are callees may waste some stack space,
29945     misbehave or jump to a random location.  GCC 4.4 or newer don't
29946     have those issues, regardless the RAX register value.
29947
29948'-m8bit-idiv'
29949'-mno-8bit-idiv'
29950     On some processors, like Intel Atom, 8-bit unsigned integer divide
29951     is much faster than 32-bit/64-bit integer divide.  This option
29952     generates a run-time check.  If both dividend and divisor are
29953     within range of 0 to 255, 8-bit unsigned integer divide is used
29954     instead of 32-bit/64-bit integer divide.
29955
29956'-mavx256-split-unaligned-load'
29957'-mavx256-split-unaligned-store'
29958     Split 32-byte AVX unaligned load and store.
29959
29960'-mstack-protector-guard=GUARD'
29961'-mstack-protector-guard-reg=REG'
29962'-mstack-protector-guard-offset=OFFSET'
29963     Generate stack protection code using canary at GUARD.  Supported
29964     locations are 'global' for global canary or 'tls' for per-thread
29965     canary in the TLS block (the default).  This option has effect only
29966     when '-fstack-protector' or '-fstack-protector-all' is specified.
29967
29968     With the latter choice the options
29969     '-mstack-protector-guard-reg=REG' and
29970     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
29971     segment register ('%fs' or '%gs') to use as base register for
29972     reading the canary, and from what offset from that base register.
29973     The default for those is as specified in the relevant ABI.
29974
29975'-mgeneral-regs-only'
29976     Generate code that uses only the general-purpose registers.  This
29977     prevents the compiler from using floating-point, vector, mask and
29978     bound registers.
29979
29980'-mrelax-cmpxchg-loop'
29981     Relax cmpxchg loop by emitting an early load and compare before
29982     cmpxchg, execute pause if load value is not expected.  This reduces
29983     excessive cachline bouncing when and works for all atomic logic
29984     fetch builtins that generates compare and swap loop.
29985
29986'-mindirect-branch=CHOICE'
29987     Convert indirect call and jump with CHOICE.  The default is 'keep',
29988     which keeps indirect call and jump unmodified.  'thunk' converts
29989     indirect call and jump to call and return thunk.  'thunk-inline'
29990     converts indirect call and jump to inlined call and return thunk.
29991     'thunk-extern' converts indirect call and jump to external call and
29992     return thunk provided in a separate object file.  You can control
29993     this behavior for a specific function by using the function
29994     attribute 'indirect_branch'.  *Note Function Attributes::.
29995
29996     Note that '-mcmodel=large' is incompatible with
29997     '-mindirect-branch=thunk' and '-mindirect-branch=thunk-extern'
29998     since the thunk function may not be reachable in the large code
29999     model.
30000
30001     Note that '-mindirect-branch=thunk-extern' is compatible with
30002     '-fcf-protection=branch' since the external thunk can be made to
30003     enable control-flow check.
30004
30005'-mfunction-return=CHOICE'
30006     Convert function return with CHOICE.  The default is 'keep', which
30007     keeps function return unmodified.  'thunk' converts function return
30008     to call and return thunk.  'thunk-inline' converts function return
30009     to inlined call and return thunk.  'thunk-extern' converts function
30010     return to external call and return thunk provided in a separate
30011     object file.  You can control this behavior for a specific function
30012     by using the function attribute 'function_return'.  *Note Function
30013     Attributes::.
30014
30015     Note that '-mindirect-return=thunk-extern' is compatible with
30016     '-fcf-protection=branch' since the external thunk can be made to
30017     enable control-flow check.
30018
30019     Note that '-mcmodel=large' is incompatible with
30020     '-mfunction-return=thunk' and '-mfunction-return=thunk-extern'
30021     since the thunk function may not be reachable in the large code
30022     model.
30023
30024'-mindirect-branch-register'
30025     Force indirect call and jump via register.
30026
30027'-mharden-sls=CHOICE'
30028     Generate code to mitigate against straight line speculation (SLS)
30029     with CHOICE.  The default is 'none' which disables all SLS
30030     hardening.  'return' enables SLS hardening for function returns.
30031     'indirect-jmp' enables SLS hardening for indirect jumps.  'all'
30032     enables all SLS hardening.
30033
30034'-mindirect-branch-cs-prefix'
30035     Add CS prefix to call and jmp to indirect thunk with branch target
30036     in r8-r15 registers so that the call and jmp instruction length is
30037     6 bytes to allow them to be replaced with 'lfence; call *%r8-r15'
30038     or 'lfence; jmp *%r8-r15' at run-time.
30039
30040 These '-m' switches are supported in addition to the above on x86-64
30041processors in 64-bit environments.
30042
30043'-m32'
30044'-m64'
30045'-mx32'
30046'-m16'
30047'-miamcu'
30048     Generate code for a 16-bit, 32-bit or 64-bit environment.  The
30049     '-m32' option sets 'int', 'long', and pointer types to 32 bits, and
30050     generates code that runs on any i386 system.
30051
30052     The '-m64' option sets 'int' to 32 bits and 'long' and pointer
30053     types to 64 bits, and generates code for the x86-64 architecture.
30054     For Darwin only the '-m64' option also turns off the '-fno-pic' and
30055     '-mdynamic-no-pic' options.
30056
30057     The '-mx32' option sets 'int', 'long', and pointer types to 32
30058     bits, and generates code for the x86-64 architecture.
30059
30060     The '-m16' option is the same as '-m32', except for that it outputs
30061     the '.code16gcc' assembly directive at the beginning of the
30062     assembly output so that the binary can run in 16-bit mode.
30063
30064     The '-miamcu' option generates code which conforms to Intel MCU
30065     psABI. It requires the '-m32' option to be turned on.
30066
30067'-mno-red-zone'
30068     Do not use a so-called "red zone" for x86-64 code.  The red zone is
30069     mandated by the x86-64 ABI; it is a 128-byte area beyond the
30070     location of the stack pointer that is not modified by signal or
30071     interrupt handlers and therefore can be used for temporary data
30072     without adjusting the stack pointer.  The flag '-mno-red-zone'
30073     disables this red zone.
30074
30075'-mcmodel=small'
30076     Generate code for the small code model: the program and its symbols
30077     must be linked in the lower 2 GB of the address space.  Pointers
30078     are 64 bits.  Programs can be statically or dynamically linked.
30079     This is the default code model.
30080
30081'-mcmodel=kernel'
30082     Generate code for the kernel code model.  The kernel runs in the
30083     negative 2 GB of the address space.  This model has to be used for
30084     Linux kernel code.
30085
30086'-mcmodel=medium'
30087     Generate code for the medium model: the program is linked in the
30088     lower 2 GB of the address space.  Small symbols are also placed
30089     there.  Symbols with sizes larger than '-mlarge-data-threshold' are
30090     put into large data or BSS sections and can be located above 2GB.
30091     Programs can be statically or dynamically linked.
30092
30093'-mcmodel=large'
30094     Generate code for the large model.  This model makes no assumptions
30095     about addresses and sizes of sections.
30096
30097'-maddress-mode=long'
30098     Generate code for long address mode.  This is only supported for
30099     64-bit and x32 environments.  It is the default address mode for
30100     64-bit environments.
30101
30102'-maddress-mode=short'
30103     Generate code for short address mode.  This is only supported for
30104     32-bit and x32 environments.  It is the default address mode for
30105     32-bit and x32 environments.
30106
30107'-mneeded'
30108'-mno-needed'
30109     Emit GNU_PROPERTY_X86_ISA_1_NEEDED GNU property for Linux target to
30110     indicate the micro-architecture ISA level required to execute the
30111     binary.
30112
30113'-mno-direct-extern-access'
30114     Without '-fpic' nor '-fPIC', always use the GOT pointer to access
30115     external symbols.  With '-fpic' or '-fPIC', treat access to
30116     protected symbols as local symbols.  The default is
30117     '-mdirect-extern-access'.
30118
30119     *Warning:* shared libraries compiled with
30120     '-mno-direct-extern-access' and executable compiled with
30121     '-mdirect-extern-access' may not be binary compatible if protected
30122     symbols are used in shared libraries and executable.
30123
30124
30125File: gcc.info,  Node: x86 Windows Options,  Next: Xstormy16 Options,  Prev: x86 Options,  Up: Submodel Options
30126
301273.19.61 x86 Windows Options
30128---------------------------
30129
30130These additional options are available for Microsoft Windows targets:
30131
30132'-mconsole'
30133     This option specifies that a console application is to be
30134     generated, by instructing the linker to set the PE header subsystem
30135     type required for console applications.  This option is available
30136     for Cygwin and MinGW targets and is enabled by default on those
30137     targets.
30138
30139'-mdll'
30140     This option is available for Cygwin and MinGW targets.  It
30141     specifies that a DLL--a dynamic link library--is to be generated,
30142     enabling the selection of the required runtime startup object and
30143     entry point.
30144
30145'-mnop-fun-dllimport'
30146     This option is available for Cygwin and MinGW targets.  It
30147     specifies that the 'dllimport' attribute should be ignored.
30148
30149'-mthreads'
30150     This option is available for MinGW targets.  It specifies that
30151     MinGW-specific thread support is to be used.
30152
30153'-municode'
30154     This option is available for MinGW-w64 targets.  It causes the
30155     'UNICODE' preprocessor macro to be predefined, and chooses
30156     Unicode-capable runtime startup code.
30157
30158'-mwin32'
30159     This option is available for Cygwin and MinGW targets.  It
30160     specifies that the typical Microsoft Windows predefined macros are
30161     to be set in the pre-processor, but does not influence the choice
30162     of runtime library/startup code.
30163
30164'-mwindows'
30165     This option is available for Cygwin and MinGW targets.  It
30166     specifies that a GUI application is to be generated by instructing
30167     the linker to set the PE header subsystem type appropriately.
30168
30169'-fno-set-stack-executable'
30170     This option is available for MinGW targets.  It specifies that the
30171     executable flag for the stack used by nested functions isn't set.
30172     This is necessary for binaries running in kernel mode of Microsoft
30173     Windows, as there the User32 API, which is used to set executable
30174     privileges, isn't available.
30175
30176'-fwritable-relocated-rdata'
30177     This option is available for MinGW and Cygwin targets.  It
30178     specifies that relocated-data in read-only section is put into the
30179     '.data' section.  This is a necessary for older runtimes not
30180     supporting modification of '.rdata' sections for pseudo-relocation.
30181
30182'-mpe-aligned-commons'
30183     This option is available for Cygwin and MinGW targets.  It
30184     specifies that the GNU extension to the PE file format that permits
30185     the correct alignment of COMMON variables should be used when
30186     generating code.  It is enabled by default if GCC detects that the
30187     target assembler found during configuration supports the feature.
30188
30189 See also under *note x86 Options:: for standard options.
30190
30191
30192File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86 Windows Options,  Up: Submodel Options
30193
301943.19.62 Xstormy16 Options
30195-------------------------
30196
30197These options are defined for Xstormy16:
30198
30199'-msim'
30200     Choose startup files and linker script suitable for the simulator.
30201
30202
30203File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
30204
302053.19.63 Xtensa Options
30206----------------------
30207
30208These options are supported for Xtensa targets:
30209
30210'-mconst16'
30211'-mno-const16'
30212     Enable or disable use of 'CONST16' instructions for loading
30213     constant values.  The 'CONST16' instruction is currently not a
30214     standard option from Tensilica.  When enabled, 'CONST16'
30215     instructions are always used in place of the standard 'L32R'
30216     instructions.  The use of 'CONST16' is enabled by default only if
30217     the 'L32R' instruction is not available.
30218
30219'-mfused-madd'
30220'-mno-fused-madd'
30221     Enable or disable use of fused multiply/add and multiply/subtract
30222     instructions in the floating-point option.  This has no effect if
30223     the floating-point option is not also enabled.  Disabling fused
30224     multiply/add and multiply/subtract instructions forces the compiler
30225     to use separate instructions for the multiply and add/subtract
30226     operations.  This may be desirable in some cases where strict IEEE
30227     754-compliant results are required: the fused multiply add/subtract
30228     instructions do not round the intermediate result, thereby
30229     producing results with _more_ bits of precision than specified by
30230     the IEEE standard.  Disabling fused multiply add/subtract
30231     instructions also ensures that the program output is not sensitive
30232     to the compiler's ability to combine multiply and add/subtract
30233     operations.
30234
30235'-mserialize-volatile'
30236'-mno-serialize-volatile'
30237     When this option is enabled, GCC inserts 'MEMW' instructions before
30238     'volatile' memory references to guarantee sequential consistency.
30239     The default is '-mserialize-volatile'.  Use
30240     '-mno-serialize-volatile' to omit the 'MEMW' instructions.
30241
30242'-mforce-no-pic'
30243     For targets, like GNU/Linux, where all user-mode Xtensa code must
30244     be position-independent code (PIC), this option disables PIC for
30245     compiling kernel code.
30246
30247'-mtext-section-literals'
30248'-mno-text-section-literals'
30249     These options control the treatment of literal pools.  The default
30250     is '-mno-text-section-literals', which places literals in a
30251     separate section in the output file.  This allows the literal pool
30252     to be placed in a data RAM/ROM, and it also allows the linker to
30253     combine literal pools from separate object files to remove
30254     redundant literals and improve code size.  With
30255     '-mtext-section-literals', the literals are interspersed in the
30256     text section in order to keep them as close as possible to their
30257     references.  This may be necessary for large assembly files.
30258     Literals for each function are placed right before that function.
30259
30260'-mauto-litpools'
30261'-mno-auto-litpools'
30262     These options control the treatment of literal pools.  The default
30263     is '-mno-auto-litpools', which places literals in a separate
30264     section in the output file unless '-mtext-section-literals' is
30265     used.  With '-mauto-litpools' the literals are interspersed in the
30266     text section by the assembler.  Compiler does not produce explicit
30267     '.literal' directives and loads literals into registers with 'MOVI'
30268     instructions instead of 'L32R' to let the assembler do relaxation
30269     and place literals as necessary.  This option allows assembler to
30270     create several literal pools per function and assemble very big
30271     functions, which may not be possible with
30272     '-mtext-section-literals'.
30273
30274'-mtarget-align'
30275'-mno-target-align'
30276     When this option is enabled, GCC instructs the assembler to
30277     automatically align instructions to reduce branch penalties at the
30278     expense of some code density.  The assembler attempts to widen
30279     density instructions to align branch targets and the instructions
30280     following call instructions.  If there are not enough preceding
30281     safe density instructions to align a target, no widening is
30282     performed.  The default is '-mtarget-align'.  These options do not
30283     affect the treatment of auto-aligned instructions like 'LOOP',
30284     which the assembler always aligns, either by widening density
30285     instructions or by inserting NOP instructions.
30286
30287'-mlongcalls'
30288'-mno-longcalls'
30289     When this option is enabled, GCC instructs the assembler to
30290     translate direct calls to indirect calls unless it can determine
30291     that the target of a direct call is in the range allowed by the
30292     call instruction.  This translation typically occurs for calls to
30293     functions in other source files.  Specifically, the assembler
30294     translates a direct 'CALL' instruction into an 'L32R' followed by a
30295     'CALLX' instruction.  The default is '-mno-longcalls'.  This option
30296     should be used in programs where the call target can potentially be
30297     out of range.  This option is implemented in the assembler, not the
30298     compiler, so the assembly code generated by GCC still shows direct
30299     call instructions--look at the disassembled object code to see the
30300     actual instructions.  Note that the assembler uses an indirect call
30301     for every cross-file call, not just those that really are out of
30302     range.
30303
30304'-mabi=NAME'
30305     Generate code for the specified ABI.  Permissible values are:
30306     'call0', 'windowed'.  Default ABI is chosen by the Xtensa core
30307     configuration.
30308
30309'-mabi=call0'
30310     When this option is enabled function parameters are passed in
30311     registers 'a2' through 'a7', registers 'a12' through 'a15' are
30312     caller-saved, and register 'a15' may be used as a frame pointer.
30313     When this version of the ABI is enabled the C preprocessor symbol
30314     '__XTENSA_CALL0_ABI__' is defined.
30315
30316'-mabi=windowed'
30317     When this option is enabled function parameters are passed in
30318     registers 'a10' through 'a15', and called function rotates register
30319     window by 8 registers on entry so that its arguments are found in
30320     registers 'a2' through 'a7'.  Register 'a7' may be used as a frame
30321     pointer.  Register window is rotated 8 registers back upon return.
30322     When this version of the ABI is enabled the C preprocessor symbol
30323     '__XTENSA_WINDOWED_ABI__' is defined.
30324
30325
30326File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
30327
303283.19.64 zSeries Options
30329-----------------------
30330
30331These are listed under *Note S/390 and zSeries Options::.
30332
30333
30334File: gcc.info,  Node: Spec Files,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
30335
303363.20 Specifying Subprocesses and the Switches to Pass to Them
30337=============================================================
30338
30339'gcc' is a driver program.  It performs its job by invoking a sequence
30340of other programs to do the work of compiling, assembling and linking.
30341GCC interprets its command-line parameters and uses these to deduce
30342which programs it should invoke, and which command-line options it ought
30343to place on their command lines.  This behavior is controlled by "spec
30344strings".  In most cases there is one spec string for each program that
30345GCC can invoke, but a few programs have multiple spec strings to control
30346their behavior.  The spec strings built into GCC can be overridden by
30347using the '-specs=' command-line switch to specify a spec file.
30348
30349 "Spec files" are plain-text files that are used to construct spec
30350strings.  They consist of a sequence of directives separated by blank
30351lines.  The type of directive is determined by the first non-whitespace
30352character on the line, which can be one of the following:
30353
30354'%COMMAND'
30355     Issues a COMMAND to the spec file processor.  The commands that can
30356     appear here are:
30357
30358     '%include <FILE>'
30359          Search for FILE and insert its text at the current point in
30360          the specs file.
30361
30362     '%include_noerr <FILE>'
30363          Just like '%include', but do not generate an error message if
30364          the include file cannot be found.
30365
30366     '%rename OLD_NAME NEW_NAME'
30367          Rename the spec string OLD_NAME to NEW_NAME.
30368
30369'*[SPEC_NAME]:'
30370     This tells the compiler to create, override or delete the named
30371     spec string.  All lines after this directive up to the next
30372     directive or blank line are considered to be the text for the spec
30373     string.  If this results in an empty string then the spec is
30374     deleted.  (Or, if the spec did not exist, then nothing happens.)
30375     Otherwise, if the spec does not currently exist a new spec is
30376     created.  If the spec does exist then its contents are overridden
30377     by the text of this directive, unless the first character of that
30378     text is the '+' character, in which case the text is appended to
30379     the spec.
30380
30381'[SUFFIX]:'
30382     Creates a new '[SUFFIX] spec' pair.  All lines after this directive
30383     and up to the next directive or blank line are considered to make
30384     up the spec string for the indicated suffix.  When the compiler
30385     encounters an input file with the named suffix, it processes the
30386     spec string in order to work out how to compile that file.  For
30387     example:
30388
30389          .ZZ:
30390          z-compile -input %i
30391
30392     This says that any input file whose name ends in '.ZZ' should be
30393     passed to the program 'z-compile', which should be invoked with the
30394     command-line switch '-input' and with the result of performing the
30395     '%i' substitution.  (See below.)
30396
30397     As an alternative to providing a spec string, the text following a
30398     suffix directive can be one of the following:
30399
30400     '@LANGUAGE'
30401          This says that the suffix is an alias for a known LANGUAGE.
30402          This is similar to using the '-x' command-line switch to GCC
30403          to specify a language explicitly.  For example:
30404
30405               .ZZ:
30406               @c++
30407
30408          Says that .ZZ files are, in fact, C++ source files.
30409
30410     '#NAME'
30411          This causes an error messages saying:
30412
30413               NAME compiler not installed on this system.
30414
30415     GCC already has an extensive list of suffixes built into it.  This
30416     directive adds an entry to the end of the list of suffixes, but
30417     since the list is searched from the end backwards, it is
30418     effectively possible to override earlier entries using this
30419     technique.
30420
30421 GCC has the following spec strings built into it.  Spec files can
30422override these strings or create their own.  Note that individual
30423targets can also add their own spec strings to this list.
30424
30425     asm          Options to pass to the assembler
30426     asm_final    Options to pass to the assembler post-processor
30427     cpp          Options to pass to the C preprocessor
30428     cc1          Options to pass to the C compiler
30429     cc1plus      Options to pass to the C++ compiler
30430     endfile      Object files to include at the end of the link
30431     link         Options to pass to the linker
30432     lib          Libraries to include on the command line to the linker
30433     libgcc       Decides which GCC support library to pass to the linker
30434     linker       Sets the name of the linker
30435     predefines   Defines to be passed to the C preprocessor
30436     signed_char  Defines to pass to CPP to say whether char is signed
30437                  by default
30438     startfile    Object files to include at the start of the link
30439
30440 Here is a small example of a spec file:
30441
30442     %rename lib                 old_lib
30443
30444     *lib:
30445     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
30446
30447 This example renames the spec called 'lib' to 'old_lib' and then
30448overrides the previous definition of 'lib' with a new one.  The new
30449definition adds in some extra command-line options before including the
30450text of the old definition.
30451
30452 "Spec strings" are a list of command-line options to be passed to their
30453corresponding program.  In addition, the spec strings can contain
30454'%'-prefixed sequences to substitute variable text or to conditionally
30455insert text into the command line.  Using these constructs it is
30456possible to generate quite complex command lines.
30457
30458 Here is a table of all defined '%'-sequences for spec strings.  Note
30459that spaces are not generated automatically around the results of
30460expanding these sequences.  Therefore you can concatenate them together
30461or combine them with constant text in a single argument.
30462
30463'%%'
30464     Substitute one '%' into the program name or argument.
30465
30466'%"'
30467     Substitute an empty argument.
30468
30469'%i'
30470     Substitute the name of the input file being processed.
30471
30472'%b'
30473     Substitute the basename for outputs related with the input file
30474     being processed.  This is often the substring up to (and not
30475     including) the last period and not including the directory but,
30476     unless %w is active, it expands to the basename for auxiliary
30477     outputs, which may be influenced by an explicit output name, and by
30478     various other options that control how auxiliary outputs are named.
30479
30480'%B'
30481     This is the same as '%b', but include the file suffix (text after
30482     the last period).  Without %w, it expands to the basename for dump
30483     outputs.
30484
30485'%d'
30486     Marks the argument containing or following the '%d' as a temporary
30487     file name, so that that file is deleted if GCC exits successfully.
30488     Unlike '%g', this contributes no text to the argument.
30489
30490'%gSUFFIX'
30491     Substitute a file name that has suffix SUFFIX and is chosen once
30492     per compilation, and mark the argument in the same way as '%d'.  To
30493     reduce exposure to denial-of-service attacks, the file name is now
30494     chosen in a way that is hard to predict even when previously chosen
30495     file names are known.  For example, '%g.s ... %g.o ... %g.s' might
30496     turn into 'ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX matches the
30497     regexp '[.A-Za-z]*' or the special string '%O', which is treated
30498     exactly as if '%O' had been preprocessed.  Previously, '%g' was
30499     simply substituted with a file name chosen once per compilation,
30500     without regard to any appended suffix (which was therefore treated
30501     just like ordinary text), making such attacks more likely to
30502     succeed.
30503
30504'%uSUFFIX'
30505     Like '%g', but generates a new temporary file name each time it
30506     appears instead of once per compilation.
30507
30508'%USUFFIX'
30509     Substitutes the last file name generated with '%uSUFFIX',
30510     generating a new one if there is no such last file name.  In the
30511     absence of any '%uSUFFIX', this is just like '%gSUFFIX', except
30512     they don't share the same suffix _space_, so '%g.s ... %U.s ...
30513     %g.s ... %U.s' involves the generation of two distinct file names,
30514     one for each '%g.s' and another for each '%U.s'.  Previously, '%U'
30515     was simply substituted with a file name chosen for the previous
30516     '%u', without regard to any appended suffix.
30517
30518'%jSUFFIX'
30519     Substitutes the name of the 'HOST_BIT_BUCKET', if any, and if it is
30520     writable, and if '-save-temps' is not used; otherwise, substitute
30521     the name of a temporary file, just like '%u'.  This temporary file
30522     is not meant for communication between processes, but rather as a
30523     junk disposal mechanism.
30524
30525'%|SUFFIX'
30526'%mSUFFIX'
30527     Like '%g', except if '-pipe' is in effect.  In that case '%|'
30528     substitutes a single dash and '%m' substitutes nothing at all.
30529     These are the two most common ways to instruct a program that it
30530     should read from standard input or write to standard output.  If
30531     you need something more elaborate you can use an '%{pipe:'X'}'
30532     construct: see for example 'gcc/fortran/lang-specs.h'.
30533
30534'%.SUFFIX'
30535     Substitutes .SUFFIX for the suffixes of a matched switch's args
30536     when it is subsequently output with '%*'.  SUFFIX is terminated by
30537     the next space or %.
30538
30539'%w'
30540     Marks the argument containing or following the '%w' as the
30541     designated output file of this compilation.  This puts the argument
30542     into the sequence of arguments that '%o' substitutes.
30543
30544'%V'
30545     Indicates that this compilation produces no output file.
30546
30547'%o'
30548     Substitutes the names of all the output files, with spaces
30549     automatically placed around them.  You should write spaces around
30550     the '%o' as well or the results are undefined.  '%o' is for use in
30551     the specs for running the linker.  Input files whose names have no
30552     recognized suffix are not compiled at all, but they are included
30553     among the output files, so they are linked.
30554
30555'%O'
30556     Substitutes the suffix for object files.  Note that this is handled
30557     specially when it immediately follows '%g, %u, or %U', because of
30558     the need for those to form complete file names.  The handling is
30559     such that '%O' is treated exactly as if it had already been
30560     substituted, except that '%g, %u, and %U' do not currently support
30561     additional SUFFIX characters following '%O' as they do following,
30562     for example, '.o'.
30563
30564'%I'
30565     Substitute any of '-iprefix' (made from 'GCC_EXEC_PREFIX'),
30566     '-isysroot' (made from 'TARGET_SYSTEM_ROOT'), '-isystem' (made from
30567     'COMPILER_PATH' and '-B' options) and '-imultilib' as necessary.
30568
30569'%s'
30570     Current argument is the name of a library or startup file of some
30571     sort.  Search for that file in a standard list of directories and
30572     substitute the full name found.  The current working directory is
30573     included in the list of directories scanned.
30574
30575'%T'
30576     Current argument is the name of a linker script.  Search for that
30577     file in the current list of directories to scan for libraries.  If
30578     the file is located insert a '--script' option into the command
30579     line followed by the full path name found.  If the file is not
30580     found then generate an error message.  Note: the current working
30581     directory is not searched.
30582
30583'%eSTR'
30584     Print STR as an error message.  STR is terminated by a newline.
30585     Use this when inconsistent options are detected.
30586
30587'%nSTR'
30588     Print STR as a notice.  STR is terminated by a newline.
30589
30590'%(NAME)'
30591     Substitute the contents of spec string NAME at this point.
30592
30593'%x{OPTION}'
30594     Accumulate an option for '%X'.
30595
30596'%X'
30597     Output the accumulated linker options specified by a '%x' spec
30598     string.
30599
30600'%Y'
30601     Output the accumulated assembler options specified by '-Wa'.
30602
30603'%Z'
30604     Output the accumulated preprocessor options specified by '-Wp'.
30605
30606'%M'
30607     Output 'multilib_os_dir'.
30608
30609'%R'
30610     Output the concatenation of 'target_system_root' and
30611     'target_sysroot_suffix'.
30612
30613'%a'
30614     Process the 'asm' spec.  This is used to compute the switches to be
30615     passed to the assembler.
30616
30617'%A'
30618     Process the 'asm_final' spec.  This is a spec string for passing
30619     switches to an assembler post-processor, if such a program is
30620     needed.
30621
30622'%l'
30623     Process the 'link' spec.  This is the spec for computing the
30624     command line passed to the linker.  Typically it makes use of the
30625     '%L %G %S %D and %E' sequences.
30626
30627'%D'
30628     Dump out a '-L' option for each directory that GCC believes might
30629     contain startup files.  If the target supports multilibs then the
30630     current multilib directory is prepended to each of these paths.
30631
30632'%L'
30633     Process the 'lib' spec.  This is a spec string for deciding which
30634     libraries are included on the command line to the linker.
30635
30636'%G'
30637     Process the 'libgcc' spec.  This is a spec string for deciding
30638     which GCC support library is included on the command line to the
30639     linker.
30640
30641'%S'
30642     Process the 'startfile' spec.  This is a spec for deciding which
30643     object files are the first ones passed to the linker.  Typically
30644     this might be a file named 'crt0.o'.
30645
30646'%E'
30647     Process the 'endfile' spec.  This is a spec string that specifies
30648     the last object files that are passed to the linker.
30649
30650'%C'
30651     Process the 'cpp' spec.  This is used to construct the arguments to
30652     be passed to the C preprocessor.
30653
30654'%1'
30655     Process the 'cc1' spec.  This is used to construct the options to
30656     be passed to the actual C compiler ('cc1').
30657
30658'%2'
30659     Process the 'cc1plus' spec.  This is used to construct the options
30660     to be passed to the actual C++ compiler ('cc1plus').
30661
30662'%*'
30663     Substitute the variable part of a matched option.  See below.  Note
30664     that each comma in the substituted string is replaced by a single
30665     space.
30666
30667'%<S'
30668     Remove all occurrences of '-S' from the command line.  Note--this
30669     command is position dependent.  '%' commands in the spec string
30670     before this one see '-S', '%' commands in the spec string after
30671     this one do not.
30672
30673'%<S*'
30674     Similar to '%<S', but match all switches beginning with '-S'.
30675
30676'%>S'
30677     Similar to '%<S', but keep '-S' in the GCC command line.
30678
30679'%:FUNCTION(ARGS)'
30680     Call the named function FUNCTION, passing it ARGS.  ARGS is first
30681     processed as a nested spec string, then split into an argument
30682     vector in the usual fashion.  The function returns a string which
30683     is processed as if it had appeared literally as part of the current
30684     spec.
30685
30686     The following built-in spec functions are provided:
30687
30688     'getenv'
30689          The 'getenv' spec function takes two arguments: an environment
30690          variable name and a string.  If the environment variable is
30691          not defined, a fatal error is issued.  Otherwise, the return
30692          value is the value of the environment variable concatenated
30693          with the string.  For example, if 'TOPDIR' is defined as
30694          '/path/to/top', then:
30695
30696               %:getenv(TOPDIR /include)
30697
30698          expands to '/path/to/top/include'.
30699
30700     'if-exists'
30701          The 'if-exists' spec function takes one argument, an absolute
30702          pathname to a file.  If the file exists, 'if-exists' returns
30703          the pathname.  Here is a small example of its usage:
30704
30705               *startfile:
30706               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
30707
30708     'if-exists-else'
30709          The 'if-exists-else' spec function is similar to the
30710          'if-exists' spec function, except that it takes two arguments.
30711          The first argument is an absolute pathname to a file.  If the
30712          file exists, 'if-exists-else' returns the pathname.  If it
30713          does not exist, it returns the second argument.  This way,
30714          'if-exists-else' can be used to select one file or another,
30715          based on the existence of the first.  Here is a small example
30716          of its usage:
30717
30718               *startfile:
30719               crt0%O%s %:if-exists(crti%O%s) \
30720               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
30721
30722     'if-exists-then-else'
30723          The 'if-exists-then-else' spec function takes at least two
30724          arguments and an optional third one.  The first argument is an
30725          absolute pathname to a file.  If the file exists, the function
30726          returns the second argument.  If the file does not exist, the
30727          function returns the third argument if there is one, or NULL
30728          otherwise.  This can be used to expand one text, or optionally
30729          another, based on the existence of a file.  Here is a small
30730          example of its usage:
30731
30732               -l%:if-exists-then-else(%:getenv(VSB_DIR rtnet.h) rtnet net)
30733
30734     'sanitize'
30735          The 'sanitize' spec function takes no arguments.  It returns
30736          non-NULL if any address, thread or undefined behavior
30737          sanitizers are active.
30738
30739               %{%:sanitize(address):-funwind-tables}
30740
30741     'replace-outfile'
30742          The 'replace-outfile' spec function takes two arguments.  It
30743          looks for the first argument in the outfiles array and
30744          replaces it with the second argument.  Here is a small example
30745          of its usage:
30746
30747               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
30748
30749     'remove-outfile'
30750          The 'remove-outfile' spec function takes one argument.  It
30751          looks for the first argument in the outfiles array and removes
30752          it.  Here is a small example its usage:
30753
30754               %:remove-outfile(-lm)
30755
30756     'version-compare'
30757          The 'version-compare' spec function takes four or five
30758          arguments of the following form:
30759
30760               <comparison-op> <arg1> [<arg2>] <switch> <result>
30761
30762          It returns 'result' if the comparison evaluates to true, and
30763          NULL if it doesn't.  The supported 'comparison-op' values are:
30764
30765          '>='
30766               True if 'switch' is a later (or same) version than 'arg1'
30767
30768          '!>'
30769               Opposite of '>='
30770
30771          '<'
30772               True if 'switch' is an earlier version than 'arg1'
30773
30774          '!<'
30775               Opposite of '<'
30776
30777          '><'
30778               True if 'switch' is 'arg1' or later, and earlier than
30779               'arg2'
30780
30781          '<>'
30782               True if 'switch' is earlier than 'arg1', or is 'arg2' or
30783               later
30784
30785          If the 'switch' is not present at all, the condition is false
30786          unless the first character of the 'comparison-op' is '!'.
30787
30788               %:version-compare(>= 10.3 mmacosx-version-min= -lmx)
30789
30790          The above example would add '-lmx' if
30791          '-mmacosx-version-min=10.3.9' was passed.
30792
30793     'include'
30794          The 'include' spec function behaves much like '%include', with
30795          the advantage that it can be nested inside a spec and thus be
30796          conditionalized.  It takes one argument, the filename, and
30797          looks for it in the startfile path.  It always returns NULL.
30798
30799               %{static-libasan|static:%:include(libsanitizer.spec)%(link_libasan)}
30800
30801     'pass-through-libs'
30802          The 'pass-through-libs' spec function takes any number of
30803          arguments.  It finds any '-l' options and any non-options
30804          ending in '.a' (which it assumes are the names of linker input
30805          library archive files) and returns a result containing all the
30806          found arguments each prepended by '-plugin-opt=-pass-through='
30807          and joined by spaces.  This list is intended to be passed to
30808          the LTO linker plugin.
30809
30810               %:pass-through-libs(%G %L %G)
30811
30812     'print-asm-header'
30813          The 'print-asm-header' function takes no arguments and simply
30814          prints a banner like:
30815
30816               Assembler options
30817               =================
30818
30819               Use "-Wa,OPTION" to pass "OPTION" to the assembler.
30820
30821          It is used to separate compiler options from assembler options
30822          in the '--target-help' output.
30823
30824     'gt'
30825          The 'gt' spec function takes two or more arguments.  It
30826          returns '""' (the empty string) if the second-to-last argument
30827          is greater than the last argument, and NULL otherwise.  The
30828          following example inserts the 'link_gomp' spec if the last
30829          '-ftree-parallelize-loops=' option given on the command line
30830          is greater than 1:
30831
30832               %{%:gt(%{ftree-parallelize-loops=*:%*} 1):%:include(libgomp.spec)%(link_gomp)}
30833
30834     'debug-level-gt'
30835          The 'debug-level-gt' spec function takes one argument and
30836          returns '""' (the empty string) if 'debug_info_level' is
30837          greater than the specified number, and NULL otherwise.
30838
30839               %{%:debug-level-gt(0):%{gdwarf*:--gdwarf2}}
30840
30841'%{S}'
30842     Substitutes the '-S' switch, if that switch is given to GCC.  If
30843     that switch is not specified, this substitutes nothing.  Note that
30844     the leading dash is omitted when specifying this option, and it is
30845     automatically inserted if the substitution is performed.  Thus the
30846     spec string '%{foo}' matches the command-line option '-foo' and
30847     outputs the command-line option '-foo'.
30848
30849'%W{S}'
30850     Like %{'S'} but mark last argument supplied within as a file to be
30851     deleted on failure.
30852
30853'%@{S}'
30854     Like %{'S'} but puts the result into a 'FILE' and substitutes
30855     '@FILE' if an '@file' argument has been supplied.
30856
30857'%{S*}'
30858     Substitutes all the switches specified to GCC whose names start
30859     with '-S', but which also take an argument.  This is used for
30860     switches like '-o', '-D', '-I', etc.  GCC considers '-o foo' as
30861     being one switch whose name starts with 'o'.  %{o*} substitutes
30862     this text, including the space.  Thus two arguments are generated.
30863
30864'%{S*&T*}'
30865     Like %{'S'*}, but preserve order of 'S' and 'T' options (the order
30866     of 'S' and 'T' in the spec is not significant).  There can be any
30867     number of ampersand-separated variables; for each the wild card is
30868     optional.  Useful for CPP as '%{D*&U*&A*}'.
30869
30870'%{S:X}'
30871     Substitutes 'X', if the '-S' switch is given to GCC.
30872
30873'%{!S:X}'
30874     Substitutes 'X', if the '-S' switch is _not_ given to GCC.
30875
30876'%{S*:X}'
30877     Substitutes 'X' if one or more switches whose names start with '-S'
30878     are specified to GCC.  Normally 'X' is substituted only once, no
30879     matter how many such switches appeared.  However, if '%*' appears
30880     somewhere in 'X', then 'X' is substituted once for each matching
30881     switch, with the '%*' replaced by the part of that switch matching
30882     the '*'.
30883
30884     If '%*' appears as the last part of a spec sequence then a space is
30885     added after the end of the last substitution.  If there is more
30886     text in the sequence, however, then a space is not generated.  This
30887     allows the '%*' substitution to be used as part of a larger string.
30888     For example, a spec string like this:
30889
30890          %{mcu=*:--script=%*/memory.ld}
30891
30892     when matching an option like '-mcu=newchip' produces:
30893
30894          --script=newchip/memory.ld
30895
30896'%{.S:X}'
30897     Substitutes 'X', if processing a file with suffix 'S'.
30898
30899'%{!.S:X}'
30900     Substitutes 'X', if _not_ processing a file with suffix 'S'.
30901
30902'%{,S:X}'
30903     Substitutes 'X', if processing a file for language 'S'.
30904
30905'%{!,S:X}'
30906     Substitutes 'X', if not processing a file for language 'S'.
30907
30908'%{S|P:X}'
30909     Substitutes 'X' if either '-S' or '-P' is given to GCC.  This may
30910     be combined with '!', '.', ',', and '*' sequences as well, although
30911     they have a stronger binding than the '|'.  If '%*' appears in 'X',
30912     all of the alternatives must be starred, and only the first
30913     matching alternative is substituted.
30914
30915     For example, a spec string like this:
30916
30917          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
30918
30919     outputs the following command-line options from the following input
30920     command-line options:
30921
30922          fred.c        -foo -baz
30923          jim.d         -bar -boggle
30924          -d fred.c     -foo -baz -boggle
30925          -d jim.d      -bar -baz -boggle
30926
30927'%{%:FUNCTION(ARGS):X}'
30928
30929     Call function named FUNCTION with args ARGS.  If the function
30930     returns non-NULL, then 'X' is substituted, if it returns NULL, it
30931     isn't substituted.
30932
30933'%{S:X; T:Y; :D}'
30934
30935     If 'S' is given to GCC, substitutes 'X'; else if 'T' is given to
30936     GCC, substitutes 'Y'; else substitutes 'D'.  There can be as many
30937     clauses as you need.  This may be combined with '.', ',', '!', '|',
30938     and '*' as needed.
30939
30940 The switch matching text 'S' in a '%{S}', '%{S:X}' or similar construct
30941can use a backslash to ignore the special meaning of the character
30942following it, thus allowing literal matching of a character that is
30943otherwise specially treated.  For example, '%{std=iso9899\:1999:X}'
30944substitutes 'X' if the '-std=iso9899:1999' option is given.
30945
30946 The conditional text 'X' in a '%{S:X}' or similar construct may contain
30947other nested '%' constructs or spaces, or even newlines.  They are
30948processed as usual, as described above.  Trailing white space in 'X' is
30949ignored.  White space may also appear anywhere on the left side of the
30950colon in these constructs, except between '.' or '*' and the
30951corresponding word.
30952
30953 The '-O', '-f', '-m', and '-W' switches are handled specifically in
30954these constructs.  If another value of '-O' or the negated form of a
30955'-f', '-m', or '-W' switch is found later in the command line, the
30956earlier switch value is ignored, except with {'S'*} where 'S' is just
30957one letter, which passes all matching options.
30958
30959 The character '|' at the beginning of the predicate text is used to
30960indicate that a command should be piped to the following command, but
30961only if '-pipe' is specified.
30962
30963 It is built into GCC which switches take arguments and which do not.
30964(You might think it would be useful to generalize this to allow each
30965compiler's spec to say which switches take arguments.  But this cannot
30966be done in a consistent fashion.  GCC cannot even decide which input
30967files have been specified without knowing which switches take arguments,
30968and it must know which input files to compile in order to tell which
30969compilers to run).
30970
30971 GCC also knows implicitly that arguments starting in '-l' are to be
30972treated as compiler output files, and passed to the linker in their
30973proper position among the other output files.
30974
30975
30976File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Spec Files,  Up: Invoking GCC
30977
309783.21 Environment Variables Affecting GCC
30979========================================
30980
30981This section describes several environment variables that affect how GCC
30982operates.  Some of them work by specifying directories or prefixes to
30983use when searching for various kinds of files.  Some are used to specify
30984other aspects of the compilation environment.
30985
30986 Note that you can also specify places to search using options such as
30987'-B', '-I' and '-L' (*note Directory Options::).  These take precedence
30988over places specified using environment variables, which in turn take
30989precedence over those specified by the configuration of GCC.  *Note
30990Controlling the Compilation Driver 'gcc': (gccint)Driver.
30991
30992'LANG'
30993'LC_CTYPE'
30994'LC_MESSAGES'
30995'LC_ALL'
30996     These environment variables control the way that GCC uses
30997     localization information which allows GCC to work with different
30998     national conventions.  GCC inspects the locale categories
30999     'LC_CTYPE' and 'LC_MESSAGES' if it has been configured to do so.
31000     These locale categories can be set to any value supported by your
31001     installation.  A typical value is 'en_GB.UTF-8' for English in the
31002     United Kingdom encoded in UTF-8.
31003
31004     The 'LC_CTYPE' environment variable specifies character
31005     classification.  GCC uses it to determine the character boundaries
31006     in a string; this is needed for some multibyte encodings that
31007     contain quote and escape characters that are otherwise interpreted
31008     as a string end or escape.
31009
31010     The 'LC_MESSAGES' environment variable specifies the language to
31011     use in diagnostic messages.
31012
31013     If the 'LC_ALL' environment variable is set, it overrides the value
31014     of 'LC_CTYPE' and 'LC_MESSAGES'; otherwise, 'LC_CTYPE' and
31015     'LC_MESSAGES' default to the value of the 'LANG' environment
31016     variable.  If none of these variables are set, GCC defaults to
31017     traditional C English behavior.
31018
31019'TMPDIR'
31020     If 'TMPDIR' is set, it specifies the directory to use for temporary
31021     files.  GCC uses temporary files to hold the output of one stage of
31022     compilation which is to be used as input to the next stage: for
31023     example, the output of the preprocessor, which is the input to the
31024     compiler proper.
31025
31026'GCC_COMPARE_DEBUG'
31027     Setting 'GCC_COMPARE_DEBUG' is nearly equivalent to passing
31028     '-fcompare-debug' to the compiler driver.  See the documentation of
31029     this option for more details.
31030
31031'GCC_EXEC_PREFIX'
31032     If 'GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
31033     names of the subprograms executed by the compiler.  No slash is
31034     added when this prefix is combined with the name of a subprogram,
31035     but you can specify a prefix that ends with a slash if you wish.
31036
31037     If 'GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
31038     appropriate prefix to use based on the pathname it is invoked with.
31039
31040     If GCC cannot find the subprogram using the specified prefix, it
31041     tries looking in the usual places for the subprogram.
31042
31043     The default value of 'GCC_EXEC_PREFIX' is 'PREFIX/lib/gcc/' where
31044     PREFIX is the prefix to the installed compiler.  In many cases
31045     PREFIX is the value of 'prefix' when you ran the 'configure'
31046     script.
31047
31048     Other prefixes specified with '-B' take precedence over this
31049     prefix.
31050
31051     This prefix is also used for finding files such as 'crt0.o' that
31052     are used for linking.
31053
31054     In addition, the prefix is used in an unusual way in finding the
31055     directories to search for header files.  For each of the standard
31056     directories whose name normally begins with '/usr/local/lib/gcc'
31057     (more precisely, with the value of 'GCC_INCLUDE_DIR'), GCC tries
31058     replacing that beginning with the specified prefix to produce an
31059     alternate directory name.  Thus, with '-Bfoo/', GCC searches
31060     'foo/bar' just before it searches the standard directory
31061     '/usr/local/lib/bar'.  If a standard directory begins with the
31062     configured PREFIX then the value of PREFIX is replaced by
31063     'GCC_EXEC_PREFIX' when looking for header files.
31064
31065'COMPILER_PATH'
31066     The value of 'COMPILER_PATH' is a colon-separated list of
31067     directories, much like 'PATH'.  GCC tries the directories thus
31068     specified when searching for subprograms, if it cannot find the
31069     subprograms using 'GCC_EXEC_PREFIX'.
31070
31071'LIBRARY_PATH'
31072     The value of 'LIBRARY_PATH' is a colon-separated list of
31073     directories, much like 'PATH'.  When configured as a native
31074     compiler, GCC tries the directories thus specified when searching
31075     for special linker files, if it cannot find them using
31076     'GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
31077     when searching for ordinary libraries for the '-l' option (but
31078     directories specified with '-L' come first).
31079
31080'LANG'
31081     This variable is used to pass locale information to the compiler.
31082     One way in which this information is used is to determine the
31083     character set to be used when character literals, string literals
31084     and comments are parsed in C and C++.  When the compiler is
31085     configured to allow multibyte characters, the following values for
31086     'LANG' are recognized:
31087
31088     'C-JIS'
31089          Recognize JIS characters.
31090     'C-SJIS'
31091          Recognize SJIS characters.
31092     'C-EUCJP'
31093          Recognize EUCJP characters.
31094
31095     If 'LANG' is not defined, or if it has some other value, then the
31096     compiler uses 'mblen' and 'mbtowc' as defined by the default locale
31097     to recognize and translate multibyte characters.
31098
31099'GCC_EXTRA_DIAGNOSTIC_OUTPUT'
31100     If 'GCC_EXTRA_DIAGNOSTIC_OUTPUT' is set to one of the following
31101     values, then additional text will be emitted to stderr when fix-it
31102     hints are emitted.  '-fdiagnostics-parseable-fixits' and
31103     '-fno-diagnostics-parseable-fixits' take precedence over this
31104     environment variable.
31105
31106     'fixits-v1'
31107          Emit parseable fix-it hints, equivalent to
31108          '-fdiagnostics-parseable-fixits'.  In particular, columns are
31109          expressed as a count of bytes, starting at byte 1 for the
31110          initial column.
31111
31112     'fixits-v2'
31113          As 'fixits-v1', but columns are expressed as display columns,
31114          as per '-fdiagnostics-column-unit=display'.
31115
31116Some additional environment variables affect the behavior of the
31117preprocessor.
31118
31119'CPATH'
31120'C_INCLUDE_PATH'
31121'CPLUS_INCLUDE_PATH'
31122'OBJC_INCLUDE_PATH'
31123     Each variable's value is a list of directories separated by a
31124     special character, much like 'PATH', in which to look for header
31125     files.  The special character, 'PATH_SEPARATOR', is
31126     target-dependent and determined at GCC build time.  For Microsoft
31127     Windows-based targets it is a semicolon, and for almost all other
31128     targets it is a colon.
31129
31130     'CPATH' specifies a list of directories to be searched as if
31131     specified with '-I', but after any paths given with '-I' options on
31132     the command line.  This environment variable is used regardless of
31133     which language is being preprocessed.
31134
31135     The remaining environment variables apply only when preprocessing
31136     the particular language indicated.  Each specifies a list of
31137     directories to be searched as if specified with '-isystem', but
31138     after any paths given with '-isystem' options on the command line.
31139
31140     In all these variables, an empty element instructs the compiler to
31141     search its current working directory.  Empty elements can appear at
31142     the beginning or end of a path.  For instance, if the value of
31143     'CPATH' is ':/special/include', that has the same effect as
31144     '-I. -I/special/include'.
31145
31146'DEPENDENCIES_OUTPUT'
31147     If this variable is set, its value specifies how to output
31148     dependencies for Make based on the non-system header files
31149     processed by the compiler.  System header files are ignored in the
31150     dependency output.
31151
31152     The value of 'DEPENDENCIES_OUTPUT' can be just a file name, in
31153     which case the Make rules are written to that file, guessing the
31154     target name from the source file name.  Or the value can have the
31155     form 'FILE TARGET', in which case the rules are written to file
31156     FILE using TARGET as the target name.
31157
31158     In other words, this environment variable is equivalent to
31159     combining the options '-MM' and '-MF' (*note Preprocessor
31160     Options::), with an optional '-MT' switch too.
31161
31162'SUNPRO_DEPENDENCIES'
31163     This variable is the same as 'DEPENDENCIES_OUTPUT' (see above),
31164     except that system header files are not ignored, so it implies '-M'
31165     rather than '-MM'.  However, the dependence on the main input file
31166     is omitted.  *Note Preprocessor Options::.
31167
31168'SOURCE_DATE_EPOCH'
31169     If this variable is set, its value specifies a UNIX timestamp to be
31170     used in replacement of the current date and time in the '__DATE__'
31171     and '__TIME__' macros, so that the embedded timestamps become
31172     reproducible.
31173
31174     The value of 'SOURCE_DATE_EPOCH' must be a UNIX timestamp, defined
31175     as the number of seconds (excluding leap seconds) since 01 Jan 1970
31176     00:00:00 represented in ASCII; identical to the output of 'date
31177     +%s' on GNU/Linux and other systems that support the '%s' extension
31178     in the 'date' command.
31179
31180     The value should be a known timestamp such as the last modification
31181     time of the source or package and it should be set by the build
31182     process.
31183
31184
31185File: gcc.info,  Node: Precompiled Headers,  Next: C++ Modules,  Prev: Environment Variables,  Up: Invoking GCC
31186
311873.22 Using Precompiled Headers
31188==============================
31189
31190Often large projects have many header files that are included in every
31191source file.  The time the compiler takes to process these header files
31192over and over again can account for nearly all of the time required to
31193build the project.  To make builds faster, GCC allows you to
31194"precompile" a header file.
31195
31196 To create a precompiled header file, simply compile it as you would any
31197other file, if necessary using the '-x' option to make the driver treat
31198it as a C or C++ header file.  You may want to use a tool like 'make' to
31199keep the precompiled header up-to-date when the headers it contains
31200change.
31201
31202 A precompiled header file is searched for when '#include' is seen in
31203the compilation.  As it searches for the included file (*note Search
31204Path: (cpp)Search Path.) the compiler looks for a precompiled header in
31205each directory just before it looks for the include file in that
31206directory.  The name searched for is the name specified in the
31207'#include' with '.gch' appended.  If the precompiled header file cannot
31208be used, it is ignored.
31209
31210 For instance, if you have '#include "all.h"', and you have 'all.h.gch'
31211in the same directory as 'all.h', then the precompiled header file is
31212used if possible, and the original header is used otherwise.
31213
31214 Alternatively, you might decide to put the precompiled header file in a
31215directory and use '-I' to ensure that directory is searched before (or
31216instead of) the directory containing the original header.  Then, if you
31217want to check that the precompiled header file is always used, you can
31218put a file of the same name as the original header in this directory
31219containing an '#error' command.
31220
31221 This also works with '-include'.  So yet another way to use precompiled
31222headers, good for projects not designed with precompiled header files in
31223mind, is to simply take most of the header files used by a project,
31224include them from another header file, precompile that header file, and
31225'-include' the precompiled header.  If the header files have guards
31226against multiple inclusion, they are skipped because they've already
31227been included (in the precompiled header).
31228
31229 If you need to precompile the same header file for different languages,
31230targets, or compiler options, you can instead make a _directory_ named
31231like 'all.h.gch', and put each precompiled header in the directory,
31232perhaps using '-o'.  It doesn't matter what you call the files in the
31233directory; every precompiled header in the directory is considered.  The
31234first precompiled header encountered in the directory that is valid for
31235this compilation is used; they're searched in no particular order.
31236
31237 There are many other possibilities, limited only by your imagination,
31238good sense, and the constraints of your build system.
31239
31240 A precompiled header file can be used only when these conditions apply:
31241
31242   * Only one precompiled header can be used in a particular
31243     compilation.
31244
31245   * A precompiled header cannot be used once the first C token is seen.
31246     You can have preprocessor directives before a precompiled header;
31247     you cannot include a precompiled header from inside another header.
31248
31249   * The precompiled header file must be produced for the same language
31250     as the current compilation.  You cannot use a C precompiled header
31251     for a C++ compilation.
31252
31253   * The precompiled header file must have been produced by the same
31254     compiler binary as the current compilation is using.
31255
31256   * Any macros defined before the precompiled header is included must
31257     either be defined in the same way as when the precompiled header
31258     was generated, or must not affect the precompiled header, which
31259     usually means that they don't appear in the precompiled header at
31260     all.
31261
31262     The '-D' option is one way to define a macro before a precompiled
31263     header is included; using a '#define' can also do it.  There are
31264     also some options that define macros implicitly, like '-O' and
31265     '-Wdeprecated'; the same rule applies to macros defined this way.
31266
31267   * If debugging information is output when using the precompiled
31268     header, using '-g' or similar, the same kind of debugging
31269     information must have been output when building the precompiled
31270     header.  However, a precompiled header built using '-g' can be used
31271     in a compilation when no debugging information is being output.
31272
31273   * The same '-m' options must generally be used when building and
31274     using the precompiled header.  *Note Submodel Options::, for any
31275     cases where this rule is relaxed.
31276
31277   * Each of the following options must be the same when building and
31278     using the precompiled header:
31279
31280          -fexceptions
31281
31282   * Some other command-line options starting with '-f', '-p', or '-O'
31283     must be defined in the same way as when the precompiled header was
31284     generated.  At present, it's not clear which options are safe to
31285     change and which are not; the safest choice is to use exactly the
31286     same options when generating and using the precompiled header.  The
31287     following are known to be safe:
31288
31289          -fmessage-length=  -fpreprocessed  -fsched-interblock
31290          -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
31291          -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
31292          -pedantic-errors
31293
31294   * Address space layout randomization (ASLR) can lead to not binary
31295     identical PCH files.  If you rely on stable PCH file contents
31296     disable ASLR when generating PCH files.
31297
31298 For all of these except the last, the compiler automatically ignores
31299the precompiled header if the conditions aren't met.  If you find an
31300option combination that doesn't work and doesn't cause the precompiled
31301header to be ignored, please consider filing a bug report, see *note
31302Bugs::.
31303
31304 If you do use differing options when generating and using the
31305precompiled header, the actual behavior is a mixture of the behavior for
31306the options.  For instance, if you use '-g' to generate the precompiled
31307header but not when using it, you may or may not get debugging
31308information for routines in the precompiled header.
31309
31310
31311File: gcc.info,  Node: C++ Modules,  Prev: Precompiled Headers,  Up: Invoking GCC
31312
313133.23 C++ Modules
31314================
31315
31316Modules are a C++20 language feature.  As the name suggests, they
31317provides a modular compilation system, intending to provide both faster
31318builds and better library isolation.  The "Merging Modules" paper
31319<https://wg21.link/p1103>, provides the easiest to read set of changes
31320to the standard, although it does not capture later changes.
31321
31322 _G++'s modules support is not complete._  Other than bugs, the known
31323missing pieces are:
31324
31325_Private Module Fragment_
31326     The Private Module Fragment is recognized, but an error is emitted.
31327
31328_Partition definition visibility rules_
31329     Entities may be defined in implementation partitions, and those
31330     definitions are not available outside of the module.  This is not
31331     implemented, and the definitions are available to extra-module use.
31332
31333_Textual merging of reachable GM entities_
31334     Entities may be multiply defined across different header-units.
31335     These must be de-duplicated, and this is implemented across
31336     imports, or when an import redefines a textually-defined entity.
31337     However the reverse is not implemented--textually redefining an
31338     entity that has been defined in an imported header-unit.  A
31339     redefinition error is emitted.
31340
31341_Translation-Unit local referencing rules_
31342     Papers p1815 (<https://wg21.link/p1815>) and p2003
31343     (<https://wg21.link/p2003>) add limitations on which entities an
31344     exported region may reference (for instance, the entities an
31345     exported template definition may reference).  These are not fully
31346     implemented.
31347
31348_Language-linkage module attachment_
31349     Declarations with explicit language linkage ('extern "C"' or
31350     'extern "C++"') are attached to the global module, even when in the
31351     purview of a named module.  This is not implemented.  Such
31352     declarations will be attached to the module, if any, in which they
31353     are declared.
31354
31355_Standard Library Header Units_
31356     The Standard Library is not provided as importable header units.
31357     If you want to import such units, you must explicitly build them
31358     first.  If you do not do this with care, you may have multiple
31359     declarations, which the module machinery must merge--compiler
31360     resource usage can be affected by how you partition header files
31361     into header units.
31362
31363 Modular compilation is _not_ enabled with just the '-std=c++20' option.
31364You must explicitly enable it with the '-fmodules-ts' option.  It is
31365independent of the language version selected, although in pre-C++20
31366versions, it is of course an extension.
31367
31368 No new source file suffixes are required or supported.  If you wish to
31369use a non-standard suffix (*note Overall Options::), you also need to
31370provide a '-x c++' option too.(1)
31371
31372 Compiling a module interface unit produces an additional output (to the
31373assembly or object file), called a Compiled Module Interface (CMI). This
31374encodes the exported declarations of the module.  Importing a module
31375reads in the CMI. The import graph is a Directed Acyclic Graph (DAG).
31376You must build imports before the importer.
31377
31378 Header files may themselves be compiled to header units, which are a
31379transitional ability aiming at faster compilation.  The
31380'-fmodule-header' option is used to enable this, and implies the
31381'-fmodules-ts' option.  These CMIs are named by the fully resolved
31382underlying header file, and thus may be a complete pathname containing
31383subdirectories.  If the header file is found at an absolute pathname,
31384the CMI location is still relative to a CMI root directory.
31385
31386 As header files often have no suffix, you commonly have to specify a
31387'-x' option to tell the compiler the source is a header file.  You may
31388use '-x c++-header', '-x c++-user-header' or '-x c++-system-header'.
31389When used in conjunction with '-fmodules-ts', these all imply an
31390appropriate '-fmodule-header' option.  The latter two variants use the
31391user or system include path to search for the file specified.  This
31392allows you to, for instance, compile standard library header files as
31393header units, without needing to know exactly where they are installed.
31394Specifying the language as one of these variants also inhibits output of
31395the object file, as header files have no associated object file.
31396
31397 The '-fmodule-only' option disables generation of the associated object
31398file for compiling a module interface.  Only the CMI is generated.  This
31399option is implied when using the '-fmodule-header' option.
31400
31401 The '-flang-info-include-translate' and
31402'-flang-info-include-translate-not' options notes whether include
31403translation occurs or not.  With no argument, the first will note all
31404include translation.  The second will note all non-translations of
31405include files not known to intentionally be textual.  With an argument,
31406queries about include translation of a header files with that particular
31407trailing pathname are noted.  You may repeat this form to cover several
31408different header files.  This option may be helpful in determining
31409whether include translation is happening--if it is working correctly, it
31410behaves as if it isn't there at all.
31411
31412 The '-flang-info-module-cmi' option can be used to determine where the
31413compiler is reading a CMI from.  Without the option, the compiler is
31414silent when such a read is successful.  This option has an optional
31415argument, which will restrict the notification to just the set of named
31416modules or header units specified.
31417
31418 The '-Winvalid-imported-macros' option causes all imported macros to be
31419resolved at the end of compilation.  Without this, imported macros are
31420only resolved when expanded or (re)defined.  This option detects
31421conflicting import definitions for all macros.
31422
31423 For details of the '-fmodule-mapper' family of options, *note C++
31424Module Mapper::.
31425
31426* Menu:
31427
31428* C++ Module Mapper::       Module Mapper
31429* C++ Module Preprocessing::  Module Preprocessing
31430* C++ Compiled Module Interface:: Compiled Module Interface
31431
31432   ---------- Footnotes ----------
31433
31434   (1) Some users like to distinguish module interface files with a new
31435suffix, such as naming the source 'module.cppm', which involves teaching
31436all tools about the new suffix.  A different scheme, such as naming
31437'module-m.cpp' would be less invasive.
31438
31439
31440File: gcc.info,  Node: C++ Module Mapper,  Next: C++ Module Preprocessing,  Up: C++ Modules
31441
314423.23.1 Module Mapper
31443--------------------
31444
31445A module mapper provides a server or file that the compiler queries to
31446determine the mapping between module names and CMI files.  It is also
31447used to build CMIs on demand.  _Mapper functionality is in its infancy
31448and is intended for experimentation with build system interactions._
31449
31450 You can specify a mapper with the '-fmodule-mapper=VAL' option or
31451'CXX_MODULE_MAPPER' environment variable.  The value may have one of the
31452following forms:
31453
31454'[HOSTNAME]:PORT[?IDENT]'
31455     An optional hostname and a numeric port number to connect to.  If
31456     the hostname is omitted, the loopback address is used.  If the
31457     hostname corresponds to multiple IPV6 addresses, these are tried in
31458     turn, until one is successful.  If your host lacks IPv6, this form
31459     is non-functional.  If you must use IPv4 use
31460     '-fmodule-mapper='|ncat IPV4HOST PORT''.
31461
31462'=SOCKET[?IDENT]'
31463     A local domain socket.  If your host lacks local domain sockets,
31464     this form is non-functional.
31465
31466'|PROGRAM[?IDENT] [ARGS...]'
31467     A program to spawn, and communicate with on its stdin/stdout
31468     streams.  Your PATH environment variable is searched for the
31469     program.  Arguments are separated by space characters, (it is not
31470     possible for one of the arguments delivered to the program to
31471     contain a space).  An exception is if PROGRAM begins with @.  In
31472     that case PROGRAM (sans @) is looked for in the compiler's internal
31473     binary directory.  Thus the sample mapper-server can be specified
31474     with '@g++-mapper-server'.
31475
31476'<>[?IDENT]'
31477'<>INOUT[?IDENT]'
31478'<IN>OUT[?IDENT]'
31479     Named pipes or file descriptors to communicate over.  The first
31480     form, '<>', communicates over stdin and stdout.  The other forms
31481     allow you to specify a file descriptor or name a pipe.  A numeric
31482     value is interpreted as a file descriptor, otherwise named pipe is
31483     opened.  The second form specifies a bidirectional pipe and the
31484     last form allows specifying two independent pipes.  Using file
31485     descriptors directly in this manner is fragile in general, as it
31486     can require the cooperation of intermediate processes.  In
31487     particular using stdin & stdout is fraught with danger as other
31488     compiler options might also cause the compiler to read stdin or
31489     write stdout, and it can have unfortunate interactions with signal
31490     delivery from the terminal.
31491
31492'FILE[?IDENT]'
31493     A mapping file consisting of space-separated module-name, filename
31494     pairs, one per line.  Only the mappings for the direct imports and
31495     any module export name need be provided.  If other mappings are
31496     provided, they override those stored in any imported CMI files.  A
31497     repository root may be specified in the mapping file by using
31498     '$root' as the module name in the first active line.  Use of this
31499     option will disable any default module->CMI name mapping.
31500
31501 As shown, an optional IDENT may suffix the first word of the option,
31502indicated by a '?' prefix.  The value is used in the initial handshake
31503with the module server, or to specify a prefix on mapping file lines.
31504In the server case, the main source file name is used if no IDENT is
31505specified.  In the file case, all non-blank lines are significant,
31506unless a value is specified, in which case only lines beginning with
31507IDENT are significant.  The IDENT must be separated by whitespace from
31508the module name.  Be aware that '<', '>', '?', and '|' characters are
31509often significant to the shell, and therefore may need quoting.
31510
31511 The mapper is connected to or loaded lazily, when the first module
31512mapping is required.  The networking protocols are only supported on
31513hosts that provide networking.  If no mapper is specified a default is
31514provided.
31515
31516 A project-specific mapper is expected to be provided by the build
31517system that invokes the compiler.  It is not expected that a
31518general-purpose server is provided for all compilations.  As such, the
31519server will know the build configuration, the compiler it invoked, and
31520the environment (such as working directory) in which that is operating.
31521As it may parallelize builds, several compilations may connect to the
31522same socket.
31523
31524 The default mapper generates CMI files in a 'gcm.cache' directory.  CMI
31525files have a '.gcm' suffix.  The module unit name is used directly to
31526provide the basename.  Header units construct a relative path using the
31527underlying header file name.  If the path is already relative, a ','
31528directory is prepended.  Internal '..' components are translated to
31529',,'.  No attempt is made to canonicalize these filenames beyond that
31530done by the preprocessor's include search algorithm, as in general it is
31531ambiguous when symbolic links are present.
31532
31533 The mapper protocol was published as "A Module Mapper"
31534<https://wg21.link/p1184>.  The implementation is provided by 'libcody',
31535<https://github.com/urnathan/libcody>, which specifies the canonical
31536protocol definition.  A proof of concept server implementation embedded
31537in 'make' was described in "Make Me A Module",
31538<https://wg21.link/p1602>.
31539
31540
31541File: gcc.info,  Node: C++ Module Preprocessing,  Next: C++ Compiled Module Interface,  Prev: C++ Module Mapper,  Up: C++ Modules
31542
315433.23.2 Module Preprocessing
31544---------------------------
31545
31546Modules affect preprocessing because of header units and include
31547translation.  Some uses of the preprocessor as a separate step either do
31548not produce a correct output, or require CMIs to be available.
31549
31550 Header units import macros.  These macros can affect later conditional
31551inclusion, which therefore can cascade to differing import sets.  When
31552preprocessing, it is necessary to load the CMI. If a header unit is
31553unavailable, the preprocessor issues a warning and continue (when not
31554just preprocessing, an error is emitted).  Detecting such imports
31555requires preprocessor tokenization of the input stream to phase 4 (macro
31556expansion).
31557
31558 Include translation converts '#include', '#include_next' and '#import'
31559directives to internal 'import' declarations.  Whether a particular
31560directive is translated is controlled by the module mapper.  Header unit
31561names are canonicalized during preprocessing.
31562
31563 Dependency information can be emitted for macro import, extending the
31564functionality of '-MD' and '-MMD' options.  Detection of import
31565declarations also requires phase 4 preprocessing, and thus requires full
31566preprocessing (or compilation).
31567
31568 The '-M', '-MM' and '-E -fdirectives-only' options halt preprocessing
31569before phase 4.
31570
31571 The '-save-temps' option uses '-fdirectives-only' for preprocessing,
31572and preserve the macro definitions in the preprocessed output.  Usually
31573you also want to use this option when explicitly preprocessing a
31574header-unit, or consuming such preprocessed output:
31575
31576     g++ -fmodules-ts -E -fdirectives-only my-header.hh -o my-header.ii
31577     g++ -x c++-header -fmodules-ts -fpreprocessed -fdirectives-only my-header.ii
31578
31579
31580File: gcc.info,  Node: C++ Compiled Module Interface,  Prev: C++ Module Preprocessing,  Up: C++ Modules
31581
315823.23.3 Compiled Module Interface
31583--------------------------------
31584
31585CMIs are an additional artifact when compiling named module interfaces,
31586partitions or header units.  These are read when importing.  CMI
31587contents are implementation-specific, and in GCC's case tied to the
31588compiler version.  Consider them a rebuildable cache artifact, not a
31589distributable object.
31590
31591 When creating an output CMI, any missing directory components are
31592created in a manner that is safe for concurrent builds creating
31593multiple, different, CMIs within a common subdirectory tree.
31594
31595 CMI contents are written to a temporary file, which is then atomically
31596renamed.  Observers either see old contents (if there is an existing
31597file), or complete new contents.  They do not observe the CMI during its
31598creation.  This is unlike object file writing, which may be observed by
31599an external process.
31600
31601 CMIs are read in lazily, if the host OS provides 'mmap' functionality.
31602Generally blocks are read when name lookup or template instantiation
31603occurs.  To inhibit this, the '-fno-module-lazy' option may be used.
31604
31605 The '--param lazy-modules=N' parameter controls the limit on the number
31606of concurrently open module files during lazy loading.  Should more
31607modules be imported, an LRU algorithm is used to determine which files
31608to close--until that file is needed again.  This limit may be exceeded
31609with deep module dependency hierarchies.  With large code bases there
31610may be more imports than the process limit of file descriptors.  By
31611default, the limit is a few less than the per-process file descriptor
31612hard limit, if that is determinable.(1)
31613
31614 GCC CMIs use ELF32 as an architecture-neutral encapsulation mechanism.
31615You may use 'readelf' to inspect them, although section contents are
31616largely undecipherable.  There is a section named '.gnu.c++.README',
31617which contains human-readable text.  Other than the first line, each
31618line consists of 'TAG: value' tuples.
31619
31620     > readelf -p.gnu.c++.README gcm.cache/foo.gcm
31621
31622     String dump of section '.gnu.c++.README':
31623       [     0]  GNU C++ primary module interface
31624       [    21]  compiler: 11.0.0 20201116 (experimental) [c++-modules revision 20201116-0454]
31625       [    6f]  version: 2020/11/16-04:54
31626       [    89]  module: foo
31627       [    95]  source: c_b.ii
31628       [    a4]  dialect: C++20/coroutines
31629       [    be]  cwd: /data/users/nathans/modules/obj/x86_64/gcc
31630       [    ee]  repository: gcm.cache
31631       [   104]  buildtime: 2020/11/16 15:03:21 UTC
31632       [   127]  localtime: 2020/11/16 07:03:21 PST
31633       [   14a]  export: foo:part1 foo-part1.gcm
31634
31635 Amongst other things, this lists the source that was built, C++ dialect
31636used and imports of the module.(2)  The timestamp is the same value as
31637that provided by the '__DATE__' & '__TIME__' macros, and may be
31638explicitly specified with the environment variable 'SOURCE_DATE_EPOCH'.
31639For further details *note Environment Variables::.
31640
31641 A set of related CMIs may be copied, provided the relative pathnames
31642are preserved.
31643
31644 The '.gnu.c++.README' contents do not affect CMI integrity, and it may
31645be removed or altered.  The section numbering of the sections whose
31646names do not begin with '.gnu.c++.', or are not the string section is
31647significant and must not be altered.
31648
31649   ---------- Footnotes ----------
31650
31651   (1) Where applicable the soft limit is incremented as needed towards
31652the hard limit.
31653
31654   (2) The precise contents of this output may change.
31655
31656
31657File: gcc.info,  Node: C Implementation,  Next: C++ Implementation,  Prev: Invoking GCC,  Up: Top
31658
316594 C Implementation-Defined Behavior
31660***********************************
31661
31662A conforming implementation of ISO C is required to document its choice
31663of behavior in each of the areas that are designated "implementation
31664defined".  The following lists all such areas, along with the section
31665numbers from the ISO/IEC 9899:1990, ISO/IEC 9899:1999 and ISO/IEC
316669899:2011 standards.  Some areas are only implementation-defined in one
31667version of the standard.
31668
31669 Some choices depend on the externally determined ABI for the platform
31670(including standard character encodings) which GCC follows; these are
31671listed as "determined by ABI" below.  *Note Binary Compatibility:
31672Compatibility, and <https://gcc.gnu.org/readings.html>.  Some choices
31673are documented in the preprocessor manual.  *Note Implementation-defined
31674behavior: (cpp)Implementation-defined behavior.  Some choices are made
31675by the library and operating system (or other environment when compiling
31676for a freestanding environment); refer to their documentation for
31677details.
31678
31679* Menu:
31680
31681* Translation implementation::
31682* Environment implementation::
31683* Identifiers implementation::
31684* Characters implementation::
31685* Integers implementation::
31686* Floating point implementation::
31687* Arrays and pointers implementation::
31688* Hints implementation::
31689* Structures unions enumerations and bit-fields implementation::
31690* Qualifiers implementation::
31691* Declarators implementation::
31692* Statements implementation::
31693* Preprocessing directives implementation::
31694* Library functions implementation::
31695* Architecture implementation::
31696* Locale-specific behavior implementation::
31697
31698
31699File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
31700
317014.1 Translation
31702===============
31703
31704   * 'How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90,
31705     C99 and C11 5.1.1.3).'
31706
31707     Diagnostics consist of all the output sent to stderr by GCC.
31708
31709   * 'Whether each nonempty sequence of white-space characters other
31710     than new-line is retained or replaced by one space character in
31711     translation phase 3 (C90, C99 and C11 5.1.1.2).'
31712
31713     *Note Implementation-defined behavior: (cpp)Implementation-defined
31714     behavior.
31715
31716
31717File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
31718
317194.2 Environment
31720===============
31721
31722The behavior of most of these points are dependent on the implementation
31723of the C library, and are not defined by GCC itself.
31724
31725   * 'The mapping between physical source file multibyte characters and
31726     the source character set in translation phase 1 (C90, C99 and C11
31727     5.1.1.2).'
31728
31729     *Note Implementation-defined behavior: (cpp)Implementation-defined
31730     behavior.
31731
31732
31733File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
31734
317354.3 Identifiers
31736===============
31737
31738   * 'Which additional multibyte characters may appear in identifiers
31739     and their correspondence to universal character names (C99 and C11
31740     6.4.2).'
31741
31742     *Note Implementation-defined behavior: (cpp)Implementation-defined
31743     behavior.
31744
31745   * 'The number of significant initial characters in an identifier (C90
31746     6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).'
31747
31748     For internal names, all characters are significant.  For external
31749     names, the number of significant characters are defined by the
31750     linker; for almost all targets, all characters are significant.
31751
31752   * 'Whether case distinctions are significant in an identifier with
31753     external linkage (C90 6.1.2).'
31754
31755     This is a property of the linker.  C99 and C11 require that case
31756     distinctions are always significant in identifiers with external
31757     linkage and systems without this property are not supported by GCC.
31758
31759
31760File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
31761
317624.4 Characters
31763==============
31764
31765   * 'The number of bits in a byte (C90 3.4, C99 and C11 3.6).'
31766
31767     Determined by ABI.
31768
31769   * 'The values of the members of the execution character set (C90, C99
31770     and C11 5.2.1).'
31771
31772     Determined by ABI.
31773
31774   * 'The unique value of the member of the execution character set
31775     produced for each of the standard alphabetic escape sequences (C90,
31776     C99 and C11 5.2.2).'
31777
31778     Determined by ABI.
31779
31780   * 'The value of a 'char' object into which has been stored any
31781     character other than a member of the basic execution character set
31782     (C90 6.1.2.5, C99 and C11 6.2.5).'
31783
31784     Determined by ABI.
31785
31786   * 'Which of 'signed char' or 'unsigned char' has the same range,
31787     representation, and behavior as "plain" 'char' (C90 6.1.2.5, C90
31788     6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).'
31789
31790     Determined by ABI.  The options '-funsigned-char' and
31791     '-fsigned-char' change the default.  *Note Options Controlling C
31792     Dialect: C Dialect Options.
31793
31794   * 'The mapping of members of the source character set (in character
31795     constants and string literals) to members of the execution
31796     character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11
31797     5.1.1.2).'
31798
31799     Determined by ABI.
31800
31801   * 'The value of an integer character constant containing more than
31802     one character or containing a character or escape sequence that
31803     does not map to a single-byte execution character (C90 6.1.3.4, C99
31804     and C11 6.4.4.4).'
31805
31806     *Note Implementation-defined behavior: (cpp)Implementation-defined
31807     behavior.
31808
31809   * 'The value of a wide character constant containing more than one
31810     multibyte character or a single multibyte character that maps to
31811     multiple members of the extended execution character set, or
31812     containing a multibyte character or escape sequence not represented
31813     in the extended execution character set (C90 6.1.3.4, C99 and C11
31814     6.4.4.4).'
31815
31816     *Note Implementation-defined behavior: (cpp)Implementation-defined
31817     behavior.
31818
31819   * 'The current locale used to convert a wide character constant
31820     consisting of a single multibyte character that maps to a member of
31821     the extended execution character set into a corresponding wide
31822     character code (C90 6.1.3.4, C99 and C11 6.4.4.4).'
31823
31824     *Note Implementation-defined behavior: (cpp)Implementation-defined
31825     behavior.
31826
31827   * 'Whether differently-prefixed wide string literal tokens can be
31828     concatenated and, if so, the treatment of the resulting multibyte
31829     character sequence (C11 6.4.5).'
31830
31831     Such tokens may not be concatenated.
31832
31833   * 'The current locale used to convert a wide string literal into
31834     corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).'
31835
31836     *Note Implementation-defined behavior: (cpp)Implementation-defined
31837     behavior.
31838
31839   * 'The value of a string literal containing a multibyte character or
31840     escape sequence not represented in the execution character set (C90
31841     6.1.4, C99 and C11 6.4.5).'
31842
31843     *Note Implementation-defined behavior: (cpp)Implementation-defined
31844     behavior.
31845
31846   * 'The encoding of any of 'wchar_t', 'char16_t', and 'char32_t' where
31847     the corresponding standard encoding macro ('__STDC_ISO_10646__',
31848     '__STDC_UTF_16__', or '__STDC_UTF_32__') is not defined (C11
31849     6.10.8.2).'
31850
31851     *Note Implementation-defined behavior: (cpp)Implementation-defined
31852     behavior.  'char16_t' and 'char32_t' literals are always encoded in
31853     UTF-16 and UTF-32 respectively.
31854
31855
31856File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
31857
318584.5 Integers
31859============
31860
31861   * 'Any extended integer types that exist in the implementation (C99
31862     and C11 6.2.5).'
31863
31864     GCC does not support any extended integer types.
31865
31866   * 'Whether signed integer types are represented using sign and
31867     magnitude, two's complement, or one's complement, and whether the
31868     extraordinary value is a trap representation or an ordinary value
31869     (C99 and C11 6.2.6.2).'
31870
31871     GCC supports only two's complement integer types, and all bit
31872     patterns are ordinary values.
31873
31874   * 'The rank of any extended integer type relative to another extended
31875     integer type with the same precision (C99 and C11 6.3.1.1).'
31876
31877     GCC does not support any extended integer types.
31878
31879   * 'The result of, or the signal raised by, converting an integer to a
31880     signed integer type when the value cannot be represented in an
31881     object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).'
31882
31883     For conversion to a type of width N, the value is reduced modulo
31884     2^N to be within range of the type; no signal is raised.
31885
31886   * 'The results of some bitwise operations on signed integers (C90
31887     6.3, C99 and C11 6.5).'
31888
31889     Bitwise operators act on the representation of the value including
31890     both the sign and value bits, where the sign bit is considered
31891     immediately above the highest-value value bit.  Signed '>>' acts on
31892     negative numbers by sign extension.
31893
31894     As an extension to the C language, GCC does not use the latitude
31895     given in C99 and C11 only to treat certain aspects of signed '<<'
31896     as undefined.  However, '-fsanitize=shift' (and
31897     '-fsanitize=undefined') will diagnose such cases.  They are also
31898     diagnosed where constant expressions are required.
31899
31900   * 'The sign of the remainder on integer division (C90 6.3.5).'
31901
31902     GCC always follows the C99 and C11 requirement that the result of
31903     division is truncated towards zero.
31904
31905
31906File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
31907
319084.6 Floating Point
31909==================
31910
31911   * 'The accuracy of the floating-point operations and of the library
31912     functions in '<math.h>' and '<complex.h>' that return
31913     floating-point results (C90, C99 and C11 5.2.4.2.2).'
31914
31915     The accuracy is unknown.
31916
31917   * 'The rounding behaviors characterized by non-standard values of
31918     'FLT_ROUNDS' (C90, C99 and C11 5.2.4.2.2).'
31919
31920     GCC does not use such values.
31921
31922   * 'The evaluation methods characterized by non-standard negative
31923     values of 'FLT_EVAL_METHOD' (C99 and C11 5.2.4.2.2).'
31924
31925     GCC does not use such values.
31926
31927   * 'The direction of rounding when an integer is converted to a
31928     floating-point number that cannot exactly represent the original
31929     value (C90 6.2.1.3, C99 and C11 6.3.1.4).'
31930
31931     C99 Annex F is followed.
31932
31933   * 'The direction of rounding when a floating-point number is
31934     converted to a narrower floating-point number (C90 6.2.1.4, C99 and
31935     C11 6.3.1.5).'
31936
31937     C99 Annex F is followed.
31938
31939   * 'How the nearest representable value or the larger or smaller
31940     representable value immediately adjacent to the nearest
31941     representable value is chosen for certain floating constants (C90
31942     6.1.3.1, C99 and C11 6.4.4.2).'
31943
31944     C99 Annex F is followed.
31945
31946   * 'Whether and how floating expressions are contracted when not
31947     disallowed by the 'FP_CONTRACT' pragma (C99 and C11 6.5).'
31948
31949     Expressions are currently only contracted if '-ffp-contract=fast',
31950     '-funsafe-math-optimizations' or '-ffast-math' are used.  This is
31951     subject to change.
31952
31953   * 'The default state for the 'FENV_ACCESS' pragma (C99 and C11
31954     7.6.1).'
31955
31956     This pragma is not implemented, but the default is to "off" unless
31957     '-frounding-math' is used in which case it is "on".
31958
31959   * 'Additional floating-point exceptions, rounding modes,
31960     environments, and classifications, and their macro names (C99 and
31961     C11 7.6, C99 and C11 7.12).'
31962
31963     This is dependent on the implementation of the C library, and is
31964     not defined by GCC itself.
31965
31966   * 'The default state for the 'FP_CONTRACT' pragma (C99 and C11
31967     7.12.2).'
31968
31969     This pragma is not implemented.  Expressions are currently only
31970     contracted if '-ffp-contract=fast', '-funsafe-math-optimizations'
31971     or '-ffast-math' are used.  This is subject to change.
31972
31973   * 'Whether the "inexact" floating-point exception can be raised when
31974     the rounded result actually does equal the mathematical result in
31975     an IEC 60559 conformant implementation (C99 F.9).'
31976
31977     This is dependent on the implementation of the C library, and is
31978     not defined by GCC itself.
31979
31980   * 'Whether the "underflow" (and "inexact") floating-point exception
31981     can be raised when a result is tiny but not inexact in an IEC 60559
31982     conformant implementation (C99 F.9).'
31983
31984     This is dependent on the implementation of the C library, and is
31985     not defined by GCC itself.
31986
31987
31988File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
31989
319904.7 Arrays and Pointers
31991=======================
31992
31993   * 'The result of converting a pointer to an integer or vice versa
31994     (C90 6.3.4, C99 and C11 6.3.2.3).'
31995
31996     A cast from pointer to integer discards most-significant bits if
31997     the pointer representation is larger than the integer type,
31998     sign-extends(1) if the pointer representation is smaller than the
31999     integer type, otherwise the bits are unchanged.
32000
32001     A cast from integer to pointer discards most-significant bits if
32002     the pointer representation is smaller than the integer type,
32003     extends according to the signedness of the integer type if the
32004     pointer representation is larger than the integer type, otherwise
32005     the bits are unchanged.
32006
32007     When casting from pointer to integer and back again, the resulting
32008     pointer must reference the same object as the original pointer,
32009     otherwise the behavior is undefined.  That is, one may not use
32010     integer arithmetic to avoid the undefined behavior of pointer
32011     arithmetic as proscribed in C99 and C11 6.5.6/8.
32012
32013   * 'The size of the result of subtracting two pointers to elements of
32014     the same array (C90 6.3.6, C99 and C11 6.5.6).'
32015
32016     The value is as specified in the standard and the type is
32017     determined by the ABI.
32018
32019   ---------- Footnotes ----------
32020
32021   (1) Future versions of GCC may zero-extend, or use a target-defined
32022'ptr_extend' pattern.  Do not rely on sign extension.
32023
32024
32025File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
32026
320274.8 Hints
32028=========
32029
32030   * 'The extent to which suggestions made by using the 'register'
32031     storage-class specifier are effective (C90 6.5.1, C99 and C11
32032     6.7.1).'
32033
32034     The 'register' specifier affects code generation only in these
32035     ways:
32036
32037        * When used as part of the register variable extension, see
32038          *note Explicit Register Variables::.
32039
32040        * When '-O0' is in use, the compiler allocates distinct stack
32041          memory for all variables that do not have the 'register'
32042          storage-class specifier; if 'register' is specified, the
32043          variable may have a shorter lifespan than the code would
32044          indicate and may never be placed in memory.
32045
32046        * On some rare x86 targets, 'setjmp' doesn't save the registers
32047          in all circumstances.  In those cases, GCC doesn't allocate
32048          any variables in registers unless they are marked 'register'.
32049
32050   * 'The extent to which suggestions made by using the inline function
32051     specifier are effective (C99 and C11 6.7.4).'
32052
32053     GCC will not inline any functions if the '-fno-inline' option is
32054     used or if '-O0' is used.  Otherwise, GCC may still be unable to
32055     inline a function for many reasons; the '-Winline' option may be
32056     used to determine if a function has not been inlined and why not.
32057
32058
32059File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
32060
320614.9 Structures, Unions, Enumerations, and Bit-Fields
32062====================================================
32063
32064   * 'A member of a union object is accessed using a member of a
32065     different type (C90 6.3.2.3).'
32066
32067     The relevant bytes of the representation of the object are treated
32068     as an object of the type used for the access.  *Note
32069     Type-punning::.  This may be a trap representation.
32070
32071   * 'Whether a "plain" 'int' bit-field is treated as a 'signed int'
32072     bit-field or as an 'unsigned int' bit-field (C90 6.5.2, C90
32073     6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).'
32074
32075     By default it is treated as 'signed int' but this may be changed by
32076     the '-funsigned-bitfields' option.
32077
32078   * 'Allowable bit-field types other than '_Bool', 'signed int', and
32079     'unsigned int' (C99 and C11 6.7.2.1).'
32080
32081     Other integer types, such as 'long int', and enumerated types are
32082     permitted even in strictly conforming mode.
32083
32084   * 'Whether atomic types are permitted for bit-fields (C11 6.7.2.1).'
32085
32086     Atomic types are not permitted for bit-fields.
32087
32088   * 'Whether a bit-field can straddle a storage-unit boundary (C90
32089     6.5.2.1, C99 and C11 6.7.2.1).'
32090
32091     Determined by ABI.
32092
32093   * 'The order of allocation of bit-fields within a unit (C90 6.5.2.1,
32094     C99 and C11 6.7.2.1).'
32095
32096     Determined by ABI.
32097
32098   * 'The alignment of non-bit-field members of structures (C90 6.5.2.1,
32099     C99 and C11 6.7.2.1).'
32100
32101     Determined by ABI.
32102
32103   * 'The integer type compatible with each enumerated type (C90
32104     6.5.2.2, C99 and C11 6.7.2.2).'
32105
32106     Normally, the type is 'unsigned int' if there are no negative
32107     values in the enumeration, otherwise 'int'.  If '-fshort-enums' is
32108     specified, then if there are negative values it is the first of
32109     'signed char', 'short' and 'int' that can represent all the values,
32110     otherwise it is the first of 'unsigned char', 'unsigned short' and
32111     'unsigned int' that can represent all the values.
32112
32113     On some targets, '-fshort-enums' is the default; this is determined
32114     by the ABI.
32115
32116
32117File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
32118
321194.10 Qualifiers
32120===============
32121
32122   * 'What constitutes an access to an object that has
32123     volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).'
32124
32125     Such an object is normally accessed by pointers and used for
32126     accessing hardware.  In most expressions, it is intuitively obvious
32127     what is a read and what is a write.  For example
32128
32129          volatile int *dst = SOMEVALUE;
32130          volatile int *src = SOMEOTHERVALUE;
32131          *dst = *src;
32132
32133     will cause a read of the volatile object pointed to by SRC and
32134     store the value into the volatile object pointed to by DST.  There
32135     is no guarantee that these reads and writes are atomic, especially
32136     for objects larger than 'int'.
32137
32138     However, if the volatile storage is not being modified, and the
32139     value of the volatile storage is not used, then the situation is
32140     less obvious.  For example
32141
32142          volatile int *src = SOMEVALUE;
32143          *src;
32144
32145     According to the C standard, such an expression is an rvalue whose
32146     type is the unqualified version of its original type, i.e. 'int'.
32147     Whether GCC interprets this as a read of the volatile object being
32148     pointed to or only as a request to evaluate the expression for its
32149     side effects depends on this type.
32150
32151     If it is a scalar type, or on most targets an aggregate type whose
32152     only member object is of a scalar type, or a union type whose
32153     member objects are of scalar types, the expression is interpreted
32154     by GCC as a read of the volatile object; in the other cases, the
32155     expression is only evaluated for its side effects.
32156
32157     When an object of an aggregate type, with the same size and
32158     alignment as a scalar type 'S', is the subject of a volatile access
32159     by an assignment expression or an atomic function, the access to it
32160     is performed as if the object's declared type were 'volatile S'.
32161
32162
32163File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
32164
321654.11 Declarators
32166================
32167
32168   * 'The maximum number of declarators that may modify an arithmetic,
32169     structure or union type (C90 6.5.4).'
32170
32171     GCC is only limited by available memory.
32172
32173
32174File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
32175
321764.12 Statements
32177===============
32178
32179   * 'The maximum number of 'case' values in a 'switch' statement (C90
32180     6.6.4.2).'
32181
32182     GCC is only limited by available memory.
32183
32184
32185File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
32186
321874.13 Preprocessing Directives
32188=============================
32189
32190*Note Implementation-defined behavior: (cpp)Implementation-defined
32191behavior, for details of these aspects of implementation-defined
32192behavior.
32193
32194   * 'The locations within '#pragma' directives where header name
32195     preprocessing tokens are recognized (C11 6.4, C11 6.4.7).'
32196
32197   * 'How sequences in both forms of header names are mapped to headers
32198     or external source file names (C90 6.1.7, C99 and C11 6.4.7).'
32199
32200   * 'Whether the value of a character constant in a constant expression
32201     that controls conditional inclusion matches the value of the same
32202     character constant in the execution character set (C90 6.8.1, C99
32203     and C11 6.10.1).'
32204
32205   * 'Whether the value of a single-character character constant in a
32206     constant expression that controls conditional inclusion may have a
32207     negative value (C90 6.8.1, C99 and C11 6.10.1).'
32208
32209   * 'The places that are searched for an included '<>' delimited
32210     header, and how the places are specified or the header is
32211     identified (C90 6.8.2, C99 and C11 6.10.2).'
32212
32213   * 'How the named source file is searched for in an included '""'
32214     delimited header (C90 6.8.2, C99 and C11 6.10.2).'
32215
32216   * 'The method by which preprocessing tokens (possibly resulting from
32217     macro expansion) in a '#include' directive are combined into a
32218     header name (C90 6.8.2, C99 and C11 6.10.2).'
32219
32220   * 'The nesting limit for '#include' processing (C90 6.8.2, C99 and
32221     C11 6.10.2).'
32222
32223   * 'Whether the '#' operator inserts a '\' character before the '\'
32224     character that begins a universal character name in a character
32225     constant or string literal (C99 and C11 6.10.3.2).'
32226
32227   * 'The behavior on each recognized non-'STDC #pragma' directive (C90
32228     6.8.6, C99 and C11 6.10.6).'
32229
32230     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by GCC
32231     on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
32232     details of target-specific pragmas.
32233
32234   * 'The definitions for '__DATE__' and '__TIME__' when respectively,
32235     the date and time of translation are not available (C90 6.8.8, C99
32236     6.10.8, C11 6.10.8.1).'
32237
32238
32239File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
32240
322414.14 Library Functions
32242======================
32243
32244The behavior of most of these points are dependent on the implementation
32245of the C library, and are not defined by GCC itself.
32246
32247   * 'The null pointer constant to which the macro 'NULL' expands (C90
32248     7.1.6, C99 7.17, C11 7.19).'
32249
32250     In '<stddef.h>', 'NULL' expands to '((void *)0)'.  GCC does not
32251     provide the other headers which define 'NULL' and some library
32252     implementations may use other definitions in those headers.
32253
32254
32255File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
32256
322574.15 Architecture
32258=================
32259
32260   * 'The values or expressions assigned to the macros specified in the
32261     headers '<float.h>', '<limits.h>', and '<stdint.h>' (C90, C99 and
32262     C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).'
32263
32264     Determined by ABI.
32265
32266   * 'The result of attempting to indirectly access an object with
32267     automatic or thread storage duration from a thread other than the
32268     one with which it is associated (C11 6.2.4).'
32269
32270     Such accesses are supported, subject to the same requirements for
32271     synchronization for concurrent accesses as for concurrent accesses
32272     to any object.
32273
32274   * 'The number, order, and encoding of bytes in any object (when not
32275     explicitly specified in this International Standard) (C99 and C11
32276     6.2.6.1).'
32277
32278     Determined by ABI.
32279
32280   * 'Whether any extended alignments are supported and the contexts in
32281     which they are supported (C11 6.2.8).'
32282
32283     Extended alignments up to 2^{28} (bytes) are supported for objects
32284     of automatic storage duration.  Alignments supported for objects of
32285     static and thread storage duration are determined by the ABI.
32286
32287   * 'Valid alignment values other than those returned by an _Alignof
32288     expression for fundamental types, if any (C11 6.2.8).'
32289
32290     Valid alignments are powers of 2 up to and including 2^{28}.
32291
32292   * 'The value of the result of the 'sizeof' and '_Alignof' operators
32293     (C90 6.3.3.4, C99 and C11 6.5.3.4).'
32294
32295     Determined by ABI.
32296
32297
32298File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
32299
323004.16 Locale-Specific Behavior
32301=============================
32302
32303The behavior of these points are dependent on the implementation of the
32304C library, and are not defined by GCC itself.
32305
32306
32307File: gcc.info,  Node: C++ Implementation,  Next: C Extensions,  Prev: C Implementation,  Up: Top
32308
323095 C++ Implementation-Defined Behavior
32310*************************************
32311
32312A conforming implementation of ISO C++ is required to document its
32313choice of behavior in each of the areas that are designated
32314"implementation defined".  The following lists all such areas, along
32315with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
3231614882:2003 standards.  Some areas are only implementation-defined in one
32317version of the standard.
32318
32319 Some choices depend on the externally determined ABI for the platform
32320(including standard character encodings) which GCC follows; these are
32321listed as "determined by ABI" below.  *Note Binary Compatibility:
32322Compatibility, and <https://gcc.gnu.org/readings.html>.  Some choices
32323are documented in the preprocessor manual.  *Note Implementation-defined
32324behavior: (cpp)Implementation-defined behavior.  Some choices are
32325documented in the corresponding document for the C language.  *Note C
32326Implementation::.  Some choices are made by the library and operating
32327system (or other environment when compiling for a freestanding
32328environment); refer to their documentation for details.
32329
32330* Menu:
32331
32332* Conditionally-supported behavior::
32333* Exception handling::
32334
32335
32336File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
32337
323385.1 Conditionally-Supported Behavior
32339====================================
32340
32341'Each implementation shall include documentation that identifies all
32342conditionally-supported constructs that it does not support (C++0x
323431.4).'
32344
32345   * 'Whether an argument of class type with a non-trivial copy
32346     constructor or destructor can be passed to ... (C++0x 5.2.2).'
32347
32348     Such argument passing is supported, using the same
32349     pass-by-invisible-reference approach used for normal function
32350     arguments of such types.
32351
32352
32353File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
32354
323555.2 Exception Handling
32356======================
32357
32358   * 'In the situation where no matching handler is found, it is
32359     implementation-defined whether or not the stack is unwound before
32360     std::terminate() is called (C++98 15.5.1).'
32361
32362     The stack is not unwound before std::terminate is called.
32363
32364 c Copyright (C) 1988-2022 Free Software Foundation, Inc.
32365
32366
32367File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C++ Implementation,  Up: Top
32368
323696 Extensions to the C Language Family
32370*************************************
32371
32372GNU C provides several language features not found in ISO standard C.
32373(The '-pedantic' option directs GCC to print a warning message if any of
32374these features is used.)  To test for the availability of these features
32375in conditional compilation, check for a predefined macro '__GNUC__',
32376which is always defined under GCC.
32377
32378 These extensions are available in C and Objective-C.  Most of them are
32379also available in C++.  *Note Extensions to the C++ Language: C++
32380Extensions, for extensions that apply _only_ to C++.
32381
32382 Some features that are in ISO C99 but not C90 or C++ are also, as
32383extensions, accepted by GCC in C90 mode and in C++.
32384
32385* Menu:
32386
32387* Statement Exprs::     Putting statements and declarations inside expressions.
32388* Local Labels::        Labels local to a block.
32389* Labels as Values::    Getting pointers to labels, and computed gotos.
32390* Nested Functions::    Nested function in GNU C.
32391* Nonlocal Gotos::      Nonlocal gotos.
32392* Constructing Calls::  Dispatching a call to another function.
32393* Typeof::              'typeof': referring to the type of an expression.
32394* Conditionals::        Omitting the middle operand of a '?:' expression.
32395* __int128::		128-bit integers--'__int128'.
32396* Long Long::           Double-word integers--'long long int'.
32397* Complex::             Data types for complex numbers.
32398* Floating Types::      Additional Floating Types.
32399* Half-Precision::      Half-Precision Floating Point.
32400* Decimal Float::       Decimal Floating Types.
32401* Hex Floats::          Hexadecimal floating-point constants.
32402* Fixed-Point::         Fixed-Point Types.
32403* Named Address Spaces::Named address spaces.
32404* Zero Length::         Zero-length arrays.
32405* Empty Structures::    Structures with no members.
32406* Variable Length::     Arrays whose length is computed at run time.
32407* Variadic Macros::     Macros with a variable number of arguments.
32408* Escaped Newlines::    Slightly looser rules for escaped newlines.
32409* Subscripting::        Any array can be subscripted, even if not an lvalue.
32410* Pointer Arith::       Arithmetic on 'void'-pointers and function pointers.
32411* Variadic Pointer Args::  Pointer arguments to variadic functions.
32412* Pointers to Arrays::  Pointers to arrays with qualifiers work as expected.
32413* Initializers::        Non-constant initializers.
32414* Compound Literals::   Compound literals give structures, unions
32415                        or arrays as values.
32416* Designated Inits::    Labeling elements of initializers.
32417* Case Ranges::         'case 1 ... 9' and such.
32418* Cast to Union::       Casting to union type from any member of the union.
32419* Mixed Labels and Declarations::  Mixing declarations, labels and code.
32420* Function Attributes:: Declaring that functions have no side effects,
32421                        or that they can never return.
32422* Variable Attributes:: Specifying attributes of variables.
32423* Type Attributes::     Specifying attributes of types.
32424* Label Attributes::    Specifying attributes on labels.
32425* Enumerator Attributes:: Specifying attributes on enumerators.
32426* Statement Attributes:: Specifying attributes on statements.
32427* Attribute Syntax::    Formal syntax for attributes.
32428* Function Prototypes:: Prototype declarations and old-style definitions.
32429* C++ Comments::        C++ comments are recognized.
32430* Dollar Signs::        Dollar sign is allowed in identifiers.
32431* Character Escapes::   '\e' stands for the character <ESC>.
32432* Alignment::           Determining the alignment of a function, type or variable.
32433* Inline::              Defining inline functions (as fast as macros).
32434* Volatiles::           What constitutes an access to a volatile object.
32435* Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler.
32436* Alternate Keywords::  '__const__', '__asm__', etc., for header files.
32437* Incomplete Enums::    'enum foo;', with details to follow.
32438* Function Names::      Printable strings which are the name of the current
32439                        function.
32440* Return Address::      Getting the return or frame address of a function.
32441* Vector Extensions::   Using vector instructions through built-in functions.
32442* Offsetof::            Special syntax for implementing 'offsetof'.
32443* __sync Builtins::     Legacy built-in functions for atomic memory access.
32444* __atomic Builtins::   Atomic built-in functions with memory model.
32445* Integer Overflow Builtins:: Built-in functions to perform arithmetics and
32446                        arithmetic overflow checking.
32447* x86 specific memory model extensions for transactional memory:: x86 memory models.
32448* Object Size Checking:: Built-in functions for limited buffer overflow
32449                        checking.
32450* Other Builtins::      Other built-in functions.
32451* Target Builtins::     Built-in functions specific to particular targets.
32452* Target Format Checks:: Format checks specific to particular targets.
32453* Pragmas::             Pragmas accepted by GCC.
32454* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
32455* Thread-Local::        Per-thread variables.
32456* Binary constants::    Binary constants using the '0b' prefix.
32457
32458
32459File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
32460
324616.1 Statements and Declarations in Expressions
32462==============================================
32463
32464A compound statement enclosed in parentheses may appear as an expression
32465in GNU C.  This allows you to use loops, switches, and local variables
32466within an expression.
32467
32468 Recall that a compound statement is a sequence of statements surrounded
32469by braces; in this construct, parentheses go around the braces.  For
32470example:
32471
32472     ({ int y = foo (); int z;
32473        if (y > 0) z = y;
32474        else z = - y;
32475        z; })
32476
32477is a valid (though slightly more complex than necessary) expression for
32478the absolute value of 'foo ()'.
32479
32480 The last thing in the compound statement should be an expression
32481followed by a semicolon; the value of this subexpression serves as the
32482value of the entire construct.  (If you use some other kind of statement
32483last within the braces, the construct has type 'void', and thus
32484effectively no value.)
32485
32486 This feature is especially useful in making macro definitions "safe"
32487(so that they evaluate each operand exactly once).  For example, the
32488"maximum" function is commonly defined as a macro in standard C as
32489follows:
32490
32491     #define max(a,b) ((a) > (b) ? (a) : (b))
32492
32493But this definition computes either A or B twice, with bad results if
32494the operand has side effects.  In GNU C, if you know the type of the
32495operands (here taken as 'int'), you can avoid this problem by defining
32496the macro as follows:
32497
32498     #define maxint(a,b) \
32499       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
32500
32501 Note that introducing variable declarations (as we do in 'maxint') can
32502cause variable shadowing, so while this example using the 'max' macro
32503produces correct results:
32504     int _a = 1, _b = 2, c;
32505     c = max (_a, _b);
32506this example using maxint will not:
32507     int _a = 1, _b = 2, c;
32508     c = maxint (_a, _b);
32509
32510 This problem may for instance occur when we use this pattern
32511recursively, like so:
32512
32513     #define maxint3(a, b, c) \
32514       ({int _a = (a), _b = (b), _c = (c); maxint (maxint (_a, _b), _c); })
32515
32516 Embedded statements are not allowed in constant expressions, such as
32517the value of an enumeration constant, the width of a bit-field, or the
32518initial value of a static variable.
32519
32520 If you don't know the type of the operand, you can still do this, but
32521you must use 'typeof' or '__auto_type' (*note Typeof::).
32522
32523 In G++, the result value of a statement expression undergoes array and
32524function pointer decay, and is returned by value to the enclosing
32525expression.  For instance, if 'A' is a class, then
32526
32527             A a;
32528
32529             ({a;}).Foo ()
32530
32531constructs a temporary 'A' object to hold the result of the statement
32532expression, and that is used to invoke 'Foo'.  Therefore the 'this'
32533pointer observed by 'Foo' is not the address of 'a'.
32534
32535 In a statement expression, any temporaries created within a statement
32536are destroyed at that statement's end.  This makes statement expressions
32537inside macros slightly different from function calls.  In the latter
32538case temporaries introduced during argument evaluation are destroyed at
32539the end of the statement that includes the function call.  In the
32540statement expression case they are destroyed during the statement
32541expression.  For instance,
32542
32543     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
32544     template<typename T> T function(T a) { T b = a; return b + 3; }
32545
32546     void foo ()
32547     {
32548       macro (X ());
32549       function (X ());
32550     }
32551
32552has different places where temporaries are destroyed.  For the 'macro'
32553case, the temporary 'X' is destroyed just after the initialization of
32554'b'.  In the 'function' case that temporary is destroyed when the
32555function returns.
32556
32557 These considerations mean that it is probably a bad idea to use
32558statement expressions of this form in header files that are designed to
32559work with C++.  (Note that some versions of the GNU C Library contained
32560header files using statement expressions that lead to precisely this
32561bug.)
32562
32563 Jumping into a statement expression with 'goto' or using a 'switch'
32564statement outside the statement expression with a 'case' or 'default'
32565label inside the statement expression is not permitted.  Jumping into a
32566statement expression with a computed 'goto' (*note Labels as Values::)
32567has undefined behavior.  Jumping out of a statement expression is
32568permitted, but if the statement expression is part of a larger
32569expression then it is unspecified which other subexpressions of that
32570expression have been evaluated except where the language definition
32571requires certain subexpressions to be evaluated before or after the
32572statement expression.  A 'break' or 'continue' statement inside of a
32573statement expression used in 'while', 'do' or 'for' loop or 'switch'
32574statement condition or 'for' statement init or increment expressions
32575jumps to an outer loop or 'switch' statement if any (otherwise it is an
32576error), rather than to the loop or 'switch' statement in whose condition
32577or init or increment expression it appears.  In any case, as with a
32578function call, the evaluation of a statement expression is not
32579interleaved with the evaluation of other parts of the containing
32580expression.  For example,
32581
32582       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
32583
32584calls 'foo' and 'bar1' and does not call 'baz' but may or may not call
32585'bar2'.  If 'bar2' is called, it is called after 'foo' and before
32586'bar1'.
32587
32588
32589File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
32590
325916.2 Locally Declared Labels
32592===========================
32593
32594GCC allows you to declare "local labels" in any nested block scope.  A
32595local label is just like an ordinary label, but you can only reference
32596it (with a 'goto' statement, or by taking its address) within the block
32597in which it is declared.
32598
32599 A local label declaration looks like this:
32600
32601     __label__ LABEL;
32602
32603or
32604
32605     __label__ LABEL1, LABEL2, /* ... */;
32606
32607 Local label declarations must come at the beginning of the block,
32608before any ordinary declarations or statements.
32609
32610 The label declaration defines the label _name_, but does not define the
32611label itself.  You must do this in the usual way, with 'LABEL:', within
32612the statements of the statement expression.
32613
32614 The local label feature is useful for complex macros.  If a macro
32615contains nested loops, a 'goto' can be useful for breaking out of them.
32616However, an ordinary label whose scope is the whole function cannot be
32617used: if the macro can be expanded several times in one function, the
32618label is multiply defined in that function.  A local label avoids this
32619problem.  For example:
32620
32621     #define SEARCH(value, array, target)              \
32622     do {                                              \
32623       __label__ found;                                \
32624       typeof (target) _SEARCH_target = (target);      \
32625       typeof (*(array)) *_SEARCH_array = (array);     \
32626       int i, j;                                       \
32627       int value;                                      \
32628       for (i = 0; i < max; i++)                       \
32629         for (j = 0; j < max; j++)                     \
32630           if (_SEARCH_array[i][j] == _SEARCH_target)  \
32631             { (value) = i; goto found; }              \
32632       (value) = -1;                                   \
32633      found:;                                          \
32634     } while (0)
32635
32636 This could also be written using a statement expression:
32637
32638     #define SEARCH(array, target)                     \
32639     ({                                                \
32640       __label__ found;                                \
32641       typeof (target) _SEARCH_target = (target);      \
32642       typeof (*(array)) *_SEARCH_array = (array);     \
32643       int i, j;                                       \
32644       int value;                                      \
32645       for (i = 0; i < max; i++)                       \
32646         for (j = 0; j < max; j++)                     \
32647           if (_SEARCH_array[i][j] == _SEARCH_target)  \
32648             { value = i; goto found; }                \
32649       value = -1;                                     \
32650      found:                                           \
32651       value;                                          \
32652     })
32653
32654 Local label declarations also make the labels they declare visible to
32655nested functions, if there are any.  *Note Nested Functions::, for
32656details.
32657
32658
32659File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
32660
326616.3 Labels as Values
32662====================
32663
32664You can get the address of a label defined in the current function (or a
32665containing function) with the unary operator '&&'.  The value has type
32666'void *'.  This value is a constant and can be used wherever a constant
32667of that type is valid.  For example:
32668
32669     void *ptr;
32670     /* ... */
32671     ptr = &&foo;
32672
32673 To use these values, you need to be able to jump to one.  This is done
32674with the computed goto statement(1), 'goto *EXP;'.  For example,
32675
32676     goto *ptr;
32677
32678Any expression of type 'void *' is allowed.
32679
32680 One way of using these constants is in initializing a static array that
32681serves as a jump table:
32682
32683     static void *array[] = { &&foo, &&bar, &&hack };
32684
32685Then you can select a label with indexing, like this:
32686
32687     goto *array[i];
32688
32689Note that this does not check whether the subscript is in bounds--array
32690indexing in C never does that.
32691
32692 Such an array of label values serves a purpose much like that of the
32693'switch' statement.  The 'switch' statement is cleaner, so use that
32694rather than an array unless the problem does not fit a 'switch'
32695statement very well.
32696
32697 Another use of label values is in an interpreter for threaded code.
32698The labels within the interpreter function can be stored in the threaded
32699code for super-fast dispatching.
32700
32701 You may not use this mechanism to jump to code in a different function.
32702If you do that, totally unpredictable things happen.  The best way to
32703avoid this is to store the label address only in automatic variables and
32704never pass it as an argument.
32705
32706 An alternate way to write the above example is
32707
32708     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
32709                                  &&hack - &&foo };
32710     goto *(&&foo + array[i]);
32711
32712This is more friendly to code living in shared libraries, as it reduces
32713the number of dynamic relocations that are needed, and by consequence,
32714allows the data to be read-only.  This alternative with label
32715differences is not supported for the AVR target, please use the first
32716approach for AVR programs.
32717
32718 The '&&foo' expressions for the same label might have different values
32719if the containing function is inlined or cloned.  If a program relies on
32720them being always the same, '__attribute__((__noinline__,__noclone__))'
32721should be used to prevent inlining and cloning.  If '&&foo' is used in a
32722static variable initializer, inlining and cloning is forbidden.
32723
32724   ---------- Footnotes ----------
32725
32726   (1) The analogous feature in Fortran is called an assigned goto, but
32727that name seems inappropriate in C, where one can do more than simply
32728store label addresses in label variables.
32729
32730
32731File: gcc.info,  Node: Nested Functions,  Next: Nonlocal Gotos,  Prev: Labels as Values,  Up: C Extensions
32732
327336.4 Nested Functions
32734====================
32735
32736A "nested function" is a function defined inside another function.
32737Nested functions are supported as an extension in GNU C, but are not
32738supported by GNU C++.
32739
32740 The nested function's name is local to the block where it is defined.
32741For example, here we define a nested function named 'square', and call
32742it twice:
32743
32744     foo (double a, double b)
32745     {
32746       double square (double z) { return z * z; }
32747
32748       return square (a) + square (b);
32749     }
32750
32751 The nested function can access all the variables of the containing
32752function that are visible at the point of its definition.  This is
32753called "lexical scoping".  For example, here we show a nested function
32754which uses an inherited variable named 'offset':
32755
32756     bar (int *array, int offset, int size)
32757     {
32758       int access (int *array, int index)
32759         { return array[index + offset]; }
32760       int i;
32761       /* ... */
32762       for (i = 0; i < size; i++)
32763         /* ... */ access (array, i) /* ... */
32764     }
32765
32766 Nested function definitions are permitted within functions in the
32767places where variable definitions are allowed; that is, in any block,
32768mixed with the other declarations and statements in the block.
32769
32770 It is possible to call the nested function from outside the scope of
32771its name by storing its address or passing the address to another
32772function:
32773
32774     hack (int *array, int size)
32775     {
32776       void store (int index, int value)
32777         { array[index] = value; }
32778
32779       intermediate (store, size);
32780     }
32781
32782 Here, the function 'intermediate' receives the address of 'store' as an
32783argument.  If 'intermediate' calls 'store', the arguments given to
32784'store' are used to store into 'array'.  But this technique works only
32785so long as the containing function ('hack', in this example) does not
32786exit.
32787
32788 If you try to call the nested function through its address after the
32789containing function exits, all hell breaks loose.  If you try to call it
32790after a containing scope level exits, and if it refers to some of the
32791variables that are no longer in scope, you may be lucky, but it's not
32792wise to take the risk.  If, however, the nested function does not refer
32793to anything that has gone out of scope, you should be safe.
32794
32795 GCC implements taking the address of a nested function using a
32796technique called "trampolines".  This technique was described in
32797'Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
32798Proceedings, October 17-21, 1988).
32799
32800 A nested function can jump to a label inherited from a containing
32801function, provided the label is explicitly declared in the containing
32802function (*note Local Labels::).  Such a jump returns instantly to the
32803containing function, exiting the nested function that did the 'goto' and
32804any intermediate functions as well.  Here is an example:
32805
32806     bar (int *array, int offset, int size)
32807     {
32808       __label__ failure;
32809       int access (int *array, int index)
32810         {
32811           if (index > size)
32812             goto failure;
32813           return array[index + offset];
32814         }
32815       int i;
32816       /* ... */
32817       for (i = 0; i < size; i++)
32818         /* ... */ access (array, i) /* ... */
32819       /* ... */
32820       return 0;
32821
32822      /* Control comes here from 'access'
32823         if it detects an error.  */
32824      failure:
32825       return -1;
32826     }
32827
32828 A nested function always has no linkage.  Declaring one with 'extern'
32829or 'static' is erroneous.  If you need to declare the nested function
32830before its definition, use 'auto' (which is otherwise meaningless for
32831function declarations).
32832
32833     bar (int *array, int offset, int size)
32834     {
32835       __label__ failure;
32836       auto int access (int *, int);
32837       /* ... */
32838       int access (int *array, int index)
32839         {
32840           if (index > size)
32841             goto failure;
32842           return array[index + offset];
32843         }
32844       /* ... */
32845     }
32846
32847
32848File: gcc.info,  Node: Nonlocal Gotos,  Next: Constructing Calls,  Prev: Nested Functions,  Up: C Extensions
32849
328506.5 Nonlocal Gotos
32851==================
32852
32853GCC provides the built-in functions '__builtin_setjmp' and
32854'__builtin_longjmp' which are similar to, but not interchangeable with,
32855the C library functions 'setjmp' and 'longjmp'.  The built-in versions
32856are used internally by GCC's libraries to implement exception handling
32857on some targets.  You should use the standard C library functions
32858declared in '<setjmp.h>' in user code instead of the builtins.
32859
32860 The built-in versions of these functions use GCC's normal mechanisms to
32861save and restore registers using the stack on function entry and exit.
32862The jump buffer argument BUF holds only the information needed to
32863restore the stack frame, rather than the entire set of saved register
32864values.
32865
32866 An important caveat is that GCC arranges to save and restore only those
32867registers known to the specific architecture variant being compiled for.
32868This can make '__builtin_setjmp' and '__builtin_longjmp' more efficient
32869than their library counterparts in some cases, but it can also cause
32870incorrect and mysterious behavior when mixing with code that uses the
32871full register set.
32872
32873 You should declare the jump buffer argument BUF to the built-in
32874functions as:
32875
32876     #include <stdint.h>
32877     intptr_t BUF[5];
32878
32879 -- Built-in Function: int __builtin_setjmp (intptr_t *BUF)
32880     This function saves the current stack context in BUF.
32881     '__builtin_setjmp' returns 0 when returning directly, and 1 when
32882     returning from '__builtin_longjmp' using the same BUF.
32883
32884 -- Built-in Function: void __builtin_longjmp (intptr_t *BUF, int VAL)
32885     This function restores the stack context in BUF, saved by a
32886     previous call to '__builtin_setjmp'.  After '__builtin_longjmp' is
32887     finished, the program resumes execution as if the matching
32888     '__builtin_setjmp' returns the value VAL, which must be 1.
32889
32890     Because '__builtin_longjmp' depends on the function return
32891     mechanism to restore the stack context, it cannot be called from
32892     the same function calling '__builtin_setjmp' to initialize BUF.  It
32893     can only be called from a function called (directly or indirectly)
32894     from the function calling '__builtin_setjmp'.
32895
32896
32897File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nonlocal Gotos,  Up: C Extensions
32898
328996.6 Constructing Function Calls
32900===============================
32901
32902Using the built-in functions described below, you can record the
32903arguments a function received, and call another function with the same
32904arguments, without knowing the number or types of the arguments.
32905
32906 You can also record the return value of that function call, and later
32907return that value, without knowing what data type the function tried to
32908return (as long as your caller expects that data type).
32909
32910 However, these built-in functions may interact badly with some
32911sophisticated features or other extensions of the language.  It is,
32912therefore, not recommended to use them outside very simple functions
32913acting as mere forwarders for their arguments.
32914
32915 -- Built-in Function: void * __builtin_apply_args ()
32916     This built-in function returns a pointer to data describing how to
32917     perform a call with the same arguments as are passed to the current
32918     function.
32919
32920     The function saves the arg pointer register, structure value
32921     address, and all registers that might be used to pass arguments to
32922     a function into a block of memory allocated on the stack.  Then it
32923     returns the address of that block.
32924
32925 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
32926          *ARGUMENTS, size_t SIZE)
32927     This built-in function invokes FUNCTION with a copy of the
32928     parameters described by ARGUMENTS and SIZE.
32929
32930     The value of ARGUMENTS should be the value returned by
32931     '__builtin_apply_args'.  The argument SIZE specifies the size of
32932     the stack argument data, in bytes.
32933
32934     This function returns a pointer to data describing how to return
32935     whatever value is returned by FUNCTION.  The data is saved in a
32936     block of memory allocated on the stack.
32937
32938     It is not always simple to compute the proper value for SIZE.  The
32939     value is used by '__builtin_apply' to compute the amount of data
32940     that should be pushed on the stack and copied from the incoming
32941     argument area.
32942
32943 -- Built-in Function: void __builtin_return (void *RESULT)
32944     This built-in function returns the value described by RESULT from
32945     the containing function.  You should specify, for RESULT, a value
32946     returned by '__builtin_apply'.
32947
32948 -- Built-in Function: __builtin_va_arg_pack ()
32949     This built-in function represents all anonymous arguments of an
32950     inline function.  It can be used only in inline functions that are
32951     always inlined, never compiled as a separate function, such as
32952     those using '__attribute__ ((__always_inline__))' or '__attribute__
32953     ((__gnu_inline__))' extern inline functions.  It must be only
32954     passed as last argument to some other function with variable
32955     arguments.  This is useful for writing small wrapper inlines for
32956     variable argument functions, when using preprocessor macros is
32957     undesirable.  For example:
32958          extern int myprintf (FILE *f, const char *format, ...);
32959          extern inline __attribute__ ((__gnu_inline__)) int
32960          myprintf (FILE *f, const char *format, ...)
32961          {
32962            int r = fprintf (f, "myprintf: ");
32963            if (r < 0)
32964              return r;
32965            int s = fprintf (f, format, __builtin_va_arg_pack ());
32966            if (s < 0)
32967              return s;
32968            return r + s;
32969          }
32970
32971 -- Built-in Function: int __builtin_va_arg_pack_len ()
32972     This built-in function returns the number of anonymous arguments of
32973     an inline function.  It can be used only in inline functions that
32974     are always inlined, never compiled as a separate function, such as
32975     those using '__attribute__ ((__always_inline__))' or '__attribute__
32976     ((__gnu_inline__))' extern inline functions.  For example following
32977     does link- or run-time checking of open arguments for optimized
32978     code:
32979          #ifdef __OPTIMIZE__
32980          extern inline __attribute__((__gnu_inline__)) int
32981          myopen (const char *path, int oflag, ...)
32982          {
32983            if (__builtin_va_arg_pack_len () > 1)
32984              warn_open_too_many_arguments ();
32985
32986            if (__builtin_constant_p (oflag))
32987              {
32988                if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
32989                  {
32990                    warn_open_missing_mode ();
32991                    return __open_2 (path, oflag);
32992                  }
32993                return open (path, oflag, __builtin_va_arg_pack ());
32994              }
32995
32996            if (__builtin_va_arg_pack_len () < 1)
32997              return __open_2 (path, oflag);
32998
32999            return open (path, oflag, __builtin_va_arg_pack ());
33000          }
33001          #endif
33002
33003
33004File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
33005
330066.7 Referring to a Type with 'typeof'
33007=====================================
33008
33009Another way to refer to the type of an expression is with 'typeof'.  The
33010syntax of using of this keyword looks like 'sizeof', but the construct
33011acts semantically like a type name defined with 'typedef'.
33012
33013 There are two ways of writing the argument to 'typeof': with an
33014expression or with a type.  Here is an example with an expression:
33015
33016     typeof (x[0](1))
33017
33018This assumes that 'x' is an array of pointers to functions; the type
33019described is that of the values of the functions.
33020
33021 Here is an example with a typename as the argument:
33022
33023     typeof (int *)
33024
33025Here the type described is that of pointers to 'int'.
33026
33027 If you are writing a header file that must work when included in ISO C
33028programs, write '__typeof__' instead of 'typeof'.  *Note Alternate
33029Keywords::.
33030
33031 A 'typeof' construct can be used anywhere a typedef name can be used.
33032For example, you can use it in a declaration, in a cast, or inside of
33033'sizeof' or 'typeof'.
33034
33035 The operand of 'typeof' is evaluated for its side effects if and only
33036if it is an expression of variably modified type or the name of such a
33037type.
33038
33039 'typeof' is often useful in conjunction with statement expressions
33040(*note Statement Exprs::).  Here is how the two together can be used to
33041define a safe "maximum" macro which operates on any arithmetic type and
33042evaluates each of its arguments exactly once:
33043
33044     #define max(a,b) \
33045       ({ typeof (a) _a = (a); \
33046           typeof (b) _b = (b); \
33047         _a > _b ? _a : _b; })
33048
33049 The reason for using names that start with underscores for the local
33050variables is to avoid conflicts with variable names that occur within
33051the expressions that are substituted for 'a' and 'b'.  Eventually we
33052hope to design a new form of declaration syntax that allows you to
33053declare variables whose scopes start only after their initializers; this
33054will be a more reliable way to prevent such conflicts.
33055
33056Some more examples of the use of 'typeof':
33057
33058   * This declares 'y' with the type of what 'x' points to.
33059
33060          typeof (*x) y;
33061
33062   * This declares 'y' as an array of such values.
33063
33064          typeof (*x) y[4];
33065
33066   * This declares 'y' as an array of pointers to characters:
33067
33068          typeof (typeof (char *)[4]) y;
33069
33070     It is equivalent to the following traditional C declaration:
33071
33072          char *y[4];
33073
33074     To see the meaning of the declaration using 'typeof', and why it
33075     might be a useful way to write, rewrite it with these macros:
33076
33077          #define pointer(T)  typeof(T *)
33078          #define array(T, N) typeof(T [N])
33079
33080     Now the declaration can be rewritten this way:
33081
33082          array (pointer (char), 4) y;
33083
33084     Thus, 'array (pointer (char), 4)' is the type of arrays of 4
33085     pointers to 'char'.
33086
33087 In GNU C, but not GNU C++, you may also declare the type of a variable
33088as '__auto_type'.  In that case, the declaration must declare only one
33089variable, whose declarator must just be an identifier, the declaration
33090must be initialized, and the type of the variable is determined by the
33091initializer; the name of the variable is not in scope until after the
33092initializer.  (In C++, you should use C++11 'auto' for this purpose.)
33093Using '__auto_type', the "maximum" macro above could be written as:
33094
33095     #define max(a,b) \
33096       ({ __auto_type _a = (a); \
33097           __auto_type _b = (b); \
33098         _a > _b ? _a : _b; })
33099
33100 Using '__auto_type' instead of 'typeof' has two advantages:
33101
33102   * Each argument to the macro appears only once in the expansion of
33103     the macro.  This prevents the size of the macro expansion growing
33104     exponentially when calls to such macros are nested inside arguments
33105     of such macros.
33106
33107   * If the argument to the macro has variably modified type, it is
33108     evaluated only once when using '__auto_type', but twice if 'typeof'
33109     is used.
33110
33111
33112File: gcc.info,  Node: Conditionals,  Next: __int128,  Prev: Typeof,  Up: C Extensions
33113
331146.8 Conditionals with Omitted Operands
33115======================================
33116
33117The middle operand in a conditional expression may be omitted.  Then if
33118the first operand is nonzero, its value is the value of the conditional
33119expression.
33120
33121 Therefore, the expression
33122
33123     x ? : y
33124
33125has the value of 'x' if that is nonzero; otherwise, the value of 'y'.
33126
33127 This example is perfectly equivalent to
33128
33129     x ? x : y
33130
33131In this simple case, the ability to omit the middle operand is not
33132especially useful.  When it becomes useful is when the first operand
33133does, or may (if it is a macro argument), contain a side effect.  Then
33134repeating the operand in the middle would perform the side effect twice.
33135Omitting the middle operand uses the value already computed without the
33136undesirable effects of recomputing it.
33137
33138
33139File: gcc.info,  Node: __int128,  Next: Long Long,  Prev: Conditionals,  Up: C Extensions
33140
331416.9 128-bit Integers
33142====================
33143
33144As an extension the integer scalar type '__int128' is supported for
33145targets which have an integer mode wide enough to hold 128 bits.  Simply
33146write '__int128' for a signed 128-bit integer, or 'unsigned __int128'
33147for an unsigned 128-bit integer.  There is no support in GCC for
33148expressing an integer constant of type '__int128' for targets with 'long
33149long' integer less than 128 bits wide.
33150
33151
33152File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
33153
331546.10 Double-Word Integers
33155=========================
33156
33157ISO C99 and ISO C++11 support data types for integers that are at least
3315864 bits wide, and as an extension GCC supports them in C90 and C++98
33159modes.  Simply write 'long long int' for a signed integer, or 'unsigned
33160long long int' for an unsigned integer.  To make an integer constant of
33161type 'long long int', add the suffix 'LL' to the integer.  To make an
33162integer constant of type 'unsigned long long int', add the suffix 'ULL'
33163to the integer.
33164
33165 You can use these types in arithmetic like any other integer types.
33166Addition, subtraction, and bitwise boolean operations on these types are
33167open-coded on all types of machines.  Multiplication is open-coded if
33168the machine supports a fullword-to-doubleword widening multiply
33169instruction.  Division and shifts are open-coded only on machines that
33170provide special support.  The operations that are not open-coded use
33171special library routines that come with GCC.
33172
33173 There may be pitfalls when you use 'long long' types for function
33174arguments without function prototypes.  If a function expects type 'int'
33175for its argument, and you pass a value of type 'long long int',
33176confusion results because the caller and the subroutine disagree about
33177the number of bytes for the argument.  Likewise, if the function expects
33178'long long int' and you pass 'int'.  The best way to avoid such problems
33179is to use prototypes.
33180
33181
33182File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
33183
331846.11 Complex Numbers
33185====================
33186
33187ISO C99 supports complex floating data types, and as an extension GCC
33188supports them in C90 mode and in C++.  GCC also supports complex integer
33189data types which are not part of ISO C99.  You can declare complex types
33190using the keyword '_Complex'.  As an extension, the older GNU keyword
33191'__complex__' is also supported.
33192
33193 For example, '_Complex double x;' declares 'x' as a variable whose real
33194part and imaginary part are both of type 'double'.  '_Complex short int
33195y;' declares 'y' to have real and imaginary parts of type 'short int';
33196this is not likely to be useful, but it shows that the set of complex
33197types is complete.
33198
33199 To write a constant with a complex data type, use the suffix 'i' or 'j'
33200(either one; they are equivalent).  For example, '2.5fi' has type
33201'_Complex float' and '3i' has type '_Complex int'.  Such a constant
33202always has a pure imaginary value, but you can form any complex value
33203you like by adding one to a real constant.  This is a GNU extension; if
33204you have an ISO C99 conforming C library (such as the GNU C Library),
33205and want to construct complex constants of floating type, you should
33206include '<complex.h>' and use the macros 'I' or '_Complex_I' instead.
33207
33208 The ISO C++14 library also defines the 'i' suffix, so C++14 code that
33209includes the '<complex>' header cannot use 'i' for the GNU extension.
33210The 'j' suffix still has the GNU meaning.
33211
33212 GCC can handle both implicit and explicit casts between the '_Complex'
33213types and other '_Complex' types as casting both the real and imaginary
33214parts to the scalar type.  GCC can handle implicit and explicit casts
33215from a scalar type to a '_Complex' type and where the imaginary part
33216will be considered zero.  The C front-end can handle implicit and
33217explicit casts from a '_Complex' type to a scalar type where the
33218imaginary part will be ignored.  In C++ code, this cast is considered
33219illformed and G++ will error out.
33220
33221 GCC provides a built-in function '__builtin_complex' will can be used
33222to construct a complex value.
33223
33224 GCC has a few extensions which can be used to extract the real and the
33225imaginary part of the complex-valued expression.  Note these expressions
33226are lvalues if the EXP is an lvalue.  These expressions operands have
33227the type of a complex type which might get prompoted to a complex type
33228from a scalar type.  E.g.  '__real__ (int)X' is the same as casting to
33229'_Complex int' before '__real__' is done.
33230
33231Expression                    Description
33232--------------------------------------------------------------------------
33233'__real__ EXP'                Extract the real part of EXP.
33234'__imag__ EXP'                Extract the imaginary part of EXP.
33235
33236 For values of floating point, you should use the ISO C99 functions,
33237declared in '<complex.h>' and also provided as built-in functions by
33238GCC.
33239
33240Expression                    float          double         long double
33241---------------------------------------------------------------------------
33242'__real__ EXP'                'crealf'       'creal'        'creall'
33243'__imag__ EXP'                'cimagf'       'cimag'        'cimagl'
33244
33245 The operator '~' performs complex conjugation when used on a value with
33246a complex type.  This is a GNU extension; for values of floating type,
33247you should use the ISO C99 functions 'conjf', 'conj' and 'conjl',
33248declared in '<complex.h>' and also provided as built-in functions by
33249GCC.  Note unlike the '__real__' and '__imag__' operators, this operator
33250will not do an implicit cast to the complex type because the '~' is
33251already a normal operator.
33252
33253 GCC can allocate complex automatic variables in a noncontiguous
33254fashion; it's even possible for the real part to be in a register while
33255the imaginary part is on the stack (or vice versa).  Only the DWARF
33256debug info format can represent this, so use of DWARF is recommended.
33257If you are using the stabs debug info format, GCC describes a
33258noncontiguous complex variable as if it were two separate variables of
33259noncomplex type.  If the variable's actual name is 'foo', the two
33260fictitious variables are named 'foo$real' and 'foo$imag'.  You can
33261examine and set these two fictitious variables with your debugger.
33262
33263 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
33264
33265     The built-in function '__builtin_complex' is provided for use in
33266     implementing the ISO C11 macros 'CMPLXF', 'CMPLX' and 'CMPLXL'.
33267     REAL and IMAG must have the same type, a real binary floating-point
33268     type, and the result has the corresponding complex type with real
33269     and imaginary parts REAL and IMAG.  Unlike 'REAL + I * IMAG', this
33270     works even when infinities, NaNs and negative zeros are involved.
33271
33272
33273File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
33274
332756.12 Additional Floating Types
33276==============================
33277
33278ISO/IEC TS 18661-3:2015 defines C support for additional floating types
33279'_FloatN' and '_FloatNx', and GCC supports these type names; the set of
33280types supported depends on the target architecture.  These types are not
33281supported when compiling C++.  Constants with these types use suffixes
33282'fN' or 'FN' and 'fNx' or 'FNx'.  These type names can be used together
33283with '_Complex' to declare complex types.
33284
33285 As an extension, GNU C and GNU C++ support additional floating types,
33286which are not supported by all targets.
33287   * '__float128' is available on i386, x86_64, IA-64, and hppa HP-UX,
33288     as well as on PowerPC GNU/Linux targets that enable the vector
33289     scalar (VSX) instruction set.  '__float128' supports the 128-bit
33290     floating type.  On i386, x86_64, PowerPC, and IA-64 other than
33291     HP-UX, '__float128' is an alias for '_Float128'.  On hppa and IA-64
33292     HP-UX, '__float128' is an alias for 'long double'.
33293
33294   * '__float80' is available on the i386, x86_64, and IA-64 targets,
33295     and supports the 80-bit ('XFmode') floating type.  It is an alias
33296     for the type name '_Float64x' on these targets.
33297
33298   * '__ibm128' is available on PowerPC targets, and provides access to
33299     the IBM extended double format which is the current format used for
33300     'long double'.  When 'long double' transitions to '__float128' on
33301     PowerPC in the future, '__ibm128' will remain for use in
33302     conversions between the two types.
33303
33304 Support for these additional types includes the arithmetic operators:
33305add, subtract, multiply, divide; unary arithmetic operators; relational
33306operators; equality operators; and conversions to and from integer and
33307other floating types.  Use a suffix 'w' or 'W' in a literal constant of
33308type '__float80' or type '__ibm128'.  Use a suffix 'q' or 'Q' for
33309'_float128'.
33310
33311 In order to use '_Float128', '__float128', and '__ibm128' on PowerPC
33312Linux systems, you must use the '-mfloat128' option.  It is expected in
33313future versions of GCC that '_Float128' and '__float128' will be enabled
33314automatically.
33315
33316 The '_Float128' type is supported on all systems where '__float128' is
33317supported or where 'long double' has the IEEE binary128 format.  The
33318'_Float64x' type is supported on all systems where '__float128' is
33319supported.  The '_Float32' type is supported on all systems supporting
33320IEEE binary32; the '_Float64' and '_Float32x' types are supported on all
33321systems supporting IEEE binary64.  The '_Float16' type is supported on
33322AArch64 systems by default, on ARM systems when the IEEE format for
3332316-bit floating-point types is selected with '-mfp16-format=ieee' and,
33324for both C and C++, on x86 systems with SSE2 enabled.  GCC does not
33325currently support '_Float128x' on any systems.
33326
33327 On the i386, x86_64, IA-64, and HP-UX targets, you can declare complex
33328types using the corresponding internal complex type, 'XCmode' for
33329'__float80' type and 'TCmode' for '__float128' type:
33330
33331     typedef _Complex float __attribute__((mode(TC))) _Complex128;
33332     typedef _Complex float __attribute__((mode(XC))) _Complex80;
33333
33334 On the PowerPC Linux VSX targets, you can declare complex types using
33335the corresponding internal complex type, 'KCmode' for '__float128' type
33336and 'ICmode' for '__ibm128' type:
33337
33338     typedef _Complex float __attribute__((mode(KC))) _Complex_float128;
33339     typedef _Complex float __attribute__((mode(IC))) _Complex_ibm128;
33340
33341
33342File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
33343
333446.13 Half-Precision Floating Point
33345==================================
33346
33347On ARM and AArch64 targets, GCC supports half-precision (16-bit)
33348floating point via the '__fp16' type defined in the ARM C Language
33349Extensions.  On ARM systems, you must enable this type explicitly with
33350the '-mfp16-format' command-line option in order to use it.  On x86
33351targets with SSE2 enabled, GCC supports half-precision (16-bit) floating
33352point via the '_Float16' type.  For C++, x86 provides a builtin type
33353named '_Float16' which contains same data format as C.
33354
33355 ARM targets support two incompatible representations for half-precision
33356floating-point values.  You must choose one of the representations and
33357use it consistently in your program.
33358
33359 Specifying '-mfp16-format=ieee' selects the IEEE 754-2008 format.  This
33360format can represent normalized values in the range of 2^{-14} to 65504.
33361There are 11 bits of significand precision, approximately 3 decimal
33362digits.
33363
33364 Specifying '-mfp16-format=alternative' selects the ARM alternative
33365format.  This representation is similar to the IEEE format, but does not
33366support infinities or NaNs.  Instead, the range of exponents is
33367extended, so that this format can represent normalized values in the
33368range of 2^{-14} to 131008.
33369
33370 The GCC port for AArch64 only supports the IEEE 754-2008 format, and
33371does not require use of the '-mfp16-format' command-line option.
33372
33373 The '__fp16' type may only be used as an argument to intrinsics defined
33374in '<arm_fp16.h>', or as a storage format.  For purposes of arithmetic
33375and other operations, '__fp16' values in C or C++ expressions are
33376automatically promoted to 'float'.
33377
33378 The ARM target provides hardware support for conversions between
33379'__fp16' and 'float' values as an extension to VFP and NEON (Advanced
33380SIMD), and from ARMv8-A provides hardware support for conversions
33381between '__fp16' and 'double' values.  GCC generates code using these
33382hardware instructions if you compile with options to select an FPU that
33383provides them; for example, '-mfpu=neon-fp16 -mfloat-abi=softfp', in
33384addition to the '-mfp16-format' option to select a half-precision
33385format.
33386
33387 Language-level support for the '__fp16' data type is independent of
33388whether GCC generates code using hardware floating-point instructions.
33389In cases where hardware support is not specified, GCC implements
33390conversions between '__fp16' and other types as library calls.
33391
33392 It is recommended that portable code use the '_Float16' type defined by
33393ISO/IEC TS 18661-3:2015.  *Note Floating Types::.
33394
33395 On x86 targets with SSE2 enabled, without '-mavx512fp16', all
33396operations will be emulated by software emulation and the 'float'
33397instructions.  The default behavior for 'FLT_EVAL_METHOD' is to keep the
33398intermediate result of the operation as 32-bit precision.  This may lead
33399to inconsistent behavior between software emulation and AVX512-FP16
33400instructions.  Using '-fexcess-precision=16' will force round back after
33401each operation.
33402
33403 Using '-mavx512fp16' will generate AVX512-FP16 instructions instead of
33404software emulation.  The default behavior of 'FLT_EVAL_METHOD' is to
33405round after each operation.  The same is true with
33406'-fexcess-precision=standard' and '-mfpmath=sse'.  If there is no
33407'-mfpmath=sse', '-fexcess-precision=standard' alone does the same thing
33408as before, It is useful for code that does not have '_Float16' and runs
33409on the x87 FPU.
33410
33411
33412File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
33413
334146.14 Decimal Floating Types
33415===========================
33416
33417As an extension, GNU C supports decimal floating types as defined in the
33418N1312 draft of ISO/IEC WDTR24732.  Support for decimal floating types in
33419GCC will evolve as the draft technical report changes.  Calling
33420conventions for any target might also change.  Not all targets support
33421decimal floating types.
33422
33423 The decimal floating types are '_Decimal32', '_Decimal64', and
33424'_Decimal128'.  They use a radix of ten, unlike the floating types
33425'float', 'double', and 'long double' whose radix is not specified by the
33426C standard but is usually two.
33427
33428 Support for decimal floating types includes the arithmetic operators
33429add, subtract, multiply, divide; unary arithmetic operators; relational
33430operators; equality operators; and conversions to and from integer and
33431other floating types.  Use a suffix 'df' or 'DF' in a literal constant
33432of type '_Decimal32', 'dd' or 'DD' for '_Decimal64', and 'dl' or 'DL'
33433for '_Decimal128'.
33434
33435 GCC support of decimal float as specified by the draft technical report
33436is incomplete:
33437
33438   * When the value of a decimal floating type cannot be represented in
33439     the integer type to which it is being converted, the result is
33440     undefined rather than the result value specified by the draft
33441     technical report.
33442
33443   * GCC does not provide the C library functionality associated with
33444     'math.h', 'fenv.h', 'stdio.h', 'stdlib.h', and 'wchar.h', which
33445     must come from a separate C library implementation.  Because of
33446     this the GNU C compiler does not define macro '__STDC_DEC_FP__' to
33447     indicate that the implementation conforms to the technical report.
33448
33449 Types '_Decimal32', '_Decimal64', and '_Decimal128' are supported by
33450the DWARF debug information format.
33451
33452
33453File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
33454
334556.15 Hex Floats
33456===============
33457
33458ISO C99 and ISO C++17 support floating-point numbers written not only in
33459the usual decimal notation, such as '1.55e1', but also numbers such as
33460'0x1.fp3' written in hexadecimal format.  As a GNU extension, GCC
33461supports this in C90 mode (except in some cases when strictly
33462conforming) and in C++98, C++11 and C++14 modes.  In that format the
33463'0x' hex introducer and the 'p' or 'P' exponent field are mandatory.
33464The exponent is a decimal number that indicates the power of 2 by which
33465the significant part is multiplied.  Thus '0x1.f' is 1 15/16, 'p3'
33466multiplies it by 8, and the value of '0x1.fp3' is the same as '1.55e1'.
33467
33468 Unlike for floating-point numbers in the decimal notation the exponent
33469is always required in the hexadecimal notation.  Otherwise the compiler
33470would not be able to resolve the ambiguity of, e.g., '0x1.f'.  This
33471could mean '1.0f' or '1.9375' since 'f' is also the extension for
33472floating-point constants of type 'float'.
33473
33474
33475File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
33476
334776.16 Fixed-Point Types
33478======================
33479
33480As an extension, GNU C supports fixed-point types as defined in the
33481N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point types in GCC
33482will evolve as the draft technical report changes.  Calling conventions
33483for any target might also change.  Not all targets support fixed-point
33484types.
33485
33486 The fixed-point types are 'short _Fract', '_Fract', 'long _Fract',
33487'long long _Fract', 'unsigned short _Fract', 'unsigned _Fract',
33488'unsigned long _Fract', 'unsigned long long _Fract', '_Sat short
33489_Fract', '_Sat _Fract', '_Sat long _Fract', '_Sat long long _Fract',
33490'_Sat unsigned short _Fract', '_Sat unsigned _Fract', '_Sat unsigned
33491long _Fract', '_Sat unsigned long long _Fract', 'short _Accum',
33492'_Accum', 'long _Accum', 'long long _Accum', 'unsigned short _Accum',
33493'unsigned _Accum', 'unsigned long _Accum', 'unsigned long long _Accum',
33494'_Sat short _Accum', '_Sat _Accum', '_Sat long _Accum', '_Sat long long
33495_Accum', '_Sat unsigned short _Accum', '_Sat unsigned _Accum', '_Sat
33496unsigned long _Accum', '_Sat unsigned long long _Accum'.
33497
33498 Fixed-point data values contain fractional and optional integral parts.
33499The format of fixed-point data varies and depends on the target machine.
33500
33501 Support for fixed-point types includes:
33502   * prefix and postfix increment and decrement operators ('++', '--')
33503   * unary arithmetic operators ('+', '-', '!')
33504   * binary arithmetic operators ('+', '-', '*', '/')
33505   * binary shift operators ('<<', '>>')
33506   * relational operators ('<', '<=', '>=', '>')
33507   * equality operators ('==', '!=')
33508   * assignment operators ('+=', '-=', '*=', '/=', '<<=', '>>=')
33509   * conversions to and from integer, floating-point, or fixed-point
33510     types
33511
33512 Use a suffix in a fixed-point literal constant:
33513   * 'hr' or 'HR' for 'short _Fract' and '_Sat short _Fract'
33514   * 'r' or 'R' for '_Fract' and '_Sat _Fract'
33515   * 'lr' or 'LR' for 'long _Fract' and '_Sat long _Fract'
33516   * 'llr' or 'LLR' for 'long long _Fract' and '_Sat long long _Fract'
33517   * 'uhr' or 'UHR' for 'unsigned short _Fract' and '_Sat unsigned short
33518     _Fract'
33519   * 'ur' or 'UR' for 'unsigned _Fract' and '_Sat unsigned _Fract'
33520   * 'ulr' or 'ULR' for 'unsigned long _Fract' and '_Sat unsigned long
33521     _Fract'
33522   * 'ullr' or 'ULLR' for 'unsigned long long _Fract' and '_Sat unsigned
33523     long long _Fract'
33524   * 'hk' or 'HK' for 'short _Accum' and '_Sat short _Accum'
33525   * 'k' or 'K' for '_Accum' and '_Sat _Accum'
33526   * 'lk' or 'LK' for 'long _Accum' and '_Sat long _Accum'
33527   * 'llk' or 'LLK' for 'long long _Accum' and '_Sat long long _Accum'
33528   * 'uhk' or 'UHK' for 'unsigned short _Accum' and '_Sat unsigned short
33529     _Accum'
33530   * 'uk' or 'UK' for 'unsigned _Accum' and '_Sat unsigned _Accum'
33531   * 'ulk' or 'ULK' for 'unsigned long _Accum' and '_Sat unsigned long
33532     _Accum'
33533   * 'ullk' or 'ULLK' for 'unsigned long long _Accum' and '_Sat unsigned
33534     long long _Accum'
33535
33536 GCC support of fixed-point types as specified by the draft technical
33537report is incomplete:
33538
33539   * Pragmas to control overflow and rounding behaviors are not
33540     implemented.
33541
33542 Fixed-point types are supported by the DWARF debug information format.
33543
33544
33545File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
33546
335476.17 Named Address Spaces
33548=========================
33549
33550As an extension, GNU C supports named address spaces as defined in the
33551N1275 draft of ISO/IEC DTR 18037.  Support for named address spaces in
33552GCC will evolve as the draft technical report changes.  Calling
33553conventions for any target might also change.  At present, only the AVR,
33554M32C, PRU, RL78, and x86 targets support address spaces other than the
33555generic address space.
33556
33557 Address space identifiers may be used exactly like any other C type
33558qualifier (e.g., 'const' or 'volatile').  See the N1275 document for
33559more details.
33560
335616.17.1 AVR Named Address Spaces
33562-------------------------------
33563
33564On the AVR target, there are several address spaces that can be used in
33565order to put read-only data into the flash memory and access that data
33566by means of the special instructions 'LPM' or 'ELPM' needed to read from
33567flash.
33568
33569 Devices belonging to 'avrtiny' and 'avrxmega3' can access flash memory
33570by means of 'LD*' instructions because the flash memory is mapped into
33571the RAM address space.  There is _no need_ for language extensions like
33572'__flash' or attribute *note 'progmem': AVR Variable Attributes.  The
33573default linker description files for these devices cater for that
33574feature and '.rodata' stays in flash: The compiler just generates 'LD*'
33575instructions, and the linker script adds core specific offsets to all
33576'.rodata' symbols: '0x4000' in the case of 'avrtiny' and '0x8000' in the
33577case of 'avrxmega3'.  See *note AVR Options:: for a list of respective
33578devices.
33579
33580 For devices not in 'avrtiny' or 'avrxmega3', any data including
33581read-only data is located in RAM (the generic address space) because
33582flash memory is not visible in the RAM address space.  In order to
33583locate read-only data in flash memory _and_ to generate the right
33584instructions to access this data without using (inline) assembler code,
33585special address spaces are needed.
33586
33587'__flash'
33588     The '__flash' qualifier locates data in the '.progmem.data'
33589     section.  Data is read using the 'LPM' instruction.  Pointers to
33590     this address space are 16 bits wide.
33591
33592'__flash1'
33593'__flash2'
33594'__flash3'
33595'__flash4'
33596'__flash5'
33597     These are 16-bit address spaces locating data in section
33598     '.progmemN.data' where N refers to address space '__flashN'.  The
33599     compiler sets the 'RAMPZ' segment register appropriately before
33600     reading data by means of the 'ELPM' instruction.
33601
33602'__memx'
33603     This is a 24-bit address space that linearizes flash and RAM: If
33604     the high bit of the address is set, data is read from RAM using the
33605     lower two bytes as RAM address.  If the high bit of the address is
33606     clear, data is read from flash with 'RAMPZ' set according to the
33607     high byte of the address.  *Note '__builtin_avr_flash_segment': AVR
33608     Built-in Functions.
33609
33610     Objects in this address space are located in '.progmemx.data'.
33611
33612 Example
33613
33614     char my_read (const __flash char ** p)
33615     {
33616         /* p is a pointer to RAM that points to a pointer to flash.
33617            The first indirection of p reads that flash pointer
33618            from RAM and the second indirection reads a char from this
33619            flash address.  */
33620
33621         return **p;
33622     }
33623
33624     /* Locate array[] in flash memory */
33625     const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };
33626
33627     int i = 1;
33628
33629     int main (void)
33630     {
33631        /* Return 17 by reading from flash memory */
33632        return array[array[i]];
33633     }
33634
33635For each named address space supported by avr-gcc there is an equally
33636named but uppercase built-in macro defined.  The purpose is to
33637facilitate testing if respective address space support is available or
33638not:
33639
33640     #ifdef __FLASH
33641     const __flash int var = 1;
33642
33643     int read_var (void)
33644     {
33645         return var;
33646     }
33647     #else
33648     #include <avr/pgmspace.h> /* From AVR-LibC */
33649
33650     const int var PROGMEM = 1;
33651
33652     int read_var (void)
33653     {
33654         return (int) pgm_read_word (&var);
33655     }
33656     #endif /* __FLASH */
33657
33658Notice that attribute *note 'progmem': AVR Variable Attributes. locates
33659data in flash but accesses to these data read from generic address
33660space, i.e. from RAM, so that you need special accessors like
33661'pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/)
33662together with attribute 'progmem'.
33663
33664Limitations and caveats
33665
33666   * Reading across the 64 KiB section boundary of the '__flash' or
33667     '__flashN' address spaces shows undefined behavior.  The only
33668     address space that supports reading across the 64 KiB flash segment
33669     boundaries is '__memx'.
33670
33671   * If you use one of the '__flashN' address spaces you must arrange
33672     your linker script to locate the '.progmemN.data' sections
33673     according to your needs.
33674
33675   * Any data or pointers to the non-generic address spaces must be
33676     qualified as 'const', i.e. as read-only data.  This still applies
33677     if the data in one of these address spaces like software version
33678     number or calibration lookup table are intended to be changed after
33679     load time by, say, a boot loader.  In this case the right
33680     qualification is 'const' 'volatile' so that the compiler must not
33681     optimize away known values or insert them as immediates into
33682     operands of instructions.
33683
33684   * The following code initializes a variable 'pfoo' located in static
33685     storage with a 24-bit address:
33686          extern const __memx char foo;
33687          const __memx void *pfoo = &foo;
33688
33689   * On the reduced Tiny devices like ATtiny40, no address spaces are
33690     supported.  Just use vanilla C / C++ code without overhead as
33691     outlined above.  Attribute 'progmem' is supported but works
33692     differently, see *note AVR Variable Attributes::.
33693
336946.17.2 M32C Named Address Spaces
33695--------------------------------
33696
33697On the M32C target, with the R8C and M16C CPU variants, variables
33698qualified with '__far' are accessed using 32-bit addresses in order to
33699access memory beyond the first 64 Ki bytes.  If '__far' is used with the
33700M32CM or M32C CPU variants, it has no effect.
33701
337026.17.3 PRU Named Address Spaces
33703-------------------------------
33704
33705On the PRU target, variables qualified with '__regio_symbol' are aliases
33706used to access the special I/O CPU registers.  They must be declared as
33707'extern' because such variables will not be allocated in any data
33708memory.  They must also be marked as 'volatile', and can only be 32-bit
33709integer types.  The only names those variables can have are '__R30' and
33710'__R31', representing respectively the 'R30' and 'R31' special I/O CPU
33711registers.  Hence the following example is the only valid usage of
33712'__regio_symbol':
33713
33714     extern volatile __regio_symbol uint32_t __R30;
33715     extern volatile __regio_symbol uint32_t __R31;
33716
337176.17.4 RL78 Named Address Spaces
33718--------------------------------
33719
33720On the RL78 target, variables qualified with '__far' are accessed with
3372132-bit pointers (20-bit addresses) rather than the default 16-bit
33722addresses.  Non-far variables are assumed to appear in the topmost
3372364 KiB of the address space.
33724
337256.17.5 x86 Named Address Spaces
33726-------------------------------
33727
33728On the x86 target, variables may be declared as being relative to the
33729'%fs' or '%gs' segments.
33730
33731'__seg_fs'
33732'__seg_gs'
33733     The object is accessed with the respective segment override prefix.
33734
33735     The respective segment base must be set via some method specific to
33736     the operating system.  Rather than require an expensive system call
33737     to retrieve the segment base, these address spaces are not
33738     considered to be subspaces of the generic (flat) address space.
33739     This means that explicit casts are required to convert pointers
33740     between these address spaces and the generic address space.  In
33741     practice the application should cast to 'uintptr_t' and apply the
33742     segment base offset that it installed previously.
33743
33744     The preprocessor symbols '__SEG_FS' and '__SEG_GS' are defined when
33745     these address spaces are supported.
33746
33747
33748File: gcc.info,  Node: Zero Length,  Next: Empty Structures,  Prev: Named Address Spaces,  Up: C Extensions
33749
337506.18 Arrays of Length Zero
33751==========================
33752
33753Declaring zero-length arrays is allowed in GNU C as an extension.  A
33754zero-length array can be useful as the last element of a structure that
33755is really a header for a variable-length object:
33756
33757     struct line {
33758       int length;
33759       char contents[0];
33760     };
33761
33762     struct line *thisline = (struct line *)
33763       malloc (sizeof (struct line) + this_length);
33764     thisline->length = this_length;
33765
33766 Although the size of a zero-length array is zero, an array member of
33767this kind may increase the size of the enclosing type as a result of
33768tail padding.  The offset of a zero-length array member from the
33769beginning of the enclosing structure is the same as the offset of an
33770array with one or more elements of the same type.  The alignment of a
33771zero-length array is the same as the alignment of its elements.
33772
33773 Declaring zero-length arrays in other contexts, including as interior
33774members of structure objects or as non-member objects, is discouraged.
33775Accessing elements of zero-length arrays declared in such contexts is
33776undefined and may be diagnosed.
33777
33778 In the absence of the zero-length array extension, in ISO C90 the
33779'contents' array in the example above would typically be declared to
33780have a single element.  Unlike a zero-length array which only
33781contributes to the size of the enclosing structure for the purposes of
33782alignment, a one-element array always occupies at least as much space as
33783a single object of the type.  Although using one-element arrays this way
33784is discouraged, GCC handles accesses to trailing one-element array
33785members analogously to zero-length arrays.
33786
33787 The preferred mechanism to declare variable-length types like 'struct
33788line' above is the ISO C99 "flexible array member", with slightly
33789different syntax and semantics:
33790
33791   * Flexible array members are written as 'contents[]' without the '0'.
33792
33793   * Flexible array members have incomplete type, and so the 'sizeof'
33794     operator may not be applied.  As a quirk of the original
33795     implementation of zero-length arrays, 'sizeof' evaluates to zero.
33796
33797   * Flexible array members may only appear as the last member of a
33798     'struct' that is otherwise non-empty.
33799
33800   * A structure containing a flexible array member, or a union
33801     containing such a structure (possibly recursively), may not be a
33802     member of a structure or an element of an array.  (However, these
33803     uses are permitted by GCC as extensions.)
33804
33805 Non-empty initialization of zero-length arrays is treated like any case
33806where there are more initializer elements than the array holds, in that
33807a suitable warning about "excess elements in array" is given, and the
33808excess elements (all of them, in this case) are ignored.
33809
33810 GCC allows static initialization of flexible array members.  This is
33811equivalent to defining a new structure containing the original structure
33812followed by an array of sufficient size to contain the data.  E.g. in
33813the following, 'f1' is constructed as if it were declared like 'f2'.
33814
33815     struct f1 {
33816       int x; int y[];
33817     } f1 = { 1, { 2, 3, 4 } };
33818
33819     struct f2 {
33820       struct f1 f1; int data[3];
33821     } f2 = { { 1 }, { 2, 3, 4 } };
33822
33823The convenience of this extension is that 'f1' has the desired type,
33824eliminating the need to consistently refer to 'f2.f1'.
33825
33826 This has symmetry with normal static arrays, in that an array of
33827unknown size is also written with '[]'.
33828
33829 Of course, this extension only makes sense if the extra data comes at
33830the end of a top-level object, as otherwise we would be overwriting data
33831at subsequent offsets.  To avoid undue complication and confusion with
33832initialization of deeply nested arrays, we simply disallow any non-empty
33833initialization except when the structure is the top-level object.  For
33834example:
33835
33836     struct foo { int x; int y[]; };
33837     struct bar { struct foo z; };
33838
33839     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
33840     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
33841     struct bar c = { { 1, { } } };            // Valid.
33842     struct foo d[1] = { { 1, { 2, 3, 4 } } };  // Invalid.
33843
33844
33845File: gcc.info,  Node: Empty Structures,  Next: Variable Length,  Prev: Zero Length,  Up: C Extensions
33846
338476.19 Structures with No Members
33848===============================
33849
33850GCC permits a C structure to have no members:
33851
33852     struct empty {
33853     };
33854
33855 The structure has size zero.  In C++, empty structures are part of the
33856language.  G++ treats empty structures as if they had a single member of
33857type 'char'.
33858
33859
33860File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
33861
338626.20 Arrays of Variable Length
33863==============================
33864
33865Variable-length automatic arrays are allowed in ISO C99, and as an
33866extension GCC accepts them in C90 mode and in C++.  These arrays are
33867declared like any other automatic arrays, but with a length that is not
33868a constant expression.  The storage is allocated at the point of
33869declaration and deallocated when the block scope containing the
33870declaration exits.  For example:
33871
33872     FILE *
33873     concat_fopen (char *s1, char *s2, char *mode)
33874     {
33875       char str[strlen (s1) + strlen (s2) + 1];
33876       strcpy (str, s1);
33877       strcat (str, s2);
33878       return fopen (str, mode);
33879     }
33880
33881 Jumping or breaking out of the scope of the array name deallocates the
33882storage.  Jumping into the scope is not allowed; you get an error
33883message for it.
33884
33885 As an extension, GCC accepts variable-length arrays as a member of a
33886structure or a union.  For example:
33887
33888     void
33889     foo (int n)
33890     {
33891       struct S { int x[n]; };
33892     }
33893
33894 You can use the function 'alloca' to get an effect much like
33895variable-length arrays.  The function 'alloca' is available in many
33896other C implementations (but not in all).  On the other hand,
33897variable-length arrays are more elegant.
33898
33899 There are other differences between these two methods.  Space allocated
33900with 'alloca' exists until the containing _function_ returns.  The space
33901for a variable-length array is deallocated as soon as the array name's
33902scope ends, unless you also use 'alloca' in this scope.
33903
33904 You can also use variable-length arrays as arguments to functions:
33905
33906     struct entry
33907     tester (int len, char data[len][len])
33908     {
33909       /* ... */
33910     }
33911
33912 The length of an array is computed once when the storage is allocated
33913and is remembered for the scope of the array in case you access it with
33914'sizeof'.
33915
33916 If you want to pass the array first and the length afterward, you can
33917use a forward declaration in the parameter list--another GNU extension.
33918
33919     struct entry
33920     tester (int len; char data[len][len], int len)
33921     {
33922       /* ... */
33923     }
33924
33925 The 'int len' before the semicolon is a "parameter forward
33926declaration", and it serves the purpose of making the name 'len' known
33927when the declaration of 'data' is parsed.
33928
33929 You can write any number of such parameter forward declarations in the
33930parameter list.  They can be separated by commas or semicolons, but the
33931last one must end with a semicolon, which is followed by the "real"
33932parameter declarations.  Each forward declaration must match a "real"
33933declaration in parameter name and data type.  ISO C99 does not support
33934parameter forward declarations.
33935
33936
33937File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Variable Length,  Up: C Extensions
33938
339396.21 Macros with a Variable Number of Arguments.
33940================================================
33941
33942In the ISO C standard of 1999, a macro can be declared to accept a
33943variable number of arguments much as a function can.  The syntax for
33944defining the macro is similar to that of a function.  Here is an
33945example:
33946
33947     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
33948
33949Here '...' is a "variable argument".  In the invocation of such a macro,
33950it represents the zero or more tokens until the closing parenthesis that
33951ends the invocation, including any commas.  This set of tokens replaces
33952the identifier '__VA_ARGS__' in the macro body wherever it appears.  See
33953the CPP manual for more information.
33954
33955 GCC has long supported variadic macros, and used a different syntax
33956that allowed you to give a name to the variable arguments just like any
33957other argument.  Here is an example:
33958
33959     #define debug(format, args...) fprintf (stderr, format, args)
33960
33961This is in all ways equivalent to the ISO C example above, but arguably
33962more readable and descriptive.
33963
33964 GNU CPP has two further variadic macro extensions, and permits them to
33965be used with either of the above forms of macro definition.
33966
33967 In standard C, you are not allowed to leave the variable argument out
33968entirely; but you are allowed to pass an empty argument.  For example,
33969this invocation is invalid in ISO C, because there is no comma after the
33970string:
33971
33972     debug ("A message")
33973
33974 GNU CPP permits you to completely omit the variable arguments in this
33975way.  In the above examples, the compiler would complain, though since
33976the expansion of the macro still has the extra comma after the format
33977string.
33978
33979 To help solve this problem, CPP behaves specially for variable
33980arguments used with the token paste operator, '##'.  If instead you
33981write
33982
33983     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
33984
33985and if the variable arguments are omitted or empty, the '##' operator
33986causes the preprocessor to remove the comma before it.  If you do
33987provide some variable arguments in your macro invocation, GNU CPP does
33988not complain about the paste operation and instead places the variable
33989arguments after the comma.  Just like any other pasted macro argument,
33990these arguments are not macro expanded.
33991
33992
33993File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
33994
339956.22 Slightly Looser Rules for Escaped Newlines
33996===============================================
33997
33998The preprocessor treatment of escaped newlines is more relaxed than that
33999specified by the C90 standard, which requires the newline to immediately
34000follow a backslash.  GCC's implementation allows whitespace in the form
34001of spaces, horizontal and vertical tabs, and form feeds between the
34002backslash and the subsequent newline.  The preprocessor issues a
34003warning, but treats it as a valid escaped newline and combines the two
34004lines to form a single logical line.  This works within comments and
34005tokens, as well as between tokens.  Comments are _not_ treated as
34006whitespace for the purposes of this relaxation, since they have not yet
34007been replaced with spaces.
34008
34009
34010File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
34011
340126.23 Non-Lvalue Arrays May Have Subscripts
34013==========================================
34014
34015In ISO C99, arrays that are not lvalues still decay to pointers, and may
34016be subscripted, although they may not be modified or used after the next
34017sequence point and the unary '&' operator may not be applied to them.
34018As an extension, GNU C allows such arrays to be subscripted in C90 mode,
34019though otherwise they do not decay to pointers outside C99 mode.  For
34020example, this is valid in GNU C though not valid in C90:
34021
34022     struct foo {int a[4];};
34023
34024     struct foo f();
34025
34026     bar (int index)
34027     {
34028       return f().a[index];
34029     }
34030
34031
34032File: gcc.info,  Node: Pointer Arith,  Next: Variadic Pointer Args,  Prev: Subscripting,  Up: C Extensions
34033
340346.24 Arithmetic on 'void'- and Function-Pointers
34035================================================
34036
34037In GNU C, addition and subtraction operations are supported on pointers
34038to 'void' and on pointers to functions.  This is done by treating the
34039size of a 'void' or of a function as 1.
34040
34041 A consequence of this is that 'sizeof' is also allowed on 'void' and on
34042function types, and returns 1.
34043
34044 The option '-Wpointer-arith' requests a warning if these extensions are
34045used.
34046
34047
34048File: gcc.info,  Node: Variadic Pointer Args,  Next: Pointers to Arrays,  Prev: Pointer Arith,  Up: C Extensions
34049
340506.25 Pointer Arguments in Variadic Functions
34051============================================
34052
34053Standard C requires that pointer types used with 'va_arg' in functions
34054with variable argument lists either must be compatible with that of the
34055actual argument, or that one type must be a pointer to 'void' and the
34056other a pointer to a character type.  GNU C implements the POSIX XSI
34057extension that additionally permits the use of 'va_arg' with a pointer
34058type to receive arguments of any other pointer type.
34059
34060 In particular, in GNU C 'va_arg (ap, void *)' can safely be used to
34061consume an argument of any pointer type.
34062
34063
34064File: gcc.info,  Node: Pointers to Arrays,  Next: Initializers,  Prev: Variadic Pointer Args,  Up: C Extensions
34065
340666.26 Pointers to Arrays with Qualifiers Work as Expected
34067========================================================
34068
34069In GNU C, pointers to arrays with qualifiers work similar to pointers to
34070other qualified types.  For example, a value of type 'int (*)[5]' can be
34071used to initialize a variable of type 'const int (*)[5]'.  These types
34072are incompatible in ISO C because the 'const' qualifier is formally
34073attached to the element type of the array and not the array itself.
34074
34075     extern void
34076     transpose (int N, int M, double out[M][N], const double in[N][M]);
34077     double x[3][2];
34078     double y[2][3];
34079     ...
34080     transpose(3, 2, y, x);
34081
34082
34083File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointers to Arrays,  Up: C Extensions
34084
340856.27 Non-Constant Initializers
34086==============================
34087
34088As in standard C++ and ISO C99, the elements of an aggregate initializer
34089for an automatic variable are not required to be constant expressions in
34090GNU C.  Here is an example of an initializer with run-time varying
34091elements:
34092
34093     foo (float f, float g)
34094     {
34095       float beat_freqs[2] = { f-g, f+g };
34096       /* ... */
34097     }
34098
34099
34100File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
34101
341026.28 Compound Literals
34103======================
34104
34105A compound literal looks like a cast of a brace-enclosed aggregate
34106initializer list.  Its value is an object of the type specified in the
34107cast, containing the elements specified in the initializer.  Unlike the
34108result of a cast, a compound literal is an lvalue.  ISO C99 and later
34109support compound literals.  As an extension, GCC supports compound
34110literals also in C90 mode and in C++, although as explained below, the
34111C++ semantics are somewhat different.
34112
34113 Usually, the specified type of a compound literal is a structure.
34114Assume that 'struct foo' and 'structure' are declared as shown:
34115
34116     struct foo {int a; char b[2];} structure;
34117
34118Here is an example of constructing a 'struct foo' with a compound
34119literal:
34120
34121     structure = ((struct foo) {x + y, 'a', 0});
34122
34123This is equivalent to writing the following:
34124
34125     {
34126       struct foo temp = {x + y, 'a', 0};
34127       structure = temp;
34128     }
34129
34130 You can also construct an array, though this is dangerous in C++, as
34131explained below.  If all the elements of the compound literal are (made
34132up of) simple constant expressions suitable for use in initializers of
34133objects of static storage duration, then the compound literal can be
34134coerced to a pointer to its first element and used in such an
34135initializer, as shown here:
34136
34137     char **foo = (char *[]) { "x", "y", "z" };
34138
34139 Compound literals for scalar types and union types are also allowed.
34140In the following example the variable 'i' is initialized to the value
34141'2', the result of incrementing the unnamed object created by the
34142compound literal.
34143
34144     int i = ++(int) { 1 };
34145
34146 As a GNU extension, GCC allows initialization of objects with static
34147storage duration by compound literals (which is not possible in ISO C99
34148because the initializer is not a constant).  It is handled as if the
34149object were initialized only with the brace-enclosed list if the types
34150of the compound literal and the object match.  The elements of the
34151compound literal must be constant.  If the object being initialized has
34152array type of unknown size, the size is determined by the size of the
34153compound literal.
34154
34155     static struct foo x = (struct foo) {1, 'a', 'b'};
34156     static int y[] = (int []) {1, 2, 3};
34157     static int z[] = (int [3]) {1};
34158
34159The above lines are equivalent to the following:
34160     static struct foo x = {1, 'a', 'b'};
34161     static int y[] = {1, 2, 3};
34162     static int z[] = {1, 0, 0};
34163
34164 In C, a compound literal designates an unnamed object with static or
34165automatic storage duration.  In C++, a compound literal designates a
34166temporary object that only lives until the end of its full-expression.
34167As a result, well-defined C code that takes the address of a subobject
34168of a compound literal can be undefined in C++, so G++ rejects the
34169conversion of a temporary array to a pointer.  For instance, if the
34170array compound literal example above appeared inside a function, any
34171subsequent use of 'foo' in C++ would have undefined behavior because the
34172lifetime of the array ends after the declaration of 'foo'.
34173
34174 As an optimization, G++ sometimes gives array compound literals longer
34175lifetimes: when the array either appears outside a function or has a
34176'const'-qualified type.  If 'foo' and its initializer had elements of
34177type 'char *const' rather than 'char *', or if 'foo' were a global
34178variable, the array would have static storage duration.  But it is
34179probably safest just to avoid the use of array compound literals in C++
34180code.
34181
34182
34183File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions
34184
341856.29 Designated Initializers
34186============================
34187
34188Standard C90 requires the elements of an initializer to appear in a
34189fixed order, the same as the order of the elements in the array or
34190structure being initialized.
34191
34192 In ISO C99 you can give the elements in any order, specifying the array
34193indices or structure field names they apply to, and GNU C allows this as
34194an extension in C90 mode as well.  This extension is not implemented in
34195GNU C++.
34196
34197 To specify an array index, write '[INDEX] =' before the element value.
34198For example,
34199
34200     int a[6] = { [4] = 29, [2] = 15 };
34201
34202is equivalent to
34203
34204     int a[6] = { 0, 0, 15, 0, 29, 0 };
34205
34206The index values must be constant expressions, even if the array being
34207initialized is automatic.
34208
34209 An alternative syntax for this that has been obsolete since GCC 2.5 but
34210GCC still accepts is to write '[INDEX]' before the element value, with
34211no '='.
34212
34213 To initialize a range of elements to the same value, write '[FIRST ...
34214LAST] = VALUE'.  This is a GNU extension.  For example,
34215
34216     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
34217
34218If the value in it has side effects, the side effects happen only once,
34219not for each initialized field by the range initializer.
34220
34221Note that the length of the array is the highest value specified plus
34222one.
34223
34224 In a structure initializer, specify the name of a field to initialize
34225with '.FIELDNAME =' before the element value.  For example, given the
34226following structure,
34227
34228     struct point { int x, y; };
34229
34230the following initialization
34231
34232     struct point p = { .y = yvalue, .x = xvalue };
34233
34234is equivalent to
34235
34236     struct point p = { xvalue, yvalue };
34237
34238 Another syntax that has the same meaning, obsolete since GCC 2.5, is
34239'FIELDNAME:', as shown here:
34240
34241     struct point p = { y: yvalue, x: xvalue };
34242
34243 Omitted fields are implicitly initialized the same as for objects that
34244have static storage duration.
34245
34246 The '[INDEX]' or '.FIELDNAME' is known as a "designator".  You can also
34247use a designator (or the obsolete colon syntax) when initializing a
34248union, to specify which element of the union should be used.  For
34249example,
34250
34251     union foo { int i; double d; };
34252
34253     union foo f = { .d = 4 };
34254
34255converts 4 to a 'double' to store it in the union using the second
34256element.  By contrast, casting 4 to type 'union foo' stores it into the
34257union as the integer 'i', since it is an integer.  *Note Cast to
34258Union::.
34259
34260 You can combine this technique of naming elements with ordinary C
34261initialization of successive elements.  Each initializer element that
34262does not have a designator applies to the next consecutive element of
34263the array or structure.  For example,
34264
34265     int a[6] = { [1] = v1, v2, [4] = v4 };
34266
34267is equivalent to
34268
34269     int a[6] = { 0, v1, v2, 0, v4, 0 };
34270
34271 Labeling the elements of an array initializer is especially useful when
34272the indices are characters or belong to an 'enum' type.  For example:
34273
34274     int whitespace[256]
34275       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
34276           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
34277
34278 You can also write a series of '.FIELDNAME' and '[INDEX]' designators
34279before an '=' to specify a nested subobject to initialize; the list is
34280taken relative to the subobject corresponding to the closest surrounding
34281brace pair.  For example, with the 'struct point' declaration above:
34282
34283     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
34284
34285 If the same field is initialized multiple times, or overlapping fields
34286of a union are initialized, the value from the last initialization is
34287used.  When a field of a union is itself a structure, the entire
34288structure from the last field initialized is used.  If any previous
34289initializer has side effect, it is unspecified whether the side effect
34290happens or not.  Currently, GCC discards the side-effecting initializer
34291expressions and issues a warning.
34292
34293
34294File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions
34295
342966.30 Case Ranges
34297================
34298
34299You can specify a range of consecutive values in a single 'case' label,
34300like this:
34301
34302     case LOW ... HIGH:
34303
34304This has the same effect as the proper number of individual 'case'
34305labels, one for each integer value from LOW to HIGH, inclusive.
34306
34307 This feature is especially useful for ranges of ASCII character codes:
34308
34309     case 'A' ... 'Z':
34310
34311 *Be careful:* Write spaces around the '...', for otherwise it may be
34312parsed wrong when you use it with integer values.  For example, write
34313this:
34314
34315     case 1 ... 5:
34316
34317rather than this:
34318
34319     case 1...5:
34320
34321
34322File: gcc.info,  Node: Cast to Union,  Next: Mixed Labels and Declarations,  Prev: Case Ranges,  Up: C Extensions
34323
343246.31 Cast to a Union Type
34325=========================
34326
34327A cast to a union type is a C extension not available in C++.  It looks
34328just like ordinary casts with the constraint that the type specified is
34329a union type.  You can specify the type either with the 'union' keyword
34330or with a 'typedef' name that refers to a union.  The result of a cast
34331to a union is a temporary rvalue of the union type with a member whose
34332type matches that of the operand initialized to the value of the
34333operand.  The effect of a cast to a union is similar to a compound
34334literal except that it yields an rvalue like standard casts do.  *Note
34335Compound Literals::.
34336
34337 Expressions that may be cast to the union type are those whose type
34338matches at least one of the members of the union.  Thus, given the
34339following union and variables:
34340
34341     union foo { int i; double d; };
34342     int x;
34343     double y;
34344     union foo z;
34345
34346both 'x' and 'y' can be cast to type 'union foo' and the following
34347assignments
34348       z = (union foo) x;
34349       z = (union foo) y;
34350 are shorthand equivalents of these
34351       z = (union foo) { .i = x };
34352       z = (union foo) { .d = y };
34353
34354 However, '(union foo) FLT_MAX;' is not a valid cast because the union
34355has no member of type 'float'.
34356
34357 Using the cast as the right-hand side of an assignment to a variable of
34358union type is equivalent to storing in a member of the union with the
34359same type
34360
34361     union foo u;
34362     /* ... */
34363     u = (union foo) x  ==  u.i = x
34364     u = (union foo) y  ==  u.d = y
34365
34366 You can also use the union cast as a function argument:
34367
34368     void hack (union foo);
34369     /* ... */
34370     hack ((union foo) x);
34371
34372
34373File: gcc.info,  Node: Mixed Labels and Declarations,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
34374
343756.32 Mixed Declarations, Labels and Code
34376========================================
34377
34378ISO C99 and ISO C++ allow declarations and code to be freely mixed
34379within compound statements.  ISO C2X allows labels to be placed before
34380declarations and at the end of a compound statement.  As an extension,
34381GNU C also allows all this in C90 mode.  For example, you could do:
34382
34383     int i;
34384     /* ... */
34385     i++;
34386     int j = i + 2;
34387
34388 Each identifier is visible from where it is declared until the end of
34389the enclosing block.
34390
34391
34392File: gcc.info,  Node: Function Attributes,  Next: Variable Attributes,  Prev: Mixed Labels and Declarations,  Up: C Extensions
34393
343946.33 Declaring Attributes of Functions
34395======================================
34396
34397In GNU C and C++, you can use function attributes to specify certain
34398function properties that may help the compiler optimize calls or check
34399code more carefully for correctness.  For example, you can use
34400attributes to specify that a function never returns ('noreturn'),
34401returns a value depending only on the values of its arguments ('const'),
34402or has 'printf'-style arguments ('format').
34403
34404 You can also use attributes to control memory placement, code
34405generation options or call/return conventions within the function being
34406annotated.  Many of these attributes are target-specific.  For example,
34407many targets support attributes for defining interrupt handler
34408functions, which typically must follow special register usage and return
34409conventions.  Such attributes are described in the subsection for each
34410target.  However, a considerable number of attributes are supported by
34411most, if not all targets.  Those are described in the *note Common
34412Function Attributes:: section.
34413
34414 Function attributes are introduced by the '__attribute__' keyword in
34415the declaration of a function, followed by an attribute specification
34416enclosed in double parentheses.  You can specify multiple attributes in
34417a declaration by separating them by commas within the double parentheses
34418or by immediately following one attribute specification with another.
34419*Note Attribute Syntax::, for the exact rules on attribute syntax and
34420placement.  Compatible attribute specifications on distinct declarations
34421of the same function are merged.  An attribute specification that is not
34422compatible with attributes already applied to a declaration of the same
34423function is ignored with a warning.
34424
34425 Some function attributes take one or more arguments that refer to the
34426function's parameters by their positions within the function parameter
34427list.  Such attribute arguments are referred to as "positional
34428arguments".  Unless specified otherwise, positional arguments that
34429specify properties of parameters with pointer types can also specify the
34430same properties of the implicit C++ 'this' argument in non-static member
34431functions, and of parameters of reference to a pointer type.  For
34432ordinary functions, position one refers to the first parameter on the
34433list.  In C++ non-static member functions, position one refers to the
34434implicit 'this' pointer.  The same restrictions and effects apply to
34435function attributes used with ordinary functions or C++ member
34436functions.
34437
34438 GCC also supports attributes on variable declarations (*note Variable
34439Attributes::), labels (*note Label Attributes::), enumerators (*note
34440Enumerator Attributes::), statements (*note Statement Attributes::),
34441types (*note Type Attributes::), and on field declarations (for
34442'tainted_args').
34443
34444 There is some overlap between the purposes of attributes and pragmas
34445(*note Pragmas Accepted by GCC: Pragmas.).  It has been found convenient
34446to use '__attribute__' to achieve a natural attachment of attributes to
34447their corresponding declarations, whereas '#pragma' is of use for
34448compatibility with other compilers or constructs that do not naturally
34449form part of the grammar.
34450
34451 In addition to the attributes documented here, GCC plugins may provide
34452their own attributes.
34453
34454* Menu:
34455
34456* Common Function Attributes::
34457* AArch64 Function Attributes::
34458* AMD GCN Function Attributes::
34459* ARC Function Attributes::
34460* ARM Function Attributes::
34461* AVR Function Attributes::
34462* Blackfin Function Attributes::
34463* BPF Function Attributes::
34464* CR16 Function Attributes::
34465* C-SKY Function Attributes::
34466* Epiphany Function Attributes::
34467* H8/300 Function Attributes::
34468* IA-64 Function Attributes::
34469* M32C Function Attributes::
34470* M32R/D Function Attributes::
34471* m68k Function Attributes::
34472* MCORE Function Attributes::
34473* MeP Function Attributes::
34474* MicroBlaze Function Attributes::
34475* Microsoft Windows Function Attributes::
34476* MIPS Function Attributes::
34477* MSP430 Function Attributes::
34478* NDS32 Function Attributes::
34479* Nios II Function Attributes::
34480* Nvidia PTX Function Attributes::
34481* PowerPC Function Attributes::
34482* RISC-V Function Attributes::
34483* RL78 Function Attributes::
34484* RX Function Attributes::
34485* S/390 Function Attributes::
34486* SH Function Attributes::
34487* Symbian OS Function Attributes::
34488* V850 Function Attributes::
34489* Visium Function Attributes::
34490* x86 Function Attributes::
34491* Xstormy16 Function Attributes::
34492
34493
34494File: gcc.info,  Node: Common Function Attributes,  Next: AArch64 Function Attributes,  Up: Function Attributes
34495
344966.33.1 Common Function Attributes
34497---------------------------------
34498
34499The following attributes are supported on most targets.
34500
34501'access (ACCESS-MODE, REF-INDEX)'
34502'access (ACCESS-MODE, REF-INDEX, SIZE-INDEX)'
34503
34504     The 'access' attribute enables the detection of invalid or unsafe
34505     accesses by functions to which they apply or their callers, as well
34506     as write-only accesses to objects that are never read from.  Such
34507     accesses may be diagnosed by warnings such as
34508     '-Wstringop-overflow', '-Wuninitialized', '-Wunused', and others.
34509
34510     The 'access' attribute specifies that a function to whose
34511     by-reference arguments the attribute applies accesses the
34512     referenced object according to ACCESS-MODE.  The ACCESS-MODE
34513     argument is required and must be one of four names: 'read_only',
34514     'read_write', 'write_only', or 'none'.  The remaining two are
34515     positional arguments.
34516
34517     The required REF-INDEX positional argument denotes a function
34518     argument of pointer (or in C++, reference) type that is subject to
34519     the access.  The same pointer argument can be referenced by at most
34520     one distinct 'access' attribute.
34521
34522     The optional SIZE-INDEX positional argument denotes a function
34523     argument of integer type that specifies the maximum size of the
34524     access.  The size is the number of elements of the type referenced
34525     by REF-INDEX, or the number of bytes when the pointer type is
34526     'void*'.  When no SIZE-INDEX argument is specified, the pointer
34527     argument must be either null or point to a space that is suitably
34528     aligned and large for at least one object of the referenced type
34529     (this implies that a past-the-end pointer is not a valid argument).
34530     The actual size of the access may be less but it must not be more.
34531
34532     The 'read_only' access mode specifies that the pointer to which it
34533     applies is used to read the referenced object but not write to it.
34534     Unless the argument specifying the size of the access denoted by
34535     SIZE-INDEX is zero, the referenced object must be initialized.  The
34536     mode implies a stronger guarantee than the 'const' qualifier which,
34537     when cast away from a pointer, does not prevent the pointed-to
34538     object from being modified.  Examples of the use of the 'read_only'
34539     access mode is the argument to the 'puts' function, or the second
34540     and third arguments to the 'memcpy' function.
34541
34542          __attribute__ ((access (read_only, 1))) int puts (const char*);
34543          __attribute__ ((access (read_only, 2, 3))) void* memcpy (void*, const void*, size_t);
34544
34545     The 'read_write' access mode applies to arguments of pointer types
34546     without the 'const' qualifier.  It specifies that the pointer to
34547     which it applies is used to both read and write the referenced
34548     object.  Unless the argument specifying the size of the access
34549     denoted by SIZE-INDEX is zero, the object referenced by the pointer
34550     must be initialized.  An example of the use of the 'read_write'
34551     access mode is the first argument to the 'strcat' function.
34552
34553          __attribute__ ((access (read_write, 1), access (read_only, 2))) char* strcat (char*, const char*);
34554
34555     The 'write_only' access mode applies to arguments of pointer types
34556     without the 'const' qualifier.  It specifies that the pointer to
34557     which it applies is used to write to the referenced object but not
34558     read from it.  The object referenced by the pointer need not be
34559     initialized.  An example of the use of the 'write_only' access mode
34560     is the first argument to the 'strcpy' function, or the first two
34561     arguments to the 'fgets' function.
34562
34563          __attribute__ ((access (write_only, 1), access (read_only, 2))) char* strcpy (char*, const char*);
34564          __attribute__ ((access (write_only, 1, 2), access (read_write, 3))) int fgets (char*, int, FILE*);
34565
34566     The access mode 'none' specifies that the pointer to which it
34567     applies is not used to access the referenced object at all.  Unless
34568     the pointer is null the pointed-to object must exist and have at
34569     least the size as denoted by the SIZE-INDEX argument.  When the
34570     optional SIZE-INDEX argument is omitted for an argument of 'void*'
34571     type the actual pointer agument is ignored.  The referenced object
34572     need not be initialized.  The mode is intended to be used as a
34573     means to help validate the expected object size, for example in
34574     functions that call '__builtin_object_size'.  *Note Object Size
34575     Checking::.
34576
34577     Note that the 'access' attribute merely specifies how an object
34578     referenced by the pointer argument can be accessed; it does not
34579     imply that an access *will* happen.  Also, the 'access' attribute
34580     does not imply the attribute 'nonnull'; it may be appropriate to
34581     add both attributes at the declaration of a function that
34582     unconditionally manipulates a buffer via a pointer argument.  See
34583     the 'nonnull' attribute for more information and caveats.
34584
34585'alias ("TARGET")'
34586     The 'alias' attribute causes the declaration to be emitted as an
34587     alias for another symbol, which must have been previously declared
34588     with the same type, and for variables, also the same size and
34589     alignment.  Declaring an alias with a different type than the
34590     target is undefined and may be diagnosed.  As an example, the
34591     following declarations:
34592
34593          void __f () { /* Do something. */; }
34594          void f () __attribute__ ((weak, alias ("__f")));
34595
34596     define 'f' to be a weak alias for '__f'.  In C++, the mangled name
34597     for the target must be used.  It is an error if '__f' is not
34598     defined in the same translation unit.
34599
34600     This attribute requires assembler and object file support, and may
34601     not be available on all targets.
34602
34603'aligned'
34604'aligned (ALIGNMENT)'
34605     The 'aligned' attribute specifies a minimum alignment for the first
34606     instruction of the function, measured in bytes.  When specified,
34607     ALIGNMENT must be an integer constant power of 2.  Specifying no
34608     ALIGNMENT argument implies the ideal alignment for the target.  The
34609     '__alignof__' operator can be used to determine what that is (*note
34610     Alignment::).  The attribute has no effect when a definition for
34611     the function is not provided in the same translation unit.
34612
34613     The attribute cannot be used to decrease the alignment of a
34614     function previously declared with a more restrictive alignment;
34615     only to increase it.  Attempts to do otherwise are diagnosed.  Some
34616     targets specify a minimum default alignment for functions that is
34617     greater than 1.  On such targets, specifying a less restrictive
34618     alignment is silently ignored.  Using the attribute overrides the
34619     effect of the '-falign-functions' (*note Optimize Options::) option
34620     for this function.
34621
34622     Note that the effectiveness of 'aligned' attributes may be limited
34623     by inherent limitations in the system linker and/or object file
34624     format.  On some systems, the linker is only able to arrange for
34625     functions to be aligned up to a certain maximum alignment.  (For
34626     some linkers, the maximum supported alignment may be very very
34627     small.)  See your linker documentation for further information.
34628
34629     The 'aligned' attribute can also be used for variables and fields
34630     (*note Variable Attributes::.)
34631
34632'alloc_align (POSITION)'
34633     The 'alloc_align' attribute may be applied to a function that
34634     returns a pointer and takes at least one argument of an integer or
34635     enumerated type.  It indicates that the returned pointer is aligned
34636     on a boundary given by the function argument at POSITION.
34637     Meaningful alignments are powers of 2 greater than one.  GCC uses
34638     this information to improve pointer alignment analysis.
34639
34640     The function parameter denoting the allocated alignment is
34641     specified by one constant integer argument whose number is the
34642     argument of the attribute.  Argument numbering starts at one.
34643
34644     For instance,
34645
34646          void* my_memalign (size_t, size_t) __attribute__ ((alloc_align (1)));
34647
34648     declares that 'my_memalign' returns memory with minimum alignment
34649     given by parameter 1.
34650
34651'alloc_size (POSITION)'
34652'alloc_size (POSITION-1, POSITION-2)'
34653     The 'alloc_size' attribute may be applied to a function that
34654     returns a pointer and takes at least one argument of an integer or
34655     enumerated type.  It indicates that the returned pointer points to
34656     memory whose size is given by the function argument at POSITION-1,
34657     or by the product of the arguments at POSITION-1 and POSITION-2.
34658     Meaningful sizes are positive values less than 'PTRDIFF_MAX'.  GCC
34659     uses this information to improve the results of
34660     '__builtin_object_size'.
34661
34662     The function parameter(s) denoting the allocated size are specified
34663     by one or two integer arguments supplied to the attribute.  The
34664     allocated size is either the value of the single function argument
34665     specified or the product of the two function arguments specified.
34666     Argument numbering starts at one for ordinary functions, and at two
34667     for C++ non-static member functions.
34668
34669     For instance,
34670
34671          void* my_calloc (size_t, size_t) __attribute__ ((alloc_size (1, 2)));
34672          void* my_realloc (void*, size_t) __attribute__ ((alloc_size (2)));
34673
34674     declares that 'my_calloc' returns memory of the size given by the
34675     product of parameter 1 and 2 and that 'my_realloc' returns memory
34676     of the size given by parameter 2.
34677
34678'always_inline'
34679     Generally, functions are not inlined unless optimization is
34680     specified.  For functions declared inline, this attribute inlines
34681     the function independent of any restrictions that otherwise apply
34682     to inlining.  Failure to inline such a function is diagnosed as an
34683     error.  Note that if such a function is called indirectly the
34684     compiler may or may not inline it depending on optimization level
34685     and a failure to inline an indirect call may or may not be
34686     diagnosed.
34687
34688'artificial'
34689     This attribute is useful for small inline wrappers that if possible
34690     should appear during debugging as a unit.  Depending on the debug
34691     info format it either means marking the function as artificial or
34692     using the caller location for all instructions within the inlined
34693     body.
34694
34695'assume_aligned (ALIGNMENT)'
34696'assume_aligned (ALIGNMENT, OFFSET)'
34697     The 'assume_aligned' attribute may be applied to a function that
34698     returns a pointer.  It indicates that the returned pointer is
34699     aligned on a boundary given by ALIGNMENT.  If the attribute has two
34700     arguments, the second argument is misalignment OFFSET.  Meaningful
34701     values of ALIGNMENT are powers of 2 greater than one.  Meaningful
34702     values of OFFSET are greater than zero and less than ALIGNMENT.
34703
34704     For instance
34705
34706          void* my_alloc1 (size_t) __attribute__((assume_aligned (16)));
34707          void* my_alloc2 (size_t) __attribute__((assume_aligned (32, 8)));
34708
34709     declares that 'my_alloc1' returns 16-byte aligned pointers and that
34710     'my_alloc2' returns a pointer whose value modulo 32 is equal to 8.
34711
34712'cold'
34713     The 'cold' attribute on functions is used to inform the compiler
34714     that the function is unlikely to be executed.  The function is
34715     optimized for size rather than speed and on many targets it is
34716     placed into a special subsection of the text section so all cold
34717     functions appear close together, improving code locality of
34718     non-cold parts of program.  The paths leading to calls of cold
34719     functions within code are marked as unlikely by the branch
34720     prediction mechanism.  It is thus useful to mark functions used to
34721     handle unlikely conditions, such as 'perror', as cold to improve
34722     optimization of hot functions that do call marked functions in rare
34723     occasions.
34724
34725     When profile feedback is available, via '-fprofile-use', cold
34726     functions are automatically detected and this attribute is ignored.
34727
34728'const'
34729     Calls to functions whose return value is not affected by changes to
34730     the observable state of the program and that have no observable
34731     effects on such state other than to return a value may lend
34732     themselves to optimizations such as common subexpression
34733     elimination.  Declaring such functions with the 'const' attribute
34734     allows GCC to avoid emitting some calls in repeated invocations of
34735     the function with the same argument values.
34736
34737     For example,
34738
34739          int square (int) __attribute__ ((const));
34740
34741     tells GCC that subsequent calls to function 'square' with the same
34742     argument value can be replaced by the result of the first call
34743     regardless of the statements in between.
34744
34745     The 'const' attribute prohibits a function from reading objects
34746     that affect its return value between successive invocations.
34747     However, functions declared with the attribute can safely read
34748     objects that do not change their return value, such as non-volatile
34749     constants.
34750
34751     The 'const' attribute imposes greater restrictions on a function's
34752     definition than the similar 'pure' attribute.  Declaring the same
34753     function with both the 'const' and the 'pure' attribute is
34754     diagnosed.  Because a const function cannot have any observable
34755     side effects it does not make sense for it to return 'void'.
34756     Declaring such a function is diagnosed.
34757
34758     Note that a function that has pointer arguments and examines the
34759     data pointed to must _not_ be declared 'const' if the pointed-to
34760     data might change between successive invocations of the function.
34761     In general, since a function cannot distinguish data that might
34762     change from data that cannot, const functions should never take
34763     pointer or, in C++, reference arguments.  Likewise, a function that
34764     calls a non-const function usually must not be const itself.
34765
34766'constructor'
34767'destructor'
34768'constructor (PRIORITY)'
34769'destructor (PRIORITY)'
34770     The 'constructor' attribute causes the function to be called
34771     automatically before execution enters 'main ()'.  Similarly, the
34772     'destructor' attribute causes the function to be called
34773     automatically after 'main ()' completes or 'exit ()' is called.
34774     Functions with these attributes are useful for initializing data
34775     that is used implicitly during the execution of the program.
34776
34777     On some targets the attributes also accept an integer argument to
34778     specify a priority to control the order in which constructor and
34779     destructor functions are run.  A constructor with a smaller
34780     priority number runs before a constructor with a larger priority
34781     number; the opposite relationship holds for destructors.  Note that
34782     priorities 0-100 are reserved.  So, if you have a constructor that
34783     allocates a resource and a destructor that deallocates the same
34784     resource, both functions typically have the same priority.  The
34785     priorities for constructor and destructor functions are the same as
34786     those specified for namespace-scope C++ objects (*note C++
34787     Attributes::).  However, at present, the order in which
34788     constructors for C++ objects with static storage duration and
34789     functions decorated with attribute 'constructor' are invoked is
34790     unspecified.  In mixed declarations, attribute 'init_priority' can
34791     be used to impose a specific ordering.
34792
34793     Using the argument forms of the 'constructor' and 'destructor'
34794     attributes on targets where the feature is not supported is
34795     rejected with an error.
34796
34797'copy'
34798'copy (FUNCTION)'
34799     The 'copy' attribute applies the set of attributes with which
34800     FUNCTION has been declared to the declaration of the function to
34801     which the attribute is applied.  The attribute is designed for
34802     libraries that define aliases or function resolvers that are
34803     expected to specify the same set of attributes as their targets.
34804     The 'copy' attribute can be used with functions, variables, or
34805     types.  However, the kind of symbol to which the attribute is
34806     applied (either function or variable) must match the kind of symbol
34807     to which the argument refers.  The 'copy' attribute copies only
34808     syntactic and semantic attributes but not attributes that affect a
34809     symbol's linkage or visibility such as 'alias', 'visibility', or
34810     'weak'.  The 'deprecated' and 'target_clones' attribute are also
34811     not copied.  *Note Common Type Attributes::.  *Note Common Variable
34812     Attributes::.
34813
34814     For example, the STRONGALIAS macro below makes use of the 'alias'
34815     and 'copy' attributes to define an alias named ALLOC for function
34816     ALLOCATE declared with attributes ALLOC_SIZE, MALLOC, and NOTHROW.
34817     Thanks to the '__typeof__' operator the alias has the same type as
34818     the target function.  As a result of the 'copy' attribute the alias
34819     also shares the same attributes as the target.
34820
34821          #define StrongAlias(TargetFunc, AliasDecl)  \
34822            extern __typeof__ (TargetFunc) AliasDecl  \
34823              __attribute__ ((alias (#TargetFunc), copy (TargetFunc)));
34824
34825          extern __attribute__ ((alloc_size (1), malloc, nothrow))
34826            void* allocate (size_t);
34827          StrongAlias (allocate, alloc);
34828
34829'deprecated'
34830'deprecated (MSG)'
34831     The 'deprecated' attribute results in a warning if the function is
34832     used anywhere in the source file.  This is useful when identifying
34833     functions that are expected to be removed in a future version of a
34834     program.  The warning also includes the location of the declaration
34835     of the deprecated function, to enable users to easily find further
34836     information about why the function is deprecated, or what they
34837     should do instead.  Note that the warnings only occurs for uses:
34838
34839          int old_fn () __attribute__ ((deprecated));
34840          int old_fn ();
34841          int (*fn_ptr)() = old_fn;
34842
34843     results in a warning on line 3 but not line 2.  The optional MSG
34844     argument, which must be a string, is printed in the warning if
34845     present.
34846
34847     The 'deprecated' attribute can also be used for variables and types
34848     (*note Variable Attributes::, *note Type Attributes::.)
34849
34850     The message attached to the attribute is affected by the setting of
34851     the '-fmessage-length' option.
34852
34853'unavailable'
34854'unavailable (MSG)'
34855     The 'unavailable' attribute results in an error if the function is
34856     used anywhere in the source file.  This is useful when identifying
34857     functions that have been removed from a particular variation of an
34858     interface.  Other than emitting an error rather than a warning, the
34859     'unavailable' attribute behaves in the same manner as 'deprecated'.
34860
34861     The 'unavailable' attribute can also be used for variables and
34862     types (*note Variable Attributes::, *note Type Attributes::.)
34863
34864'error ("MESSAGE")'
34865'warning ("MESSAGE")'
34866     If the 'error' or 'warning' attribute is used on a function
34867     declaration and a call to such a function is not eliminated through
34868     dead code elimination or other optimizations, an error or warning
34869     (respectively) that includes MESSAGE is diagnosed.  This is useful
34870     for compile-time checking, especially together with
34871     '__builtin_constant_p' and inline functions where checking the
34872     inline function arguments is not possible through 'extern char
34873     [(condition) ? 1 : -1];' tricks.
34874
34875     While it is possible to leave the function undefined and thus
34876     invoke a link failure (to define the function with a message in
34877     '.gnu.warning*' section), when using these attributes the problem
34878     is diagnosed earlier and with exact location of the call even in
34879     presence of inline functions or when not emitting debugging
34880     information.
34881
34882'externally_visible'
34883     This attribute, attached to a global variable or function,
34884     nullifies the effect of the '-fwhole-program' command-line option,
34885     so the object remains visible outside the current compilation unit.
34886
34887     If '-fwhole-program' is used together with '-flto' and 'gold' is
34888     used as the linker plugin, 'externally_visible' attributes are
34889     automatically added to functions (not variable yet due to a current
34890     'gold' issue) that are accessed outside of LTO objects according to
34891     resolution file produced by 'gold'.  For other linkers that cannot
34892     generate resolution file, explicit 'externally_visible' attributes
34893     are still necessary.
34894
34895'flatten'
34896     Generally, inlining into a function is limited.  For a function
34897     marked with this attribute, every call inside this function is
34898     inlined, if possible.  Functions declared with attribute 'noinline'
34899     and similar are not inlined.  Whether the function itself is
34900     considered for inlining depends on its size and the current
34901     inlining parameters.
34902
34903'format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
34904     The 'format' attribute specifies that a function takes 'printf',
34905     'scanf', 'strftime' or 'strfmon' style arguments that should be
34906     type-checked against a format string.  For example, the
34907     declaration:
34908
34909          extern int
34910          my_printf (void *my_object, const char *my_format, ...)
34911                __attribute__ ((format (printf, 2, 3)));
34912
34913     causes the compiler to check the arguments in calls to 'my_printf'
34914     for consistency with the 'printf' style format string argument
34915     'my_format'.
34916
34917     The parameter ARCHETYPE determines how the format string is
34918     interpreted, and should be 'printf', 'scanf', 'strftime',
34919     'gnu_printf', 'gnu_scanf', 'gnu_strftime' or 'strfmon'.  (You can
34920     also use '__printf__', '__scanf__', '__strftime__' or
34921     '__strfmon__'.)  On MinGW targets, 'ms_printf', 'ms_scanf', and
34922     'ms_strftime' are also present.  ARCHETYPE values such as 'printf'
34923     refer to the formats accepted by the system's C runtime library,
34924     while values prefixed with 'gnu_' always refer to the formats
34925     accepted by the GNU C Library.  On Microsoft Windows targets,
34926     values prefixed with 'ms_' refer to the formats accepted by the
34927     'msvcrt.dll' library.  The parameter STRING-INDEX specifies which
34928     argument is the format string argument (starting from 1), while
34929     FIRST-TO-CHECK is the number of the first argument to check against
34930     the format string.  For functions where the arguments are not
34931     available to be checked (such as 'vprintf'), specify the third
34932     parameter as zero.  In this case the compiler only checks the
34933     format string for consistency.  For 'strftime' formats, the third
34934     parameter is required to be zero.  Since non-static C++ methods
34935     have an implicit 'this' argument, the arguments of such methods
34936     should be counted from two, not one, when giving values for
34937     STRING-INDEX and FIRST-TO-CHECK.
34938
34939     In the example above, the format string ('my_format') is the second
34940     argument of the function 'my_print', and the arguments to check
34941     start with the third argument, so the correct parameters for the
34942     format attribute are 2 and 3.
34943
34944     The 'format' attribute allows you to identify your own functions
34945     that take format strings as arguments, so that GCC can check the
34946     calls to these functions for errors.  The compiler always (unless
34947     '-ffreestanding' or '-fno-builtin' is used) checks formats for the
34948     standard library functions 'printf', 'fprintf', 'sprintf', 'scanf',
34949     'fscanf', 'sscanf', 'strftime', 'vprintf', 'vfprintf' and
34950     'vsprintf' whenever such warnings are requested (using '-Wformat'),
34951     so there is no need to modify the header file 'stdio.h'.  In C99
34952     mode, the functions 'snprintf', 'vsnprintf', 'vscanf', 'vfscanf'
34953     and 'vsscanf' are also checked.  Except in strictly conforming C
34954     standard modes, the X/Open function 'strfmon' is also checked as
34955     are 'printf_unlocked' and 'fprintf_unlocked'.  *Note Options
34956     Controlling C Dialect: C Dialect Options.
34957
34958     For Objective-C dialects, 'NSString' (or '__NSString__') is
34959     recognized in the same context.  Declarations including these
34960     format attributes are parsed for correct syntax, however the result
34961     of checking of such format strings is not yet defined, and is not
34962     carried out by this version of the compiler.
34963
34964     The target may also provide additional types of format checks.
34965     *Note Format Checks Specific to Particular Target Machines: Target
34966     Format Checks.
34967
34968'format_arg (STRING-INDEX)'
34969     The 'format_arg' attribute specifies that a function takes one or
34970     more format strings for a 'printf', 'scanf', 'strftime' or
34971     'strfmon' style function and modifies it (for example, to translate
34972     it into another language), so the result can be passed to a
34973     'printf', 'scanf', 'strftime' or 'strfmon' style function (with the
34974     remaining arguments to the format function the same as they would
34975     have been for the unmodified string).  Multiple 'format_arg'
34976     attributes may be applied to the same function, each designating a
34977     distinct parameter as a format string.  For example, the
34978     declaration:
34979
34980          extern char *
34981          my_dgettext (char *my_domain, const char *my_format)
34982                __attribute__ ((format_arg (2)));
34983
34984     causes the compiler to check the arguments in calls to a 'printf',
34985     'scanf', 'strftime' or 'strfmon' type function, whose format string
34986     argument is a call to the 'my_dgettext' function, for consistency
34987     with the format string argument 'my_format'.  If the 'format_arg'
34988     attribute had not been specified, all the compiler could tell in
34989     such calls to format functions would be that the format string
34990     argument is not constant; this would generate a warning when
34991     '-Wformat-nonliteral' is used, but the calls could not be checked
34992     without the attribute.
34993
34994     In calls to a function declared with more than one 'format_arg'
34995     attribute, each with a distinct argument value, the corresponding
34996     actual function arguments are checked against all format strings
34997     designated by the attributes.  This capability is designed to
34998     support the GNU 'ngettext' family of functions.
34999
35000     The parameter STRING-INDEX specifies which argument is the format
35001     string argument (starting from one).  Since non-static C++ methods
35002     have an implicit 'this' argument, the arguments of such methods
35003     should be counted from two.
35004
35005     The 'format_arg' attribute allows you to identify your own
35006     functions that modify format strings, so that GCC can check the
35007     calls to 'printf', 'scanf', 'strftime' or 'strfmon' type function
35008     whose operands are a call to one of your own function.  The
35009     compiler always treats 'gettext', 'dgettext', and 'dcgettext' in
35010     this manner except when strict ISO C support is requested by
35011     '-ansi' or an appropriate '-std' option, or '-ffreestanding' or
35012     '-fno-builtin' is used.  *Note Options Controlling C Dialect: C
35013     Dialect Options.
35014
35015     For Objective-C dialects, the 'format-arg' attribute may refer to
35016     an 'NSString' reference for compatibility with the 'format'
35017     attribute above.
35018
35019     The target may also allow additional types in 'format-arg'
35020     attributes.  *Note Format Checks Specific to Particular Target
35021     Machines: Target Format Checks.
35022
35023'gnu_inline'
35024     This attribute should be used with a function that is also declared
35025     with the 'inline' keyword.  It directs GCC to treat the function as
35026     if it were defined in gnu90 mode even when compiling in C99 or
35027     gnu99 mode.
35028
35029     If the function is declared 'extern', then this definition of the
35030     function is used only for inlining.  In no case is the function
35031     compiled as a standalone function, not even if you take its address
35032     explicitly.  Such an address becomes an external reference, as if
35033     you had only declared the function, and had not defined it.  This
35034     has almost the effect of a macro.  The way to use this is to put a
35035     function definition in a header file with this attribute, and put
35036     another copy of the function, without 'extern', in a library file.
35037     The definition in the header file causes most calls to the function
35038     to be inlined.  If any uses of the function remain, they refer to
35039     the single copy in the library.  Note that the two definitions of
35040     the functions need not be precisely the same, although if they do
35041     not have the same effect your program may behave oddly.
35042
35043     In C, if the function is neither 'extern' nor 'static', then the
35044     function is compiled as a standalone function, as well as being
35045     inlined where possible.
35046
35047     This is how GCC traditionally handled functions declared 'inline'.
35048     Since ISO C99 specifies a different semantics for 'inline', this
35049     function attribute is provided as a transition measure and as a
35050     useful feature in its own right.  This attribute is available in
35051     GCC 4.1.3 and later.  It is available if either of the preprocessor
35052     macros '__GNUC_GNU_INLINE__' or '__GNUC_STDC_INLINE__' are defined.
35053     *Note An Inline Function is As Fast As a Macro: Inline.
35054
35055     In C++, this attribute does not depend on 'extern' in any way, but
35056     it still requires the 'inline' keyword to enable its special
35057     behavior.
35058
35059'hot'
35060     The 'hot' attribute on a function is used to inform the compiler
35061     that the function is a hot spot of the compiled program.  The
35062     function is optimized more aggressively and on many targets it is
35063     placed into a special subsection of the text section so all hot
35064     functions appear close together, improving locality.
35065
35066     When profile feedback is available, via '-fprofile-use', hot
35067     functions are automatically detected and this attribute is ignored.
35068
35069'ifunc ("RESOLVER")'
35070     The 'ifunc' attribute is used to mark a function as an indirect
35071     function using the STT_GNU_IFUNC symbol type extension to the ELF
35072     standard.  This allows the resolution of the symbol value to be
35073     determined dynamically at load time, and an optimized version of
35074     the routine to be selected for the particular processor or other
35075     system characteristics determined then.  To use this attribute,
35076     first define the implementation functions available, and a resolver
35077     function that returns a pointer to the selected implementation
35078     function.  The implementation functions' declarations must match
35079     the API of the function being implemented.  The resolver should be
35080     declared to be a function taking no arguments and returning a
35081     pointer to a function of the same type as the implementation.  For
35082     example:
35083
35084          void *my_memcpy (void *dst, const void *src, size_t len)
35085          {
35086            ...
35087            return dst;
35088          }
35089
35090          static void * (*resolve_memcpy (void))(void *, const void *, size_t)
35091          {
35092            return my_memcpy; // we will just always select this routine
35093          }
35094
35095     The exported header file declaring the function the user calls
35096     would contain:
35097
35098          extern void *memcpy (void *, const void *, size_t);
35099
35100     allowing the user to call 'memcpy' as a regular function, unaware
35101     of the actual implementation.  Finally, the indirect function needs
35102     to be defined in the same translation unit as the resolver
35103     function:
35104
35105          void *memcpy (void *, const void *, size_t)
35106               __attribute__ ((ifunc ("resolve_memcpy")));
35107
35108     In C++, the 'ifunc' attribute takes a string that is the mangled
35109     name of the resolver function.  A C++ resolver for a non-static
35110     member function of class 'C' should be declared to return a pointer
35111     to a non-member function taking pointer to 'C' as the first
35112     argument, followed by the same arguments as of the implementation
35113     function.  G++ checks the signatures of the two functions and
35114     issues a '-Wattribute-alias' warning for mismatches.  To suppress a
35115     warning for the necessary cast from a pointer to the implementation
35116     member function to the type of the corresponding non-member
35117     function use the '-Wno-pmf-conversions' option.  For example:
35118
35119          class S
35120          {
35121          private:
35122            int debug_impl (int);
35123            int optimized_impl (int);
35124
35125            typedef int Func (S*, int);
35126
35127            static Func* resolver ();
35128          public:
35129
35130            int interface (int);
35131          };
35132
35133          int S::debug_impl (int) { /* ... */ }
35134          int S::optimized_impl (int) { /* ... */ }
35135
35136          S::Func* S::resolver ()
35137          {
35138            int (S::*pimpl) (int)
35139              = getenv ("DEBUG") ? &S::debug_impl : &S::optimized_impl;
35140
35141            // Cast triggers -Wno-pmf-conversions.
35142            return reinterpret_cast<Func*>(pimpl);
35143          }
35144
35145          int S::interface (int) __attribute__ ((ifunc ("_ZN1S8resolverEv")));
35146
35147     Indirect functions cannot be weak.  Binutils version 2.20.1 or
35148     higher and GNU C Library version 2.11.1 are required to use this
35149     feature.
35150
35151'interrupt'
35152'interrupt_handler'
35153     Many GCC back ends support attributes to indicate that a function
35154     is an interrupt handler, which tells the compiler to generate
35155     function entry and exit sequences that differ from those from
35156     regular functions.  The exact syntax and behavior are
35157     target-specific; refer to the following subsections for details.
35158
35159'leaf'
35160     Calls to external functions with this attribute must return to the
35161     current compilation unit only by return or by exception handling.
35162     In particular, a leaf function is not allowed to invoke callback
35163     functions passed to it from the current compilation unit, directly
35164     call functions exported by the unit, or 'longjmp' into the unit.
35165     Leaf functions might still call functions from other compilation
35166     units and thus they are not necessarily leaf in the sense that they
35167     contain no function calls at all.
35168
35169     The attribute is intended for library functions to improve dataflow
35170     analysis.  The compiler takes the hint that any data not escaping
35171     the current compilation unit cannot be used or modified by the leaf
35172     function.  For example, the 'sin' function is a leaf function, but
35173     'qsort' is not.
35174
35175     Note that leaf functions might indirectly run a signal handler
35176     defined in the current compilation unit that uses static variables.
35177     Similarly, when lazy symbol resolution is in effect, leaf functions
35178     might invoke indirect functions whose resolver function or
35179     implementation function is defined in the current compilation unit
35180     and uses static variables.  There is no standard-compliant way to
35181     write such a signal handler, resolver function, or implementation
35182     function, and the best that you can do is to remove the 'leaf'
35183     attribute or mark all such static variables 'volatile'.  Lastly,
35184     for ELF-based systems that support symbol interposition, care
35185     should be taken that functions defined in the current compilation
35186     unit do not unexpectedly interpose other symbols based on the
35187     defined standards mode and defined feature test macros; otherwise
35188     an inadvertent callback would be added.
35189
35190     The attribute has no effect on functions defined within the current
35191     compilation unit.  This is to allow easy merging of multiple
35192     compilation units into one, for example, by using the link-time
35193     optimization.  For this reason the attribute is not allowed on
35194     types to annotate indirect calls.
35195
35196'malloc'
35197'malloc (DEALLOCATOR)'
35198'malloc (DEALLOCATOR, PTR-INDEX)'
35199     Attribute 'malloc' indicates that a function is 'malloc'-like,
35200     i.e., that the pointer P returned by the function cannot alias any
35201     other pointer valid when the function returns, and moreover no
35202     pointers to valid objects occur in any storage addressed by P.  In
35203     addition, the GCC predicts that a function with the attribute
35204     returns non-null in most cases.
35205
35206     Independently, the form of the attribute with one or two arguments
35207     associates 'deallocator' as a suitable deallocation function for
35208     pointers returned from the 'malloc'-like function.  PTR-INDEX
35209     denotes the positional argument to which when the pointer is passed
35210     in calls to 'deallocator' has the effect of deallocating it.
35211
35212     Using the attribute with no arguments is designed to improve
35213     optimization by relying on the aliasing property it implies.
35214     Functions like 'malloc' and 'calloc' have this property because
35215     they return a pointer to uninitialized or zeroed-out, newly
35216     obtained storage.  However, functions like 'realloc' do not have
35217     this property, as they may return pointers to storage containing
35218     pointers to existing objects.  Additionally, since all such
35219     functions are assumed to return null only infrequently, callers can
35220     be optimized based on that assumption.
35221
35222     Associating a function with a DEALLOCATOR helps detect calls to
35223     mismatched allocation and deallocation functions and diagnose them
35224     under the control of options such as '-Wmismatched-dealloc'.  It
35225     also makes it possible to diagnose attempts to deallocate objects
35226     that were not allocated dynamically, by '-Wfree-nonheap-object'.
35227     To indicate that an allocation function both satisifies the
35228     nonaliasing property and has a deallocator associated with it, both
35229     the plain form of the attribute and the one with the DEALLOCATOR
35230     argument must be used.  The same function can be both an allocator
35231     and a deallocator.  Since inlining one of the associated functions
35232     but not the other could result in apparent mismatches, this form of
35233     attribute 'malloc' is not accepted on inline functions.  For the
35234     same reason, using the attribute prevents both the allocation and
35235     deallocation functions from being expanded inline.
35236
35237     For example, besides stating that the functions return pointers
35238     that do not alias any others, the following declarations make
35239     'fclose' a suitable deallocator for pointers returned from all
35240     functions except 'popen', and 'pclose' as the only suitable
35241     deallocator for pointers returned from 'popen'.  The deallocator
35242     functions must be declared before they can be referenced in the
35243     attribute.
35244
35245          int fclose (FILE*);
35246          int pclose (FILE*);
35247
35248          __attribute__ ((malloc, malloc (fclose, 1)))
35249            FILE* fdopen (int, const char*);
35250          __attribute__ ((malloc, malloc (fclose, 1)))
35251            FILE* fopen (const char*, const char*);
35252          __attribute__ ((malloc, malloc (fclose, 1)))
35253            FILE* fmemopen(void *, size_t, const char *);
35254          __attribute__ ((malloc, malloc (pclose, 1)))
35255            FILE* popen (const char*, const char*);
35256          __attribute__ ((malloc, malloc (fclose, 1)))
35257            FILE* tmpfile (void);
35258
35259     The warnings guarded by '-fanalyzer' respect allocation and
35260     deallocation pairs marked with the 'malloc'.  In particular:
35261
35262        * The analyzer will emit a '-Wanalyzer-mismatching-deallocation'
35263          diagnostic if there is an execution path in which the result
35264          of an allocation call is passed to a different deallocator.
35265
35266        * The analyzer will emit a '-Wanalyzer-double-free' diagnostic
35267          if there is an execution path in which a value is passed more
35268          than once to a deallocation call.
35269
35270        * The analyzer will consider the possibility that an allocation
35271          function could fail and return NULL. It will emit
35272          '-Wanalyzer-possible-null-dereference' and
35273          '-Wanalyzer-possible-null-argument' diagnostics if there are
35274          execution paths in which an unchecked result of an allocation
35275          call is dereferenced or passed to a function requiring a
35276          non-null argument.  If the allocator always returns non-null,
35277          use '__attribute__ ((returns_nonnull))' to suppress these
35278          warnings.  For example:
35279               char *xstrdup (const char *)
35280                 __attribute__((malloc (free), returns_nonnull));
35281
35282        * The analyzer will emit a '-Wanalyzer-use-after-free'
35283          diagnostic if there is an execution path in which the memory
35284          passed by pointer to a deallocation call is used after the
35285          deallocation.
35286
35287        * The analyzer will emit a '-Wanalyzer-malloc-leak' diagnostic
35288          if there is an execution path in which the result of an
35289          allocation call is leaked (without being passed to the
35290          deallocation function).
35291
35292        * The analyzer will emit a '-Wanalyzer-free-of-non-heap'
35293          diagnostic if a deallocation function is used on a global or
35294          on-stack variable.
35295
35296     The analyzer assumes that deallocators can gracefully handle the
35297     'NULL' pointer.  If this is not the case, the deallocator can be
35298     marked with '__attribute__((nonnull))' so that '-fanalyzer' can
35299     emit a '-Wanalyzer-possible-null-argument' diagnostic for code
35300     paths in which the deallocator is called with NULL.
35301
35302'no_icf'
35303     This function attribute prevents a functions from being merged with
35304     another semantically equivalent function.
35305
35306'no_instrument_function'
35307     If any of '-finstrument-functions', '-p', or '-pg' are given,
35308     profiling function calls are generated at entry and exit of most
35309     user-compiled functions.  Functions with this attribute are not so
35310     instrumented.
35311
35312'no_profile_instrument_function'
35313     The 'no_profile_instrument_function' attribute on functions is used
35314     to inform the compiler that it should not process any profile
35315     feedback based optimization code instrumentation.
35316
35317'no_reorder'
35318     Do not reorder functions or variables marked 'no_reorder' against
35319     each other or top level assembler statements the executable.  The
35320     actual order in the program will depend on the linker command line.
35321     Static variables marked like this are also not removed.  This has a
35322     similar effect as the '-fno-toplevel-reorder' option, but only
35323     applies to the marked symbols.
35324
35325'no_sanitize ("SANITIZE_OPTION")'
35326     The 'no_sanitize' attribute on functions is used to inform the
35327     compiler that it should not do sanitization of any option mentioned
35328     in SANITIZE_OPTION.  A list of values acceptable by the
35329     '-fsanitize' option can be provided.
35330
35331          void __attribute__ ((no_sanitize ("alignment", "object-size")))
35332          f () { /* Do something. */; }
35333          void __attribute__ ((no_sanitize ("alignment,object-size")))
35334          g () { /* Do something. */; }
35335
35336'no_sanitize_address'
35337'no_address_safety_analysis'
35338     The 'no_sanitize_address' attribute on functions is used to inform
35339     the compiler that it should not instrument memory accesses in the
35340     function when compiling with the '-fsanitize=address' option.  The
35341     'no_address_safety_analysis' is a deprecated alias of the
35342     'no_sanitize_address' attribute, new code should use
35343     'no_sanitize_address'.
35344
35345'no_sanitize_thread'
35346     The 'no_sanitize_thread' attribute on functions is used to inform
35347     the compiler that it should not instrument memory accesses in the
35348     function when compiling with the '-fsanitize=thread' option.
35349
35350'no_sanitize_undefined'
35351     The 'no_sanitize_undefined' attribute on functions is used to
35352     inform the compiler that it should not check for undefined behavior
35353     in the function when compiling with the '-fsanitize=undefined'
35354     option.
35355
35356'no_sanitize_coverage'
35357     The 'no_sanitize_coverage' attribute on functions is used to inform
35358     the compiler that it should not do coverage-guided fuzzing code
35359     instrumentation ('-fsanitize-coverage').
35360
35361'no_split_stack'
35362     If '-fsplit-stack' is given, functions have a small prologue which
35363     decides whether to split the stack.  Functions with the
35364     'no_split_stack' attribute do not have that prologue, and thus may
35365     run with only a small amount of stack space available.
35366
35367'no_stack_limit'
35368     This attribute locally overrides the '-fstack-limit-register' and
35369     '-fstack-limit-symbol' command-line options; it has the effect of
35370     disabling stack limit checking in the function it applies to.
35371
35372'noclone'
35373     This function attribute prevents a function from being considered
35374     for cloning--a mechanism that produces specialized copies of
35375     functions and which is (currently) performed by interprocedural
35376     constant propagation.
35377
35378'noinline'
35379     This function attribute prevents a function from being considered
35380     for inlining.  If the function does not have side effects, there
35381     are optimizations other than inlining that cause function calls to
35382     be optimized away, although the function call is live.  To keep
35383     such calls from being optimized away, put
35384          asm ("");
35385
35386     (*note Extended Asm::) in the called function, to serve as a
35387     special side effect.
35388
35389'noipa'
35390     Disable interprocedural optimizations between the function with
35391     this attribute and its callers, as if the body of the function is
35392     not available when optimizing callers and the callers are
35393     unavailable when optimizing the body.  This attribute implies
35394     'noinline', 'noclone' and 'no_icf' attributes.  However, this
35395     attribute is not equivalent to a combination of other attributes,
35396     because its purpose is to suppress existing and future
35397     optimizations employing interprocedural analysis, including those
35398     that do not have an attribute suitable for disabling them
35399     individually.  This attribute is supported mainly for the purpose
35400     of testing the compiler.
35401
35402'nonnull'
35403'nonnull (ARG-INDEX, ...)'
35404     The 'nonnull' attribute may be applied to a function that takes at
35405     least one argument of a pointer type.  It indicates that the
35406     referenced arguments must be non-null pointers.  For instance, the
35407     declaration:
35408
35409          extern void *
35410          my_memcpy (void *dest, const void *src, size_t len)
35411                  __attribute__((nonnull (1, 2)));
35412
35413     informs the compiler that, in calls to 'my_memcpy', arguments DEST
35414     and SRC must be non-null.
35415
35416     The attribute has an effect both on functions calls and function
35417     definitions.
35418
35419     For function calls:
35420        * If the compiler determines that a null pointer is passed in an
35421          argument slot marked as non-null, and the '-Wnonnull' option
35422          is enabled, a warning is issued.  *Note Warning Options::.
35423        * The '-fisolate-erroneous-paths-attribute' option can be
35424          specified to have GCC transform calls with null arguments to
35425          non-null functions into traps.  *Note Optimize Options::.
35426        * The compiler may also perform optimizations based on the
35427          knowledge that certain function arguments cannot be null.
35428          These optimizations can be disabled by the
35429          '-fno-delete-null-pointer-checks' option.  *Note Optimize
35430          Options::.
35431
35432     For function definitions:
35433        * If the compiler determines that a function parameter that is
35434          marked with nonnull is compared with null, and
35435          '-Wnonnull-compare' option is enabled, a warning is issued.
35436          *Note Warning Options::.
35437        * The compiler may also perform optimizations based on the
35438          knowledge that 'nonnul' parameters cannot be null.  This can
35439          currently not be disabled other than by removing the nonnull
35440          attribute.
35441
35442     If no ARG-INDEX is given to the 'nonnull' attribute, all pointer
35443     arguments are marked as non-null.  To illustrate, the following
35444     declaration is equivalent to the previous example:
35445
35446          extern void *
35447          my_memcpy (void *dest, const void *src, size_t len)
35448                  __attribute__((nonnull));
35449
35450'noplt'
35451     The 'noplt' attribute is the counterpart to option '-fno-plt'.
35452     Calls to functions marked with this attribute in
35453     position-independent code do not use the PLT.
35454
35455          /* Externally defined function foo.  */
35456          int foo () __attribute__ ((noplt));
35457
35458          int
35459          main (/* ... */)
35460          {
35461            /* ... */
35462            foo ();
35463            /* ... */
35464          }
35465
35466     The 'noplt' attribute on function 'foo' tells the compiler to
35467     assume that the function 'foo' is externally defined and that the
35468     call to 'foo' must avoid the PLT in position-independent code.
35469
35470     In position-dependent code, a few targets also convert calls to
35471     functions that are marked to not use the PLT to use the GOT
35472     instead.
35473
35474'noreturn'
35475     A few standard library functions, such as 'abort' and 'exit',
35476     cannot return.  GCC knows this automatically.  Some programs define
35477     their own functions that never return.  You can declare them
35478     'noreturn' to tell the compiler this fact.  For example,
35479
35480          void fatal () __attribute__ ((noreturn));
35481
35482          void
35483          fatal (/* ... */)
35484          {
35485            /* ... */ /* Print error message. */ /* ... */
35486            exit (1);
35487          }
35488
35489     The 'noreturn' keyword tells the compiler to assume that 'fatal'
35490     cannot return.  It can then optimize without regard to what would
35491     happen if 'fatal' ever did return.  This makes slightly better
35492     code.  More importantly, it helps avoid spurious warnings of
35493     uninitialized variables.
35494
35495     The 'noreturn' keyword does not affect the exceptional path when
35496     that applies: a 'noreturn'-marked function may still return to the
35497     caller by throwing an exception or calling 'longjmp'.
35498
35499     In order to preserve backtraces, GCC will never turn calls to
35500     'noreturn' functions into tail calls.
35501
35502     Do not assume that registers saved by the calling function are
35503     restored before calling the 'noreturn' function.
35504
35505     It does not make sense for a 'noreturn' function to have a return
35506     type other than 'void'.
35507
35508'nothrow'
35509     The 'nothrow' attribute is used to inform the compiler that a
35510     function cannot throw an exception.  For example, most functions in
35511     the standard C library can be guaranteed not to throw an exception
35512     with the notable exceptions of 'qsort' and 'bsearch' that take
35513     function pointer arguments.
35514
35515'optimize (LEVEL, ...)'
35516'optimize (STRING, ...)'
35517     The 'optimize' attribute is used to specify that a function is to
35518     be compiled with different optimization options than specified on
35519     the command line.  The optimize attribute arguments of a function
35520     behave behave as if appended to the command-line.
35521
35522     Valid arguments are constant non-negative integers and strings.
35523     Each numeric argument specifies an optimization LEVEL.  Each STRING
35524     argument consists of one or more comma-separated substrings.  Each
35525     substring that begins with the letter 'O' refers to an optimization
35526     option such as '-O0' or '-Os'.  Other substrings are taken as
35527     suffixes to the '-f' prefix jointly forming the name of an
35528     optimization option.  *Note Optimize Options::.
35529
35530     '#pragma GCC optimize' can be used to set optimization options for
35531     more than one function.  *Note Function Specific Option Pragmas::,
35532     for details about the pragma.
35533
35534     Providing multiple strings as arguments separated by commas to
35535     specify multiple options is equivalent to separating the option
35536     suffixes with a comma (',') within a single string.  Spaces are not
35537     permitted within the strings.
35538
35539     Not every optimization option that starts with the -F prefix
35540     specified by the attribute necessarily has an effect on the
35541     function.  The 'optimize' attribute should be used for debugging
35542     purposes only.  It is not suitable in production code.
35543
35544'patchable_function_entry'
35545     In case the target's text segment can be made writable at run time
35546     by any means, padding the function entry with a number of NOPs can
35547     be used to provide a universal tool for instrumentation.
35548
35549     The 'patchable_function_entry' function attribute can be used to
35550     change the number of NOPs to any desired value.  The two-value
35551     syntax is the same as for the command-line switch
35552     '-fpatchable-function-entry=N,M', generating N NOPs, with the
35553     function entry point before the Mth NOP instruction.  M defaults to
35554     0 if omitted e.g. function entry point is before the first NOP.
35555
35556     If patchable function entries are enabled globally using the
35557     command-line option '-fpatchable-function-entry=N,M', then you must
35558     disable instrumentation on all functions that are part of the
35559     instrumentation framework with the attribute
35560     'patchable_function_entry (0)' to prevent recursion.
35561
35562'pure'
35563
35564     Calls to functions that have no observable effects on the state of
35565     the program other than to return a value may lend themselves to
35566     optimizations such as common subexpression elimination.  Declaring
35567     such functions with the 'pure' attribute allows GCC to avoid
35568     emitting some calls in repeated invocations of the function with
35569     the same argument values.
35570
35571     The 'pure' attribute prohibits a function from modifying the state
35572     of the program that is observable by means other than inspecting
35573     the function's return value.  However, functions declared with the
35574     'pure' attribute can safely read any non-volatile objects, and
35575     modify the value of objects in a way that does not affect their
35576     return value or the observable state of the program.
35577
35578     For example,
35579
35580          int hash (char *) __attribute__ ((pure));
35581
35582     tells GCC that subsequent calls to the function 'hash' with the
35583     same string can be replaced by the result of the first call
35584     provided the state of the program observable by 'hash', including
35585     the contents of the array itself, does not change in between.  Even
35586     though 'hash' takes a non-const pointer argument it must not modify
35587     the array it points to, or any other object whose value the rest of
35588     the program may depend on.  However, the caller may safely change
35589     the contents of the array between successive calls to the function
35590     (doing so disables the optimization).  The restriction also applies
35591     to member objects referenced by the 'this' pointer in C++
35592     non-static member functions.
35593
35594     Some common examples of pure functions are 'strlen' or 'memcmp'.
35595     Interesting non-pure functions are functions with infinite loops or
35596     those depending on volatile memory or other system resource, that
35597     may change between consecutive calls (such as the standard C 'feof'
35598     function in a multithreading environment).
35599
35600     The 'pure' attribute imposes similar but looser restrictions on a
35601     function's definition than the 'const' attribute: 'pure' allows the
35602     function to read any non-volatile memory, even if it changes in
35603     between successive invocations of the function.  Declaring the same
35604     function with both the 'pure' and the 'const' attribute is
35605     diagnosed.  Because a pure function cannot have any observable side
35606     effects it does not make sense for such a function to return
35607     'void'.  Declaring such a function is diagnosed.
35608
35609'returns_nonnull'
35610     The 'returns_nonnull' attribute specifies that the function return
35611     value should be a non-null pointer.  For instance, the declaration:
35612
35613          extern void *
35614          mymalloc (size_t len) __attribute__((returns_nonnull));
35615
35616     lets the compiler optimize callers based on the knowledge that the
35617     return value will never be null.
35618
35619'returns_twice'
35620     The 'returns_twice' attribute tells the compiler that a function
35621     may return more than one time.  The compiler ensures that all
35622     registers are dead before calling such a function and emits a
35623     warning about the variables that may be clobbered after the second
35624     return from the function.  Examples of such functions are 'setjmp'
35625     and 'vfork'.  The 'longjmp'-like counterpart of such function, if
35626     any, might need to be marked with the 'noreturn' attribute.
35627
35628'section ("SECTION-NAME")'
35629     Normally, the compiler places the code it generates in the 'text'
35630     section.  Sometimes, however, you need additional sections, or you
35631     need certain particular functions to appear in special sections.
35632     The 'section' attribute specifies that a function lives in a
35633     particular section.  For example, the declaration:
35634
35635          extern void foobar (void) __attribute__ ((section ("bar")));
35636
35637     puts the function 'foobar' in the 'bar' section.
35638
35639     Some file formats do not support arbitrary sections so the
35640     'section' attribute is not available on all platforms.  If you need
35641     to map the entire contents of a module to a particular section,
35642     consider using the facilities of the linker instead.
35643
35644'sentinel'
35645'sentinel (POSITION)'
35646     This function attribute indicates that an argument in a call to the
35647     function is expected to be an explicit 'NULL'.  The attribute is
35648     only valid on variadic functions.  By default, the sentinel is
35649     expected to be the last argument of the function call.  If the
35650     optional POSITION argument is specified to the attribute, the
35651     sentinel must be located at POSITION counting backwards from the
35652     end of the argument list.
35653
35654          __attribute__ ((sentinel))
35655          is equivalent to
35656          __attribute__ ((sentinel(0)))
35657
35658     The attribute is automatically set with a position of 0 for the
35659     built-in functions 'execl' and 'execlp'.  The built-in function
35660     'execle' has the attribute set with a position of 1.
35661
35662     A valid 'NULL' in this context is defined as zero with any object
35663     pointer type.  If your system defines the 'NULL' macro with an
35664     integer type then you need to add an explicit cast.  During
35665     installation GCC replaces the system '<stddef.h>' header with a
35666     copy that redefines NULL appropriately.
35667
35668     The warnings for missing or incorrect sentinels are enabled with
35669     '-Wformat'.
35670
35671'simd'
35672'simd("MASK")'
35673     This attribute enables creation of one or more function versions
35674     that can process multiple arguments using SIMD instructions from a
35675     single invocation.  Specifying this attribute allows compiler to
35676     assume that such versions are available at link time (provided in
35677     the same or another translation unit).  Generated versions are
35678     target-dependent and described in the corresponding Vector ABI
35679     document.  For x86_64 target this document can be found
35680     here (https://sourceware.org/glibc/wiki/libmvec?action=AttachFile&do=view&target=VectorABI.txt).
35681
35682     The optional argument MASK may have the value 'notinbranch' or
35683     'inbranch', and instructs the compiler to generate non-masked or
35684     masked clones correspondingly.  By default, all clones are
35685     generated.
35686
35687     If the attribute is specified and '#pragma omp declare simd' is
35688     present on a declaration and the '-fopenmp' or '-fopenmp-simd'
35689     switch is specified, then the attribute is ignored.
35690
35691'stack_protect'
35692     This attribute adds stack protection code to the function if flags
35693     '-fstack-protector', '-fstack-protector-strong' or
35694     '-fstack-protector-explicit' are set.
35695
35696'no_stack_protector'
35697     This attribute prevents stack protection code for the function.
35698
35699'target (STRING, ...)'
35700     Multiple target back ends implement the 'target' attribute to
35701     specify that a function is to be compiled with different target
35702     options than specified on the command line.  The original target
35703     command-line options are ignored.  One or more strings can be
35704     provided as arguments.  Each string consists of one or more
35705     comma-separated suffixes to the '-m' prefix jointly forming the
35706     name of a machine-dependent option.  *Note Machine-Dependent
35707     Options: Submodel Options.
35708
35709     The 'target' attribute can be used for instance to have a function
35710     compiled with a different ISA (instruction set architecture) than
35711     the default.  '#pragma GCC target' can be used to specify
35712     target-specific options for more than one function.  *Note Function
35713     Specific Option Pragmas::, for details about the pragma.
35714
35715     For instance, on an x86, you could declare one function with the
35716     'target("sse4.1,arch=core2")' attribute and another with
35717     'target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
35718     the first function with '-msse4.1' and '-march=core2' options, and
35719     the second function with '-msse4a' and '-march=amdfam10' options.
35720     It is up to you to make sure that a function is only invoked on a
35721     machine that supports the particular ISA it is compiled for (for
35722     example by using 'cpuid' on x86 to determine what feature bits and
35723     architecture family are used).
35724
35725          int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
35726          int sse3_func (void) __attribute__ ((__target__ ("sse3")));
35727
35728     Providing multiple strings as arguments separated by commas to
35729     specify multiple options is equivalent to separating the option
35730     suffixes with a comma (',') within a single string.  Spaces are not
35731     permitted within the strings.
35732
35733     The options supported are specific to each target; refer to *note
35734     x86 Function Attributes::, *note PowerPC Function Attributes::,
35735     *note ARM Function Attributes::, *note AArch64 Function
35736     Attributes::, *note Nios II Function Attributes::, and *note S/390
35737     Function Attributes:: for details.
35738
35739'symver ("NAME2@NODENAME")'
35740     On ELF targets this attribute creates a symbol version.  The NAME2
35741     part of the parameter is the actual name of the symbol by which it
35742     will be externally referenced.  The 'nodename' portion should be
35743     the name of a node specified in the version script supplied to the
35744     linker when building a shared library.  Versioned symbol must be
35745     defined and must be exported with default visibility.
35746
35747          __attribute__ ((__symver__ ("foo@VERS_1"))) int
35748          foo_v1 (void)
35749          {
35750          }
35751
35752     Will produce a '.symver foo_v1, foo@VERS_1' directive in the
35753     assembler output.
35754
35755     One can also define multiple version for a given symbol (starting
35756     from binutils 2.35).
35757
35758          __attribute__ ((__symver__ ("foo@VERS_2"), __symver__ ("foo@VERS_3")))
35759          int symver_foo_v1 (void)
35760          {
35761          }
35762
35763     This example creates a symbol name 'symver_foo_v1' which will be
35764     version 'VERS_2' and 'VERS_3' of 'foo'.
35765
35766     If you have an older release of binutils, then symbol alias needs
35767     to be used:
35768
35769          __attribute__ ((__symver__ ("foo@VERS_2")))
35770          int foo_v1 (void)
35771          {
35772            return 0;
35773          }
35774
35775          __attribute__ ((__symver__ ("foo@VERS_3")))
35776          __attribute__ ((alias ("foo_v1")))
35777          int symver_foo_v1 (void);
35778
35779     Finally if the parameter is '"NAME2@@NODENAME"' then in addition to
35780     creating a symbol version (as if '"NAME2@NODENAME"' was used) the
35781     version will be also used to resolve NAME2 by the linker.
35782
35783'tainted_args'
35784     The 'tainted_args' attribute is used to specify that a function is
35785     called in a way that requires sanitization of its arguments, such
35786     as a system call in an operating system kernel.  Such a function
35787     can be considered part of the "attack surface" of the program.  The
35788     attribute can be used both on function declarations, and on field
35789     declarations containing function pointers.  In the latter case, any
35790     function used as an initializer of such a callback field will be
35791     treated as being called with tainted arguments.
35792
35793     The analyzer will pay particular attention to such functions when
35794     both '-fanalyzer' and '-fanalyzer-checker=taint' are supplied,
35795     potentially issuing warnings guarded by
35796     '-Wanalyzer-tainted-allocation-size',
35797     '-Wanalyzer-tainted-array-index', '-Wanalyzer-tainted-divisor',
35798     '-Wanalyzer-tainted-offset', and '-Wanalyzer-tainted-size'.
35799
35800'target_clones (OPTIONS)'
35801     The 'target_clones' attribute is used to specify that a function be
35802     cloned into multiple versions compiled with different target
35803     options than specified on the command line.  The supported options
35804     and restrictions are the same as for 'target' attribute.
35805
35806     For instance, on an x86, you could compile a function with
35807     'target_clones("sse4.1,avx")'.  GCC creates two function clones,
35808     one compiled with '-msse4.1' and another with '-mavx'.
35809
35810     On a PowerPC, you can compile a function with
35811     'target_clones("cpu=power9,default")'.  GCC will create two
35812     function clones, one compiled with '-mcpu=power9' and another with
35813     the default options.  GCC must be configured to use GLIBC 2.23 or
35814     newer in order to use the 'target_clones' attribute.
35815
35816     It also creates a resolver function (see the 'ifunc' attribute
35817     above) that dynamically selects a clone suitable for current
35818     architecture.  The resolver is created only if there is a usage of
35819     a function with 'target_clones' attribute.
35820
35821     Note that any subsequent call of a function without 'target_clone'
35822     from a 'target_clone' caller will not lead to copying (target
35823     clone) of the called function.  If you want to enforce such
35824     behaviour, we recommend declaring the calling function with the
35825     'flatten' attribute?
35826
35827'unused'
35828     This attribute, attached to a function, means that the function is
35829     meant to be possibly unused.  GCC does not produce a warning for
35830     this function.
35831
35832'used'
35833     This attribute, attached to a function, means that code must be
35834     emitted for the function even if it appears that the function is
35835     not referenced.  This is useful, for example, when the function is
35836     referenced only in inline assembly.
35837
35838     When applied to a member function of a C++ class template, the
35839     attribute also means that the function is instantiated if the class
35840     itself is instantiated.
35841
35842'retain'
35843     For ELF targets that support the GNU or FreeBSD OSABIs, this
35844     attribute will save the function from linker garbage collection.
35845     To support this behavior, functions that have not been placed in
35846     specific sections (e.g.  by the 'section' attribute, or the
35847     '-ffunction-sections' option), will be placed in new, unique
35848     sections.
35849
35850     This additional functionality requires Binutils version 2.36 or
35851     later.
35852
35853'visibility ("VISIBILITY_TYPE")'
35854     This attribute affects the linkage of the declaration to which it
35855     is attached.  It can be applied to variables (*note Common Variable
35856     Attributes::) and types (*note Common Type Attributes::) as well as
35857     functions.
35858
35859     There are four supported VISIBILITY_TYPE values: default, hidden,
35860     protected or internal visibility.
35861
35862          void __attribute__ ((visibility ("protected")))
35863          f () { /* Do something. */; }
35864          int i __attribute__ ((visibility ("hidden")));
35865
35866     The possible values of VISIBILITY_TYPE correspond to the visibility
35867     settings in the ELF gABI.
35868
35869     'default'
35870          Default visibility is the normal case for the object file
35871          format.  This value is available for the visibility attribute
35872          to override other options that may change the assumed
35873          visibility of entities.
35874
35875          On ELF, default visibility means that the declaration is
35876          visible to other modules and, in shared libraries, means that
35877          the declared entity may be overridden.
35878
35879          On Darwin, default visibility means that the declaration is
35880          visible to other modules.
35881
35882          Default visibility corresponds to "external linkage" in the
35883          language.
35884
35885     'hidden'
35886          Hidden visibility indicates that the entity declared has a new
35887          form of linkage, which we call "hidden linkage".  Two
35888          declarations of an object with hidden linkage refer to the
35889          same object if they are in the same shared object.
35890
35891     'internal'
35892          Internal visibility is like hidden visibility, but with
35893          additional processor specific semantics.  Unless otherwise
35894          specified by the psABI, GCC defines internal visibility to
35895          mean that a function is _never_ called from another module.
35896          Compare this with hidden functions which, while they cannot be
35897          referenced directly by other modules, can be referenced
35898          indirectly via function pointers.  By indicating that a
35899          function cannot be called from outside the module, GCC may for
35900          instance omit the load of a PIC register since it is known
35901          that the calling function loaded the correct value.
35902
35903     'protected'
35904          Protected visibility is like default visibility except that it
35905          indicates that references within the defining module bind to
35906          the definition in that module.  That is, the declared entity
35907          cannot be overridden by another module.
35908
35909     All visibilities are supported on many, but not all, ELF targets
35910     (supported when the assembler supports the '.visibility'
35911     pseudo-op).  Default visibility is supported everywhere.  Hidden
35912     visibility is supported on Darwin targets.
35913
35914     The visibility attribute should be applied only to declarations
35915     that would otherwise have external linkage.  The attribute should
35916     be applied consistently, so that the same entity should not be
35917     declared with different settings of the attribute.
35918
35919     In C++, the visibility attribute applies to types as well as
35920     functions and objects, because in C++ types have linkage.  A class
35921     must not have greater visibility than its non-static data member
35922     types and bases, and class members default to the visibility of
35923     their class.  Also, a declaration without explicit visibility is
35924     limited to the visibility of its type.
35925
35926     In C++, you can mark member functions and static member variables
35927     of a class with the visibility attribute.  This is useful if you
35928     know a particular method or static member variable should only be
35929     used from one shared object; then you can mark it hidden while the
35930     rest of the class has default visibility.  Care must be taken to
35931     avoid breaking the One Definition Rule; for example, it is usually
35932     not useful to mark an inline method as hidden without marking the
35933     whole class as hidden.
35934
35935     A C++ namespace declaration can also have the visibility attribute.
35936
35937          namespace nspace1 __attribute__ ((visibility ("protected")))
35938          { /* Do something. */; }
35939
35940     This attribute applies only to the particular namespace body, not
35941     to other definitions of the same namespace; it is equivalent to
35942     using '#pragma GCC visibility' before and after the namespace
35943     definition (*note Visibility Pragmas::).
35944
35945     In C++, if a template argument has limited visibility, this
35946     restriction is implicitly propagated to the template instantiation.
35947     Otherwise, template instantiations and specializations default to
35948     the visibility of their template.
35949
35950     If both the template and enclosing class have explicit visibility,
35951     the visibility from the template is used.
35952
35953'warn_unused_result'
35954     The 'warn_unused_result' attribute causes a warning to be emitted
35955     if a caller of the function with this attribute does not use its
35956     return value.  This is useful for functions where not checking the
35957     result is either a security problem or always a bug, such as
35958     'realloc'.
35959
35960          int fn () __attribute__ ((warn_unused_result));
35961          int foo ()
35962          {
35963            if (fn () < 0) return -1;
35964            fn ();
35965            return 0;
35966          }
35967
35968     results in warning on line 5.
35969
35970'weak'
35971     The 'weak' attribute causes a declaration of an external symbol to
35972     be emitted as a weak symbol rather than a global.  This is
35973     primarily useful in defining library functions that can be
35974     overridden in user code, though it can also be used with
35975     non-function declarations.  The overriding symbol must have the
35976     same type as the weak symbol.  In addition, if it designates a
35977     variable it must also have the same size and alignment as the weak
35978     symbol.  Weak symbols are supported for ELF targets, and also for
35979     a.out targets when using the GNU assembler and linker.
35980
35981'weakref'
35982'weakref ("TARGET")'
35983     The 'weakref' attribute marks a declaration as a weak reference.
35984     Without arguments, it should be accompanied by an 'alias' attribute
35985     naming the target symbol.  Alternatively, TARGET may be given as an
35986     argument to 'weakref' itself, naming the target definition of the
35987     alias.  The TARGET must have the same type as the declaration.  In
35988     addition, if it designates a variable it must also have the same
35989     size and alignment as the declaration.  In either form of the
35990     declaration 'weakref' implicitly marks the declared symbol as
35991     'weak'.  Without a TARGET given as an argument to 'weakref' or to
35992     'alias', 'weakref' is equivalent to 'weak' (in that case the
35993     declaration may be 'extern').
35994
35995          /* Given the declaration: */
35996          extern int y (void);
35997
35998          /* the following... */
35999          static int x (void) __attribute__ ((weakref ("y")));
36000
36001          /* is equivalent to... */
36002          static int x (void) __attribute__ ((weakref, alias ("y")));
36003
36004          /* or, alternatively, to... */
36005          static int x (void) __attribute__ ((weakref));
36006          static int x (void) __attribute__ ((alias ("y")));
36007
36008     A weak reference is an alias that does not by itself require a
36009     definition to be given for the target symbol.  If the target symbol
36010     is only referenced through weak references, then it becomes a
36011     'weak' undefined symbol.  If it is directly referenced, however,
36012     then such strong references prevail, and a definition is required
36013     for the symbol, not necessarily in the same translation unit.
36014
36015     The effect is equivalent to moving all references to the alias to a
36016     separate translation unit, renaming the alias to the aliased
36017     symbol, declaring it as weak, compiling the two separate
36018     translation units and performing a link with relocatable output
36019     (i.e. 'ld -r') on them.
36020
36021     A declaration to which 'weakref' is attached and that is associated
36022     with a named 'target' must be 'static'.
36023
36024'zero_call_used_regs ("CHOICE")'
36025
36026     The 'zero_call_used_regs' attribute causes the compiler to zero a
36027     subset of all call-used registers(1) at function return.  This is
36028     used to increase program security by either mitigating
36029     Return-Oriented Programming (ROP) attacks or preventing information
36030     leakage through registers.
36031
36032     In order to satisfy users with different security needs and control
36033     the run-time overhead at the same time, the CHOICE parameter
36034     provides a flexible way to choose the subset of the call-used
36035     registers to be zeroed.  The three basic values of CHOICE are:
36036
36037        * 'skip' doesn't zero any call-used registers.
36038
36039        * 'used' only zeros call-used registers that are used in the
36040          function.  A "used" register is one whose content has been set
36041          or referenced in the function.
36042
36043        * 'all' zeros all call-used registers.
36044
36045     In addition to these three basic choices, it is possible to modify
36046     'used' or 'all' as follows:
36047
36048        * Adding '-gpr' restricts the zeroing to general-purpose
36049          registers.
36050
36051        * Adding '-arg' restricts the zeroing to registers that can
36052          sometimes be used to pass function arguments.  This includes
36053          all argument registers defined by the platform's calling
36054          conversion, regardless of whether the function uses those
36055          registers for function arguments or not.
36056
36057     The modifiers can be used individually or together.  If they are
36058     used together, they must appear in the order above.
36059
36060     The full list of CHOICEs is therefore:
36061
36062     'skip'
36063          doesn't zero any call-used register.
36064
36065     'used'
36066          only zeros call-used registers that are used in the function.
36067
36068     'used-gpr'
36069          only zeros call-used general purpose registers that are used
36070          in the function.
36071
36072     'used-arg'
36073          only zeros call-used registers that are used in the function
36074          and pass arguments.
36075
36076     'used-gpr-arg'
36077          only zeros call-used general purpose registers that are used
36078          in the function and pass arguments.
36079
36080     'all'
36081          zeros all call-used registers.
36082
36083     'all-gpr'
36084          zeros all call-used general purpose registers.
36085
36086     'all-arg'
36087          zeros all call-used registers that pass arguments.
36088
36089     'all-gpr-arg'
36090          zeros all call-used general purpose registers that pass
36091          arguments.
36092
36093     Of this list, 'used-arg', 'used-gpr-arg', 'all-arg', and
36094     'all-gpr-arg' are mainly used for ROP mitigation.
36095
36096     The default for the attribute is controlled by
36097     '-fzero-call-used-regs'.
36098
36099   ---------- Footnotes ----------
36100
36101   (1) A "call-used" register is a register whose contents can be
36102changed by a function call; therefore, a caller cannot assume that the
36103register has the same contents on return from the function as it had
36104before calling the function.  Such registers are also called
36105"call-clobbered", "caller-saved", or "volatile".
36106
36107
36108File: gcc.info,  Node: AArch64 Function Attributes,  Next: AMD GCN Function Attributes,  Prev: Common Function Attributes,  Up: Function Attributes
36109
361106.33.2 AArch64 Function Attributes
36111----------------------------------
36112
36113The following target-specific function attributes are available for the
36114AArch64 target.  For the most part, these options mirror the behavior of
36115similar command-line options (*note AArch64 Options::), but on a
36116per-function basis.
36117
36118'general-regs-only'
36119     Indicates that no floating-point or Advanced SIMD registers should
36120     be used when generating code for this function.  If the function
36121     explicitly uses floating-point code, then the compiler gives an
36122     error.  This is the same behavior as that of the command-line
36123     option '-mgeneral-regs-only'.
36124
36125'fix-cortex-a53-835769'
36126     Indicates that the workaround for the Cortex-A53 erratum 835769
36127     should be applied to this function.  To explicitly disable the
36128     workaround for this function specify the negated form:
36129     'no-fix-cortex-a53-835769'.  This corresponds to the behavior of
36130     the command line options '-mfix-cortex-a53-835769' and
36131     '-mno-fix-cortex-a53-835769'.
36132
36133'cmodel='
36134     Indicates that code should be generated for a particular code model
36135     for this function.  The behavior and permissible arguments are the
36136     same as for the command line option '-mcmodel='.
36137
36138'strict-align'
36139'no-strict-align'
36140     'strict-align' indicates that the compiler should not assume that
36141     unaligned memory references are handled by the system.  To allow
36142     the compiler to assume that aligned memory references are handled
36143     by the system, the inverse attribute 'no-strict-align' can be
36144     specified.  The behavior is same as for the command-line option
36145     '-mstrict-align' and '-mno-strict-align'.
36146
36147'omit-leaf-frame-pointer'
36148     Indicates that the frame pointer should be omitted for a leaf
36149     function call.  To keep the frame pointer, the inverse attribute
36150     'no-omit-leaf-frame-pointer' can be specified.  These attributes
36151     have the same behavior as the command-line options
36152     '-momit-leaf-frame-pointer' and '-mno-omit-leaf-frame-pointer'.
36153
36154'tls-dialect='
36155     Specifies the TLS dialect to use for this function.  The behavior
36156     and permissible arguments are the same as for the command-line
36157     option '-mtls-dialect='.
36158
36159'arch='
36160     Specifies the architecture version and architectural extensions to
36161     use for this function.  The behavior and permissible arguments are
36162     the same as for the '-march=' command-line option.
36163
36164'tune='
36165     Specifies the core for which to tune the performance of this
36166     function.  The behavior and permissible arguments are the same as
36167     for the '-mtune=' command-line option.
36168
36169'cpu='
36170     Specifies the core for which to tune the performance of this
36171     function and also whose architectural features to use.  The
36172     behavior and valid arguments are the same as for the '-mcpu='
36173     command-line option.
36174
36175'sign-return-address'
36176     Select the function scope on which return address signing will be
36177     applied.  The behavior and permissible arguments are the same as
36178     for the command-line option '-msign-return-address='.  The default
36179     value is 'none'.  This attribute is deprecated.  The
36180     'branch-protection' attribute should be used instead.
36181
36182'branch-protection'
36183     Select the function scope on which branch protection will be
36184     applied.  The behavior and permissible arguments are the same as
36185     for the command-line option '-mbranch-protection='.  The default
36186     value is 'none'.
36187
36188'outline-atomics'
36189     Enable or disable calls to out-of-line helpers to implement atomic
36190     operations.  This corresponds to the behavior of the command line
36191     options '-moutline-atomics' and '-mno-outline-atomics'.
36192
36193 The above target attributes can be specified as follows:
36194
36195     __attribute__((target("ATTR-STRING")))
36196     int
36197     f (int a)
36198     {
36199       return a + 5;
36200     }
36201
36202 where 'ATTR-STRING' is one of the attribute strings specified above.
36203
36204 Additionally, the architectural extension string may be specified on
36205its own.  This can be used to turn on and off particular architectural
36206extensions without having to specify a particular architecture version
36207or core.  Example:
36208
36209     __attribute__((target("+crc+nocrypto")))
36210     int
36211     foo (int a)
36212     {
36213       return a + 5;
36214     }
36215
36216 In this example 'target("+crc+nocrypto")' enables the 'crc' extension
36217and disables the 'crypto' extension for the function 'foo' without
36218modifying an existing '-march=' or '-mcpu' option.
36219
36220 Multiple target function attributes can be specified by separating them
36221with a comma.  For example:
36222     __attribute__((target("arch=armv8-a+crc+crypto,tune=cortex-a53")))
36223     int
36224     foo (int a)
36225     {
36226       return a + 5;
36227     }
36228
36229 is valid and compiles function 'foo' for ARMv8-A with 'crc' and
36230'crypto' extensions and tunes it for 'cortex-a53'.
36231
362326.33.2.1 Inlining rules
36233.......................
36234
36235Specifying target attributes on individual functions or performing
36236link-time optimization across translation units compiled with different
36237target options can affect function inlining rules:
36238
36239 In particular, a caller function can inline a callee function only if
36240the architectural features available to the callee are a subset of the
36241features available to the caller.  For example: A function 'foo'
36242compiled with '-march=armv8-a+crc', or tagged with the equivalent
36243'arch=armv8-a+crc' attribute, can inline a function 'bar' compiled with
36244'-march=armv8-a+nocrc' because the all the architectural features that
36245function 'bar' requires are available to function 'foo'.  Conversely,
36246function 'bar' cannot inline function 'foo'.
36247
36248 Additionally inlining a function compiled with '-mstrict-align' into a
36249function compiled without '-mstrict-align' is not allowed.  However,
36250inlining a function compiled without '-mstrict-align' into a function
36251compiled with '-mstrict-align' is allowed.
36252
36253 Note that CPU tuning options and attributes such as the '-mcpu=',
36254'-mtune=' do not inhibit inlining unless the CPU specified by the
36255'-mcpu=' option or the 'cpu=' attribute conflicts with the architectural
36256feature rules specified above.
36257
36258
36259File: gcc.info,  Node: AMD GCN Function Attributes,  Next: ARC Function Attributes,  Prev: AArch64 Function Attributes,  Up: Function Attributes
36260
362616.33.3 AMD GCN Function Attributes
36262----------------------------------
36263
36264These function attributes are supported by the AMD GCN back end:
36265
36266'amdgpu_hsa_kernel'
36267     This attribute indicates that the corresponding function should be
36268     compiled as a kernel function, that is an entry point that can be
36269     invoked from the host via the HSA runtime library.  By default
36270     functions are only callable only from other GCN functions.
36271
36272     This attribute is implicitly applied to any function named 'main',
36273     using default parameters.
36274
36275     Kernel functions may return an integer value, which will be written
36276     to a conventional place within the HSA "kernargs" region.
36277
36278     The attribute parameters configure what values are passed into the
36279     kernel function by the GPU drivers, via the initial register state.
36280     Some values are used by the compiler, and therefore forced on.
36281     Enabling other options may break assumptions in the compiler and/or
36282     run-time libraries.
36283
36284     'private_segment_buffer'
36285          Set 'enable_sgpr_private_segment_buffer' flag.  Always on
36286          (required to locate the stack).
36287
36288     'dispatch_ptr'
36289          Set 'enable_sgpr_dispatch_ptr' flag.  Always on (required to
36290          locate the launch dimensions).
36291
36292     'queue_ptr'
36293          Set 'enable_sgpr_queue_ptr' flag.  Always on (required to
36294          convert address spaces).
36295
36296     'kernarg_segment_ptr'
36297          Set 'enable_sgpr_kernarg_segment_ptr' flag.  Always on
36298          (required to locate the kernel arguments, "kernargs").
36299
36300     'dispatch_id'
36301          Set 'enable_sgpr_dispatch_id' flag.
36302
36303     'flat_scratch_init'
36304          Set 'enable_sgpr_flat_scratch_init' flag.
36305
36306     'private_segment_size'
36307          Set 'enable_sgpr_private_segment_size' flag.
36308
36309     'grid_workgroup_count_X'
36310          Set 'enable_sgpr_grid_workgroup_count_x' flag.  Always on
36311          (required to use OpenACC/OpenMP).
36312
36313     'grid_workgroup_count_Y'
36314          Set 'enable_sgpr_grid_workgroup_count_y' flag.
36315
36316     'grid_workgroup_count_Z'
36317          Set 'enable_sgpr_grid_workgroup_count_z' flag.
36318
36319     'workgroup_id_X'
36320          Set 'enable_sgpr_workgroup_id_x' flag.
36321
36322     'workgroup_id_Y'
36323          Set 'enable_sgpr_workgroup_id_y' flag.
36324
36325     'workgroup_id_Z'
36326          Set 'enable_sgpr_workgroup_id_z' flag.
36327
36328     'workgroup_info'
36329          Set 'enable_sgpr_workgroup_info' flag.
36330
36331     'private_segment_wave_offset'
36332          Set 'enable_sgpr_private_segment_wave_byte_offset' flag.
36333          Always on (required to locate the stack).
36334
36335     'work_item_id_X'
36336          Set 'enable_vgpr_workitem_id' parameter.  Always on (can't be
36337          disabled).
36338
36339     'work_item_id_Y'
36340          Set 'enable_vgpr_workitem_id' parameter.  Always on (required
36341          to enable vectorization.)
36342
36343     'work_item_id_Z'
36344          Set 'enable_vgpr_workitem_id' parameter.  Always on (required
36345          to use OpenACC/OpenMP).
36346
36347
36348File: gcc.info,  Node: ARC Function Attributes,  Next: ARM Function Attributes,  Prev: AMD GCN Function Attributes,  Up: Function Attributes
36349
363506.33.4 ARC Function Attributes
36351------------------------------
36352
36353These function attributes are supported by the ARC back end:
36354
36355'interrupt'
36356     Use this attribute to indicate that the specified function is an
36357     interrupt handler.  The compiler generates function entry and exit
36358     sequences suitable for use in an interrupt handler when this
36359     attribute is present.
36360
36361     On the ARC, you must specify the kind of interrupt to be handled in
36362     a parameter to the interrupt attribute like this:
36363
36364          void f () __attribute__ ((interrupt ("ilink1")));
36365
36366     Permissible values for this parameter are: 'ilink1' and 'ilink2'
36367     for ARCv1 architecture, and 'ilink' and 'firq' for ARCv2
36368     architecture.
36369
36370'long_call'
36371'medium_call'
36372'short_call'
36373     These attributes specify how a particular function is called.
36374     These attributes override the '-mlong-calls' and '-mmedium-calls'
36375     (*note ARC Options::) command-line switches and '#pragma
36376     long_calls' settings.
36377
36378     For ARC, a function marked with the 'long_call' attribute is always
36379     called using register-indirect jump-and-link instructions, thereby
36380     enabling the called function to be placed anywhere within the
36381     32-bit address space.  A function marked with the 'medium_call'
36382     attribute will always be close enough to be called with an
36383     unconditional branch-and-link instruction, which has a 25-bit
36384     offset from the call site.  A function marked with the 'short_call'
36385     attribute will always be close enough to be called with a
36386     conditional branch-and-link instruction, which has a 21-bit offset
36387     from the call site.
36388
36389'jli_always'
36390     Forces a particular function to be called using 'jli' instruction.
36391     The 'jli' instruction makes use of a table stored into '.jlitab'
36392     section, which holds the location of the functions which are
36393     addressed using this instruction.
36394
36395'jli_fixed'
36396     Identical like the above one, but the location of the function in
36397     the 'jli' table is known and given as an attribute parameter.
36398
36399'secure_call'
36400     This attribute allows one to mark secure-code functions that are
36401     callable from normal mode.  The location of the secure call
36402     function into the 'sjli' table needs to be passed as argument.
36403
36404'naked'
36405     This attribute allows the compiler to construct the requisite
36406     function declaration, while allowing the body of the function to be
36407     assembly code.  The specified function will not have
36408     prologue/epilogue sequences generated by the compiler.  Only basic
36409     'asm' statements can safely be included in naked functions (*note
36410     Basic Asm::).  While using extended 'asm' or a mixture of basic
36411     'asm' and C code may appear to work, they cannot be depended upon
36412     to work reliably and are not supported.
36413
36414
36415File: gcc.info,  Node: ARM Function Attributes,  Next: AVR Function Attributes,  Prev: ARC Function Attributes,  Up: Function Attributes
36416
364176.33.5 ARM Function Attributes
36418------------------------------
36419
36420These function attributes are supported for ARM targets:
36421
36422'general-regs-only'
36423     Indicates that no floating-point or Advanced SIMD registers should
36424     be used when generating code for this function.  If the function
36425     explicitly uses floating-point code, then the compiler gives an
36426     error.  This is the same behavior as that of the command-line
36427     option '-mgeneral-regs-only'.
36428
36429'interrupt'
36430     Use this attribute to indicate that the specified function is an
36431     interrupt handler.  The compiler generates function entry and exit
36432     sequences suitable for use in an interrupt handler when this
36433     attribute is present.
36434
36435     You can specify the kind of interrupt to be handled by adding an
36436     optional parameter to the interrupt attribute like this:
36437
36438          void f () __attribute__ ((interrupt ("IRQ")));
36439
36440     Permissible values for this parameter are: 'IRQ', 'FIQ', 'SWI',
36441     'ABORT' and 'UNDEF'.
36442
36443     On ARMv7-M the interrupt type is ignored, and the attribute means
36444     the function may be called with a word-aligned stack pointer.
36445
36446'isr'
36447     Use this attribute on ARM to write Interrupt Service Routines.
36448     This is an alias to the 'interrupt' attribute above.
36449
36450'long_call'
36451'short_call'
36452     These attributes specify how a particular function is called.
36453     These attributes override the '-mlong-calls' (*note ARM Options::)
36454     command-line switch and '#pragma long_calls' settings.  For ARM,
36455     the 'long_call' attribute indicates that the function might be far
36456     away from the call site and require a different (more expensive)
36457     calling sequence.  The 'short_call' attribute always places the
36458     offset to the function from the call site into the 'BL' instruction
36459     directly.
36460
36461'naked'
36462     This attribute allows the compiler to construct the requisite
36463     function declaration, while allowing the body of the function to be
36464     assembly code.  The specified function will not have
36465     prologue/epilogue sequences generated by the compiler.  Only basic
36466     'asm' statements can safely be included in naked functions (*note
36467     Basic Asm::).  While using extended 'asm' or a mixture of basic
36468     'asm' and C code may appear to work, they cannot be depended upon
36469     to work reliably and are not supported.
36470
36471'pcs'
36472
36473     The 'pcs' attribute can be used to control the calling convention
36474     used for a function on ARM. The attribute takes an argument that
36475     specifies the calling convention to use.
36476
36477     When compiling using the AAPCS ABI (or a variant of it) then valid
36478     values for the argument are '"aapcs"' and '"aapcs-vfp"'.  In order
36479     to use a variant other than '"aapcs"' then the compiler must be
36480     permitted to use the appropriate co-processor registers (i.e., the
36481     VFP registers must be available in order to use '"aapcs-vfp"').
36482     For example,
36483
36484          /* Argument passed in r0, and result returned in r0+r1.  */
36485          double f2d (float) __attribute__((pcs("aapcs")));
36486
36487     Variadic functions always use the '"aapcs"' calling convention and
36488     the compiler rejects attempts to specify an alternative.
36489
36490'target (OPTIONS)'
36491     As discussed in *note Common Function Attributes::, this attribute
36492     allows specification of target-specific compilation options.
36493
36494     On ARM, the following options are allowed:
36495
36496     'thumb'
36497          Force code generation in the Thumb (T16/T32) ISA, depending on
36498          the architecture level.
36499
36500     'arm'
36501          Force code generation in the ARM (A32) ISA.
36502
36503          Functions from different modes can be inlined in the caller's
36504          mode.
36505
36506     'fpu='
36507          Specifies the fpu for which to tune the performance of this
36508          function.  The behavior and permissible arguments are the same
36509          as for the '-mfpu=' command-line option.
36510
36511     'arch='
36512          Specifies the architecture version and architectural
36513          extensions to use for this function.  The behavior and
36514          permissible arguments are the same as for the '-march='
36515          command-line option.
36516
36517          The above target attributes can be specified as follows:
36518
36519               __attribute__((target("arch=armv8-a+crc")))
36520               int
36521               f (int a)
36522               {
36523                 return a + 5;
36524               }
36525
36526          Additionally, the architectural extension string may be
36527          specified on its own.  This can be used to turn on and off
36528          particular architectural extensions without having to specify
36529          a particular architecture version or core.  Example:
36530
36531               __attribute__((target("+crc+nocrypto")))
36532               int
36533               foo (int a)
36534               {
36535                 return a + 5;
36536               }
36537
36538          In this example 'target("+crc+nocrypto")' enables the 'crc'
36539          extension and disables the 'crypto' extension for the function
36540          'foo' without modifying an existing '-march=' or '-mcpu'
36541          option.
36542
36543
36544File: gcc.info,  Node: AVR Function Attributes,  Next: Blackfin Function Attributes,  Prev: ARM Function Attributes,  Up: Function Attributes
36545
365466.33.6 AVR Function Attributes
36547------------------------------
36548
36549These function attributes are supported by the AVR back end:
36550
36551'interrupt'
36552     Use this attribute to indicate that the specified function is an
36553     interrupt handler.  The compiler generates function entry and exit
36554     sequences suitable for use in an interrupt handler when this
36555     attribute is present.
36556
36557     On the AVR, the hardware globally disables interrupts when an
36558     interrupt is executed.  The first instruction of an interrupt
36559     handler declared with this attribute is a 'SEI' instruction to
36560     re-enable interrupts.  See also the 'signal' function attribute
36561     that does not insert a 'SEI' instruction.  If both 'signal' and
36562     'interrupt' are specified for the same function, 'signal' is
36563     silently ignored.
36564
36565'naked'
36566     This attribute allows the compiler to construct the requisite
36567     function declaration, while allowing the body of the function to be
36568     assembly code.  The specified function will not have
36569     prologue/epilogue sequences generated by the compiler.  Only basic
36570     'asm' statements can safely be included in naked functions (*note
36571     Basic Asm::).  While using extended 'asm' or a mixture of basic
36572     'asm' and C code may appear to work, they cannot be depended upon
36573     to work reliably and are not supported.
36574
36575'no_gccisr'
36576     Do not use '__gcc_isr' pseudo instructions in a function with the
36577     'interrupt' or 'signal' attribute aka.  interrupt service routine
36578     (ISR). Use this attribute if the preamble of the ISR prologue
36579     should always read
36580          push  __zero_reg__
36581          push  __tmp_reg__
36582          in    __tmp_reg__, __SREG__
36583          push  __tmp_reg__
36584          clr   __zero_reg__
36585     and accordingly for the postamble of the epilogue -- no matter
36586     whether the mentioned registers are actually used in the ISR or
36587     not.  Situations where you might want to use this attribute
36588     include:
36589        * Code that (effectively) clobbers bits of 'SREG' other than the
36590          'I'-flag by writing to the memory location of 'SREG'.
36591        * Code that uses inline assembler to jump to a different
36592          function which expects (parts of) the prologue code as
36593          outlined above to be present.
36594     To disable '__gcc_isr' generation for the whole compilation unit,
36595     there is option '-mno-gas-isr-prologues', *note AVR Options::.
36596
36597'OS_main'
36598'OS_task'
36599     On AVR, functions with the 'OS_main' or 'OS_task' attribute do not
36600     save/restore any call-saved register in their prologue/epilogue.
36601
36602     The 'OS_main' attribute can be used when there _is guarantee_ that
36603     interrupts are disabled at the time when the function is entered.
36604     This saves resources when the stack pointer has to be changed to
36605     set up a frame for local variables.
36606
36607     The 'OS_task' attribute can be used when there is _no guarantee_
36608     that interrupts are disabled at that time when the function is
36609     entered like for, e.g.  task functions in a multi-threading
36610     operating system.  In that case, changing the stack pointer
36611     register is guarded by save/clear/restore of the global interrupt
36612     enable flag.
36613
36614     The differences to the 'naked' function attribute are:
36615        * 'naked' functions do not have a return instruction whereas
36616          'OS_main' and 'OS_task' functions have a 'RET' or 'RETI'
36617          return instruction.
36618        * 'naked' functions do not set up a frame for local variables or
36619          a frame pointer whereas 'OS_main' and 'OS_task' do this as
36620          needed.
36621
36622'signal'
36623     Use this attribute on the AVR to indicate that the specified
36624     function is an interrupt handler.  The compiler generates function
36625     entry and exit sequences suitable for use in an interrupt handler
36626     when this attribute is present.
36627
36628     See also the 'interrupt' function attribute.
36629
36630     The AVR hardware globally disables interrupts when an interrupt is
36631     executed.  Interrupt handler functions defined with the 'signal'
36632     attribute do not re-enable interrupts.  It is save to enable
36633     interrupts in a 'signal' handler.  This "save" only applies to the
36634     code generated by the compiler and not to the IRQ layout of the
36635     application which is responsibility of the application.
36636
36637     If both 'signal' and 'interrupt' are specified for the same
36638     function, 'signal' is silently ignored.
36639
36640
36641File: gcc.info,  Node: Blackfin Function Attributes,  Next: BPF Function Attributes,  Prev: AVR Function Attributes,  Up: Function Attributes
36642
366436.33.7 Blackfin Function Attributes
36644-----------------------------------
36645
36646These function attributes are supported by the Blackfin back end:
36647
36648'exception_handler'
36649     Use this attribute on the Blackfin to indicate that the specified
36650     function is an exception handler.  The compiler generates function
36651     entry and exit sequences suitable for use in an exception handler
36652     when this attribute is present.
36653
36654'interrupt_handler'
36655     Use this attribute to indicate that the specified function is an
36656     interrupt handler.  The compiler generates function entry and exit
36657     sequences suitable for use in an interrupt handler when this
36658     attribute is present.
36659
36660'kspisusp'
36661     When used together with 'interrupt_handler', 'exception_handler' or
36662     'nmi_handler', code is generated to load the stack pointer from the
36663     USP register in the function prologue.
36664
36665'l1_text'
36666     This attribute specifies a function to be placed into L1
36667     Instruction SRAM.  The function is put into a specific section
36668     named '.l1.text'.  With '-mfdpic', function calls with a such
36669     function as the callee or caller uses inlined PLT.
36670
36671'l2'
36672     This attribute specifies a function to be placed into L2 SRAM. The
36673     function is put into a specific section named '.l2.text'.  With
36674     '-mfdpic', callers of such functions use an inlined PLT.
36675
36676'longcall'
36677'shortcall'
36678     The 'longcall' attribute indicates that the function might be far
36679     away from the call site and require a different (more expensive)
36680     calling sequence.  The 'shortcall' attribute indicates that the
36681     function is always close enough for the shorter calling sequence to
36682     be used.  These attributes override the '-mlongcall' switch.
36683
36684'nesting'
36685     Use this attribute together with 'interrupt_handler',
36686     'exception_handler' or 'nmi_handler' to indicate that the function
36687     entry code should enable nested interrupts or exceptions.
36688
36689'nmi_handler'
36690     Use this attribute on the Blackfin to indicate that the specified
36691     function is an NMI handler.  The compiler generates function entry
36692     and exit sequences suitable for use in an NMI handler when this
36693     attribute is present.
36694
36695'saveall'
36696     Use this attribute to indicate that all registers except the stack
36697     pointer should be saved in the prologue regardless of whether they
36698     are used or not.
36699
36700
36701File: gcc.info,  Node: BPF Function Attributes,  Next: CR16 Function Attributes,  Prev: Blackfin Function Attributes,  Up: Function Attributes
36702
367036.33.8 BPF Function Attributes
36704------------------------------
36705
36706These function attributes are supported by the BPF back end:
36707
36708'kernel_helper'
36709     use this attribute to indicate the specified function declaration
36710     is a kernel helper.  The helper function is passed as an argument
36711     to the attribute.  Example:
36712
36713          int bpf_probe_read (void *dst, int size, const void *unsafe_ptr)
36714            __attribute__ ((kernel_helper (4)));
36715
36716
36717File: gcc.info,  Node: CR16 Function Attributes,  Next: C-SKY Function Attributes,  Prev: BPF Function Attributes,  Up: Function Attributes
36718
367196.33.9 CR16 Function Attributes
36720-------------------------------
36721
36722These function attributes are supported by the CR16 back end:
36723
36724'interrupt'
36725     Use this attribute to indicate that the specified function is an
36726     interrupt handler.  The compiler generates function entry and exit
36727     sequences suitable for use in an interrupt handler when this
36728     attribute is present.
36729
36730
36731File: gcc.info,  Node: C-SKY Function Attributes,  Next: Epiphany Function Attributes,  Prev: CR16 Function Attributes,  Up: Function Attributes
36732
367336.33.10 C-SKY Function Attributes
36734---------------------------------
36735
36736These function attributes are supported by the C-SKY back end:
36737
36738'interrupt'
36739'isr'
36740     Use these attributes to indicate that the specified function is an
36741     interrupt handler.  The compiler generates function entry and exit
36742     sequences suitable for use in an interrupt handler when either of
36743     these attributes are present.
36744
36745     Use of these options requires the '-mistack' command-line option to
36746     enable support for the necessary interrupt stack instructions.
36747     They are ignored with a warning otherwise.  *Note C-SKY Options::.
36748
36749'naked'
36750     This attribute allows the compiler to construct the requisite
36751     function declaration, while allowing the body of the function to be
36752     assembly code.  The specified function will not have
36753     prologue/epilogue sequences generated by the compiler.  Only basic
36754     'asm' statements can safely be included in naked functions (*note
36755     Basic Asm::).  While using extended 'asm' or a mixture of basic
36756     'asm' and C code may appear to work, they cannot be depended upon
36757     to work reliably and are not supported.
36758
36759
36760File: gcc.info,  Node: Epiphany Function Attributes,  Next: H8/300 Function Attributes,  Prev: C-SKY Function Attributes,  Up: Function Attributes
36761
367626.33.11 Epiphany Function Attributes
36763------------------------------------
36764
36765These function attributes are supported by the Epiphany back end:
36766
36767'disinterrupt'
36768     This attribute causes the compiler to emit instructions to disable
36769     interrupts for the duration of the given function.
36770
36771'forwarder_section'
36772     This attribute modifies the behavior of an interrupt handler.  The
36773     interrupt handler may be in external memory which cannot be reached
36774     by a branch instruction, so generate a local memory trampoline to
36775     transfer control.  The single parameter identifies the section
36776     where the trampoline is placed.
36777
36778'interrupt'
36779     Use this attribute to indicate that the specified function is an
36780     interrupt handler.  The compiler generates function entry and exit
36781     sequences suitable for use in an interrupt handler when this
36782     attribute is present.  It may also generate a special section with
36783     code to initialize the interrupt vector table.
36784
36785     On Epiphany targets one or more optional parameters can be added
36786     like this:
36787
36788          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
36789
36790     Permissible values for these parameters are: 'reset',
36791     'software_exception', 'page_miss', 'timer0', 'timer1', 'message',
36792     'dma0', 'dma1', 'wand' and 'swi'.  Multiple parameters indicate
36793     that multiple entries in the interrupt vector table should be
36794     initialized for this function, i.e. for each parameter NAME, a jump
36795     to the function is emitted in the section ivt_entry_NAME.  The
36796     parameter(s) may be omitted entirely, in which case no interrupt
36797     vector table entry is provided.
36798
36799     Note that interrupts are enabled inside the function unless the
36800     'disinterrupt' attribute is also specified.
36801
36802     The following examples are all valid uses of these attributes on
36803     Epiphany targets:
36804          void __attribute__ ((interrupt)) universal_handler ();
36805          void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
36806          void __attribute__ ((interrupt ("dma0, dma1")))
36807            universal_dma_handler ();
36808          void __attribute__ ((interrupt ("timer0"), disinterrupt))
36809            fast_timer_handler ();
36810          void __attribute__ ((interrupt ("dma0, dma1"),
36811                               forwarder_section ("tramp")))
36812            external_dma_handler ();
36813
36814'long_call'
36815'short_call'
36816     These attributes specify how a particular function is called.
36817     These attributes override the '-mlong-calls' (*note Adapteva
36818     Epiphany Options::) command-line switch and '#pragma long_calls'
36819     settings.
36820
36821
36822File: gcc.info,  Node: H8/300 Function Attributes,  Next: IA-64 Function Attributes,  Prev: Epiphany Function Attributes,  Up: Function Attributes
36823
368246.33.12 H8/300 Function Attributes
36825----------------------------------
36826
36827These function attributes are available for H8/300 targets:
36828
36829'function_vector'
36830     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
36831     the specified function should be called through the function
36832     vector.  Calling a function through the function vector reduces
36833     code size; however, the function vector has a limited size (maximum
36834     128 entries on the H8/300 and 64 entries on the H8/300H and H8S)
36835     and shares space with the interrupt vector.
36836
36837'interrupt_handler'
36838     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
36839     the specified function is an interrupt handler.  The compiler
36840     generates function entry and exit sequences suitable for use in an
36841     interrupt handler when this attribute is present.
36842
36843'saveall'
36844     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
36845     all registers except the stack pointer should be saved in the
36846     prologue regardless of whether they are used or not.
36847
36848
36849File: gcc.info,  Node: IA-64 Function Attributes,  Next: M32C Function Attributes,  Prev: H8/300 Function Attributes,  Up: Function Attributes
36850
368516.33.13 IA-64 Function Attributes
36852---------------------------------
36853
36854These function attributes are supported on IA-64 targets:
36855
36856'syscall_linkage'
36857     This attribute is used to modify the IA-64 calling convention by
36858     marking all input registers as live at all function exits.  This
36859     makes it possible to restart a system call after an interrupt
36860     without having to save/restore the input registers.  This also
36861     prevents kernel data from leaking into application code.
36862
36863'version_id'
36864     This IA-64 HP-UX attribute, attached to a global variable or
36865     function, renames a symbol to contain a version string, thus
36866     allowing for function level versioning.  HP-UX system header files
36867     may use function level versioning for some system calls.
36868
36869          extern int foo () __attribute__((version_id ("20040821")));
36870
36871     Calls to 'foo' are mapped to calls to 'foo{20040821}'.
36872
36873
36874File: gcc.info,  Node: M32C Function Attributes,  Next: M32R/D Function Attributes,  Prev: IA-64 Function Attributes,  Up: Function Attributes
36875
368766.33.14 M32C Function Attributes
36877--------------------------------
36878
36879These function attributes are supported by the M32C back end:
36880
36881'bank_switch'
36882     When added to an interrupt handler with the M32C port, causes the
36883     prologue and epilogue to use bank switching to preserve the
36884     registers rather than saving them on the stack.
36885
36886'fast_interrupt'
36887     Use this attribute on the M32C port to indicate that the specified
36888     function is a fast interrupt handler.  This is just like the
36889     'interrupt' attribute, except that 'freit' is used to return
36890     instead of 'reit'.
36891
36892'function_vector'
36893     On M16C/M32C targets, the 'function_vector' attribute declares a
36894     special page subroutine call function.  Use of this attribute
36895     reduces the code size by 2 bytes for each call generated to the
36896     subroutine.  The argument to the attribute is the vector number
36897     entry from the special page vector table which contains the 16
36898     low-order bits of the subroutine's entry address.  Each vector
36899     table has special page number (18 to 255) that is used in 'jsrs'
36900     instructions.  Jump addresses of the routines are generated by
36901     adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
36902     M32C targets), to the 2-byte addresses set in the vector table.
36903     Therefore you need to ensure that all the special page vector
36904     routines should get mapped within the address range 0x0F0000 to
36905     0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
36906
36907     In the following example 2 bytes are saved for each call to
36908     function 'foo'.
36909
36910          void foo (void) __attribute__((function_vector(0x18)));
36911          void foo (void)
36912          {
36913          }
36914
36915          void bar (void)
36916          {
36917              foo();
36918          }
36919
36920     If functions are defined in one file and are called in another
36921     file, then be sure to write this declaration in both files.
36922
36923     This attribute is ignored for R8C target.
36924
36925'interrupt'
36926     Use this attribute to indicate that the specified function is an
36927     interrupt handler.  The compiler generates function entry and exit
36928     sequences suitable for use in an interrupt handler when this
36929     attribute is present.
36930
36931
36932File: gcc.info,  Node: M32R/D Function Attributes,  Next: m68k Function Attributes,  Prev: M32C Function Attributes,  Up: Function Attributes
36933
369346.33.15 M32R/D Function Attributes
36935----------------------------------
36936
36937These function attributes are supported by the M32R/D back end:
36938
36939'interrupt'
36940     Use this attribute to indicate that the specified function is an
36941     interrupt handler.  The compiler generates function entry and exit
36942     sequences suitable for use in an interrupt handler when this
36943     attribute is present.
36944
36945'model (MODEL-NAME)'
36946
36947     On the M32R/D, use this attribute to set the addressability of an
36948     object, and of the code generated for a function.  The identifier
36949     MODEL-NAME is one of 'small', 'medium', or 'large', representing
36950     each of the code models.
36951
36952     Small model objects live in the lower 16MB of memory (so that their
36953     addresses can be loaded with the 'ld24' instruction), and are
36954     callable with the 'bl' instruction.
36955
36956     Medium model objects may live anywhere in the 32-bit address space
36957     (the compiler generates 'seth/add3' instructions to load their
36958     addresses), and are callable with the 'bl' instruction.
36959
36960     Large model objects may live anywhere in the 32-bit address space
36961     (the compiler generates 'seth/add3' instructions to load their
36962     addresses), and may not be reachable with the 'bl' instruction (the
36963     compiler generates the much slower 'seth/add3/jl' instruction
36964     sequence).
36965
36966
36967File: gcc.info,  Node: m68k Function Attributes,  Next: MCORE Function Attributes,  Prev: M32R/D Function Attributes,  Up: Function Attributes
36968
369696.33.16 m68k Function Attributes
36970--------------------------------
36971
36972These function attributes are supported by the m68k back end:
36973
36974'interrupt'
36975'interrupt_handler'
36976     Use this attribute to indicate that the specified function is an
36977     interrupt handler.  The compiler generates function entry and exit
36978     sequences suitable for use in an interrupt handler when this
36979     attribute is present.  Either name may be used.
36980
36981'interrupt_thread'
36982     Use this attribute on fido, a subarchitecture of the m68k, to
36983     indicate that the specified function is an interrupt handler that
36984     is designed to run as a thread.  The compiler omits generate
36985     prologue/epilogue sequences and replaces the return instruction
36986     with a 'sleep' instruction.  This attribute is available only on
36987     fido.
36988
36989
36990File: gcc.info,  Node: MCORE Function Attributes,  Next: MeP Function Attributes,  Prev: m68k Function Attributes,  Up: Function Attributes
36991
369926.33.17 MCORE Function Attributes
36993---------------------------------
36994
36995These function attributes are supported by the MCORE back end:
36996
36997'naked'
36998     This attribute allows the compiler to construct the requisite
36999     function declaration, while allowing the body of the function to be
37000     assembly code.  The specified function will not have
37001     prologue/epilogue sequences generated by the compiler.  Only basic
37002     'asm' statements can safely be included in naked functions (*note
37003     Basic Asm::).  While using extended 'asm' or a mixture of basic
37004     'asm' and C code may appear to work, they cannot be depended upon
37005     to work reliably and are not supported.
37006
37007
37008File: gcc.info,  Node: MeP Function Attributes,  Next: MicroBlaze Function Attributes,  Prev: MCORE Function Attributes,  Up: Function Attributes
37009
370106.33.18 MeP Function Attributes
37011-------------------------------
37012
37013These function attributes are supported by the MeP back end:
37014
37015'disinterrupt'
37016     On MeP targets, this attribute causes the compiler to emit
37017     instructions to disable interrupts for the duration of the given
37018     function.
37019
37020'interrupt'
37021     Use this attribute to indicate that the specified function is an
37022     interrupt handler.  The compiler generates function entry and exit
37023     sequences suitable for use in an interrupt handler when this
37024     attribute is present.
37025
37026'near'
37027     This attribute causes the compiler to assume the called function is
37028     close enough to use the normal calling convention, overriding the
37029     '-mtf' command-line option.
37030
37031'far'
37032     On MeP targets this causes the compiler to use a calling convention
37033     that assumes the called function is too far away for the built-in
37034     addressing modes.
37035
37036'vliw'
37037     The 'vliw' attribute tells the compiler to emit instructions in
37038     VLIW mode instead of core mode.  Note that this attribute is not
37039     allowed unless a VLIW coprocessor has been configured and enabled
37040     through command-line options.
37041
37042
37043File: gcc.info,  Node: MicroBlaze Function Attributes,  Next: Microsoft Windows Function Attributes,  Prev: MeP Function Attributes,  Up: Function Attributes
37044
370456.33.19 MicroBlaze Function Attributes
37046--------------------------------------
37047
37048These function attributes are supported on MicroBlaze targets:
37049
37050'save_volatiles'
37051     Use this attribute to indicate that the function is an interrupt
37052     handler.  All volatile registers (in addition to non-volatile
37053     registers) are saved in the function prologue.  If the function is
37054     a leaf function, only volatiles used by the function are saved.  A
37055     normal function return is generated instead of a return from
37056     interrupt.
37057
37058'break_handler'
37059     Use this attribute to indicate that the specified function is a
37060     break handler.  The compiler generates function entry and exit
37061     sequences suitable for use in an break handler when this attribute
37062     is present.  The return from 'break_handler' is done through the
37063     'rtbd' instead of 'rtsd'.
37064
37065          void f () __attribute__ ((break_handler));
37066
37067'interrupt_handler'
37068'fast_interrupt'
37069     These attributes indicate that the specified function is an
37070     interrupt handler.  Use the 'fast_interrupt' attribute to indicate
37071     handlers used in low-latency interrupt mode, and
37072     'interrupt_handler' for interrupts that do not use low-latency
37073     handlers.  In both cases, GCC emits appropriate prologue code and
37074     generates a return from the handler using 'rtid' instead of 'rtsd'.
37075
37076
37077File: gcc.info,  Node: Microsoft Windows Function Attributes,  Next: MIPS Function Attributes,  Prev: MicroBlaze Function Attributes,  Up: Function Attributes
37078
370796.33.20 Microsoft Windows Function Attributes
37080---------------------------------------------
37081
37082The following attributes are available on Microsoft Windows and Symbian
37083OS targets.
37084
37085'dllexport'
37086     On Microsoft Windows targets and Symbian OS targets the 'dllexport'
37087     attribute causes the compiler to provide a global pointer to a
37088     pointer in a DLL, so that it can be referenced with the 'dllimport'
37089     attribute.  On Microsoft Windows targets, the pointer name is
37090     formed by combining '_imp__' and the function or variable name.
37091
37092     You can use '__declspec(dllexport)' as a synonym for '__attribute__
37093     ((dllexport))' for compatibility with other compilers.
37094
37095     On systems that support the 'visibility' attribute, this attribute
37096     also implies "default" visibility.  It is an error to explicitly
37097     specify any other visibility.
37098
37099     GCC's default behavior is to emit all inline functions with the
37100     'dllexport' attribute.  Since this can cause object file-size
37101     bloat, you can use '-fno-keep-inline-dllexport', which tells GCC to
37102     ignore the attribute for inlined functions unless the
37103     '-fkeep-inline-functions' flag is used instead.
37104
37105     The attribute is ignored for undefined symbols.
37106
37107     When applied to C++ classes, the attribute marks defined
37108     non-inlined member functions and static data members as exports.
37109     Static consts initialized in-class are not marked unless they are
37110     also defined out-of-class.
37111
37112     For Microsoft Windows targets there are alternative methods for
37113     including the symbol in the DLL's export table such as using a
37114     '.def' file with an 'EXPORTS' section or, with GNU ld, using the
37115     '--export-all' linker flag.
37116
37117'dllimport'
37118     On Microsoft Windows and Symbian OS targets, the 'dllimport'
37119     attribute causes the compiler to reference a function or variable
37120     via a global pointer to a pointer that is set up by the DLL
37121     exporting the symbol.  The attribute implies 'extern'.  On
37122     Microsoft Windows targets, the pointer name is formed by combining
37123     '_imp__' and the function or variable name.
37124
37125     You can use '__declspec(dllimport)' as a synonym for '__attribute__
37126     ((dllimport))' for compatibility with other compilers.
37127
37128     On systems that support the 'visibility' attribute, this attribute
37129     also implies "default" visibility.  It is an error to explicitly
37130     specify any other visibility.
37131
37132     Currently, the attribute is ignored for inlined functions.  If the
37133     attribute is applied to a symbol _definition_, an error is
37134     reported.  If a symbol previously declared 'dllimport' is later
37135     defined, the attribute is ignored in subsequent references, and a
37136     warning is emitted.  The attribute is also overridden by a
37137     subsequent declaration as 'dllexport'.
37138
37139     When applied to C++ classes, the attribute marks non-inlined member
37140     functions and static data members as imports.  However, the
37141     attribute is ignored for virtual methods to allow creation of
37142     vtables using thunks.
37143
37144     On the SH Symbian OS target the 'dllimport' attribute also has
37145     another affect--it can cause the vtable and run-time type
37146     information for a class to be exported.  This happens when the
37147     class has a dllimported constructor or a non-inline, non-pure
37148     virtual function and, for either of those two conditions, the class
37149     also has an inline constructor or destructor and has a key function
37150     that is defined in the current translation unit.
37151
37152     For Microsoft Windows targets the use of the 'dllimport' attribute
37153     on functions is not necessary, but provides a small performance
37154     benefit by eliminating a thunk in the DLL.  The use of the
37155     'dllimport' attribute on imported variables can be avoided by
37156     passing the '--enable-auto-import' switch to the GNU linker.  As
37157     with functions, using the attribute for a variable eliminates a
37158     thunk in the DLL.
37159
37160     One drawback to using this attribute is that a pointer to a
37161     _variable_ marked as 'dllimport' cannot be used as a constant
37162     address.  However, a pointer to a _function_ with the 'dllimport'
37163     attribute can be used as a constant initializer; in this case, the
37164     address of a stub function in the import lib is referenced.  On
37165     Microsoft Windows targets, the attribute can be disabled for
37166     functions by setting the '-mnop-fun-dllimport' flag.
37167
37168
37169File: gcc.info,  Node: MIPS Function Attributes,  Next: MSP430 Function Attributes,  Prev: Microsoft Windows Function Attributes,  Up: Function Attributes
37170
371716.33.21 MIPS Function Attributes
37172--------------------------------
37173
37174These function attributes are supported by the MIPS back end:
37175
37176'interrupt'
37177     Use this attribute to indicate that the specified function is an
37178     interrupt handler.  The compiler generates function entry and exit
37179     sequences suitable for use in an interrupt handler when this
37180     attribute is present.  An optional argument is supported for the
37181     interrupt attribute which allows the interrupt mode to be
37182     described.  By default GCC assumes the external interrupt
37183     controller (EIC) mode is in use, this can be explicitly set using
37184     'eic'.  When interrupts are non-masked then the requested Interrupt
37185     Priority Level (IPL) is copied to the current IPL which has the
37186     effect of only enabling higher priority interrupts.  To use
37187     vectored interrupt mode use the argument
37188     'vector=[sw0|sw1|hw0|hw1|hw2|hw3|hw4|hw5]', this will change the
37189     behavior of the non-masked interrupt support and GCC will arrange
37190     to mask all interrupts from sw0 up to and including the specified
37191     interrupt vector.
37192
37193     You can use the following attributes to modify the behavior of an
37194     interrupt handler:
37195     'use_shadow_register_set'
37196          Assume that the handler uses a shadow register set, instead of
37197          the main general-purpose registers.  An optional argument
37198          'intstack' is supported to indicate that the shadow register
37199          set contains a valid stack pointer.
37200
37201     'keep_interrupts_masked'
37202          Keep interrupts masked for the whole function.  Without this
37203          attribute, GCC tries to reenable interrupts for as much of the
37204          function as it can.
37205
37206     'use_debug_exception_return'
37207          Return using the 'deret' instruction.  Interrupt handlers that
37208          don't have this attribute return using 'eret' instead.
37209
37210     You can use any combination of these attributes, as shown below:
37211          void __attribute__ ((interrupt)) v0 ();
37212          void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
37213          void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
37214          void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
37215          void __attribute__ ((interrupt, use_shadow_register_set,
37216                               keep_interrupts_masked)) v4 ();
37217          void __attribute__ ((interrupt, use_shadow_register_set,
37218                               use_debug_exception_return)) v5 ();
37219          void __attribute__ ((interrupt, keep_interrupts_masked,
37220                               use_debug_exception_return)) v6 ();
37221          void __attribute__ ((interrupt, use_shadow_register_set,
37222                               keep_interrupts_masked,
37223                               use_debug_exception_return)) v7 ();
37224          void __attribute__ ((interrupt("eic"))) v8 ();
37225          void __attribute__ ((interrupt("vector=hw3"))) v9 ();
37226
37227'long_call'
37228'short_call'
37229'near'
37230'far'
37231     These attributes specify how a particular function is called on
37232     MIPS.  The attributes override the '-mlong-calls' (*note MIPS
37233     Options::) command-line switch.  The 'long_call' and 'far'
37234     attributes are synonyms, and cause the compiler to always call the
37235     function by first loading its address into a register, and then
37236     using the contents of that register.  The 'short_call' and 'near'
37237     attributes are synonyms, and have the opposite effect; they specify
37238     that non-PIC calls should be made using the more efficient 'jal'
37239     instruction.
37240
37241'mips16'
37242'nomips16'
37243
37244     On MIPS targets, you can use the 'mips16' and 'nomips16' function
37245     attributes to locally select or turn off MIPS16 code generation.  A
37246     function with the 'mips16' attribute is emitted as MIPS16 code,
37247     while MIPS16 code generation is disabled for functions with the
37248     'nomips16' attribute.  These attributes override the '-mips16' and
37249     '-mno-mips16' options on the command line (*note MIPS Options::).
37250
37251     When compiling files containing mixed MIPS16 and non-MIPS16 code,
37252     the preprocessor symbol '__mips16' reflects the setting on the
37253     command line, not that within individual functions.  Mixed MIPS16
37254     and non-MIPS16 code may interact badly with some GCC extensions
37255     such as '__builtin_apply' (*note Constructing Calls::).
37256
37257'micromips, MIPS'
37258'nomicromips, MIPS'
37259
37260     On MIPS targets, you can use the 'micromips' and 'nomicromips'
37261     function attributes to locally select or turn off microMIPS code
37262     generation.  A function with the 'micromips' attribute is emitted
37263     as microMIPS code, while microMIPS code generation is disabled for
37264     functions with the 'nomicromips' attribute.  These attributes
37265     override the '-mmicromips' and '-mno-micromips' options on the
37266     command line (*note MIPS Options::).
37267
37268     When compiling files containing mixed microMIPS and non-microMIPS
37269     code, the preprocessor symbol '__mips_micromips' reflects the
37270     setting on the command line, not that within individual functions.
37271     Mixed microMIPS and non-microMIPS code may interact badly with some
37272     GCC extensions such as '__builtin_apply' (*note Constructing
37273     Calls::).
37274
37275'nocompression'
37276     On MIPS targets, you can use the 'nocompression' function attribute
37277     to locally turn off MIPS16 and microMIPS code generation.  This
37278     attribute overrides the '-mips16' and '-mmicromips' options on the
37279     command line (*note MIPS Options::).
37280
37281
37282File: gcc.info,  Node: MSP430 Function Attributes,  Next: NDS32 Function Attributes,  Prev: MIPS Function Attributes,  Up: Function Attributes
37283
372846.33.22 MSP430 Function Attributes
37285----------------------------------
37286
37287These function attributes are supported by the MSP430 back end:
37288
37289'critical'
37290     Critical functions disable interrupts upon entry and restore the
37291     previous interrupt state upon exit.  Critical functions cannot also
37292     have the 'naked', 'reentrant' or 'interrupt' attributes.
37293
37294     The MSP430 hardware ensures that interrupts are disabled on entry
37295     to 'interrupt' functions, and restores the previous interrupt state
37296     on exit.  The 'critical' attribute is therefore redundant on
37297     'interrupt' functions.
37298
37299'interrupt'
37300     Use this attribute to indicate that the specified function is an
37301     interrupt handler.  The compiler generates function entry and exit
37302     sequences suitable for use in an interrupt handler when this
37303     attribute is present.
37304
37305     You can provide an argument to the interrupt attribute which
37306     specifies a name or number.  If the argument is a number it
37307     indicates the slot in the interrupt vector table (0 - 31) to which
37308     this handler should be assigned.  If the argument is a name it is
37309     treated as a symbolic name for the vector slot.  These names should
37310     match up with appropriate entries in the linker script.  By default
37311     the names 'watchdog' for vector 26, 'nmi' for vector 30 and 'reset'
37312     for vector 31 are recognized.
37313
37314'naked'
37315     This attribute allows the compiler to construct the requisite
37316     function declaration, while allowing the body of the function to be
37317     assembly code.  The specified function will not have
37318     prologue/epilogue sequences generated by the compiler.  Only basic
37319     'asm' statements can safely be included in naked functions (*note
37320     Basic Asm::).  While using extended 'asm' or a mixture of basic
37321     'asm' and C code may appear to work, they cannot be depended upon
37322     to work reliably and are not supported.
37323
37324'reentrant'
37325     Reentrant functions disable interrupts upon entry and enable them
37326     upon exit.  Reentrant functions cannot also have the 'naked' or
37327     'critical' attributes.  They can have the 'interrupt' attribute.
37328
37329'wakeup'
37330     This attribute only applies to interrupt functions.  It is silently
37331     ignored if applied to a non-interrupt function.  A wakeup interrupt
37332     function will rouse the processor from any low-power state that it
37333     might be in when the function exits.
37334
37335'lower'
37336'upper'
37337'either'
37338     On the MSP430 target these attributes can be used to specify
37339     whether the function or variable should be placed into low memory,
37340     high memory, or the placement should be left to the linker to
37341     decide.  The attributes are only significant if compiling for the
37342     MSP430X architecture in the large memory model.
37343
37344     The attributes work in conjunction with a linker script that has
37345     been augmented to specify where to place sections with a '.lower'
37346     and a '.upper' prefix.  So, for example, as well as placing the
37347     '.data' section, the script also specifies the placement of a
37348     '.lower.data' and a '.upper.data' section.  The intention is that
37349     'lower' sections are placed into a small but easier to access
37350     memory region and the upper sections are placed into a larger, but
37351     slower to access, region.
37352
37353     The 'either' attribute is special.  It tells the linker to place
37354     the object into the corresponding 'lower' section if there is room
37355     for it.  If there is insufficient room then the object is placed
37356     into the corresponding 'upper' section instead.  Note that the
37357     placement algorithm is not very sophisticated.  It does not attempt
37358     to find an optimal packing of the 'lower' sections.  It just makes
37359     one pass over the objects and does the best that it can.  Using the
37360     '-ffunction-sections' and '-fdata-sections' command-line options
37361     can help the packing, however, since they produce smaller, easier
37362     to pack regions.
37363
37364
37365File: gcc.info,  Node: NDS32 Function Attributes,  Next: Nios II Function Attributes,  Prev: MSP430 Function Attributes,  Up: Function Attributes
37366
373676.33.23 NDS32 Function Attributes
37368---------------------------------
37369
37370These function attributes are supported by the NDS32 back end:
37371
37372'exception'
37373     Use this attribute on the NDS32 target to indicate that the
37374     specified function is an exception handler.  The compiler will
37375     generate corresponding sections for use in an exception handler.
37376
37377'interrupt'
37378     On NDS32 target, this attribute indicates that the specified
37379     function is an interrupt handler.  The compiler generates
37380     corresponding sections for use in an interrupt handler.  You can
37381     use the following attributes to modify the behavior:
37382     'nested'
37383          This interrupt service routine is interruptible.
37384     'not_nested'
37385          This interrupt service routine is not interruptible.
37386     'nested_ready'
37387          This interrupt service routine is interruptible after
37388          'PSW.GIE' (global interrupt enable) is set.  This allows
37389          interrupt service routine to finish some short critical code
37390          before enabling interrupts.
37391     'save_all'
37392          The system will help save all registers into stack before
37393          entering interrupt handler.
37394     'partial_save'
37395          The system will help save caller registers into stack before
37396          entering interrupt handler.
37397
37398'naked'
37399     This attribute allows the compiler to construct the requisite
37400     function declaration, while allowing the body of the function to be
37401     assembly code.  The specified function will not have
37402     prologue/epilogue sequences generated by the compiler.  Only basic
37403     'asm' statements can safely be included in naked functions (*note
37404     Basic Asm::).  While using extended 'asm' or a mixture of basic
37405     'asm' and C code may appear to work, they cannot be depended upon
37406     to work reliably and are not supported.
37407
37408'reset'
37409     Use this attribute on the NDS32 target to indicate that the
37410     specified function is a reset handler.  The compiler will generate
37411     corresponding sections for use in a reset handler.  You can use the
37412     following attributes to provide extra exception handling:
37413     'nmi'
37414          Provide a user-defined function to handle NMI exception.
37415     'warm'
37416          Provide a user-defined function to handle warm reset
37417          exception.
37418
37419
37420File: gcc.info,  Node: Nios II Function Attributes,  Next: Nvidia PTX Function Attributes,  Prev: NDS32 Function Attributes,  Up: Function Attributes
37421
374226.33.24 Nios II Function Attributes
37423-----------------------------------
37424
37425These function attributes are supported by the Nios II back end:
37426
37427'target (OPTIONS)'
37428     As discussed in *note Common Function Attributes::, this attribute
37429     allows specification of target-specific compilation options.
37430
37431     When compiling for Nios II, the following options are allowed:
37432
37433     'custom-INSN=N'
37434     'no-custom-INSN'
37435          Each 'custom-INSN=N' attribute locally enables use of a custom
37436          instruction with encoding N when generating code that uses
37437          INSN.  Similarly, 'no-custom-INSN' locally inhibits use of the
37438          custom instruction INSN.  These target attributes correspond
37439          to the '-mcustom-INSN=N' and '-mno-custom-INSN' command-line
37440          options, and support the same set of INSN keywords.  *Note
37441          Nios II Options::, for more information.
37442
37443     'custom-fpu-cfg=NAME'
37444          This attribute corresponds to the '-mcustom-fpu-cfg=NAME'
37445          command-line option, to select a predefined set of custom
37446          instructions named NAME.  *Note Nios II Options::, for more
37447          information.
37448
37449
37450File: gcc.info,  Node: Nvidia PTX Function Attributes,  Next: PowerPC Function Attributes,  Prev: Nios II Function Attributes,  Up: Function Attributes
37451
374526.33.25 Nvidia PTX Function Attributes
37453--------------------------------------
37454
37455These function attributes are supported by the Nvidia PTX back end:
37456
37457'kernel'
37458     This attribute indicates that the corresponding function should be
37459     compiled as a kernel function, which can be invoked from the host
37460     via the CUDA RT library.  By default functions are only callable
37461     only from other PTX functions.
37462
37463     Kernel functions must have 'void' return type.
37464
37465
37466File: gcc.info,  Node: PowerPC Function Attributes,  Next: RISC-V Function Attributes,  Prev: Nvidia PTX Function Attributes,  Up: Function Attributes
37467
374686.33.26 PowerPC Function Attributes
37469-----------------------------------
37470
37471These function attributes are supported by the PowerPC back end:
37472
37473'longcall'
37474'shortcall'
37475     The 'longcall' attribute indicates that the function might be far
37476     away from the call site and require a different (more expensive)
37477     calling sequence.  The 'shortcall' attribute indicates that the
37478     function is always close enough for the shorter calling sequence to
37479     be used.  These attributes override both the '-mlongcall' switch
37480     and the '#pragma longcall' setting.
37481
37482     *Note RS/6000 and PowerPC Options::, for more information on
37483     whether long calls are necessary.
37484
37485'target (OPTIONS)'
37486     As discussed in *note Common Function Attributes::, this attribute
37487     allows specification of target-specific compilation options.
37488
37489     On the PowerPC, the following options are allowed:
37490
37491     'altivec'
37492     'no-altivec'
37493          Generate code that uses (does not use) AltiVec instructions.
37494          In 32-bit code, you cannot enable AltiVec instructions unless
37495          '-mabi=altivec' is used on the command line.
37496
37497     'cmpb'
37498     'no-cmpb'
37499          Generate code that uses (does not use) the compare bytes
37500          instruction implemented on the POWER6 processor and other
37501          processors that support the PowerPC V2.05 architecture.
37502
37503     'dlmzb'
37504     'no-dlmzb'
37505          Generate code that uses (does not use) the string-search
37506          'dlmzb' instruction on the IBM 405, 440, 464 and 476
37507          processors.  This instruction is generated by default when
37508          targeting those processors.
37509
37510     'fprnd'
37511     'no-fprnd'
37512          Generate code that uses (does not use) the FP round to integer
37513          instructions implemented on the POWER5+ processor and other
37514          processors that support the PowerPC V2.03 architecture.
37515
37516     'hard-dfp'
37517     'no-hard-dfp'
37518          Generate code that uses (does not use) the decimal
37519          floating-point instructions implemented on some POWER
37520          processors.
37521
37522     'isel'
37523     'no-isel'
37524          Generate code that uses (does not use) ISEL instruction.
37525
37526     'mfcrf'
37527     'no-mfcrf'
37528          Generate code that uses (does not use) the move from condition
37529          register field instruction implemented on the POWER4 processor
37530          and other processors that support the PowerPC V2.01
37531          architecture.
37532
37533     'mulhw'
37534     'no-mulhw'
37535          Generate code that uses (does not use) the half-word multiply
37536          and multiply-accumulate instructions on the IBM 405, 440, 464
37537          and 476 processors.  These instructions are generated by
37538          default when targeting those processors.
37539
37540     'multiple'
37541     'no-multiple'
37542          Generate code that uses (does not use) the load multiple word
37543          instructions and the store multiple word instructions.
37544
37545     'update'
37546     'no-update'
37547          Generate code that uses (does not use) the load or store
37548          instructions that update the base register to the address of
37549          the calculated memory location.
37550
37551     'popcntb'
37552     'no-popcntb'
37553          Generate code that uses (does not use) the popcount and
37554          double-precision FP reciprocal estimate instruction
37555          implemented on the POWER5 processor and other processors that
37556          support the PowerPC V2.02 architecture.
37557
37558     'popcntd'
37559     'no-popcntd'
37560          Generate code that uses (does not use) the popcount
37561          instruction implemented on the POWER7 processor and other
37562          processors that support the PowerPC V2.06 architecture.
37563
37564     'powerpc-gfxopt'
37565     'no-powerpc-gfxopt'
37566          Generate code that uses (does not use) the optional PowerPC
37567          architecture instructions in the Graphics group, including
37568          floating-point select.
37569
37570     'powerpc-gpopt'
37571     'no-powerpc-gpopt'
37572          Generate code that uses (does not use) the optional PowerPC
37573          architecture instructions in the General Purpose group,
37574          including floating-point square root.
37575
37576     'recip-precision'
37577     'no-recip-precision'
37578          Assume (do not assume) that the reciprocal estimate
37579          instructions provide higher-precision estimates than is
37580          mandated by the PowerPC ABI.
37581
37582     'string'
37583     'no-string'
37584          Generate code that uses (does not use) the load string
37585          instructions and the store string word instructions to save
37586          multiple registers and do small block moves.
37587
37588     'vsx'
37589     'no-vsx'
37590          Generate code that uses (does not use) vector/scalar (VSX)
37591          instructions, and also enable the use of built-in functions
37592          that allow more direct access to the VSX instruction set.  In
37593          32-bit code, you cannot enable VSX or AltiVec instructions
37594          unless '-mabi=altivec' is used on the command line.
37595
37596     'friz'
37597     'no-friz'
37598          Generate (do not generate) the 'friz' instruction when the
37599          '-funsafe-math-optimizations' option is used to optimize
37600          rounding a floating-point value to 64-bit integer and back to
37601          floating point.  The 'friz' instruction does not return the
37602          same value if the floating-point number is too large to fit in
37603          an integer.
37604
37605     'avoid-indexed-addresses'
37606     'no-avoid-indexed-addresses'
37607          Generate code that tries to avoid (not avoid) the use of
37608          indexed load or store instructions.
37609
37610     'paired'
37611     'no-paired'
37612          Generate code that uses (does not use) the generation of
37613          PAIRED simd instructions.
37614
37615     'longcall'
37616     'no-longcall'
37617          Generate code that assumes (does not assume) that all calls
37618          are far away so that a longer more expensive calling sequence
37619          is required.
37620
37621     'cpu=CPU'
37622          Specify the architecture to generate code for when compiling
37623          the function.  If you select the 'target("cpu=power7")'
37624          attribute when generating 32-bit code, VSX and AltiVec
37625          instructions are not generated unless you use the
37626          '-mabi=altivec' option on the command line.
37627
37628     'tune=TUNE'
37629          Specify the architecture to tune for when compiling the
37630          function.  If you do not specify the 'target("tune=TUNE")'
37631          attribute and you do specify the 'target("cpu=CPU")'
37632          attribute, compilation tunes for the CPU architecture, and not
37633          the default tuning specified on the command line.
37634
37635     On the PowerPC, the inliner does not inline a function that has
37636     different target options than the caller, unless the callee has a
37637     subset of the target options of the caller.
37638
37639
37640File: gcc.info,  Node: RISC-V Function Attributes,  Next: RL78 Function Attributes,  Prev: PowerPC Function Attributes,  Up: Function Attributes
37641
376426.33.27 RISC-V Function Attributes
37643----------------------------------
37644
37645These function attributes are supported by the RISC-V back end:
37646
37647'naked'
37648     This attribute allows the compiler to construct the requisite
37649     function declaration, while allowing the body of the function to be
37650     assembly code.  The specified function will not have
37651     prologue/epilogue sequences generated by the compiler.  Only basic
37652     'asm' statements can safely be included in naked functions (*note
37653     Basic Asm::).  While using extended 'asm' or a mixture of basic
37654     'asm' and C code may appear to work, they cannot be depended upon
37655     to work reliably and are not supported.
37656
37657'interrupt'
37658     Use this attribute to indicate that the specified function is an
37659     interrupt handler.  The compiler generates function entry and exit
37660     sequences suitable for use in an interrupt handler when this
37661     attribute is present.
37662
37663     You can specify the kind of interrupt to be handled by adding an
37664     optional parameter to the interrupt attribute like this:
37665
37666          void f (void) __attribute__ ((interrupt ("user")));
37667
37668     Permissible values for this parameter are 'user', 'supervisor', and
37669     'machine'.  If there is no parameter, then it defaults to
37670     'machine'.
37671
37672
37673File: gcc.info,  Node: RL78 Function Attributes,  Next: RX Function Attributes,  Prev: RISC-V Function Attributes,  Up: Function Attributes
37674
376756.33.28 RL78 Function Attributes
37676--------------------------------
37677
37678These function attributes are supported by the RL78 back end:
37679
37680'interrupt'
37681'brk_interrupt'
37682     These attributes indicate that the specified function is an
37683     interrupt handler.  The compiler generates function entry and exit
37684     sequences suitable for use in an interrupt handler when this
37685     attribute is present.
37686
37687     Use 'brk_interrupt' instead of 'interrupt' for handlers intended to
37688     be used with the 'BRK' opcode (i.e. those that must end with 'RETB'
37689     instead of 'RETI').
37690
37691'naked'
37692     This attribute allows the compiler to construct the requisite
37693     function declaration, while allowing the body of the function to be
37694     assembly code.  The specified function will not have
37695     prologue/epilogue sequences generated by the compiler.  Only basic
37696     'asm' statements can safely be included in naked functions (*note
37697     Basic Asm::).  While using extended 'asm' or a mixture of basic
37698     'asm' and C code may appear to work, they cannot be depended upon
37699     to work reliably and are not supported.
37700
37701
37702File: gcc.info,  Node: RX Function Attributes,  Next: S/390 Function Attributes,  Prev: RL78 Function Attributes,  Up: Function Attributes
37703
377046.33.29 RX Function Attributes
37705------------------------------
37706
37707These function attributes are supported by the RX back end:
37708
37709'fast_interrupt'
37710     Use this attribute on the RX port to indicate that the specified
37711     function is a fast interrupt handler.  This is just like the
37712     'interrupt' attribute, except that 'freit' is used to return
37713     instead of 'reit'.
37714
37715'interrupt'
37716     Use this attribute to indicate that the specified function is an
37717     interrupt handler.  The compiler generates function entry and exit
37718     sequences suitable for use in an interrupt handler when this
37719     attribute is present.
37720
37721     On RX and RL78 targets, you may specify one or more vector numbers
37722     as arguments to the attribute, as well as naming an alternate table
37723     name.  Parameters are handled sequentially, so one handler can be
37724     assigned to multiple entries in multiple tables.  One may also pass
37725     the magic string '"$default"' which causes the function to be used
37726     for any unfilled slots in the current table.
37727
37728     This example shows a simple assignment of a function to one vector
37729     in the default table (note that preprocessor macros may be used for
37730     chip-specific symbolic vector names):
37731          void __attribute__ ((interrupt (5))) txd1_handler ();
37732
37733     This example assigns a function to two slots in the default table
37734     (using preprocessor macros defined elsewhere) and makes it the
37735     default for the 'dct' table:
37736          void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default")))
37737          	txd1_handler ();
37738
37739'naked'
37740     This attribute allows the compiler to construct the requisite
37741     function declaration, while allowing the body of the function to be
37742     assembly code.  The specified function will not have
37743     prologue/epilogue sequences generated by the compiler.  Only basic
37744     'asm' statements can safely be included in naked functions (*note
37745     Basic Asm::).  While using extended 'asm' or a mixture of basic
37746     'asm' and C code may appear to work, they cannot be depended upon
37747     to work reliably and are not supported.
37748
37749'vector'
37750     This RX attribute is similar to the 'interrupt' attribute,
37751     including its parameters, but does not make the function an
37752     interrupt-handler type function (i.e. it retains the normal C
37753     function calling ABI). See the 'interrupt' attribute for a
37754     description of its arguments.
37755
37756
37757File: gcc.info,  Node: S/390 Function Attributes,  Next: SH Function Attributes,  Prev: RX Function Attributes,  Up: Function Attributes
37758
377596.33.30 S/390 Function Attributes
37760---------------------------------
37761
37762These function attributes are supported on the S/390:
37763
37764'hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)'
37765
37766     On S/390 System z targets, you can use this function attribute to
37767     make GCC generate a "hot-patching" function prologue.  If the
37768     '-mhotpatch=' command-line option is used at the same time, the
37769     'hotpatch' attribute takes precedence.  The first of the two
37770     arguments specifies the number of halfwords to be added before the
37771     function label.  A second argument can be used to specify the
37772     number of halfwords to be added after the function label.  For both
37773     arguments the maximum allowed value is 1000000.
37774
37775     If both arguments are zero, hotpatching is disabled.
37776
37777'target (OPTIONS)'
37778     As discussed in *note Common Function Attributes::, this attribute
37779     allows specification of target-specific compilation options.
37780
37781     On S/390, the following options are supported:
37782
37783     'arch='
37784     'tune='
37785     'stack-guard='
37786     'stack-size='
37787     'branch-cost='
37788     'warn-framesize='
37789     'backchain'
37790     'no-backchain'
37791     'hard-dfp'
37792     'no-hard-dfp'
37793     'hard-float'
37794     'soft-float'
37795     'htm'
37796     'no-htm'
37797     'vx'
37798     'no-vx'
37799     'packed-stack'
37800     'no-packed-stack'
37801     'small-exec'
37802     'no-small-exec'
37803     'mvcle'
37804     'no-mvcle'
37805     'warn-dynamicstack'
37806     'no-warn-dynamicstack'
37807
37808     The options work exactly like the S/390 specific command line
37809     options (without the prefix '-m') except that they do not change
37810     any feature macros.  For example,
37811
37812          target("no-vx")
37813
37814     does not undefine the '__VEC__' macro.
37815
37816
37817File: gcc.info,  Node: SH Function Attributes,  Next: Symbian OS Function Attributes,  Prev: S/390 Function Attributes,  Up: Function Attributes
37818
378196.33.31 SH Function Attributes
37820------------------------------
37821
37822These function attributes are supported on the SH family of processors:
37823
37824'function_vector'
37825     On SH2A targets, this attribute declares a function to be called
37826     using the TBR relative addressing mode.  The argument to this
37827     attribute is the entry number of the same function in a vector
37828     table containing all the TBR relative addressable functions.  For
37829     correct operation the TBR must be setup accordingly to point to the
37830     start of the vector table before any functions with this attribute
37831     are invoked.  Usually a good place to do the initialization is the
37832     startup routine.  The TBR relative vector table can have at max 256
37833     function entries.  The jumps to these functions are generated using
37834     a SH2A specific, non delayed branch instruction JSR/N @(disp8,TBR).
37835     You must use GAS and GLD from GNU binutils version 2.7 or later for
37836     this attribute to work correctly.
37837
37838     In an application, for a function being called once, this attribute
37839     saves at least 8 bytes of code; and if other successive calls are
37840     being made to the same function, it saves 2 bytes of code per each
37841     of these calls.
37842
37843'interrupt_handler'
37844     Use this attribute to indicate that the specified function is an
37845     interrupt handler.  The compiler generates function entry and exit
37846     sequences suitable for use in an interrupt handler when this
37847     attribute is present.
37848
37849'nosave_low_regs'
37850     Use this attribute on SH targets to indicate that an
37851     'interrupt_handler' function should not save and restore registers
37852     R0..R7.  This can be used on SH3* and SH4* targets that have a
37853     second R0..R7 register bank for non-reentrant interrupt handlers.
37854
37855'renesas'
37856     On SH targets this attribute specifies that the function or struct
37857     follows the Renesas ABI.
37858
37859'resbank'
37860     On the SH2A target, this attribute enables the high-speed register
37861     saving and restoration using a register bank for
37862     'interrupt_handler' routines.  Saving to the bank is performed
37863     automatically after the CPU accepts an interrupt that uses a
37864     register bank.
37865
37866     The nineteen 32-bit registers comprising general register R0 to
37867     R14, control register GBR, and system registers MACH, MACL, and PR
37868     and the vector table address offset are saved into a register bank.
37869     Register banks are stacked in first-in last-out (FILO) sequence.
37870     Restoration from the bank is executed by issuing a RESBANK
37871     instruction.
37872
37873'sp_switch'
37874     Use this attribute on the SH to indicate an 'interrupt_handler'
37875     function should switch to an alternate stack.  It expects a string
37876     argument that names a global variable holding the address of the
37877     alternate stack.
37878
37879          void *alt_stack;
37880          void f () __attribute__ ((interrupt_handler,
37881                                    sp_switch ("alt_stack")));
37882
37883'trap_exit'
37884     Use this attribute on the SH for an 'interrupt_handler' to return
37885     using 'trapa' instead of 'rte'.  This attribute expects an integer
37886     argument specifying the trap number to be used.
37887
37888'trapa_handler'
37889     On SH targets this function attribute is similar to
37890     'interrupt_handler' but it does not save and restore all registers.
37891
37892
37893File: gcc.info,  Node: Symbian OS Function Attributes,  Next: V850 Function Attributes,  Prev: SH Function Attributes,  Up: Function Attributes
37894
378956.33.32 Symbian OS Function Attributes
37896--------------------------------------
37897
37898*Note Microsoft Windows Function Attributes::, for discussion of the
37899'dllexport' and 'dllimport' attributes.
37900
37901
37902File: gcc.info,  Node: V850 Function Attributes,  Next: Visium Function Attributes,  Prev: Symbian OS Function Attributes,  Up: Function Attributes
37903
379046.33.33 V850 Function Attributes
37905--------------------------------
37906
37907The V850 back end supports these function attributes:
37908
37909'interrupt'
37910'interrupt_handler'
37911     Use these attributes to indicate that the specified function is an
37912     interrupt handler.  The compiler generates function entry and exit
37913     sequences suitable for use in an interrupt handler when either
37914     attribute is present.
37915
37916
37917File: gcc.info,  Node: Visium Function Attributes,  Next: x86 Function Attributes,  Prev: V850 Function Attributes,  Up: Function Attributes
37918
379196.33.34 Visium Function Attributes
37920----------------------------------
37921
37922These function attributes are supported by the Visium back end:
37923
37924'interrupt'
37925     Use this attribute to indicate that the specified function is an
37926     interrupt handler.  The compiler generates function entry and exit
37927     sequences suitable for use in an interrupt handler when this
37928     attribute is present.
37929
37930
37931File: gcc.info,  Node: x86 Function Attributes,  Next: Xstormy16 Function Attributes,  Prev: Visium Function Attributes,  Up: Function Attributes
37932
379336.33.35 x86 Function Attributes
37934-------------------------------
37935
37936These function attributes are supported by the x86 back end:
37937
37938'cdecl'
37939     On the x86-32 targets, the 'cdecl' attribute causes the compiler to
37940     assume that the calling function pops off the stack space used to
37941     pass arguments.  This is useful to override the effects of the
37942     '-mrtd' switch.
37943
37944'fastcall'
37945     On x86-32 targets, the 'fastcall' attribute causes the compiler to
37946     pass the first argument (if of integral type) in the register ECX
37947     and the second argument (if of integral type) in the register EDX.
37948     Subsequent and other typed arguments are passed on the stack.  The
37949     called function pops the arguments off the stack.  If the number of
37950     arguments is variable all arguments are pushed on the stack.
37951
37952'thiscall'
37953     On x86-32 targets, the 'thiscall' attribute causes the compiler to
37954     pass the first argument (if of integral type) in the register ECX.
37955     Subsequent and other typed arguments are passed on the stack.  The
37956     called function pops the arguments off the stack.  If the number of
37957     arguments is variable all arguments are pushed on the stack.  The
37958     'thiscall' attribute is intended for C++ non-static member
37959     functions.  As a GCC extension, this calling convention can be used
37960     for C functions and for static member methods.
37961
37962'ms_abi'
37963'sysv_abi'
37964
37965     On 32-bit and 64-bit x86 targets, you can use an ABI attribute to
37966     indicate which calling convention should be used for a function.
37967     The 'ms_abi' attribute tells the compiler to use the Microsoft ABI,
37968     while the 'sysv_abi' attribute tells the compiler to use the System
37969     V ELF ABI, which is used on GNU/Linux and other systems.  The
37970     default is to use the Microsoft ABI when targeting Windows.  On all
37971     other systems, the default is the System V ELF ABI.
37972
37973     Note, the 'ms_abi' attribute for Microsoft Windows 64-bit targets
37974     currently requires the '-maccumulate-outgoing-args' option.
37975
37976'callee_pop_aggregate_return (NUMBER)'
37977
37978     On x86-32 targets, you can use this attribute to control how
37979     aggregates are returned in memory.  If the caller is responsible
37980     for popping the hidden pointer together with the rest of the
37981     arguments, specify NUMBER equal to zero.  If callee is responsible
37982     for popping the hidden pointer, specify NUMBER equal to one.
37983
37984     The default x86-32 ABI assumes that the callee pops the stack for
37985     hidden pointer.  However, on x86-32 Microsoft Windows targets, the
37986     compiler assumes that the caller pops the stack for hidden pointer.
37987
37988'ms_hook_prologue'
37989
37990     On 32-bit and 64-bit x86 targets, you can use this function
37991     attribute to make GCC generate the "hot-patching" function prologue
37992     used in Win32 API functions in Microsoft Windows XP Service Pack 2
37993     and newer.
37994
37995'naked'
37996     This attribute allows the compiler to construct the requisite
37997     function declaration, while allowing the body of the function to be
37998     assembly code.  The specified function will not have
37999     prologue/epilogue sequences generated by the compiler.  Only basic
38000     'asm' statements can safely be included in naked functions (*note
38001     Basic Asm::).  While using extended 'asm' or a mixture of basic
38002     'asm' and C code may appear to work, they cannot be depended upon
38003     to work reliably and are not supported.
38004
38005'regparm (NUMBER)'
38006     On x86-32 targets, the 'regparm' attribute causes the compiler to
38007     pass arguments number one to NUMBER if they are of integral type in
38008     registers EAX, EDX, and ECX instead of on the stack.  Functions
38009     that take a variable number of arguments continue to be passed all
38010     of their arguments on the stack.
38011
38012     Beware that on some ELF systems this attribute is unsuitable for
38013     global functions in shared libraries with lazy binding (which is
38014     the default).  Lazy binding sends the first call via resolving code
38015     in the loader, which might assume EAX, EDX and ECX can be
38016     clobbered, as per the standard calling conventions.  Solaris 8 is
38017     affected by this.  Systems with the GNU C Library version 2.1 or
38018     higher and FreeBSD are believed to be safe since the loaders there
38019     save EAX, EDX and ECX. (Lazy binding can be disabled with the
38020     linker or the loader if desired, to avoid the problem.)
38021
38022'sseregparm'
38023     On x86-32 targets with SSE support, the 'sseregparm' attribute
38024     causes the compiler to pass up to 3 floating-point arguments in SSE
38025     registers instead of on the stack.  Functions that take a variable
38026     number of arguments continue to pass all of their floating-point
38027     arguments on the stack.
38028
38029'force_align_arg_pointer'
38030     On x86 targets, the 'force_align_arg_pointer' attribute may be
38031     applied to individual function definitions, generating an alternate
38032     prologue and epilogue that realigns the run-time stack if
38033     necessary.  This supports mixing legacy codes that run with a
38034     4-byte aligned stack with modern codes that keep a 16-byte stack
38035     for SSE compatibility.
38036
38037'stdcall'
38038     On x86-32 targets, the 'stdcall' attribute causes the compiler to
38039     assume that the called function pops off the stack space used to
38040     pass arguments, unless it takes a variable number of arguments.
38041
38042'no_caller_saved_registers'
38043     Use this attribute to indicate that the specified function has no
38044     caller-saved registers.  That is, all registers are callee-saved.
38045     For example, this attribute can be used for a function called from
38046     an interrupt handler.  The compiler generates proper function entry
38047     and exit sequences to save and restore any modified registers,
38048     except for the EFLAGS register.  Since GCC doesn't preserve SSE,
38049     MMX nor x87 states, the GCC option '-mgeneral-regs-only' should be
38050     used to compile functions with 'no_caller_saved_registers'
38051     attribute.
38052
38053'interrupt'
38054     Use this attribute to indicate that the specified function is an
38055     interrupt handler or an exception handler (depending on parameters
38056     passed to the function, explained further).  The compiler generates
38057     function entry and exit sequences suitable for use in an interrupt
38058     handler when this attribute is present.  The 'IRET' instruction,
38059     instead of the 'RET' instruction, is used to return from interrupt
38060     handlers.  All registers, except for the EFLAGS register which is
38061     restored by the 'IRET' instruction, are preserved by the compiler.
38062     Since GCC doesn't preserve SSE, MMX nor x87 states, the GCC option
38063     '-mgeneral-regs-only' should be used to compile interrupt and
38064     exception handlers.
38065
38066     Any interruptible-without-stack-switch code must be compiled with
38067     '-mno-red-zone' since interrupt handlers can and will, because of
38068     the hardware design, touch the red zone.
38069
38070     An interrupt handler must be declared with a mandatory pointer
38071     argument:
38072
38073          struct interrupt_frame;
38074
38075          __attribute__ ((interrupt))
38076          void
38077          f (struct interrupt_frame *frame)
38078          {
38079          }
38080
38081     and you must define 'struct interrupt_frame' as described in the
38082     processor's manual.
38083
38084     Exception handlers differ from interrupt handlers because the
38085     system pushes an error code on the stack.  An exception handler
38086     declaration is similar to that for an interrupt handler, but with a
38087     different mandatory function signature.  The compiler arranges to
38088     pop the error code off the stack before the 'IRET' instruction.
38089
38090          #ifdef __x86_64__
38091          typedef unsigned long long int uword_t;
38092          #else
38093          typedef unsigned int uword_t;
38094          #endif
38095
38096          struct interrupt_frame;
38097
38098          __attribute__ ((interrupt))
38099          void
38100          f (struct interrupt_frame *frame, uword_t error_code)
38101          {
38102            ...
38103          }
38104
38105     Exception handlers should only be used for exceptions that push an
38106     error code; you should use an interrupt handler in other cases.
38107     The system will crash if the wrong kind of handler is used.
38108
38109'target (OPTIONS)'
38110     As discussed in *note Common Function Attributes::, this attribute
38111     allows specification of target-specific compilation options.
38112
38113     On the x86, the following options are allowed:
38114     '3dnow'
38115     'no-3dnow'
38116          Enable/disable the generation of the 3DNow! instructions.
38117
38118     '3dnowa'
38119     'no-3dnowa'
38120          Enable/disable the generation of the enhanced 3DNow!
38121          instructions.
38122
38123     'abm'
38124     'no-abm'
38125          Enable/disable the generation of the advanced bit
38126          instructions.
38127
38128     'adx'
38129     'no-adx'
38130          Enable/disable the generation of the ADX instructions.
38131
38132     'aes'
38133     'no-aes'
38134          Enable/disable the generation of the AES instructions.
38135
38136     'avx'
38137     'no-avx'
38138          Enable/disable the generation of the AVX instructions.
38139
38140     'avx2'
38141     'no-avx2'
38142          Enable/disable the generation of the AVX2 instructions.
38143
38144     'avx5124fmaps'
38145     'no-avx5124fmaps'
38146          Enable/disable the generation of the AVX5124FMAPS
38147          instructions.
38148
38149     'avx5124vnniw'
38150     'no-avx5124vnniw'
38151          Enable/disable the generation of the AVX5124VNNIW
38152          instructions.
38153
38154     'avx512bitalg'
38155     'no-avx512bitalg'
38156          Enable/disable the generation of the AVX512BITALG
38157          instructions.
38158
38159     'avx512bw'
38160     'no-avx512bw'
38161          Enable/disable the generation of the AVX512BW instructions.
38162
38163     'avx512cd'
38164     'no-avx512cd'
38165          Enable/disable the generation of the AVX512CD instructions.
38166
38167     'avx512dq'
38168     'no-avx512dq'
38169          Enable/disable the generation of the AVX512DQ instructions.
38170
38171     'avx512er'
38172     'no-avx512er'
38173          Enable/disable the generation of the AVX512ER instructions.
38174
38175     'avx512f'
38176     'no-avx512f'
38177          Enable/disable the generation of the AVX512F instructions.
38178
38179     'avx512ifma'
38180     'no-avx512ifma'
38181          Enable/disable the generation of the AVX512IFMA instructions.
38182
38183     'avx512pf'
38184     'no-avx512pf'
38185          Enable/disable the generation of the AVX512PF instructions.
38186
38187     'avx512vbmi'
38188     'no-avx512vbmi'
38189          Enable/disable the generation of the AVX512VBMI instructions.
38190
38191     'avx512vbmi2'
38192     'no-avx512vbmi2'
38193          Enable/disable the generation of the AVX512VBMI2 instructions.
38194
38195     'avx512vl'
38196     'no-avx512vl'
38197          Enable/disable the generation of the AVX512VL instructions.
38198
38199     'avx512vnni'
38200     'no-avx512vnni'
38201          Enable/disable the generation of the AVX512VNNI instructions.
38202
38203     'avx512vpopcntdq'
38204     'no-avx512vpopcntdq'
38205          Enable/disable the generation of the AVX512VPOPCNTDQ
38206          instructions.
38207
38208     'bmi'
38209     'no-bmi'
38210          Enable/disable the generation of the BMI instructions.
38211
38212     'bmi2'
38213     'no-bmi2'
38214          Enable/disable the generation of the BMI2 instructions.
38215
38216     'cldemote'
38217     'no-cldemote'
38218          Enable/disable the generation of the CLDEMOTE instructions.
38219
38220     'clflushopt'
38221     'no-clflushopt'
38222          Enable/disable the generation of the CLFLUSHOPT instructions.
38223
38224     'clwb'
38225     'no-clwb'
38226          Enable/disable the generation of the CLWB instructions.
38227
38228     'clzero'
38229     'no-clzero'
38230          Enable/disable the generation of the CLZERO instructions.
38231
38232     'crc32'
38233     'no-crc32'
38234          Enable/disable the generation of the CRC32 instructions.
38235
38236     'cx16'
38237     'no-cx16'
38238          Enable/disable the generation of the CMPXCHG16B instructions.
38239
38240     'default'
38241          *Note Function Multiversioning::, where it is used to specify
38242          the default function version.
38243
38244     'f16c'
38245     'no-f16c'
38246          Enable/disable the generation of the F16C instructions.
38247
38248     'fma'
38249     'no-fma'
38250          Enable/disable the generation of the FMA instructions.
38251
38252     'fma4'
38253     'no-fma4'
38254          Enable/disable the generation of the FMA4 instructions.
38255
38256     'fsgsbase'
38257     'no-fsgsbase'
38258          Enable/disable the generation of the FSGSBASE instructions.
38259
38260     'fxsr'
38261     'no-fxsr'
38262          Enable/disable the generation of the FXSR instructions.
38263
38264     'gfni'
38265     'no-gfni'
38266          Enable/disable the generation of the GFNI instructions.
38267
38268     'hle'
38269     'no-hle'
38270          Enable/disable the generation of the HLE instruction prefixes.
38271
38272     'lwp'
38273     'no-lwp'
38274          Enable/disable the generation of the LWP instructions.
38275
38276     'lzcnt'
38277     'no-lzcnt'
38278          Enable/disable the generation of the LZCNT instructions.
38279
38280     'mmx'
38281     'no-mmx'
38282          Enable/disable the generation of the MMX instructions.
38283
38284     'movbe'
38285     'no-movbe'
38286          Enable/disable the generation of the MOVBE instructions.
38287
38288     'movdir64b'
38289     'no-movdir64b'
38290          Enable/disable the generation of the MOVDIR64B instructions.
38291
38292     'movdiri'
38293     'no-movdiri'
38294          Enable/disable the generation of the MOVDIRI instructions.
38295
38296     'mwait'
38297     'no-mwait'
38298          Enable/disable the generation of the MWAIT and MONITOR
38299          instructions.
38300
38301     'mwaitx'
38302     'no-mwaitx'
38303          Enable/disable the generation of the MWAITX instructions.
38304
38305     'pclmul'
38306     'no-pclmul'
38307          Enable/disable the generation of the PCLMUL instructions.
38308
38309     'pconfig'
38310     'no-pconfig'
38311          Enable/disable the generation of the PCONFIG instructions.
38312
38313     'pku'
38314     'no-pku'
38315          Enable/disable the generation of the PKU instructions.
38316
38317     'popcnt'
38318     'no-popcnt'
38319          Enable/disable the generation of the POPCNT instruction.
38320
38321     'prefetchwt1'
38322     'no-prefetchwt1'
38323          Enable/disable the generation of the PREFETCHWT1 instructions.
38324
38325     'prfchw'
38326     'no-prfchw'
38327          Enable/disable the generation of the PREFETCHW instruction.
38328
38329     'ptwrite'
38330     'no-ptwrite'
38331          Enable/disable the generation of the PTWRITE instructions.
38332
38333     'rdpid'
38334     'no-rdpid'
38335          Enable/disable the generation of the RDPID instructions.
38336
38337     'rdrnd'
38338     'no-rdrnd'
38339          Enable/disable the generation of the RDRND instructions.
38340
38341     'rdseed'
38342     'no-rdseed'
38343          Enable/disable the generation of the RDSEED instructions.
38344
38345     'rtm'
38346     'no-rtm'
38347          Enable/disable the generation of the RTM instructions.
38348
38349     'sahf'
38350     'no-sahf'
38351          Enable/disable the generation of the SAHF instructions.
38352
38353     'sgx'
38354     'no-sgx'
38355          Enable/disable the generation of the SGX instructions.
38356
38357     'sha'
38358     'no-sha'
38359          Enable/disable the generation of the SHA instructions.
38360
38361     'shstk'
38362     'no-shstk'
38363          Enable/disable the shadow stack built-in functions from CET.
38364
38365     'sse'
38366     'no-sse'
38367          Enable/disable the generation of the SSE instructions.
38368
38369     'sse2'
38370     'no-sse2'
38371          Enable/disable the generation of the SSE2 instructions.
38372
38373     'sse3'
38374     'no-sse3'
38375          Enable/disable the generation of the SSE3 instructions.
38376
38377     'sse4'
38378     'no-sse4'
38379          Enable/disable the generation of the SSE4 instructions (both
38380          SSE4.1 and SSE4.2).
38381
38382     'sse4.1'
38383     'no-sse4.1'
38384          Enable/disable the generation of the SSE4.1 instructions.
38385
38386     'sse4.2'
38387     'no-sse4.2'
38388          Enable/disable the generation of the SSE4.2 instructions.
38389
38390     'sse4a'
38391     'no-sse4a'
38392          Enable/disable the generation of the SSE4A instructions.
38393
38394     'ssse3'
38395     'no-ssse3'
38396          Enable/disable the generation of the SSSE3 instructions.
38397
38398     'tbm'
38399     'no-tbm'
38400          Enable/disable the generation of the TBM instructions.
38401
38402     'vaes'
38403     'no-vaes'
38404          Enable/disable the generation of the VAES instructions.
38405
38406     'vpclmulqdq'
38407     'no-vpclmulqdq'
38408          Enable/disable the generation of the VPCLMULQDQ instructions.
38409
38410     'waitpkg'
38411     'no-waitpkg'
38412          Enable/disable the generation of the WAITPKG instructions.
38413
38414     'wbnoinvd'
38415     'no-wbnoinvd'
38416          Enable/disable the generation of the WBNOINVD instructions.
38417
38418     'xop'
38419     'no-xop'
38420          Enable/disable the generation of the XOP instructions.
38421
38422     'xsave'
38423     'no-xsave'
38424          Enable/disable the generation of the XSAVE instructions.
38425
38426     'xsavec'
38427     'no-xsavec'
38428          Enable/disable the generation of the XSAVEC instructions.
38429
38430     'xsaveopt'
38431     'no-xsaveopt'
38432          Enable/disable the generation of the XSAVEOPT instructions.
38433
38434     'xsaves'
38435     'no-xsaves'
38436          Enable/disable the generation of the XSAVES instructions.
38437
38438     'amx-tile'
38439     'no-amx-tile'
38440          Enable/disable the generation of the AMX-TILE instructions.
38441
38442     'amx-int8'
38443     'no-amx-int8'
38444          Enable/disable the generation of the AMX-INT8 instructions.
38445
38446     'amx-bf16'
38447     'no-amx-bf16'
38448          Enable/disable the generation of the AMX-BF16 instructions.
38449
38450     'uintr'
38451     'no-uintr'
38452          Enable/disable the generation of the UINTR instructions.
38453
38454     'hreset'
38455     'no-hreset'
38456          Enable/disable the generation of the HRESET instruction.
38457
38458     'kl'
38459     'no-kl'
38460          Enable/disable the generation of the KEYLOCKER instructions.
38461
38462     'widekl'
38463     'no-widekl'
38464          Enable/disable the generation of the WIDEKL instructions.
38465
38466     'avxvnni'
38467     'no-avxvnni'
38468          Enable/disable the generation of the AVXVNNI instructions.
38469
38470     'cld'
38471     'no-cld'
38472          Enable/disable the generation of the CLD before string moves.
38473
38474     'fancy-math-387'
38475     'no-fancy-math-387'
38476          Enable/disable the generation of the 'sin', 'cos', and 'sqrt'
38477          instructions on the 387 floating-point unit.
38478
38479     'ieee-fp'
38480     'no-ieee-fp'
38481          Enable/disable the generation of floating point that depends
38482          on IEEE arithmetic.
38483
38484     'inline-all-stringops'
38485     'no-inline-all-stringops'
38486          Enable/disable inlining of string operations.
38487
38488     'inline-stringops-dynamically'
38489     'no-inline-stringops-dynamically'
38490          Enable/disable the generation of the inline code to do small
38491          string operations and calling the library routines for large
38492          operations.
38493
38494     'align-stringops'
38495     'no-align-stringops'
38496          Do/do not align destination of inlined string operations.
38497
38498     'recip'
38499     'no-recip'
38500          Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
38501          RSQRTPS instructions followed an additional Newton-Raphson
38502          step instead of doing a floating-point division.
38503
38504     'general-regs-only'
38505          Generate code which uses only the general registers.
38506
38507     'arch=ARCH'
38508          Specify the architecture to generate code for in compiling the
38509          function.
38510
38511     'tune=TUNE'
38512          Specify the architecture to tune for in compiling the
38513          function.
38514
38515     'fpmath=FPMATH'
38516          Specify which floating-point unit to use.  You must specify
38517          the 'target("fpmath=sse,387")' option as
38518          'target("fpmath=sse+387")' because the comma would separate
38519          different options.
38520
38521     'prefer-vector-width=OPT'
38522          On x86 targets, the 'prefer-vector-width' attribute informs
38523          the compiler to use OPT-bit vector width in instructions
38524          instead of the default on the selected platform.
38525
38526          Valid OPT values are:
38527
38528          'none'
38529               No extra limitations applied to GCC other than defined by
38530               the selected platform.
38531
38532          '128'
38533               Prefer 128-bit vector width for instructions.
38534
38535          '256'
38536               Prefer 256-bit vector width for instructions.
38537
38538          '512'
38539               Prefer 512-bit vector width for instructions.
38540
38541          On the x86, the inliner does not inline a function that has
38542          different target options than the caller, unless the callee
38543          has a subset of the target options of the caller.  For example
38544          a function declared with 'target("sse3")' can inline a
38545          function with 'target("sse2")', since '-msse3' implies
38546          '-msse2'.
38547
38548'indirect_branch("CHOICE")'
38549     On x86 targets, the 'indirect_branch' attribute causes the compiler
38550     to convert indirect call and jump with CHOICE.  'keep' keeps
38551     indirect call and jump unmodified.  'thunk' converts indirect call
38552     and jump to call and return thunk.  'thunk-inline' converts
38553     indirect call and jump to inlined call and return thunk.
38554     'thunk-extern' converts indirect call and jump to external call and
38555     return thunk provided in a separate object file.
38556
38557'function_return("CHOICE")'
38558     On x86 targets, the 'function_return' attribute causes the compiler
38559     to convert function return with CHOICE.  'keep' keeps function
38560     return unmodified.  'thunk' converts function return to call and
38561     return thunk.  'thunk-inline' converts function return to inlined
38562     call and return thunk.  'thunk-extern' converts function return to
38563     external call and return thunk provided in a separate object file.
38564
38565'nocf_check'
38566     The 'nocf_check' attribute on a function is used to inform the
38567     compiler that the function's prologue should not be instrumented
38568     when compiled with the '-fcf-protection=branch' option.  The
38569     compiler assumes that the function's address is a valid target for
38570     a control-flow transfer.
38571
38572     The 'nocf_check' attribute on a type of pointer to function is used
38573     to inform the compiler that a call through the pointer should not
38574     be instrumented when compiled with the '-fcf-protection=branch'
38575     option.  The compiler assumes that the function's address from the
38576     pointer is a valid target for a control-flow transfer.  A direct
38577     function call through a function name is assumed to be a safe call
38578     thus direct calls are not instrumented by the compiler.
38579
38580     The 'nocf_check' attribute is applied to an object's type.  In case
38581     of assignment of a function address or a function pointer to
38582     another pointer, the attribute is not carried over from the
38583     right-hand object's type; the type of left-hand object stays
38584     unchanged.  The compiler checks for 'nocf_check' attribute mismatch
38585     and reports a warning in case of mismatch.
38586
38587          {
38588          int foo (void) __attribute__(nocf_check);
38589          void (*foo1)(void) __attribute__(nocf_check);
38590          void (*foo2)(void);
38591
38592          /* foo's address is assumed to be valid.  */
38593          int
38594          foo (void)
38595
38596            /* This call site is not checked for control-flow
38597               validity.  */
38598            (*foo1)();
38599
38600            /* A warning is issued about attribute mismatch.  */
38601            foo1 = foo2;
38602
38603            /* This call site is still not checked.  */
38604            (*foo1)();
38605
38606            /* This call site is checked.  */
38607            (*foo2)();
38608
38609            /* A warning is issued about attribute mismatch.  */
38610            foo2 = foo1;
38611
38612            /* This call site is still checked.  */
38613            (*foo2)();
38614
38615            return 0;
38616          }
38617
38618'cf_check'
38619
38620     The 'cf_check' attribute on a function is used to inform the
38621     compiler that ENDBR instruction should be placed at the function
38622     entry when '-fcf-protection=branch' is enabled.
38623
38624'indirect_return'
38625
38626     The 'indirect_return' attribute can be applied to a function, as
38627     well as variable or type of function pointer to inform the compiler
38628     that the function may return via indirect branch.
38629
38630'fentry_name("NAME")'
38631     On x86 targets, the 'fentry_name' attribute sets the function to
38632     call on function entry when function instrumentation is enabled
38633     with '-pg -mfentry'.  When NAME is nop then a 5 byte nop sequence
38634     is generated.
38635
38636'fentry_section("NAME")'
38637     On x86 targets, the 'fentry_section' attribute sets the name of the
38638     section to record function entry instrumentation calls in when
38639     enabled with '-pg -mrecord-mcount'
38640
38641'nodirect_extern_access'
38642     This attribute, attached to a global variable or function, is the
38643     counterpart to option '-mno-direct-extern-access'.
38644
38645
38646File: gcc.info,  Node: Xstormy16 Function Attributes,  Prev: x86 Function Attributes,  Up: Function Attributes
38647
386486.33.36 Xstormy16 Function Attributes
38649-------------------------------------
38650
38651These function attributes are supported by the Xstormy16 back end:
38652
38653'interrupt'
38654     Use this attribute to indicate that the specified function is an
38655     interrupt handler.  The compiler generates function entry and exit
38656     sequences suitable for use in an interrupt handler when this
38657     attribute is present.
38658
38659
38660File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Function Attributes,  Up: C Extensions
38661
386626.34 Specifying Attributes of Variables
38663=======================================
38664
38665The keyword '__attribute__' allows you to specify special properties of
38666variables, function parameters, or structure, union, and, in C++, class
38667members.  This '__attribute__' keyword is followed by an attribute
38668specification enclosed in double parentheses.  Some attributes are
38669currently defined generically for variables.  Other attributes are
38670defined for variables on particular target systems.  Other attributes
38671are available for functions (*note Function Attributes::), labels (*note
38672Label Attributes::), enumerators (*note Enumerator Attributes::),
38673statements (*note Statement Attributes::), and for types (*note Type
38674Attributes::).  Other front ends might define more attributes (*note
38675Extensions to the C++ Language: C++ Extensions.).
38676
38677 *Note Attribute Syntax::, for details of the exact syntax for using
38678attributes.
38679
38680* Menu:
38681
38682* Common Variable Attributes::
38683* ARC Variable Attributes::
38684* AVR Variable Attributes::
38685* Blackfin Variable Attributes::
38686* H8/300 Variable Attributes::
38687* IA-64 Variable Attributes::
38688* M32R/D Variable Attributes::
38689* MeP Variable Attributes::
38690* Microsoft Windows Variable Attributes::
38691* MSP430 Variable Attributes::
38692* Nvidia PTX Variable Attributes::
38693* PowerPC Variable Attributes::
38694* RL78 Variable Attributes::
38695* V850 Variable Attributes::
38696* x86 Variable Attributes::
38697* Xstormy16 Variable Attributes::
38698
38699
38700File: gcc.info,  Node: Common Variable Attributes,  Next: ARC Variable Attributes,  Up: Variable Attributes
38701
387026.34.1 Common Variable Attributes
38703---------------------------------
38704
38705The following attributes are supported on most targets.
38706
38707'alias ("TARGET")'
38708     The 'alias' variable attribute causes the declaration to be emitted
38709     as an alias for another symbol known as an "alias target".  Except
38710     for top-level qualifiers the alias target must have the same type
38711     as the alias.  For instance, the following
38712
38713          int var_target;
38714          extern int __attribute__ ((alias ("var_target"))) var_alias;
38715
38716     defines 'var_alias' to be an alias for the 'var_target' variable.
38717
38718     It is an error if the alias target is not defined in the same
38719     translation unit as the alias.
38720
38721     Note that in the absence of the attribute GCC assumes that distinct
38722     declarations with external linkage denote distinct objects.  Using
38723     both the alias and the alias target to access the same object is
38724     undefined in a translation unit without a declaration of the alias
38725     with the attribute.
38726
38727     This attribute requires assembler and object file support, and may
38728     not be available on all targets.
38729
38730'aligned'
38731'aligned (ALIGNMENT)'
38732     The 'aligned' attribute specifies a minimum alignment for the
38733     variable or structure field, measured in bytes.  When specified,
38734     ALIGNMENT must be an integer constant power of 2.  Specifying no
38735     ALIGNMENT argument implies the maximum alignment for the target,
38736     which is often, but by no means always, 8 or 16 bytes.
38737
38738     For example, the declaration:
38739
38740          int x __attribute__ ((aligned (16))) = 0;
38741
38742     causes the compiler to allocate the global variable 'x' on a
38743     16-byte boundary.  On a 68040, this could be used in conjunction
38744     with an 'asm' expression to access the 'move16' instruction which
38745     requires 16-byte aligned operands.
38746
38747     You can also specify the alignment of structure fields.  For
38748     example, to create a double-word aligned 'int' pair, you could
38749     write:
38750
38751          struct foo { int x[2] __attribute__ ((aligned (8))); };
38752
38753     This is an alternative to creating a union with a 'double' member,
38754     which forces the union to be double-word aligned.
38755
38756     As in the preceding examples, you can explicitly specify the
38757     alignment (in bytes) that you wish the compiler to use for a given
38758     variable or structure field.  Alternatively, you can leave out the
38759     alignment factor and just ask the compiler to align a variable or
38760     field to the default alignment for the target architecture you are
38761     compiling for.  The default alignment is sufficient for all scalar
38762     types, but may not be enough for all vector types on a target that
38763     supports vector operations.  The default alignment is fixed for a
38764     particular target ABI.
38765
38766     GCC also provides a target specific macro '__BIGGEST_ALIGNMENT__',
38767     which is the largest alignment ever used for any data type on the
38768     target machine you are compiling for.  For example, you could
38769     write:
38770
38771          short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
38772
38773     The compiler automatically sets the alignment for the declared
38774     variable or field to '__BIGGEST_ALIGNMENT__'.  Doing this can often
38775     make copy operations more efficient, because the compiler can use
38776     whatever instructions copy the biggest chunks of memory when
38777     performing copies to or from the variables or fields that you have
38778     aligned this way.  Note that the value of '__BIGGEST_ALIGNMENT__'
38779     may change depending on command-line options.
38780
38781     When used on a struct, or struct member, the 'aligned' attribute
38782     can only increase the alignment; in order to decrease it, the
38783     'packed' attribute must be specified as well.  When used as part of
38784     a typedef, the 'aligned' attribute can both increase and decrease
38785     alignment, and specifying the 'packed' attribute generates a
38786     warning.
38787
38788     Note that the effectiveness of 'aligned' attributes for static
38789     variables may be limited by inherent limitations in the system
38790     linker and/or object file format.  On some systems, the linker is
38791     only able to arrange for variables to be aligned up to a certain
38792     maximum alignment.  (For some linkers, the maximum supported
38793     alignment may be very very small.)  If your linker is only able to
38794     align variables up to a maximum of 8-byte alignment, then
38795     specifying 'aligned(16)' in an '__attribute__' still only provides
38796     you with 8-byte alignment.  See your linker documentation for
38797     further information.
38798
38799     Stack variables are not affected by linker restrictions; GCC can
38800     properly align them on any target.
38801
38802     The 'aligned' attribute can also be used for functions (*note
38803     Common Function Attributes::.)
38804
38805'warn_if_not_aligned (ALIGNMENT)'
38806     This attribute specifies a threshold for the structure field,
38807     measured in bytes.  If the structure field is aligned below the
38808     threshold, a warning will be issued.  For example, the declaration:
38809
38810          struct foo
38811          {
38812            int i1;
38813            int i2;
38814            unsigned long long x __attribute__ ((warn_if_not_aligned (16)));
38815          };
38816
38817     causes the compiler to issue an warning on 'struct foo', like
38818     'warning: alignment 8 of 'struct foo' is less than 16'.  The
38819     compiler also issues a warning, like 'warning: 'x' offset 8 in
38820     'struct foo' isn't aligned to 16', when the structure field has the
38821     misaligned offset:
38822
38823          struct __attribute__ ((aligned (16))) foo
38824          {
38825            int i1;
38826            int i2;
38827            unsigned long long x __attribute__ ((warn_if_not_aligned (16)));
38828          };
38829
38830     This warning can be disabled by '-Wno-if-not-aligned'.  The
38831     'warn_if_not_aligned' attribute can also be used for types (*note
38832     Common Type Attributes::.)
38833
38834'alloc_size (POSITION)'
38835'alloc_size (POSITION-1, POSITION-2)'
38836     The 'alloc_size' variable attribute may be applied to the
38837     declaration of a pointer to a function that returns a pointer and
38838     takes at least one argument of an integer type.  It indicates that
38839     the returned pointer points to an object whose size is given by the
38840     function argument at POSITION, or by the product of the arguments
38841     at POSITION-1 and POSITION-2.  Meaningful sizes are positive values
38842     less than 'PTRDIFF_MAX'.  Other sizes are diagnosed when detected.
38843     GCC uses this information to improve the results of
38844     '__builtin_object_size'.
38845
38846     For instance, the following declarations
38847
38848          typedef __attribute__ ((alloc_size (1, 2))) void*
38849            (*calloc_ptr) (size_t, size_t);
38850          typedef __attribute__ ((alloc_size (1))) void*
38851            (*malloc_ptr) (size_t);
38852
38853     specify that 'calloc_ptr' is a pointer of a function that, like the
38854     standard C function 'calloc', returns an object whose size is given
38855     by the product of arguments 1 and 2, and similarly, that
38856     'malloc_ptr', like the standard C function 'malloc', returns an
38857     object whose size is given by argument 1 to the function.
38858
38859'cleanup (CLEANUP_FUNCTION)'
38860     The 'cleanup' attribute runs a function when the variable goes out
38861     of scope.  This attribute can only be applied to auto function
38862     scope variables; it may not be applied to parameters or variables
38863     with static storage duration.  The function must take one
38864     parameter, a pointer to a type compatible with the variable.  The
38865     return value of the function (if any) is ignored.
38866
38867     If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
38868     the stack unwinding that happens during the processing of the
38869     exception.  Note that the 'cleanup' attribute does not allow the
38870     exception to be caught, only to perform an action.  It is undefined
38871     what happens if CLEANUP_FUNCTION does not return normally.
38872
38873'common'
38874'nocommon'
38875     The 'common' attribute requests GCC to place a variable in "common"
38876     storage.  The 'nocommon' attribute requests the opposite--to
38877     allocate space for it directly.
38878
38879     These attributes override the default chosen by the '-fno-common'
38880     and '-fcommon' flags respectively.
38881
38882'copy'
38883'copy (VARIABLE)'
38884     The 'copy' attribute applies the set of attributes with which
38885     VARIABLE has been declared to the declaration of the variable to
38886     which the attribute is applied.  The attribute is designed for
38887     libraries that define aliases that are expected to specify the same
38888     set of attributes as the aliased symbols.  The 'copy' attribute can
38889     be used with variables, functions or types.  However, the kind of
38890     symbol to which the attribute is applied (either varible or
38891     function) must match the kind of symbol to which the argument
38892     refers.  The 'copy' attribute copies only syntactic and semantic
38893     attributes but not attributes that affect a symbol's linkage or
38894     visibility such as 'alias', 'visibility', or 'weak'.  The
38895     'deprecated' attribute is also not copied.  *Note Common Function
38896     Attributes::.  *Note Common Type Attributes::.
38897
38898'deprecated'
38899'deprecated (MSG)'
38900     The 'deprecated' attribute results in a warning if the variable is
38901     used anywhere in the source file.  This is useful when identifying
38902     variables that are expected to be removed in a future version of a
38903     program.  The warning also includes the location of the declaration
38904     of the deprecated variable, to enable users to easily find further
38905     information about why the variable is deprecated, or what they
38906     should do instead.  Note that the warning only occurs for uses:
38907
38908          extern int old_var __attribute__ ((deprecated));
38909          extern int old_var;
38910          int new_fn () { return old_var; }
38911
38912     results in a warning on line 3 but not line 2.  The optional MSG
38913     argument, which must be a string, is printed in the warning if
38914     present.
38915
38916     The 'deprecated' attribute can also be used for functions and types
38917     (*note Common Function Attributes::, *note Common Type
38918     Attributes::).
38919
38920     The message attached to the attribute is affected by the setting of
38921     the '-fmessage-length' option.
38922
38923'unavailable'
38924'unavailable (MSG)'
38925     The 'unavailable' attribute indicates that the variable so marked
38926     is not available, if it is used anywhere in the source file.  It
38927     behaves in the same manner as the 'deprecated' attribute except
38928     that the compiler will emit an error rather than a warning.
38929
38930     It is expected that items marked as 'deprecated' will eventually be
38931     withdrawn from interfaces, and then become unavailable.  This
38932     attribute allows for marking them appropriately.
38933
38934     The 'unavailable' attribute can also be used for functions and
38935     types (*note Common Function Attributes::, *note Common Type
38936     Attributes::).
38937
38938'mode (MODE)'
38939     This attribute specifies the data type for the
38940     declaration--whichever type corresponds to the mode MODE.  This in
38941     effect lets you request an integer or floating-point type according
38942     to its width.
38943
38944     *Note (gccint)Machine Modes::, for a list of the possible keywords
38945     for MODE.  You may also specify a mode of 'byte' or '__byte__' to
38946     indicate the mode corresponding to a one-byte integer, 'word' or
38947     '__word__' for the mode of a one-word integer, and 'pointer' or
38948     '__pointer__' for the mode used to represent pointers.
38949
38950'nonstring'
38951     The 'nonstring' variable attribute specifies that an object or
38952     member declaration with type array of 'char', 'signed char', or
38953     'unsigned char', or pointer to such a type is intended to store
38954     character arrays that do not necessarily contain a terminating
38955     'NUL'.  This is useful in detecting uses of such arrays or pointers
38956     with functions that expect 'NUL'-terminated strings, and to avoid
38957     warnings when such an array or pointer is used as an argument to a
38958     bounded string manipulation function such as 'strncpy'.  For
38959     example, without the attribute, GCC will issue a warning for the
38960     'strncpy' call below because it may truncate the copy without
38961     appending the terminating 'NUL' character.  Using the attribute
38962     makes it possible to suppress the warning.  However, when the array
38963     is declared with the attribute the call to 'strlen' is diagnosed
38964     because when the array doesn't contain a 'NUL'-terminated string
38965     the call is undefined.  To copy, compare, of search non-string
38966     character arrays use the 'memcpy', 'memcmp', 'memchr', and other
38967     functions that operate on arrays of bytes.  In addition, calling
38968     'strnlen' and 'strndup' with such arrays is safe provided a
38969     suitable bound is specified, and not diagnosed.
38970
38971          struct Data
38972          {
38973            char name [32] __attribute__ ((nonstring));
38974          };
38975
38976          int f (struct Data *pd, const char *s)
38977          {
38978            strncpy (pd->name, s, sizeof pd->name);
38979            ...
38980            return strlen (pd->name);   // unsafe, gets a warning
38981          }
38982
38983'packed'
38984     The 'packed' attribute specifies that a structure member should
38985     have the smallest possible alignment--one bit for a bit-field and
38986     one byte otherwise, unless a larger value is specified with the
38987     'aligned' attribute.  The attribute does not apply to non-member
38988     objects.
38989
38990     For example in the structure below, the member array 'x' is packed
38991     so that it immediately follows 'a' with no intervening padding:
38992
38993          struct foo
38994          {
38995            char a;
38996            int x[2] __attribute__ ((packed));
38997          };
38998
38999     _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed'
39000     attribute on bit-fields of type 'char'.  This has been fixed in GCC
39001     4.4 but the change can lead to differences in the structure layout.
39002     See the documentation of '-Wpacked-bitfield-compat' for more
39003     information.
39004
39005'section ("SECTION-NAME")'
39006     Normally, the compiler places the objects it generates in sections
39007     like 'data' and 'bss'.  Sometimes, however, you need additional
39008     sections, or you need certain particular variables to appear in
39009     special sections, for example to map to special hardware.  The
39010     'section' attribute specifies that a variable (or function) lives
39011     in a particular section.  For example, this small program uses
39012     several specific section names:
39013
39014          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
39015          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
39016          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
39017          int init_data __attribute__ ((section ("INITDATA")));
39018
39019          main()
39020          {
39021            /* Initialize stack pointer */
39022            init_sp (stack + sizeof (stack));
39023
39024            /* Initialize initialized data */
39025            memcpy (&init_data, &data, &edata - &data);
39026
39027            /* Turn on the serial ports */
39028            init_duart (&a);
39029            init_duart (&b);
39030          }
39031
39032     Use the 'section' attribute with _global_ variables and not _local_
39033     variables, as shown in the example.
39034
39035     You may use the 'section' attribute with initialized or
39036     uninitialized global variables but the linker requires each object
39037     be defined once, with the exception that uninitialized variables
39038     tentatively go in the 'common' (or 'bss') section and can be
39039     multiply "defined".  Using the 'section' attribute changes what
39040     section the variable goes into and may cause the linker to issue an
39041     error if an uninitialized variable has multiple definitions.  You
39042     can force a variable to be initialized with the '-fno-common' flag
39043     or the 'nocommon' attribute.
39044
39045     Some file formats do not support arbitrary sections so the
39046     'section' attribute is not available on all platforms.  If you need
39047     to map the entire contents of a module to a particular section,
39048     consider using the facilities of the linker instead.
39049
39050'tls_model ("TLS_MODEL")'
39051     The 'tls_model' attribute sets thread-local storage model (*note
39052     Thread-Local::) of a particular '__thread' variable, overriding
39053     '-ftls-model=' command-line switch on a per-variable basis.  The
39054     TLS_MODEL argument should be one of 'global-dynamic',
39055     'local-dynamic', 'initial-exec' or 'local-exec'.
39056
39057     Not all targets support this attribute.
39058
39059'unused'
39060     This attribute, attached to a variable or structure field, means
39061     that the variable or field is meant to be possibly unused.  GCC
39062     does not produce a warning for this variable or field.
39063
39064'used'
39065     This attribute, attached to a variable with static storage, means
39066     that the variable must be emitted even if it appears that the
39067     variable is not referenced.
39068
39069     When applied to a static data member of a C++ class template, the
39070     attribute also means that the member is instantiated if the class
39071     itself is instantiated.
39072
39073'retain'
39074     For ELF targets that support the GNU or FreeBSD OSABIs, this
39075     attribute will save the variable from linker garbage collection.
39076     To support this behavior, variables that have not been placed in
39077     specific sections (e.g.  by the 'section' attribute, or the
39078     '-fdata-sections' option), will be placed in new, unique sections.
39079
39080     This additional functionality requires Binutils version 2.36 or
39081     later.
39082
39083'uninitialized'
39084     This attribute, attached to a variable with automatic storage,
39085     means that the variable should not be automatically initialized by
39086     the compiler when the option '-ftrivial-auto-var-init' presents.
39087
39088     With the option '-ftrivial-auto-var-init', all the automatic
39089     variables that do not have explicit initializers will be
39090     initialized by the compiler.  These additional compiler
39091     initializations might incur run-time overhead, sometimes
39092     dramatically.  This attribute can be used to mark some variables to
39093     be excluded from such automatical initialization in order to reduce
39094     runtime overhead.
39095
39096     This attribute has no effect when the option
39097     '-ftrivial-auto-var-init' does not present.
39098
39099'vector_size (BYTES)'
39100     This attribute specifies the vector size for the type of the
39101     declared variable, measured in bytes.  The type to which it applies
39102     is known as the "base type".  The BYTES argument must be a positive
39103     power-of-two multiple of the base type size.  For example, the
39104     declaration:
39105
39106          int foo __attribute__ ((vector_size (16)));
39107
39108     causes the compiler to set the mode for 'foo', to be 16 bytes,
39109     divided into 'int' sized units.  Assuming a 32-bit 'int', 'foo''s
39110     type is a vector of four units of four bytes each, and the
39111     corresponding mode of 'foo' is 'V4SI'.  *Note Vector Extensions::,
39112     for details of manipulating vector variables.
39113
39114     This attribute is only applicable to integral and floating scalars,
39115     although arrays, pointers, and function return values are allowed
39116     in conjunction with this construct.
39117
39118     Aggregates with this attribute are invalid, even if they are of the
39119     same size as a corresponding scalar.  For example, the declaration:
39120
39121          struct S { int a; };
39122          struct S  __attribute__ ((vector_size (16))) foo;
39123
39124     is invalid even if the size of the structure is the same as the
39125     size of the 'int'.
39126
39127'visibility ("VISIBILITY_TYPE")'
39128     This attribute affects the linkage of the declaration to which it
39129     is attached.  The 'visibility' attribute is described in *note
39130     Common Function Attributes::.
39131
39132'weak'
39133     The 'weak' attribute is described in *note Common Function
39134     Attributes::.
39135
39136'noinit'
39137     Any data with the 'noinit' attribute will not be initialized by the
39138     C runtime startup code, or the program loader.  Not initializing
39139     data in this way can reduce program startup times.
39140
39141     This attribute is specific to ELF targets and relies on the linker
39142     script to place sections with the '.noinit' prefix in the right
39143     location.
39144
39145'persistent'
39146     Any data with the 'persistent' attribute will not be initialized by
39147     the C runtime startup code, but will be initialized by the program
39148     loader.  This enables the value of the variable to 'persist'
39149     between processor resets.
39150
39151     This attribute is specific to ELF targets and relies on the linker
39152     script to place the sections with the '.persistent' prefix in the
39153     right location.  Specifically, some type of non-volatile, writeable
39154     memory is required.
39155
39156'objc_nullability (NULLABILITY KIND) (Objective-C and Objective-C++ only)'
39157     This attribute applies to pointer variables only.  It allows
39158     marking the pointer with one of four possible values describing the
39159     conditions under which the pointer might have a 'nil' value.  In
39160     most cases, the attribute is intended to be an internal
39161     representation for property and method nullability (specified by
39162     language keywords); it is not recommended to use it directly.
39163
39164     When NULLABILITY KIND is '"unspecified"' or '0', nothing is known
39165     about the conditions in which the pointer might be 'nil'.  Making
39166     this state specific serves to avoid false positives in diagnostics.
39167
39168     When NULLABILITY KIND is '"nonnull"' or '1', the pointer has no
39169     meaning if it is 'nil' and thus the compiler is free to emit
39170     diagnostics if it can be determined that the value will be 'nil'.
39171
39172     When NULLABILITY KIND is '"nullable"' or '2', the pointer might be
39173     'nil' and carry meaning as such.
39174
39175     When NULLABILITY KIND is '"resettable"' or '3' (used only in the
39176     context of property attribute lists) this describes the case in
39177     which a property setter may take the value 'nil' (which perhaps
39178     causes the property to be reset in some manner to a default) but
39179     for which the property getter will never validly return 'nil'.
39180
39181
39182File: gcc.info,  Node: ARC Variable Attributes,  Next: AVR Variable Attributes,  Prev: Common Variable Attributes,  Up: Variable Attributes
39183
391846.34.2 ARC Variable Attributes
39185------------------------------
39186
39187'aux'
39188     The 'aux' attribute is used to directly access the ARC's auxiliary
39189     register space from C. The auxilirary register number is given via
39190     attribute argument.
39191
39192
39193File: gcc.info,  Node: AVR Variable Attributes,  Next: Blackfin Variable Attributes,  Prev: ARC Variable Attributes,  Up: Variable Attributes
39194
391956.34.3 AVR Variable Attributes
39196------------------------------
39197
39198'progmem'
39199     The 'progmem' attribute is used on the AVR to place read-only data
39200     in the non-volatile program memory (flash).  The 'progmem'
39201     attribute accomplishes this by putting respective variables into a
39202     section whose name starts with '.progmem'.
39203
39204     This attribute works similar to the 'section' attribute but adds
39205     additional checking.
39206
39207     *  Ordinary AVR cores with 32 general purpose registers:
39208          'progmem' affects the location of the data but not how this
39209          data is accessed.  In order to read data located with the
39210          'progmem' attribute (inline) assembler must be used.
39211               /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */
39212               #include <avr/pgmspace.h>
39213
39214               /* Locate var in flash memory */
39215               const int var[2] PROGMEM = { 1, 2 };
39216
39217               int read_var (int i)
39218               {
39219                   /* Access var[] by accessor macro from avr/pgmspace.h */
39220                   return (int) pgm_read_word (& var[i]);
39221               }
39222
39223          AVR is a Harvard architecture processor and data and read-only
39224          data normally resides in the data memory (RAM).
39225
39226          See also the *note AVR Named Address Spaces:: section for an
39227          alternate way to locate and access data in flash memory.
39228
39229     *  AVR cores with flash memory visible in the RAM address range:
39230          On such devices, there is no need for attribute 'progmem' or
39231          *note '__flash': AVR Named Address Spaces. qualifier at all.
39232          Just use standard C / C++.  The compiler will generate 'LD*'
39233          instructions.  As flash memory is visible in the RAM address
39234          range, and the default linker script does _not_ locate
39235          '.rodata' in RAM, no special features are needed in order not
39236          to waste RAM for read-only data or to read from flash.  You
39237          might even get slightly better performance by avoiding
39238          'progmem' and '__flash'.  This applies to devices from
39239          families 'avrtiny' and 'avrxmega3', see *note AVR Options::
39240          for an overview.
39241
39242     * Reduced AVR Tiny cores like ATtiny40:
39243          The compiler adds '0x4000' to the addresses of objects and
39244          declarations in 'progmem' and locates the objects in flash
39245          memory, namely in section '.progmem.data'.  The offset is
39246          needed because the flash memory is visible in the RAM address
39247          space starting at address '0x4000'.
39248
39249          Data in 'progmem' can be accessed by means of ordinary C code,
39250          no special functions or macros are needed.
39251
39252               /* var is located in flash memory */
39253               extern const int var[2] __attribute__((progmem));
39254
39255               int read_var (int i)
39256               {
39257                   return var[i];
39258               }
39259
39260          Please notice that on these devices, there is no need for
39261          'progmem' at all.
39262
39263'io'
39264'io (ADDR)'
39265     Variables with the 'io' attribute are used to address memory-mapped
39266     peripherals in the io address range.  If an address is specified,
39267     the variable is assigned that address, and the value is interpreted
39268     as an address in the data address space.  Example:
39269
39270          volatile int porta __attribute__((io (0x22)));
39271
39272     The address specified in the address in the data address range.
39273
39274     Otherwise, the variable it is not assigned an address, but the
39275     compiler will still use in/out instructions where applicable,
39276     assuming some other module assigns an address in the io address
39277     range.  Example:
39278
39279          extern volatile int porta __attribute__((io));
39280
39281'io_low'
39282'io_low (ADDR)'
39283     This is like the 'io' attribute, but additionally it informs the
39284     compiler that the object lies in the lower half of the I/O area,
39285     allowing the use of 'cbi', 'sbi', 'sbic' and 'sbis' instructions.
39286
39287'address'
39288'address (ADDR)'
39289     Variables with the 'address' attribute are used to address
39290     memory-mapped peripherals that may lie outside the io address
39291     range.
39292
39293          volatile int porta __attribute__((address (0x600)));
39294
39295'absdata'
39296     Variables in static storage and with the 'absdata' attribute can be
39297     accessed by the 'LDS' and 'STS' instructions which take absolute
39298     addresses.
39299
39300        * This attribute is only supported for the reduced AVR Tiny core
39301          like ATtiny40.
39302
39303        * You must make sure that respective data is located in the
39304          address range '0x40'...'0xbf' accessible by 'LDS' and 'STS'.
39305          One way to achieve this as an appropriate linker description
39306          file.
39307
39308        * If the location does not fit the address range of 'LDS' and
39309          'STS', there is currently (Binutils 2.26) just an unspecific
39310          warning like
39311               'module.cc:(.text+0x1c): warning: internal error: out of
39312               range error'
39313
39314     See also the '-mabsdata' *note command-line option: AVR Options.
39315
39316
39317File: gcc.info,  Node: Blackfin Variable Attributes,  Next: H8/300 Variable Attributes,  Prev: AVR Variable Attributes,  Up: Variable Attributes
39318
393196.34.4 Blackfin Variable Attributes
39320-----------------------------------
39321
39322Three attributes are currently defined for the Blackfin.
39323
39324'l1_data'
39325'l1_data_A'
39326'l1_data_B'
39327     Use these attributes on the Blackfin to place the variable into L1
39328     Data SRAM. Variables with 'l1_data' attribute are put into the
39329     specific section named '.l1.data'.  Those with 'l1_data_A'
39330     attribute are put into the specific section named '.l1.data.A'.
39331     Those with 'l1_data_B' attribute are put into the specific section
39332     named '.l1.data.B'.
39333
39334'l2'
39335     Use this attribute on the Blackfin to place the variable into L2
39336     SRAM. Variables with 'l2' attribute are put into the specific
39337     section named '.l2.data'.
39338
39339
39340File: gcc.info,  Node: H8/300 Variable Attributes,  Next: IA-64 Variable Attributes,  Prev: Blackfin Variable Attributes,  Up: Variable Attributes
39341
393426.34.5 H8/300 Variable Attributes
39343---------------------------------
39344
39345These variable attributes are available for H8/300 targets:
39346
39347'eightbit_data'
39348     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
39349     the specified variable should be placed into the eight-bit data
39350     section.  The compiler generates more efficient code for certain
39351     operations on data in the eight-bit data area.  Note the eight-bit
39352     data area is limited to 256 bytes of data.
39353
39354     You must use GAS and GLD from GNU binutils version 2.7 or later for
39355     this attribute to work correctly.
39356
39357'tiny_data'
39358     Use this attribute on the H8/300H and H8S to indicate that the
39359     specified variable should be placed into the tiny data section.
39360     The compiler generates more efficient code for loads and stores on
39361     data in the tiny data section.  Note the tiny data area is limited
39362     to slightly under 32KB of data.
39363
39364
39365File: gcc.info,  Node: IA-64 Variable Attributes,  Next: M32R/D Variable Attributes,  Prev: H8/300 Variable Attributes,  Up: Variable Attributes
39366
393676.34.6 IA-64 Variable Attributes
39368--------------------------------
39369
39370The IA-64 back end supports the following variable attribute:
39371
39372'model (MODEL-NAME)'
39373
39374     On IA-64, use this attribute to set the addressability of an
39375     object.  At present, the only supported identifier for MODEL-NAME
39376     is 'small', indicating addressability via "small" (22-bit)
39377     addresses (so that their addresses can be loaded with the 'addl'
39378     instruction).  Caveat: such addressing is by definition not
39379     position independent and hence this attribute must not be used for
39380     objects defined by shared libraries.
39381
39382
39383File: gcc.info,  Node: M32R/D Variable Attributes,  Next: MeP Variable Attributes,  Prev: IA-64 Variable Attributes,  Up: Variable Attributes
39384
393856.34.7 M32R/D Variable Attributes
39386---------------------------------
39387
39388One attribute is currently defined for the M32R/D.
39389
39390'model (MODEL-NAME)'
39391     Use this attribute on the M32R/D to set the addressability of an
39392     object.  The identifier MODEL-NAME is one of 'small', 'medium', or
39393     'large', representing each of the code models.
39394
39395     Small model objects live in the lower 16MB of memory (so that their
39396     addresses can be loaded with the 'ld24' instruction).
39397
39398     Medium and large model objects may live anywhere in the 32-bit
39399     address space (the compiler generates 'seth/add3' instructions to
39400     load their addresses).
39401
39402
39403File: gcc.info,  Node: MeP Variable Attributes,  Next: Microsoft Windows Variable Attributes,  Prev: M32R/D Variable Attributes,  Up: Variable Attributes
39404
394056.34.8 MeP Variable Attributes
39406------------------------------
39407
39408The MeP target has a number of addressing modes and busses.  The 'near'
39409space spans the standard memory space's first 16 megabytes (24 bits).
39410The 'far' space spans the entire 32-bit memory space.  The 'based' space
39411is a 128-byte region in the memory space that is addressed relative to
39412the '$tp' register.  The 'tiny' space is a 65536-byte region relative to
39413the '$gp' register.  In addition to these memory regions, the MeP target
39414has a separate 16-bit control bus which is specified with 'cb'
39415attributes.
39416
39417'based'
39418     Any variable with the 'based' attribute is assigned to the '.based'
39419     section, and is accessed with relative to the '$tp' register.
39420
39421'tiny'
39422     Likewise, the 'tiny' attribute assigned variables to the '.tiny'
39423     section, relative to the '$gp' register.
39424
39425'near'
39426     Variables with the 'near' attribute are assumed to have addresses
39427     that fit in a 24-bit addressing mode.  This is the default for
39428     large variables ('-mtiny=4' is the default) but this attribute can
39429     override '-mtiny=' for small variables, or override '-ml'.
39430
39431'far'
39432     Variables with the 'far' attribute are addressed using a full
39433     32-bit address.  Since this covers the entire memory space, this
39434     allows modules to make no assumptions about where variables might
39435     be stored.
39436
39437'io'
39438'io (ADDR)'
39439     Variables with the 'io' attribute are used to address memory-mapped
39440     peripherals.  If an address is specified, the variable is assigned
39441     that address, else it is not assigned an address (it is assumed
39442     some other module assigns an address).  Example:
39443
39444          int timer_count __attribute__((io(0x123)));
39445
39446'cb'
39447'cb (ADDR)'
39448     Variables with the 'cb' attribute are used to access the control
39449     bus, using special instructions.  'addr' indicates the control bus
39450     address.  Example:
39451
39452          int cpu_clock __attribute__((cb(0x123)));
39453
39454
39455File: gcc.info,  Node: Microsoft Windows Variable Attributes,  Next: MSP430 Variable Attributes,  Prev: MeP Variable Attributes,  Up: Variable Attributes
39456
394576.34.9 Microsoft Windows Variable Attributes
39458--------------------------------------------
39459
39460You can use these attributes on Microsoft Windows targets.  *note x86
39461Variable Attributes:: for additional Windows compatibility attributes
39462available on all x86 targets.
39463
39464'dllimport'
39465'dllexport'
39466     The 'dllimport' and 'dllexport' attributes are described in *note
39467     Microsoft Windows Function Attributes::.
39468
39469'selectany'
39470     The 'selectany' attribute causes an initialized global variable to
39471     have link-once semantics.  When multiple definitions of the
39472     variable are encountered by the linker, the first is selected and
39473     the remainder are discarded.  Following usage by the Microsoft
39474     compiler, the linker is told _not_ to warn about size or content
39475     differences of the multiple definitions.
39476
39477     Although the primary usage of this attribute is for POD types, the
39478     attribute can also be applied to global C++ objects that are
39479     initialized by a constructor.  In this case, the static
39480     initialization and destruction code for the object is emitted in
39481     each translation defining the object, but the calls to the
39482     constructor and destructor are protected by a link-once guard
39483     variable.
39484
39485     The 'selectany' attribute is only available on Microsoft Windows
39486     targets.  You can use '__declspec (selectany)' as a synonym for
39487     '__attribute__ ((selectany))' for compatibility with other
39488     compilers.
39489
39490'shared'
39491     On Microsoft Windows, in addition to putting variable definitions
39492     in a named section, the section can also be shared among all
39493     running copies of an executable or DLL.  For example, this small
39494     program defines shared data by putting it in a named section
39495     'shared' and marking the section shareable:
39496
39497          int foo __attribute__((section ("shared"), shared)) = 0;
39498
39499          int
39500          main()
39501          {
39502            /* Read and write foo.  All running
39503               copies see the same value.  */
39504            return 0;
39505          }
39506
39507     You may only use the 'shared' attribute along with 'section'
39508     attribute with a fully-initialized global definition because of the
39509     way linkers work.  See 'section' attribute for more information.
39510
39511     The 'shared' attribute is only available on Microsoft Windows.
39512
39513
39514File: gcc.info,  Node: MSP430 Variable Attributes,  Next: Nvidia PTX Variable Attributes,  Prev: Microsoft Windows Variable Attributes,  Up: Variable Attributes
39515
395166.34.10 MSP430 Variable Attributes
39517----------------------------------
39518
39519'upper'
39520'either'
39521     These attributes are the same as the MSP430 function attributes of
39522     the same name (*note MSP430 Function Attributes::).
39523
39524'lower'
39525     This option behaves mostly the same as the MSP430 function
39526     attribute of the same name (*note MSP430 Function Attributes::),
39527     but it has some additional functionality.
39528
39529     If '-mdata-region='{'upper,either,none'} has been passed, or the
39530     'section' attribute is applied to a variable, the compiler will
39531     generate 430X instructions to handle it.  This is because the
39532     compiler has to assume that the variable could get placed in the
39533     upper memory region (above address 0xFFFF). Marking the variable
39534     with the 'lower' attribute informs the compiler that the variable
39535     will be placed in lower memory so it is safe to use 430
39536     instructions to handle it.
39537
39538     In the case of the 'section' attribute, the section name given will
39539     be used, and the '.lower' prefix will not be added.
39540
39541
39542File: gcc.info,  Node: Nvidia PTX Variable Attributes,  Next: PowerPC Variable Attributes,  Prev: MSP430 Variable Attributes,  Up: Variable Attributes
39543
395446.34.11 Nvidia PTX Variable Attributes
39545--------------------------------------
39546
39547These variable attributes are supported by the Nvidia PTX back end:
39548
39549'shared'
39550     Use this attribute to place a variable in the '.shared' memory
39551     space.  This memory space is private to each cooperative thread
39552     array; only threads within one thread block refer to the same
39553     instance of the variable.  The runtime does not initialize
39554     variables in this memory space.
39555
39556
39557File: gcc.info,  Node: PowerPC Variable Attributes,  Next: RL78 Variable Attributes,  Prev: Nvidia PTX Variable Attributes,  Up: Variable Attributes
39558
395596.34.12 PowerPC Variable Attributes
39560-----------------------------------
39561
39562Three attributes currently are defined for PowerPC configurations:
39563'altivec', 'ms_struct' and 'gcc_struct'.
39564
39565 For full documentation of the struct attributes please see the
39566documentation in *note x86 Variable Attributes::.
39567
39568 For documentation of 'altivec' attribute please see the documentation
39569in *note PowerPC Type Attributes::.
39570
39571
39572File: gcc.info,  Node: RL78 Variable Attributes,  Next: V850 Variable Attributes,  Prev: PowerPC Variable Attributes,  Up: Variable Attributes
39573
395746.34.13 RL78 Variable Attributes
39575--------------------------------
39576
39577The RL78 back end supports the 'saddr' variable attribute.  This
39578specifies placement of the corresponding variable in the SADDR area,
39579which can be accessed more efficiently than the default memory region.
39580
39581
39582File: gcc.info,  Node: V850 Variable Attributes,  Next: x86 Variable Attributes,  Prev: RL78 Variable Attributes,  Up: Variable Attributes
39583
395846.34.14 V850 Variable Attributes
39585--------------------------------
39586
39587These variable attributes are supported by the V850 back end:
39588
39589'sda'
39590     Use this attribute to explicitly place a variable in the small data
39591     area, which can hold up to 64 kilobytes.
39592
39593'tda'
39594     Use this attribute to explicitly place a variable in the tiny data
39595     area, which can hold up to 256 bytes in total.
39596
39597'zda'
39598     Use this attribute to explicitly place a variable in the first 32
39599     kilobytes of memory.
39600
39601
39602File: gcc.info,  Node: x86 Variable Attributes,  Next: Xstormy16 Variable Attributes,  Prev: V850 Variable Attributes,  Up: Variable Attributes
39603
396046.34.15 x86 Variable Attributes
39605-------------------------------
39606
39607Two attributes are currently defined for x86 configurations: 'ms_struct'
39608and 'gcc_struct'.
39609
39610'ms_struct'
39611'gcc_struct'
39612
39613     If 'packed' is used on a structure, or if bit-fields are used, it
39614     may be that the Microsoft ABI lays out the structure differently
39615     than the way GCC normally does.  Particularly when moving packed
39616     data between functions compiled with GCC and the native Microsoft
39617     compiler (either via function call or as data in a file), it may be
39618     necessary to access either format.
39619
39620     The 'ms_struct' and 'gcc_struct' attributes correspond to the
39621     '-mms-bitfields' and '-mno-ms-bitfields' command-line options,
39622     respectively; see *note x86 Options::, for details of how structure
39623     layout is affected.  *Note x86 Type Attributes::, for information
39624     about the corresponding attributes on types.
39625
39626
39627File: gcc.info,  Node: Xstormy16 Variable Attributes,  Prev: x86 Variable Attributes,  Up: Variable Attributes
39628
396296.34.16 Xstormy16 Variable Attributes
39630-------------------------------------
39631
39632One attribute is currently defined for xstormy16 configurations:
39633'below100'.
39634
39635'below100'
39636
39637     If a variable has the 'below100' attribute ('BELOW100' is allowed
39638     also), GCC places the variable in the first 0x100 bytes of memory
39639     and use special opcodes to access it.  Such variables are placed in
39640     either the '.bss_below100' section or the '.data_below100' section.
39641
39642
39643File: gcc.info,  Node: Type Attributes,  Next: Label Attributes,  Prev: Variable Attributes,  Up: C Extensions
39644
396456.35 Specifying Attributes of Types
39646===================================
39647
39648The keyword '__attribute__' allows you to specify various special
39649properties of types.  Some type attributes apply only to structure and
39650union types, and in C++, also class types, while others can apply to any
39651type defined via a 'typedef' declaration.  Unless otherwise specified,
39652the same restrictions and effects apply to attributes regardless of
39653whether a type is a trivial structure or a C++ class with user-defined
39654constructors, destructors, or a copy assignment.
39655
39656 Other attributes are defined for functions (*note Function
39657Attributes::), labels (*note Label Attributes::), enumerators (*note
39658Enumerator Attributes::), statements (*note Statement Attributes::), and
39659for variables (*note Variable Attributes::).
39660
39661 The '__attribute__' keyword is followed by an attribute specification
39662enclosed in double parentheses.
39663
39664 You may specify type attributes in an enum, struct or union type
39665declaration or definition by placing them immediately after the
39666'struct', 'union' or 'enum' keyword.  You can also place them just past
39667the closing curly brace of the definition, but this is less preferred
39668because logically the type should be fully defined at the closing brace.
39669
39670 You can also include type attributes in a 'typedef' declaration.  *Note
39671Attribute Syntax::, for details of the exact syntax for using
39672attributes.
39673
39674* Menu:
39675
39676* Common Type Attributes::
39677* ARC Type Attributes::
39678* ARM Type Attributes::
39679* BPF Type Attributes::
39680* MeP Type Attributes::
39681* PowerPC Type Attributes::
39682* x86 Type Attributes::
39683
39684
39685File: gcc.info,  Node: Common Type Attributes,  Next: ARC Type Attributes,  Up: Type Attributes
39686
396876.35.1 Common Type Attributes
39688-----------------------------
39689
39690The following type attributes are supported on most targets.
39691
39692'aligned'
39693'aligned (ALIGNMENT)'
39694     The 'aligned' attribute specifies a minimum alignment (in bytes)
39695     for variables of the specified type.  When specified, ALIGNMENT
39696     must be a power of 2.  Specifying no ALIGNMENT argument implies the
39697     maximum alignment for the target, which is often, but by no means
39698     always, 8 or 16 bytes.  For example, the declarations:
39699
39700          struct __attribute__ ((aligned (8))) S { short f[3]; };
39701          typedef int more_aligned_int __attribute__ ((aligned (8)));
39702
39703     force the compiler to ensure (as far as it can) that each variable
39704     whose type is 'struct S' or 'more_aligned_int' is allocated and
39705     aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
39706     variables of type 'struct S' aligned to 8-byte boundaries allows
39707     the compiler to use the 'ldd' and 'std' (doubleword load and store)
39708     instructions when copying one variable of type 'struct S' to
39709     another, thus improving run-time efficiency.
39710
39711     Note that the alignment of any given 'struct' or 'union' type is
39712     required by the ISO C standard to be at least a perfect multiple of
39713     the lowest common multiple of the alignments of all of the members
39714     of the 'struct' or 'union' in question.  This means that you _can_
39715     effectively adjust the alignment of a 'struct' or 'union' type by
39716     attaching an 'aligned' attribute to any one of the members of such
39717     a type, but the notation illustrated in the example above is a more
39718     obvious, intuitive, and readable way to request the compiler to
39719     adjust the alignment of an entire 'struct' or 'union' type.
39720
39721     As in the preceding example, you can explicitly specify the
39722     alignment (in bytes) that you wish the compiler to use for a given
39723     'struct' or 'union' type.  Alternatively, you can leave out the
39724     alignment factor and just ask the compiler to align a type to the
39725     maximum useful alignment for the target machine you are compiling
39726     for.  For example, you could write:
39727
39728          struct __attribute__ ((aligned)) S { short f[3]; };
39729
39730     Whenever you leave out the alignment factor in an 'aligned'
39731     attribute specification, the compiler automatically sets the
39732     alignment for the type to the largest alignment that is ever used
39733     for any data type on the target machine you are compiling for.
39734     Doing this can often make copy operations more efficient, because
39735     the compiler can use whatever instructions copy the biggest chunks
39736     of memory when performing copies to or from the variables that have
39737     types that you have aligned this way.
39738
39739     In the example above, if the size of each 'short' is 2 bytes, then
39740     the size of the entire 'struct S' type is 6 bytes.  The smallest
39741     power of two that is greater than or equal to that is 8, so the
39742     compiler sets the alignment for the entire 'struct S' type to 8
39743     bytes.
39744
39745     Note that although you can ask the compiler to select a
39746     time-efficient alignment for a given type and then declare only
39747     individual stand-alone objects of that type, the compiler's ability
39748     to select a time-efficient alignment is primarily useful only when
39749     you plan to create arrays of variables having the relevant
39750     (efficiently aligned) type.  If you declare or use arrays of
39751     variables of an efficiently-aligned type, then it is likely that
39752     your program also does pointer arithmetic (or subscripting, which
39753     amounts to the same thing) on pointers to the relevant type, and
39754     the code that the compiler generates for these pointer arithmetic
39755     operations is often more efficient for efficiently-aligned types
39756     than for other types.
39757
39758     Note that the effectiveness of 'aligned' attributes may be limited
39759     by inherent limitations in your linker.  On many systems, the
39760     linker is only able to arrange for variables to be aligned up to a
39761     certain maximum alignment.  (For some linkers, the maximum
39762     supported alignment may be very very small.)  If your linker is
39763     only able to align variables up to a maximum of 8-byte alignment,
39764     then specifying 'aligned (16)' in an '__attribute__' still only
39765     provides you with 8-byte alignment.  See your linker documentation
39766     for further information.
39767
39768     When used on a struct, or struct member, the 'aligned' attribute
39769     can only increase the alignment; in order to decrease it, the
39770     'packed' attribute must be specified as well.  When used as part of
39771     a typedef, the 'aligned' attribute can both increase and decrease
39772     alignment, and specifying the 'packed' attribute generates a
39773     warning.
39774
39775'warn_if_not_aligned (ALIGNMENT)'
39776     This attribute specifies a threshold for the structure field,
39777     measured in bytes.  If the structure field is aligned below the
39778     threshold, a warning will be issued.  For example, the declaration:
39779
39780          typedef unsigned long long __u64
39781             __attribute__((aligned (4), warn_if_not_aligned (8)));
39782
39783          struct foo
39784          {
39785            int i1;
39786            int i2;
39787            __u64 x;
39788          };
39789
39790     causes the compiler to issue an warning on 'struct foo', like
39791     'warning: alignment 4 of 'struct foo' is less than 8'.  It is used
39792     to define 'struct foo' in such a way that 'struct foo' has the same
39793     layout and the structure field 'x' has the same alignment when
39794     '__u64' is aligned at either 4 or 8 bytes.  Align 'struct foo' to 8
39795     bytes:
39796
39797          struct __attribute__ ((aligned (8))) foo
39798          {
39799            int i1;
39800            int i2;
39801            __u64 x;
39802          };
39803
39804     silences the warning.  The compiler also issues a warning, like
39805     'warning: 'x' offset 12 in 'struct foo' isn't aligned to 8', when
39806     the structure field has the misaligned offset:
39807
39808          struct __attribute__ ((aligned (8))) foo
39809          {
39810            int i1;
39811            int i2;
39812            int i3;
39813            __u64 x;
39814          };
39815
39816     This warning can be disabled by '-Wno-if-not-aligned'.
39817
39818'alloc_size (POSITION)'
39819'alloc_size (POSITION-1, POSITION-2)'
39820     The 'alloc_size' type attribute may be applied to the definition of
39821     a type of a function that returns a pointer and takes at least one
39822     argument of an integer type.  It indicates that the returned
39823     pointer points to an object whose size is given by the function
39824     argument at POSITION-1, or by the product of the arguments at
39825     POSITION-1 and POSITION-2.  Meaningful sizes are positive values
39826     less than 'PTRDIFF_MAX'.  Other sizes are disagnosed when detected.
39827     GCC uses this information to improve the results of
39828     '__builtin_object_size'.
39829
39830     For instance, the following declarations
39831
39832          typedef __attribute__ ((alloc_size (1, 2))) void*
39833            calloc_type (size_t, size_t);
39834          typedef __attribute__ ((alloc_size (1))) void*
39835            malloc_type (size_t);
39836
39837     specify that 'calloc_type' is a type of a function that, like the
39838     standard C function 'calloc', returns an object whose size is given
39839     by the product of arguments 1 and 2, and that 'malloc_type', like
39840     the standard C function 'malloc', returns an object whose size is
39841     given by argument 1 to the function.
39842
39843'copy'
39844'copy (EXPRESSION)'
39845     The 'copy' attribute applies the set of attributes with which the
39846     type of the EXPRESSION has been declared to the declaration of the
39847     type to which the attribute is applied.  The attribute is designed
39848     for libraries that define aliases that are expected to specify the
39849     same set of attributes as the aliased symbols.  The 'copy'
39850     attribute can be used with types, variables, or functions.
39851     However, the kind of symbol to which the attribute is applied
39852     (either varible or function) must match the kind of symbol to which
39853     the argument refers.  The 'copy' attribute copies only syntactic
39854     and semantic attributes but not attributes that affect a symbol's
39855     linkage or visibility such as 'alias', 'visibility', or 'weak'.
39856     The 'deprecated' attribute is also not copied.  *Note Common
39857     Function Attributes::.  *Note Common Variable Attributes::.
39858
39859     For example, suppose 'struct A' below is defined in some third
39860     party library header to have the alignment requirement 'N' and to
39861     force a warning whenever a variable of the type is not so aligned
39862     due to attribute 'packed'.  Specifying the 'copy' attribute on the
39863     definition on the unrelated 'struct B' has the effect of copying
39864     all relevant attributes from the type referenced by the pointer
39865     expression to 'struct B'.
39866
39867          struct __attribute__ ((aligned (N), warn_if_not_aligned (N)))
39868          A { /* ... */ };
39869          struct __attribute__ ((copy ( (struct A *)0)) B { /* ... */ };
39870
39871'deprecated'
39872'deprecated (MSG)'
39873     The 'deprecated' attribute results in a warning if the type is used
39874     anywhere in the source file.  This is useful when identifying types
39875     that are expected to be removed in a future version of a program.
39876     If possible, the warning also includes the location of the
39877     declaration of the deprecated type, to enable users to easily find
39878     further information about why the type is deprecated, or what they
39879     should do instead.  Note that the warnings only occur for uses and
39880     then only if the type is being applied to an identifier that itself
39881     is not being declared as deprecated.
39882
39883          typedef int T1 __attribute__ ((deprecated));
39884          T1 x;
39885          typedef T1 T2;
39886          T2 y;
39887          typedef T1 T3 __attribute__ ((deprecated));
39888          T3 z __attribute__ ((deprecated));
39889
39890     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
39891     warning is issued for line 4 because T2 is not explicitly
39892     deprecated.  Line 5 has no warning because T3 is explicitly
39893     deprecated.  Similarly for line 6.  The optional MSG argument,
39894     which must be a string, is printed in the warning if present.
39895     Control characters in the string will be replaced with escape
39896     sequences, and if the '-fmessage-length' option is set to 0 (its
39897     default value) then any newline characters will be ignored.
39898
39899     The 'deprecated' attribute can also be used for functions and
39900     variables (*note Function Attributes::, *note Variable
39901     Attributes::.)
39902
39903     The message attached to the attribute is affected by the setting of
39904     the '-fmessage-length' option.
39905
39906'unavailable'
39907'unavailable (MSG)'
39908     The 'unavailable' attribute behaves in the same manner as the
39909     'deprecated' one, but emits an error rather than a warning.  It is
39910     used to indicate that a (perhaps previously 'deprecated') type is
39911     no longer usable.
39912
39913     The 'unavailable' attribute can also be used for functions and
39914     variables (*note Function Attributes::, *note Variable
39915     Attributes::.)
39916
39917'designated_init'
39918     This attribute may only be applied to structure types.  It
39919     indicates that any initialization of an object of this type must
39920     use designated initializers rather than positional initializers.
39921     The intent of this attribute is to allow the programmer to indicate
39922     that a structure's layout may change, and that therefore relying on
39923     positional initialization will result in future breakage.
39924
39925     GCC emits warnings based on this attribute by default; use
39926     '-Wno-designated-init' to suppress them.
39927
39928'may_alias'
39929     Accesses through pointers to types with this attribute are not
39930     subject to type-based alias analysis, but are instead assumed to be
39931     able to alias any other type of objects.  In the context of section
39932     6.5 paragraph 7 of the C99 standard, an lvalue expression
39933     dereferencing such a pointer is treated like having a character
39934     type.  See '-fstrict-aliasing' for more information on aliasing
39935     issues.  This extension exists to support some vector APIs, in
39936     which pointers to one vector type are permitted to alias pointers
39937     to a different vector type.
39938
39939     Note that an object of a type with this attribute does not have any
39940     special semantics.
39941
39942     Example of use:
39943
39944          typedef short __attribute__ ((__may_alias__)) short_a;
39945
39946          int
39947          main (void)
39948          {
39949            int a = 0x12345678;
39950            short_a *b = (short_a *) &a;
39951
39952            b[1] = 0;
39953
39954            if (a == 0x12345678)
39955              abort();
39956
39957            exit(0);
39958          }
39959
39960     If you replaced 'short_a' with 'short' in the variable declaration,
39961     the above program would abort when compiled with
39962     '-fstrict-aliasing', which is on by default at '-O2' or above.
39963
39964'mode (MODE)'
39965     This attribute specifies the data type for the
39966     declaration--whichever type corresponds to the mode MODE.  This in
39967     effect lets you request an integer or floating-point type according
39968     to its width.
39969
39970     *Note (gccint)Machine Modes::, for a list of the possible keywords
39971     for MODE.  You may also specify a mode of 'byte' or '__byte__' to
39972     indicate the mode corresponding to a one-byte integer, 'word' or
39973     '__word__' for the mode of a one-word integer, and 'pointer' or
39974     '__pointer__' for the mode used to represent pointers.
39975
39976'packed'
39977     This attribute, attached to a 'struct', 'union', or C++ 'class'
39978     type definition, specifies that each of its members (other than
39979     zero-width bit-fields) is placed to minimize the memory required.
39980     This is equivalent to specifying the 'packed' attribute on each of
39981     the members.
39982
39983     When attached to an 'enum' definition, the 'packed' attribute
39984     indicates that the smallest integral type should be used.
39985     Specifying the '-fshort-enums' flag on the command line is
39986     equivalent to specifying the 'packed' attribute on all 'enum'
39987     definitions.
39988
39989     In the following example 'struct my_packed_struct''s members are
39990     packed closely together, but the internal layout of its 's' member
39991     is not packed--to do that, 'struct my_unpacked_struct' needs to be
39992     packed too.
39993
39994          struct my_unpacked_struct
39995           {
39996              char c;
39997              int i;
39998           };
39999
40000          struct __attribute__ ((__packed__)) my_packed_struct
40001            {
40002               char c;
40003               int  i;
40004               struct my_unpacked_struct s;
40005            };
40006
40007     You may only specify the 'packed' attribute on the definition of an
40008     'enum', 'struct', 'union', or 'class', not on a 'typedef' that does
40009     not also define the enumerated type, structure, union, or class.
40010
40011'scalar_storage_order ("ENDIANNESS")'
40012     When attached to a 'union' or a 'struct', this attribute sets the
40013     storage order, aka endianness, of the scalar fields of the type, as
40014     well as the array fields whose component is scalar.  The supported
40015     endiannesses are 'big-endian' and 'little-endian'.  The attribute
40016     has no effects on fields which are themselves a 'union', a 'struct'
40017     or an array whose component is a 'union' or a 'struct', and it is
40018     possible for these fields to have a different scalar storage order
40019     than the enclosing type.
40020
40021     Note that neither pointer nor vector fields are considered scalar
40022     fields in this context, so the attribute has no effects on these
40023     fields.
40024
40025     This attribute is supported only for targets that use a uniform
40026     default scalar storage order (fortunately, most of them), i.e.
40027     targets that store the scalars either all in big-endian or all in
40028     little-endian.
40029
40030     Additional restrictions are enforced for types with the reverse
40031     scalar storage order with regard to the scalar storage order of the
40032     target:
40033
40034        * Taking the address of a scalar field of a 'union' or a
40035          'struct' with reverse scalar storage order is not permitted
40036          and yields an error.
40037        * Taking the address of an array field, whose component is
40038          scalar, of a 'union' or a 'struct' with reverse scalar storage
40039          order is permitted but yields a warning, unless
40040          '-Wno-scalar-storage-order' is specified.
40041        * Taking the address of a 'union' or a 'struct' with reverse
40042          scalar storage order is permitted.
40043
40044     These restrictions exist because the storage order attribute is
40045     lost when the address of a scalar or the address of an array with
40046     scalar component is taken, so storing indirectly through this
40047     address generally does not work.  The second case is nevertheless
40048     allowed to be able to perform a block copy from or to the array.
40049
40050     Moreover, the use of type punning or aliasing to toggle the storage
40051     order is not supported; that is to say, if a given scalar object
40052     can be accessed through distinct types that assign a different
40053     storage order to it, then the behavior is undefined.
40054
40055'transparent_union'
40056
40057     This attribute, attached to a 'union' type definition, indicates
40058     that any function parameter having that union type causes calls to
40059     that function to be treated in a special way.
40060
40061     First, the argument corresponding to a transparent union type can
40062     be of any type in the union; no cast is required.  Also, if the
40063     union contains a pointer type, the corresponding argument can be a
40064     null pointer constant or a void pointer expression; and if the
40065     union contains a void pointer type, the corresponding argument can
40066     be any pointer expression.  If the union member type is a pointer,
40067     qualifiers like 'const' on the referenced type must be respected,
40068     just as with normal pointer conversions.
40069
40070     Second, the argument is passed to the function using the calling
40071     conventions of the first member of the transparent union, not the
40072     calling conventions of the union itself.  All members of the union
40073     must have the same machine representation; this is necessary for
40074     this argument passing to work properly.
40075
40076     Transparent unions are designed for library functions that have
40077     multiple interfaces for compatibility reasons.  For example,
40078     suppose the 'wait' function must accept either a value of type 'int
40079     *' to comply with POSIX, or a value of type 'union wait *' to
40080     comply with the 4.1BSD interface.  If 'wait''s parameter were 'void
40081     *', 'wait' would accept both kinds of arguments, but it would also
40082     accept any other pointer type and this would make argument type
40083     checking less useful.  Instead, '<sys/wait.h>' might define the
40084     interface as follows:
40085
40086          typedef union __attribute__ ((__transparent_union__))
40087            {
40088              int *__ip;
40089              union wait *__up;
40090            } wait_status_ptr_t;
40091
40092          pid_t wait (wait_status_ptr_t);
40093
40094     This interface allows either 'int *' or 'union wait *' arguments to
40095     be passed, using the 'int *' calling convention.  The program can
40096     call 'wait' with arguments of either type:
40097
40098          int w1 () { int w; return wait (&w); }
40099          int w2 () { union wait w; return wait (&w); }
40100
40101     With this interface, 'wait''s implementation might look like this:
40102
40103          pid_t wait (wait_status_ptr_t p)
40104          {
40105            return waitpid (-1, p.__ip, 0);
40106          }
40107
40108'unused'
40109     When attached to a type (including a 'union' or a 'struct'), this
40110     attribute means that variables of that type are meant to appear
40111     possibly unused.  GCC does not produce a warning for any variables
40112     of that type, even if the variable appears to do nothing.  This is
40113     often the case with lock or thread classes, which are usually
40114     defined and then not referenced, but contain constructors and
40115     destructors that have nontrivial bookkeeping functions.
40116
40117'vector_size (BYTES)'
40118     This attribute specifies the vector size for the type, measured in
40119     bytes.  The type to which it applies is known as the "base type".
40120     The BYTES argument must be a positive power-of-two multiple of the
40121     base type size.  For example, the following declarations:
40122
40123          typedef __attribute__ ((vector_size (32))) int int_vec32_t ;
40124          typedef __attribute__ ((vector_size (32))) int* int_vec32_ptr_t;
40125          typedef __attribute__ ((vector_size (32))) int int_vec32_arr3_t[3];
40126
40127     define 'int_vec32_t' to be a 32-byte vector type composed of 'int'
40128     sized units.  With 'int' having a size of 4 bytes, the type defines
40129     a vector of eight units, four bytes each.  The mode of variables of
40130     type 'int_vec32_t' is 'V8SI'.  'int_vec32_ptr_t' is then defined to
40131     be a pointer to such a vector type, and 'int_vec32_arr3_t' to be an
40132     array of three such vectors.  *Note Vector Extensions::, for
40133     details of manipulating objects of vector types.
40134
40135     This attribute is only applicable to integral and floating scalar
40136     types.  In function declarations the attribute applies to the
40137     function return type.
40138
40139     For example, the following:
40140          __attribute__ ((vector_size (16))) float get_flt_vec16 (void);
40141     declares 'get_flt_vec16' to be a function returning a 16-byte
40142     vector with the base type 'float'.
40143
40144'visibility'
40145     In C++, attribute visibility (*note Function Attributes::) can also
40146     be applied to class, struct, union and enum types.  Unlike other
40147     type attributes, the attribute must appear between the initial
40148     keyword and the name of the type; it cannot appear after the body
40149     of the type.
40150
40151     Note that the type visibility is applied to vague linkage entities
40152     associated with the class (vtable, typeinfo node, etc.).  In
40153     particular, if a class is thrown as an exception in one shared
40154     object and caught in another, the class must have default
40155     visibility.  Otherwise the two shared objects are unable to use the
40156     same typeinfo node and exception handling will break.
40157
40158'objc_root_class (Objective-C and Objective-C++ only)'
40159     This attribute marks a class as being a root class, and thus allows
40160     the compiler to elide any warnings about a missing superclass and
40161     to make additional checks for mandatory methods as needed.
40162
40163 To specify multiple attributes, separate them by commas within the
40164double parentheses: for example, '__attribute__ ((aligned (16),
40165packed))'.
40166
40167
40168File: gcc.info,  Node: ARC Type Attributes,  Next: ARM Type Attributes,  Prev: Common Type Attributes,  Up: Type Attributes
40169
401706.35.2 ARC Type Attributes
40171--------------------------
40172
40173Declaring objects with 'uncached' allows you to exclude data-cache
40174participation in load and store operations on those objects without
40175involving the additional semantic implications of 'volatile'.  The '.di'
40176instruction suffix is used for all loads and stores of data declared
40177'uncached'.
40178
40179
40180File: gcc.info,  Node: ARM Type Attributes,  Next: BPF Type Attributes,  Prev: ARC Type Attributes,  Up: Type Attributes
40181
401826.35.3 ARM Type Attributes
40183--------------------------
40184
40185On those ARM targets that support 'dllimport' (such as Symbian OS), you
40186can use the 'notshared' attribute to indicate that the virtual table and
40187other similar data for a class should not be exported from a DLL.  For
40188example:
40189
40190     class __declspec(notshared) C {
40191     public:
40192       __declspec(dllimport) C();
40193       virtual void f();
40194     }
40195
40196     __declspec(dllexport)
40197     C::C() {}
40198
40199In this code, 'C::C' is exported from the current DLL, but the virtual
40200table for 'C' is not exported.  (You can use '__attribute__' instead of
40201'__declspec' if you prefer, but most Symbian OS code uses '__declspec'.)
40202
40203
40204File: gcc.info,  Node: BPF Type Attributes,  Next: MeP Type Attributes,  Prev: ARM Type Attributes,  Up: Type Attributes
40205
402066.35.4 BPF Type Attributes
40207--------------------------
40208
40209BPF Compile Once - Run Everywhere (CO-RE) support.  When attached to a
40210'struct' or 'union' type definition, indicates that CO-RE relocation
40211information should be generated for any access to a variable of that
40212type.  The behavior is equivalent to the programmer manually wrapping
40213every such access with '__builtin_preserve_access_index'.
40214
40215
40216File: gcc.info,  Node: MeP Type Attributes,  Next: PowerPC Type Attributes,  Prev: BPF Type Attributes,  Up: Type Attributes
40217
402186.35.5 MeP Type Attributes
40219--------------------------
40220
40221Many of the MeP variable attributes may be applied to types as well.
40222Specifically, the 'based', 'tiny', 'near', and 'far' attributes may be
40223applied to either.  The 'io' and 'cb' attributes may not be applied to
40224types.
40225
40226
40227File: gcc.info,  Node: PowerPC Type Attributes,  Next: x86 Type Attributes,  Prev: MeP Type Attributes,  Up: Type Attributes
40228
402296.35.6 PowerPC Type Attributes
40230------------------------------
40231
40232Three attributes currently are defined for PowerPC configurations:
40233'altivec', 'ms_struct' and 'gcc_struct'.
40234
40235 For full documentation of the 'ms_struct' and 'gcc_struct' attributes
40236please see the documentation in *note x86 Type Attributes::.
40237
40238 The 'altivec' attribute allows one to declare AltiVec vector data types
40239supported by the AltiVec Programming Interface Manual.  The attribute
40240requires an argument to specify one of three vector types: 'vector__',
40241'pixel__' (always followed by unsigned short), and 'bool__' (always
40242followed by unsigned).
40243
40244     __attribute__((altivec(vector__)))
40245     __attribute__((altivec(pixel__))) unsigned short
40246     __attribute__((altivec(bool__))) unsigned
40247
40248 These attributes mainly are intended to support the '__vector',
40249'__pixel', and '__bool' AltiVec keywords.
40250
40251
40252File: gcc.info,  Node: x86 Type Attributes,  Prev: PowerPC Type Attributes,  Up: Type Attributes
40253
402546.35.7 x86 Type Attributes
40255--------------------------
40256
40257Two attributes are currently defined for x86 configurations: 'ms_struct'
40258and 'gcc_struct'.
40259
40260'ms_struct'
40261'gcc_struct'
40262
40263     If 'packed' is used on a structure, or if bit-fields are used it
40264     may be that the Microsoft ABI packs them differently than GCC
40265     normally packs them.  Particularly when moving packed data between
40266     functions compiled with GCC and the native Microsoft compiler
40267     (either via function call or as data in a file), it may be
40268     necessary to access either format.
40269
40270     The 'ms_struct' and 'gcc_struct' attributes correspond to the
40271     '-mms-bitfields' and '-mno-ms-bitfields' command-line options,
40272     respectively; see *note x86 Options::, for details of how structure
40273     layout is affected.  *Note x86 Variable Attributes::, for
40274     information about the corresponding attributes on variables.
40275
40276
40277File: gcc.info,  Node: Label Attributes,  Next: Enumerator Attributes,  Prev: Type Attributes,  Up: C Extensions
40278
402796.36 Label Attributes
40280=====================
40281
40282GCC allows attributes to be set on C labels.  *Note Attribute Syntax::,
40283for details of the exact syntax for using attributes.  Other attributes
40284are available for functions (*note Function Attributes::), variables
40285(*note Variable Attributes::), enumerators (*note Enumerator
40286Attributes::), statements (*note Statement Attributes::), and for types
40287(*note Type Attributes::).  A label attribute followed by a declaration
40288appertains to the label and not the declaration.
40289
40290 This example uses the 'cold' label attribute to indicate the
40291'ErrorHandling' branch is unlikely to be taken and that the
40292'ErrorHandling' label is unused:
40293
40294
40295        asm goto ("some asm" : : : : NoError);
40296
40297     /* This branch (the fall-through from the asm) is less commonly used */
40298     ErrorHandling:
40299        __attribute__((cold, unused)); /* Semi-colon is required here */
40300        printf("error\n");
40301        return 0;
40302
40303     NoError:
40304        printf("no error\n");
40305        return 1;
40306
40307'unused'
40308     This feature is intended for program-generated code that may
40309     contain unused labels, but which is compiled with '-Wall'.  It is
40310     not normally appropriate to use in it human-written code, though it
40311     could be useful in cases where the code that jumps to the label is
40312     contained within an '#ifdef' conditional.
40313
40314'hot'
40315     The 'hot' attribute on a label is used to inform the compiler that
40316     the path following the label is more likely than paths that are not
40317     so annotated.  This attribute is used in cases where
40318     '__builtin_expect' cannot be used, for instance with computed goto
40319     or 'asm goto'.
40320
40321'cold'
40322     The 'cold' attribute on labels is used to inform the compiler that
40323     the path following the label is unlikely to be executed.  This
40324     attribute is used in cases where '__builtin_expect' cannot be used,
40325     for instance with computed goto or 'asm goto'.
40326
40327
40328File: gcc.info,  Node: Enumerator Attributes,  Next: Statement Attributes,  Prev: Label Attributes,  Up: C Extensions
40329
403306.37 Enumerator Attributes
40331==========================
40332
40333GCC allows attributes to be set on enumerators.  *Note Attribute
40334Syntax::, for details of the exact syntax for using attributes.  Other
40335attributes are available for functions (*note Function Attributes::),
40336variables (*note Variable Attributes::), labels (*note Label
40337Attributes::), statements (*note Statement Attributes::), and for types
40338(*note Type Attributes::).
40339
40340 This example uses the 'deprecated' enumerator attribute to indicate the
40341'oldval' enumerator is deprecated:
40342
40343     enum E {
40344       oldval __attribute__((deprecated)),
40345       newval
40346     };
40347
40348     int
40349     fn (void)
40350     {
40351       return oldval;
40352     }
40353
40354'deprecated'
40355     The 'deprecated' attribute results in a warning if the enumerator
40356     is used anywhere in the source file.  This is useful when
40357     identifying enumerators that are expected to be removed in a future
40358     version of a program.  The warning also includes the location of
40359     the declaration of the deprecated enumerator, to enable users to
40360     easily find further information about why the enumerator is
40361     deprecated, or what they should do instead.  Note that the warnings
40362     only occurs for uses.
40363
40364'unavailable'
40365     The 'unavailable' attribute results in an error if the enumerator
40366     is used anywhere in the source file.  In other respects it behaves
40367     in the same manner as the 'deprecated' attribute.
40368
40369
40370File: gcc.info,  Node: Statement Attributes,  Next: Attribute Syntax,  Prev: Enumerator Attributes,  Up: C Extensions
40371
403726.38 Statement Attributes
40373=========================
40374
40375GCC allows attributes to be set on null statements.  *Note Attribute
40376Syntax::, for details of the exact syntax for using attributes.  Other
40377attributes are available for functions (*note Function Attributes::),
40378variables (*note Variable Attributes::), labels (*note Label
40379Attributes::), enumerators (*note Enumerator Attributes::), and for
40380types (*note Type Attributes::).
40381
40382 This example uses the 'fallthrough' statement attribute to indicate
40383that the '-Wimplicit-fallthrough' warning should not be emitted:
40384
40385     switch (cond)
40386       {
40387       case 1:
40388         bar (1);
40389         __attribute__((fallthrough));
40390       case 2:
40391         ...
40392       }
40393
40394'fallthrough'
40395     The 'fallthrough' attribute with a null statement serves as a
40396     fallthrough statement.  It hints to the compiler that a statement
40397     that falls through to another case label, or user-defined label in
40398     a switch statement is intentional and thus the
40399     '-Wimplicit-fallthrough' warning must not trigger.  The fallthrough
40400     attribute may appear at most once in each attribute list, and may
40401     not be mixed with other attributes.  It can only be used in a
40402     switch statement (the compiler will issue an error otherwise),
40403     after a preceding statement and before a logically succeeding case
40404     label, or user-defined label.
40405
40406
40407File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Statement Attributes,  Up: C Extensions
40408
404096.39 Attribute Syntax
40410=====================
40411
40412This section describes the syntax with which '__attribute__' may be
40413used, and the constructs to which attribute specifiers bind, for the C
40414language.  Some details may vary for C++ and Objective-C.  Because of
40415infelicities in the grammar for attributes, some forms described here
40416may not be successfully parsed in all cases.
40417
40418 There are some problems with the semantics of attributes in C++.  For
40419example, there are no manglings for attributes, although they may affect
40420code generation, so problems may arise when attributed types are used in
40421conjunction with templates or overloading.  Similarly, 'typeid' does not
40422distinguish between types with different attributes.  Support for
40423attributes in C++ may be restricted in future to attributes on
40424declarations only, but not on nested declarators.
40425
40426 *Note Function Attributes::, for details of the semantics of attributes
40427applying to functions.  *Note Variable Attributes::, for details of the
40428semantics of attributes applying to variables.  *Note Type Attributes::,
40429for details of the semantics of attributes applying to structure, union
40430and enumerated types.  *Note Label Attributes::, for details of the
40431semantics of attributes applying to labels.  *Note Enumerator
40432Attributes::, for details of the semantics of attributes applying to
40433enumerators.  *Note Statement Attributes::, for details of the semantics
40434of attributes applying to statements.
40435
40436 An "attribute specifier" is of the form '__attribute__
40437((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
40438comma-separated sequence of "attributes", where each attribute is one of
40439the following:
40440
40441   * Empty.  Empty attributes are ignored.
40442
40443   * An attribute name (which may be an identifier such as 'unused', or
40444     a reserved word such as 'const').
40445
40446   * An attribute name followed by a parenthesized list of parameters
40447     for the attribute.  These parameters take one of the following
40448     forms:
40449
40450        * An identifier.  For example, 'mode' attributes use this form.
40451
40452        * An identifier followed by a comma and a non-empty
40453          comma-separated list of expressions.  For example, 'format'
40454          attributes use this form.
40455
40456        * A possibly empty comma-separated list of expressions.  For
40457          example, 'format_arg' attributes use this form with the list
40458          being a single integer constant expression, and 'alias'
40459          attributes use this form with the list being a single string
40460          constant.
40461
40462 An "attribute specifier list" is a sequence of one or more attribute
40463specifiers, not separated by any other tokens.
40464
40465 You may optionally specify attribute names with '__' preceding and
40466following the name.  This allows you to use them in header files without
40467being concerned about a possible macro of the same name.  For example,
40468you may use the attribute name '__noreturn__' instead of 'noreturn'.
40469
40470Label Attributes
40471................
40472
40473In GNU C, an attribute specifier list may appear after the colon
40474following a label, other than a 'case' or 'default' label.  GNU C++ only
40475permits attributes on labels if the attribute specifier is immediately
40476followed by a semicolon (i.e., the label applies to an empty statement).
40477If the semicolon is missing, C++ label attributes are ambiguous, as it
40478is permissible for a declaration, which could begin with an attribute
40479list, to be labelled in C++.  Declarations cannot be labelled in C90 or
40480C99, so the ambiguity does not arise there.
40481
40482Enumerator Attributes
40483.....................
40484
40485In GNU C, an attribute specifier list may appear as part of an
40486enumerator.  The attribute goes after the enumeration constant, before
40487'=', if present.  The optional attribute in the enumerator appertains to
40488the enumeration constant.  It is not possible to place the attribute
40489after the constant expression, if present.
40490
40491Statement Attributes
40492....................
40493
40494In GNU C, an attribute specifier list may appear as part of a null
40495statement.  The attribute goes before the semicolon.
40496
40497Type Attributes
40498...............
40499
40500An attribute specifier list may appear as part of a 'struct', 'union' or
40501'enum' specifier.  It may go either immediately after the 'struct',
40502'union' or 'enum' keyword, or after the closing brace.  The former
40503syntax is preferred.  Where attribute specifiers follow the closing
40504brace, they are considered to relate to the structure, union or
40505enumerated type defined, not to any enclosing declaration the type
40506specifier appears in, and the type defined is not complete until after
40507the attribute specifiers.
40508
40509All other attributes
40510....................
40511
40512Otherwise, an attribute specifier appears as part of a declaration,
40513counting declarations of unnamed parameters and type names, and relates
40514to that declaration (which may be nested in another declaration, for
40515example in the case of a parameter declaration), or to a particular
40516declarator within a declaration.  Where an attribute specifier is
40517applied to a parameter declared as a function or an array, it should
40518apply to the function or array rather than the pointer to which the
40519parameter is implicitly converted, but this is not yet correctly
40520implemented.
40521
40522 Any list of specifiers and qualifiers at the start of a declaration may
40523contain attribute specifiers, whether or not such a list may in that
40524context contain storage class specifiers.  (Some attributes, however,
40525are essentially in the nature of storage class specifiers, and only make
40526sense where storage class specifiers may be used; for example,
40527'section'.)  There is one necessary limitation to this syntax: the first
40528old-style parameter declaration in a function definition cannot begin
40529with an attribute specifier, because such an attribute applies to the
40530function instead by syntax described below (which, however, is not yet
40531implemented in this case).  In some other cases, attribute specifiers
40532are permitted by this grammar but not yet supported by the compiler.
40533All attribute specifiers in this place relate to the declaration as a
40534whole.  In the obsolescent usage where a type of 'int' is implied by the
40535absence of type specifiers, such a list of specifiers and qualifiers may
40536be an attribute specifier list with no other specifiers or qualifiers.
40537
40538 At present, the first parameter in a function prototype must have some
40539type specifier that is not an attribute specifier; this resolves an
40540ambiguity in the interpretation of 'void f(int (__attribute__((foo))
40541x))', but is subject to change.  At present, if the parentheses of a
40542function declarator contain only attributes then those attributes are
40543ignored, rather than yielding an error or warning or implying a single
40544parameter of type int, but this is subject to change.
40545
40546 An attribute specifier list may appear immediately before a declarator
40547(other than the first) in a comma-separated list of declarators in a
40548declaration of more than one identifier using a single list of
40549specifiers and qualifiers.  Such attribute specifiers apply only to the
40550identifier before whose declarator they appear.  For example, in
40551
40552     __attribute__((noreturn)) void d0 (void),
40553         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
40554          d2 (void);
40555
40556the 'noreturn' attribute applies to all the functions declared; the
40557'format' attribute only applies to 'd1'.
40558
40559 An attribute specifier list may appear immediately before the comma,
40560'=' or semicolon terminating the declaration of an identifier other than
40561a function definition.  Such attribute specifiers apply to the declared
40562object or function.  Where an assembler name for an object or function
40563is specified (*note Asm Labels::), the attribute must follow the 'asm'
40564specification.
40565
40566 An attribute specifier list may, in future, be permitted to appear
40567after the declarator in a function definition (before any old-style
40568parameter declarations or the function body).
40569
40570 Attribute specifiers may be mixed with type qualifiers appearing inside
40571the '[]' of a parameter array declarator, in the C99 construct by which
40572such qualifiers are applied to the pointer to which the array is
40573implicitly converted.  Such attribute specifiers apply to the pointer,
40574not to the array, but at present this is not implemented and they are
40575ignored.
40576
40577 An attribute specifier list may appear at the start of a nested
40578declarator.  At present, there are some limitations in this usage: the
40579attributes correctly apply to the declarator, but for most individual
40580attributes the semantics this implies are not implemented.  When
40581attribute specifiers follow the '*' of a pointer declarator, they may be
40582mixed with any type qualifiers present.  The following describes the
40583formal semantics of this syntax.  It makes the most sense if you are
40584familiar with the formal specification of declarators in the ISO C
40585standard.
40586
40587 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration 'T D1',
40588where 'T' contains declaration specifiers that specify a type TYPE (such
40589as 'int') and 'D1' is a declarator that contains an identifier IDENT.
40590The type specified for IDENT for derived declarators whose type does not
40591include an attribute specifier is as in the ISO C standard.
40592
40593 If 'D1' has the form '( ATTRIBUTE-SPECIFIER-LIST D )', and the
40594declaration 'T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST TYPE"
40595for IDENT, then 'T D1' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
40596ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
40597
40598 If 'D1' has the form '* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST D',
40599and the declaration 'T D' specifies the type
40600"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then 'T D1' specifies the
40601type "DERIVED-DECLARATOR-TYPE-LIST
40602TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
40603
40604 For example,
40605
40606     void (__attribute__((noreturn)) ****f) (void);
40607
40608specifies the type "pointer to pointer to pointer to pointer to
40609non-returning function returning 'void'".  As another example,
40610
40611     char *__attribute__((aligned(8))) *f;
40612
40613specifies the type "pointer to 8-byte-aligned pointer to 'char'".  Note
40614again that this does not work with most attributes; for example, the
40615usage of 'aligned' and 'noreturn' attributes given above is not yet
40616supported.
40617
40618 For compatibility with existing code written for compiler versions that
40619did not implement attributes on nested declarators, some laxity is
40620allowed in the placing of attributes.  If an attribute that only applies
40621to types is applied to a declaration, it is treated as applying to the
40622type of that declaration.  If an attribute that only applies to
40623declarations is applied to the type of a declaration, it is treated as
40624applying to that declaration; and, for compatibility with code placing
40625the attributes immediately before the identifier declared, such an
40626attribute applied to a function return type is treated as applying to
40627the function type, and such an attribute applied to an array element
40628type is treated as applying to the array type.  If an attribute that
40629only applies to function types is applied to a pointer-to-function type,
40630it is treated as applying to the pointer target type; if such an
40631attribute is applied to a function return type that is not a
40632pointer-to-function type, it is treated as applying to the function
40633type.
40634
40635
40636File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
40637
406386.40 Prototypes and Old-Style Function Definitions
40639==================================================
40640
40641GNU C extends ISO C to allow a function prototype to override a later
40642old-style non-prototype definition.  Consider the following example:
40643
40644     /* Use prototypes unless the compiler is old-fashioned.  */
40645     #ifdef __STDC__
40646     #define P(x) x
40647     #else
40648     #define P(x) ()
40649     #endif
40650
40651     /* Prototype function declaration.  */
40652     int isroot P((uid_t));
40653
40654     /* Old-style function definition.  */
40655     int
40656     isroot (x)   /* ??? lossage here ??? */
40657          uid_t x;
40658     {
40659       return x == 0;
40660     }
40661
40662 Suppose the type 'uid_t' happens to be 'short'.  ISO C does not allow
40663this example, because subword arguments in old-style non-prototype
40664definitions are promoted.  Therefore in this example the function
40665definition's argument is really an 'int', which does not match the
40666prototype argument type of 'short'.
40667
40668 This restriction of ISO C makes it hard to write code that is portable
40669to traditional C compilers, because the programmer does not know whether
40670the 'uid_t' type is 'short', 'int', or 'long'.  Therefore, in cases like
40671these GNU C allows a prototype to override a later old-style definition.
40672More precisely, in GNU C, a function prototype argument type overrides
40673the argument type specified by a later old-style definition if the
40674former type is the same as the latter type before promotion.  Thus in
40675GNU C the above example is equivalent to the following:
40676
40677     int isroot (uid_t);
40678
40679     int
40680     isroot (uid_t x)
40681     {
40682       return x == 0;
40683     }
40684
40685GNU C++ does not support old-style function definitions, so this
40686extension is irrelevant.
40687
40688
40689File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
40690
406916.41 C++ Style Comments
40692=======================
40693
40694In GNU C, you may use C++ style comments, which start with '//' and
40695continue until the end of the line.  Many other C implementations allow
40696such comments, and they are included in the 1999 C standard.  However,
40697C++ style comments are not recognized if you specify an '-std' option
40698specifying a version of ISO C before C99, or '-ansi' (equivalent to
40699'-std=c90').
40700
40701
40702File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
40703
407046.42 Dollar Signs in Identifier Names
40705=====================================
40706
40707In GNU C, you may normally use dollar signs in identifier names.  This
40708is because many traditional C implementations allow such identifiers.
40709However, dollar signs in identifiers are not supported on a few target
40710machines, typically because the target assembler does not allow them.
40711
40712
40713File: gcc.info,  Node: Character Escapes,  Next: Alignment,  Prev: Dollar Signs,  Up: C Extensions
40714
407156.43 The Character <ESC> in Constants
40716=====================================
40717
40718You can use the sequence '\e' in a string or character constant to stand
40719for the ASCII character <ESC>.
40720
40721
40722File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Character Escapes,  Up: C Extensions
40723
407246.44 Determining the Alignment of Functions, Types or Variables
40725===============================================================
40726
40727The keyword '__alignof__' determines the alignment requirement of a
40728function, object, or a type, or the minimum alignment usually required
40729by a type.  Its syntax is just like 'sizeof' and C11 '_Alignof'.
40730
40731 For example, if the target machine requires a 'double' value to be
40732aligned on an 8-byte boundary, then '__alignof__ (double)' is 8.  This
40733is true on many RISC machines.  On more traditional machine designs,
40734'__alignof__ (double)' is 4 or even 2.
40735
40736 Some machines never actually require alignment; they allow references
40737to any data type even at an odd address.  For these machines,
40738'__alignof__' reports the smallest alignment that GCC gives the data
40739type, usually as mandated by the target ABI.
40740
40741 If the operand of '__alignof__' is an lvalue rather than a type, its
40742value is the required alignment for its type, taking into account any
40743minimum alignment specified by attribute 'aligned' (*note Common
40744Variable Attributes::).  For example, after this declaration:
40745
40746     struct foo { int x; char y; } foo1;
40747
40748the value of '__alignof__ (foo1.y)' is 1, even though its actual
40749alignment is probably 2 or 4, the same as '__alignof__ (int)'.  It is an
40750error to ask for the alignment of an incomplete type other than 'void'.
40751
40752 If the operand of the '__alignof__' expression is a function, the
40753expression evaluates to the alignment of the function which may be
40754specified by attribute 'aligned' (*note Common Function Attributes::).
40755
40756
40757File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
40758
407596.45 An Inline Function is As Fast As a Macro
40760=============================================
40761
40762By declaring a function inline, you can direct GCC to make calls to that
40763function faster.  One way GCC can achieve this is to integrate that
40764function's code into the code for its callers.  This makes execution
40765faster by eliminating the function-call overhead; in addition, if any of
40766the actual argument values are constant, their known values may permit
40767simplifications at compile time so that not all of the inline function's
40768code needs to be included.  The effect on code size is less predictable;
40769object code may be larger or smaller with function inlining, depending
40770on the particular case.  You can also direct GCC to try to integrate all
40771"simple enough" functions into their callers with the option
40772'-finline-functions'.
40773
40774 GCC implements three different semantics of declaring a function
40775inline.  One is available with '-std=gnu89' or '-fgnu89-inline' or when
40776'gnu_inline' attribute is present on all inline declarations, another
40777when '-std=c99', '-std=gnu99' or an option for a later C version is used
40778(without '-fgnu89-inline'), and the third is used when compiling C++.
40779
40780 To declare a function inline, use the 'inline' keyword in its
40781declaration, like this:
40782
40783     static inline int
40784     inc (int *a)
40785     {
40786       return (*a)++;
40787     }
40788
40789 If you are writing a header file to be included in ISO C90 programs,
40790write '__inline__' instead of 'inline'.  *Note Alternate Keywords::.
40791
40792 The three types of inlining behave similarly in two important cases:
40793when the 'inline' keyword is used on a 'static' function, like the
40794example above, and when a function is first declared without using the
40795'inline' keyword and then is defined with 'inline', like this:
40796
40797     extern int inc (int *a);
40798     inline int
40799     inc (int *a)
40800     {
40801       return (*a)++;
40802     }
40803
40804 In both of these common cases, the program behaves the same as if you
40805had not used the 'inline' keyword, except for its speed.
40806
40807 When a function is both inline and 'static', if all calls to the
40808function are integrated into the caller, and the function's address is
40809never used, then the function's own assembler code is never referenced.
40810In this case, GCC does not actually output assembler code for the
40811function, unless you specify the option '-fkeep-inline-functions'.  If
40812there is a nonintegrated call, then the function is compiled to
40813assembler code as usual.  The function must also be compiled as usual if
40814the program refers to its address, because that cannot be inlined.
40815
40816 Note that certain usages in a function definition can make it
40817unsuitable for inline substitution.  Among these usages are: variadic
40818functions, use of 'alloca', use of computed goto (*note Labels as
40819Values::), use of nonlocal goto, use of nested functions, use of
40820'setjmp', use of '__builtin_longjmp' and use of '__builtin_return' or
40821'__builtin_apply_args'.  Using '-Winline' warns when a function marked
40822'inline' could not be substituted, and gives the reason for the failure.
40823
40824 As required by ISO C++, GCC considers member functions defined within
40825the body of a class to be marked inline even if they are not explicitly
40826declared with the 'inline' keyword.  You can override this with
40827'-fno-default-inline'; *note Options Controlling C++ Dialect: C++
40828Dialect Options.
40829
40830 GCC does not inline any functions when not optimizing unless you
40831specify the 'always_inline' attribute for the function, like this:
40832
40833     /* Prototype.  */
40834     inline void foo (const char) __attribute__((always_inline));
40835
40836 The remainder of this section is specific to GNU C90 inlining.
40837
40838 When an inline function is not 'static', then the compiler must assume
40839that there may be calls from other source files; since a global symbol
40840can be defined only once in any program, the function must not be
40841defined in the other source files, so the calls therein cannot be
40842integrated.  Therefore, a non-'static' inline function is always
40843compiled on its own in the usual fashion.
40844
40845 If you specify both 'inline' and 'extern' in the function definition,
40846then the definition is used only for inlining.  In no case is the
40847function compiled on its own, not even if you refer to its address
40848explicitly.  Such an address becomes an external reference, as if you
40849had only declared the function, and had not defined it.
40850
40851 This combination of 'inline' and 'extern' has almost the effect of a
40852macro.  The way to use it is to put a function definition in a header
40853file with these keywords, and put another copy of the definition
40854(lacking 'inline' and 'extern') in a library file.  The definition in
40855the header file causes most calls to the function to be inlined.  If any
40856uses of the function remain, they refer to the single copy in the
40857library.
40858
40859
40860File: gcc.info,  Node: Volatiles,  Next: Using Assembly Language with C,  Prev: Inline,  Up: C Extensions
40861
408626.46 When is a Volatile Object Accessed?
40863========================================
40864
40865C has the concept of volatile objects.  These are normally accessed by
40866pointers and used for accessing hardware or inter-thread communication.
40867The standard encourages compilers to refrain from optimizations
40868concerning accesses to volatile objects, but leaves it implementation
40869defined as to what constitutes a volatile access.  The minimum
40870requirement is that at a sequence point all previous accesses to
40871volatile objects have stabilized and no subsequent accesses have
40872occurred.  Thus an implementation is free to reorder and combine
40873volatile accesses that occur between sequence points, but cannot do so
40874for accesses across a sequence point.  The use of volatile does not
40875allow you to violate the restriction on updating objects multiple times
40876between two sequence points.
40877
40878 Accesses to non-volatile objects are not ordered with respect to
40879volatile accesses.  You cannot use a volatile object as a memory barrier
40880to order a sequence of writes to non-volatile memory.  For instance:
40881
40882     int *ptr = SOMETHING;
40883     volatile int vobj;
40884     *ptr = SOMETHING;
40885     vobj = 1;
40886
40887Unless *PTR and VOBJ can be aliased, it is not guaranteed that the write
40888to *PTR occurs by the time the update of VOBJ happens.  If you need this
40889guarantee, you must use a stronger memory barrier such as:
40890
40891     int *ptr = SOMETHING;
40892     volatile int vobj;
40893     *ptr = SOMETHING;
40894     asm volatile ("" : : : "memory");
40895     vobj = 1;
40896
40897 A scalar volatile object is read when it is accessed in a void context:
40898
40899     volatile int *src = SOMEVALUE;
40900     *src;
40901
40902 Such expressions are rvalues, and GCC implements this as a read of the
40903volatile object being pointed to.
40904
40905 Assignments are also expressions and have an rvalue.  However when
40906assigning to a scalar volatile, the volatile object is not reread,
40907regardless of whether the assignment expression's rvalue is used or not.
40908If the assignment's rvalue is used, the value is that assigned to the
40909volatile object.  For instance, there is no read of VOBJ in all the
40910following cases:
40911
40912     int obj;
40913     volatile int vobj;
40914     vobj = SOMETHING;
40915     obj = vobj = SOMETHING;
40916     obj ? vobj = ONETHING : vobj = ANOTHERTHING;
40917     obj = (SOMETHING, vobj = ANOTHERTHING);
40918
40919 If you need to read the volatile object after an assignment has
40920occurred, you must use a separate expression with an intervening
40921sequence point.
40922
40923 As bit-fields are not individually addressable, volatile bit-fields may
40924be implicitly read when written to, or when adjacent bit-fields are
40925accessed.  Bit-field operations may be optimized such that adjacent
40926bit-fields are only partially accessed, if they straddle a storage unit
40927boundary.  For these reasons it is unwise to use volatile bit-fields to
40928access hardware.
40929
40930
40931File: gcc.info,  Node: Using Assembly Language with C,  Next: Alternate Keywords,  Prev: Volatiles,  Up: C Extensions
40932
409336.47 How to Use Inline Assembly Language in C Code
40934==================================================
40935
40936The 'asm' keyword allows you to embed assembler instructions within C
40937code.  GCC provides two forms of inline 'asm' statements.  A "basic
40938'asm'" statement is one with no operands (*note Basic Asm::), while an
40939"extended 'asm'" statement (*note Extended Asm::) includes one or more
40940operands.  The extended form is preferred for mixing C and assembly
40941language within a function, but to include assembly language at top
40942level you must use basic 'asm'.
40943
40944 You can also use the 'asm' keyword to override the assembler name for a
40945C symbol, or to place a C variable in a specific register.
40946
40947* Menu:
40948
40949* Basic Asm::          Inline assembler without operands.
40950* Extended Asm::       Inline assembler with operands.
40951* Constraints::        Constraints for 'asm' operands
40952* Asm Labels::         Specifying the assembler name to use for a C symbol.
40953* Explicit Register Variables::  Defining variables residing in specified
40954                       registers.
40955* Size of an asm::     How GCC calculates the size of an 'asm' block.
40956
40957
40958File: gcc.info,  Node: Basic Asm,  Next: Extended Asm,  Up: Using Assembly Language with C
40959
409606.47.1 Basic Asm -- Assembler Instructions Without Operands
40961-----------------------------------------------------------
40962
40963A basic 'asm' statement has the following syntax:
40964
40965     asm ASM-QUALIFIERS ( ASSEMBLERINSTRUCTIONS )
40966
40967 For the C language, the 'asm' keyword is a GNU extension.  When writing
40968C code that can be compiled with '-ansi' and the '-std' options that
40969select C dialects without GNU extensions, use '__asm__' instead of 'asm'
40970(*note Alternate Keywords::).  For the C++ language, 'asm' is a standard
40971keyword, but '__asm__' can be used for code compiled with '-fno-asm'.
40972
40973Qualifiers
40974..........
40975
40976'volatile'
40977     The optional 'volatile' qualifier has no effect.  All basic 'asm'
40978     blocks are implicitly volatile.
40979
40980'inline'
40981     If you use the 'inline' qualifier, then for inlining purposes the
40982     size of the 'asm' statement is taken as the smallest size possible
40983     (*note Size of an asm::).
40984
40985Parameters
40986..........
40987
40988ASSEMBLERINSTRUCTIONS
40989     This is a literal string that specifies the assembler code.  The
40990     string can contain any instructions recognized by the assembler,
40991     including directives.  GCC does not parse the assembler
40992     instructions themselves and does not know what they mean or even
40993     whether they are valid assembler input.
40994
40995     You may place multiple assembler instructions together in a single
40996     'asm' string, separated by the characters normally used in assembly
40997     code for the system.  A combination that works in most places is a
40998     newline to break the line, plus a tab character (written as
40999     '\n\t').  Some assemblers allow semicolons as a line separator.
41000     However, note that some assembler dialects use semicolons to start
41001     a comment.
41002
41003Remarks
41004.......
41005
41006Using extended 'asm' (*note Extended Asm::) typically produces smaller,
41007safer, and more efficient code, and in most cases it is a better
41008solution than basic 'asm'.  However, there are two situations where only
41009basic 'asm' can be used:
41010
41011   * Extended 'asm' statements have to be inside a C function, so to
41012     write inline assembly language at file scope ("top-level"), outside
41013     of C functions, you must use basic 'asm'.  You can use this
41014     technique to emit assembler directives, define assembly language
41015     macros that can be invoked elsewhere in the file, or write entire
41016     functions in assembly language.  Basic 'asm' statements outside of
41017     functions may not use any qualifiers.
41018
41019   * Functions declared with the 'naked' attribute also require basic
41020     'asm' (*note Function Attributes::).
41021
41022 Safely accessing C data and calling functions from basic 'asm' is more
41023complex than it may appear.  To access C data, it is better to use
41024extended 'asm'.
41025
41026 Do not expect a sequence of 'asm' statements to remain perfectly
41027consecutive after compilation.  If certain instructions need to remain
41028consecutive in the output, put them in a single multi-instruction 'asm'
41029statement.  Note that GCC's optimizers can move 'asm' statements
41030relative to other code, including across jumps.
41031
41032 'asm' statements may not perform jumps into other 'asm' statements.
41033GCC does not know about these jumps, and therefore cannot take account
41034of them when deciding how to optimize.  Jumps from 'asm' to C labels are
41035only supported in extended 'asm'.
41036
41037 Under certain circumstances, GCC may duplicate (or remove duplicates
41038of) your assembly code when optimizing.  This can lead to unexpected
41039duplicate symbol errors during compilation if your assembly code defines
41040symbols or labels.
41041
41042 *Warning:* The C standards do not specify semantics for 'asm', making
41043it a potential source of incompatibilities between compilers.  These
41044incompatibilities may not produce compiler warnings/errors.
41045
41046 GCC does not parse basic 'asm''s ASSEMBLERINSTRUCTIONS, which means
41047there is no way to communicate to the compiler what is happening inside
41048them.  GCC has no visibility of symbols in the 'asm' and may discard
41049them as unreferenced.  It also does not know about side effects of the
41050assembler code, such as modifications to memory or registers.  Unlike
41051some compilers, GCC assumes that no changes to general purpose registers
41052occur.  This assumption may change in a future release.
41053
41054 To avoid complications from future changes to the semantics and the
41055compatibility issues between compilers, consider replacing basic 'asm'
41056with extended 'asm'.  See How to convert from basic asm to extended asm
41057(https://gcc.gnu.org/wiki/ConvertBasicAsmToExtended) for information
41058about how to perform this conversion.
41059
41060 The compiler copies the assembler instructions in a basic 'asm'
41061verbatim to the assembly language output file, without processing
41062dialects or any of the '%' operators that are available with extended
41063'asm'.  This results in minor differences between basic 'asm' strings
41064and extended 'asm' templates.  For example, to refer to registers you
41065might use '%eax' in basic 'asm' and '%%eax' in extended 'asm'.
41066
41067 On targets such as x86 that support multiple assembler dialects, all
41068basic 'asm' blocks use the assembler dialect specified by the '-masm'
41069command-line option (*note x86 Options::).  Basic 'asm' provides no
41070mechanism to provide different assembler strings for different dialects.
41071
41072 For basic 'asm' with non-empty assembler string GCC assumes the
41073assembler block does not change any general purpose registers, but it
41074may read or write any globally accessible variable.
41075
41076 Here is an example of basic 'asm' for i386:
41077
41078     /* Note that this code will not compile with -masm=intel */
41079     #define DebugBreak() asm("int $3")
41080
41081
41082File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Basic Asm,  Up: Using Assembly Language with C
41083
410846.47.2 Extended Asm - Assembler Instructions with C Expression Operands
41085-----------------------------------------------------------------------
41086
41087With extended 'asm' you can read and write C variables from assembler
41088and perform jumps from assembler code to C labels.  Extended 'asm'
41089syntax uses colons (':') to delimit the operand parameters after the
41090assembler template:
41091
41092     asm ASM-QUALIFIERS ( ASSEMBLERTEMPLATE
41093                      : OUTPUTOPERANDS
41094                      [ : INPUTOPERANDS
41095                      [ : CLOBBERS ] ])
41096
41097     asm ASM-QUALIFIERS ( ASSEMBLERTEMPLATE
41098                           : OUTPUTOPERANDS
41099                           : INPUTOPERANDS
41100                           : CLOBBERS
41101                           : GOTOLABELS)
41102 where in the last form, ASM-QUALIFIERS contains 'goto' (and in the
41103first form, not).
41104
41105 The 'asm' keyword is a GNU extension.  When writing code that can be
41106compiled with '-ansi' and the various '-std' options, use '__asm__'
41107instead of 'asm' (*note Alternate Keywords::).
41108
41109Qualifiers
41110..........
41111
41112'volatile'
41113     The typical use of extended 'asm' statements is to manipulate input
41114     values to produce output values.  However, your 'asm' statements
41115     may also produce side effects.  If so, you may need to use the
41116     'volatile' qualifier to disable certain optimizations.  *Note
41117     Volatile::.
41118
41119'inline'
41120     If you use the 'inline' qualifier, then for inlining purposes the
41121     size of the 'asm' statement is taken as the smallest size possible
41122     (*note Size of an asm::).
41123
41124'goto'
41125     This qualifier informs the compiler that the 'asm' statement may
41126     perform a jump to one of the labels listed in the GOTOLABELS.
41127     *Note GotoLabels::.
41128
41129Parameters
41130..........
41131
41132ASSEMBLERTEMPLATE
41133     This is a literal string that is the template for the assembler
41134     code.  It is a combination of fixed text and tokens that refer to
41135     the input, output, and goto parameters.  *Note AssemblerTemplate::.
41136
41137OUTPUTOPERANDS
41138     A comma-separated list of the C variables modified by the
41139     instructions in the ASSEMBLERTEMPLATE.  An empty list is permitted.
41140     *Note OutputOperands::.
41141
41142INPUTOPERANDS
41143     A comma-separated list of C expressions read by the instructions in
41144     the ASSEMBLERTEMPLATE.  An empty list is permitted.  *Note
41145     InputOperands::.
41146
41147CLOBBERS
41148     A comma-separated list of registers or other values changed by the
41149     ASSEMBLERTEMPLATE, beyond those listed as outputs.  An empty list
41150     is permitted.  *Note Clobbers and Scratch Registers::.
41151
41152GOTOLABELS
41153     When you are using the 'goto' form of 'asm', this section contains
41154     the list of all C labels to which the code in the ASSEMBLERTEMPLATE
41155     may jump.  *Note GotoLabels::.
41156
41157     'asm' statements may not perform jumps into other 'asm' statements,
41158     only to the listed GOTOLABELS.  GCC's optimizers do not know about
41159     other jumps; therefore they cannot take account of them when
41160     deciding how to optimize.
41161
41162 The total number of input + output + goto operands is limited to 30.
41163
41164Remarks
41165.......
41166
41167The 'asm' statement allows you to include assembly instructions directly
41168within C code.  This may help you to maximize performance in
41169time-sensitive code or to access assembly instructions that are not
41170readily available to C programs.
41171
41172 Note that extended 'asm' statements must be inside a function.  Only
41173basic 'asm' may be outside functions (*note Basic Asm::).  Functions
41174declared with the 'naked' attribute also require basic 'asm' (*note
41175Function Attributes::).
41176
41177 While the uses of 'asm' are many and varied, it may help to think of an
41178'asm' statement as a series of low-level instructions that convert input
41179parameters to output parameters.  So a simple (if not particularly
41180useful) example for i386 using 'asm' might look like this:
41181
41182     int src = 1;
41183     int dst;
41184
41185     asm ("mov %1, %0\n\t"
41186         "add $1, %0"
41187         : "=r" (dst)
41188         : "r" (src));
41189
41190     printf("%d\n", dst);
41191
41192 This code copies 'src' to 'dst' and add 1 to 'dst'.
41193
411946.47.2.1 Volatile
41195.................
41196
41197GCC's optimizers sometimes discard 'asm' statements if they determine
41198there is no need for the output variables.  Also, the optimizers may
41199move code out of loops if they believe that the code will always return
41200the same result (i.e. none of its input values change between calls).
41201Using the 'volatile' qualifier disables these optimizations.  'asm'
41202statements that have no output operands and 'asm goto' statements, are
41203implicitly volatile.
41204
41205 This i386 code demonstrates a case that does not use (or require) the
41206'volatile' qualifier.  If it is performing assertion checking, this code
41207uses 'asm' to perform the validation.  Otherwise, 'dwRes' is
41208unreferenced by any code.  As a result, the optimizers can discard the
41209'asm' statement, which in turn removes the need for the entire 'DoCheck'
41210routine.  By omitting the 'volatile' qualifier when it isn't needed you
41211allow the optimizers to produce the most efficient code possible.
41212
41213     void DoCheck(uint32_t dwSomeValue)
41214     {
41215        uint32_t dwRes;
41216
41217        // Assumes dwSomeValue is not zero.
41218        asm ("bsfl %1,%0"
41219          : "=r" (dwRes)
41220          : "r" (dwSomeValue)
41221          : "cc");
41222
41223        assert(dwRes > 3);
41224     }
41225
41226 The next example shows a case where the optimizers can recognize that
41227the input ('dwSomeValue') never changes during the execution of the
41228function and can therefore move the 'asm' outside the loop to produce
41229more efficient code.  Again, using the 'volatile' qualifier disables
41230this type of optimization.
41231
41232     void do_print(uint32_t dwSomeValue)
41233     {
41234        uint32_t dwRes;
41235
41236        for (uint32_t x=0; x < 5; x++)
41237        {
41238           // Assumes dwSomeValue is not zero.
41239           asm ("bsfl %1,%0"
41240             : "=r" (dwRes)
41241             : "r" (dwSomeValue)
41242             : "cc");
41243
41244           printf("%u: %u %u\n", x, dwSomeValue, dwRes);
41245        }
41246     }
41247
41248 The following example demonstrates a case where you need to use the
41249'volatile' qualifier.  It uses the x86 'rdtsc' instruction, which reads
41250the computer's time-stamp counter.  Without the 'volatile' qualifier,
41251the optimizers might assume that the 'asm' block will always return the
41252same value and therefore optimize away the second call.
41253
41254     uint64_t msr;
41255
41256     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
41257             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
41258             "or %%rdx, %0"        // 'Or' in the lower bits.
41259             : "=a" (msr)
41260             :
41261             : "rdx");
41262
41263     printf("msr: %llx\n", msr);
41264
41265     // Do other work...
41266
41267     // Reprint the timestamp
41268     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
41269             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
41270             "or %%rdx, %0"        // 'Or' in the lower bits.
41271             : "=a" (msr)
41272             :
41273             : "rdx");
41274
41275     printf("msr: %llx\n", msr);
41276
41277 GCC's optimizers do not treat this code like the non-volatile code in
41278the earlier examples.  They do not move it out of loops or omit it on
41279the assumption that the result from a previous call is still valid.
41280
41281 Note that the compiler can move even 'volatile asm' instructions
41282relative to other code, including across jump instructions.  For
41283example, on many targets there is a system register that controls the
41284rounding mode of floating-point operations.  Setting it with a 'volatile
41285asm' statement, as in the following PowerPC example, does not work
41286reliably.
41287
41288     asm volatile("mtfsf 255, %0" : : "f" (fpenv));
41289     sum = x + y;
41290
41291 The compiler may move the addition back before the 'volatile asm'
41292statement.  To make it work as expected, add an artificial dependency to
41293the 'asm' by referencing a variable in the subsequent code, for example:
41294
41295     asm volatile ("mtfsf 255,%1" : "=X" (sum) : "f" (fpenv));
41296     sum = x + y;
41297
41298 Under certain circumstances, GCC may duplicate (or remove duplicates
41299of) your assembly code when optimizing.  This can lead to unexpected
41300duplicate symbol errors during compilation if your 'asm' code defines
41301symbols or labels.  Using '%=' (*note AssemblerTemplate::) may help
41302resolve this problem.
41303
413046.47.2.2 Assembler Template
41305...........................
41306
41307An assembler template is a literal string containing assembler
41308instructions.  The compiler replaces tokens in the template that refer
41309to inputs, outputs, and goto labels, and then outputs the resulting
41310string to the assembler.  The string can contain any instructions
41311recognized by the assembler, including directives.  GCC does not parse
41312the assembler instructions themselves and does not know what they mean
41313or even whether they are valid assembler input.  However, it does count
41314the statements (*note Size of an asm::).
41315
41316 You may place multiple assembler instructions together in a single
41317'asm' string, separated by the characters normally used in assembly code
41318for the system.  A combination that works in most places is a newline to
41319break the line, plus a tab character to move to the instruction field
41320(written as '\n\t').  Some assemblers allow semicolons as a line
41321separator.  However, note that some assembler dialects use semicolons to
41322start a comment.
41323
41324 Do not expect a sequence of 'asm' statements to remain perfectly
41325consecutive after compilation, even when you are using the 'volatile'
41326qualifier.  If certain instructions need to remain consecutive in the
41327output, put them in a single multi-instruction 'asm' statement.
41328
41329 Accessing data from C programs without using input/output operands
41330(such as by using global symbols directly from the assembler template)
41331may not work as expected.  Similarly, calling functions directly from an
41332assembler template requires a detailed understanding of the target
41333assembler and ABI.
41334
41335 Since GCC does not parse the assembler template, it has no visibility
41336of any symbols it references.  This may result in GCC discarding those
41337symbols as unreferenced unless they are also listed as input, output, or
41338goto operands.
41339
41340Special format strings
41341......................
41342
41343In addition to the tokens described by the input, output, and goto
41344operands, these tokens have special meanings in the assembler template:
41345
41346'%%'
41347     Outputs a single '%' into the assembler code.
41348
41349'%='
41350     Outputs a number that is unique to each instance of the 'asm'
41351     statement in the entire compilation.  This option is useful when
41352     creating local labels and referring to them multiple times in a
41353     single template that generates multiple assembler instructions.
41354
41355'%{'
41356'%|'
41357'%}'
41358     Outputs '{', '|', and '}' characters (respectively) into the
41359     assembler code.  When unescaped, these characters have special
41360     meaning to indicate multiple assembler dialects, as described
41361     below.
41362
41363Multiple assembler dialects in 'asm' templates
41364..............................................
41365
41366On targets such as x86, GCC supports multiple assembler dialects.  The
41367'-masm' option controls which dialect GCC uses as its default for inline
41368assembler.  The target-specific documentation for the '-masm' option
41369contains the list of supported dialects, as well as the default dialect
41370if the option is not specified.  This information may be important to
41371understand, since assembler code that works correctly when compiled
41372using one dialect will likely fail if compiled using another.  *Note x86
41373Options::.
41374
41375 If your code needs to support multiple assembler dialects (for example,
41376if you are writing public headers that need to support a variety of
41377compilation options), use constructs of this form:
41378
41379     { dialect0 | dialect1 | dialect2... }
41380
41381 This construct outputs 'dialect0' when using dialect #0 to compile the
41382code, 'dialect1' for dialect #1, etc.  If there are fewer alternatives
41383within the braces than the number of dialects the compiler supports, the
41384construct outputs nothing.
41385
41386 For example, if an x86 compiler supports two dialects ('att', 'intel'),
41387an assembler template such as this:
41388
41389     "bt{l %[Offset],%[Base] | %[Base],%[Offset]}; jc %l2"
41390
41391is equivalent to one of
41392
41393     "btl %[Offset],%[Base] ; jc %l2"   /* att dialect */
41394     "bt %[Base],%[Offset]; jc %l2"     /* intel dialect */
41395
41396 Using that same compiler, this code:
41397
41398     "xchg{l}\t{%%}ebx, %1"
41399
41400corresponds to either
41401
41402     "xchgl\t%%ebx, %1"                 /* att dialect */
41403     "xchg\tebx, %1"                    /* intel dialect */
41404
41405 There is no support for nesting dialect alternatives.
41406
414076.47.2.3 Output Operands
41408........................
41409
41410An 'asm' statement has zero or more output operands indicating the names
41411of C variables modified by the assembler code.
41412
41413 In this i386 example, 'old' (referred to in the template string as
41414'%0') and '*Base' (as '%1') are outputs and 'Offset' ('%2') is an input:
41415
41416     bool old;
41417
41418     __asm__ ("btsl %2,%1\n\t" // Turn on zero-based bit #Offset in Base.
41419              "sbb %0,%0"      // Use the CF to calculate old.
41420        : "=r" (old), "+rm" (*Base)
41421        : "Ir" (Offset)
41422        : "cc");
41423
41424     return old;
41425
41426 Operands are separated by commas.  Each operand has this format:
41427
41428     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CVARIABLENAME)
41429
41430ASMSYMBOLICNAME
41431     Specifies a symbolic name for the operand.  Reference the name in
41432     the assembler template by enclosing it in square brackets (i.e.
41433     '%[Value]').  The scope of the name is the 'asm' statement that
41434     contains the definition.  Any valid C variable name is acceptable,
41435     including names already defined in the surrounding code.  No two
41436     operands within the same 'asm' statement can use the same symbolic
41437     name.
41438
41439     When not using an ASMSYMBOLICNAME, use the (zero-based) position of
41440     the operand in the list of operands in the assembler template.  For
41441     example if there are three output operands, use '%0' in the
41442     template to refer to the first, '%1' for the second, and '%2' for
41443     the third.
41444
41445CONSTRAINT
41446     A string constant specifying constraints on the placement of the
41447     operand; *Note Constraints::, for details.
41448
41449     Output constraints must begin with either '=' (a variable
41450     overwriting an existing value) or '+' (when reading and writing).
41451     When using '=', do not assume the location contains the existing
41452     value on entry to the 'asm', except when the operand is tied to an
41453     input; *note Input Operands: InputOperands.
41454
41455     After the prefix, there must be one or more additional constraints
41456     (*note Constraints::) that describe where the value resides.
41457     Common constraints include 'r' for register and 'm' for memory.
41458     When you list more than one possible location (for example,
41459     '"=rm"'), the compiler chooses the most efficient one based on the
41460     current context.  If you list as many alternates as the 'asm'
41461     statement allows, you permit the optimizers to produce the best
41462     possible code.  If you must use a specific register, but your
41463     Machine Constraints do not provide sufficient control to select the
41464     specific register you want, local register variables may provide a
41465     solution (*note Local Register Variables::).
41466
41467CVARIABLENAME
41468     Specifies a C lvalue expression to hold the output, typically a
41469     variable name.  The enclosing parentheses are a required part of
41470     the syntax.
41471
41472 When the compiler selects the registers to use to represent the output
41473operands, it does not use any of the clobbered registers (*note Clobbers
41474and Scratch Registers::).
41475
41476 Output operand expressions must be lvalues.  The compiler cannot check
41477whether the operands have data types that are reasonable for the
41478instruction being executed.  For output expressions that are not
41479directly addressable (for example a bit-field), the constraint must
41480allow a register.  In that case, GCC uses the register as the output of
41481the 'asm', and then stores that register into the output.
41482
41483 Operands using the '+' constraint modifier count as two operands (that
41484is, both as input and output) towards the total maximum of 30 operands
41485per 'asm' statement.
41486
41487 Use the '&' constraint modifier (*note Modifiers::) on all output
41488operands that must not overlap an input.  Otherwise, GCC may allocate
41489the output operand in the same register as an unrelated input operand,
41490on the assumption that the assembler code consumes its inputs before
41491producing outputs.  This assumption may be false if the assembler code
41492actually consists of more than one instruction.
41493
41494 The same problem can occur if one output parameter (A) allows a
41495register constraint and another output parameter (B) allows a memory
41496constraint.  The code generated by GCC to access the memory address in B
41497can contain registers which _might_ be shared by A, and GCC considers
41498those registers to be inputs to the asm.  As above, GCC assumes that
41499such input registers are consumed before any outputs are written.  This
41500assumption may result in incorrect behavior if the 'asm' statement
41501writes to A before using B.  Combining the '&' modifier with the
41502register constraint on A ensures that modifying A does not affect the
41503address referenced by B.  Otherwise, the location of B is undefined if A
41504is modified before using B.
41505
41506 'asm' supports operand modifiers on operands (for example '%k2' instead
41507of simply '%2').  Typically these qualifiers are hardware dependent.
41508The list of supported modifiers for x86 is found at *note x86 Operand
41509modifiers: x86Operandmodifiers.
41510
41511 If the C code that follows the 'asm' makes no use of any of the output
41512operands, use 'volatile' for the 'asm' statement to prevent the
41513optimizers from discarding the 'asm' statement as unneeded (see *note
41514Volatile::).
41515
41516 This code makes no use of the optional ASMSYMBOLICNAME.  Therefore it
41517references the first output operand as '%0' (were there a second, it
41518would be '%1', etc).  The number of the first input operand is one
41519greater than that of the last output operand.  In this i386 example,
41520that makes 'Mask' referenced as '%1':
41521
41522     uint32_t Mask = 1234;
41523     uint32_t Index;
41524
41525       asm ("bsfl %1, %0"
41526          : "=r" (Index)
41527          : "r" (Mask)
41528          : "cc");
41529
41530 That code overwrites the variable 'Index' ('='), placing the value in a
41531register ('r').  Using the generic 'r' constraint instead of a
41532constraint for a specific register allows the compiler to pick the
41533register to use, which can result in more efficient code.  This may not
41534be possible if an assembler instruction requires a specific register.
41535
41536 The following i386 example uses the ASMSYMBOLICNAME syntax.  It
41537produces the same result as the code above, but some may consider it
41538more readable or more maintainable since reordering index numbers is not
41539necessary when adding or removing operands.  The names 'aIndex' and
41540'aMask' are only used in this example to emphasize which names get used
41541where.  It is acceptable to reuse the names 'Index' and 'Mask'.
41542
41543     uint32_t Mask = 1234;
41544     uint32_t Index;
41545
41546       asm ("bsfl %[aMask], %[aIndex]"
41547          : [aIndex] "=r" (Index)
41548          : [aMask] "r" (Mask)
41549          : "cc");
41550
41551 Here are some more examples of output operands.
41552
41553     uint32_t c = 1;
41554     uint32_t d;
41555     uint32_t *e = &c;
41556
41557     asm ("mov %[e], %[d]"
41558        : [d] "=rm" (d)
41559        : [e] "rm" (*e));
41560
41561 Here, 'd' may either be in a register or in memory.  Since the compiler
41562might already have the current value of the 'uint32_t' location pointed
41563to by 'e' in a register, you can enable it to choose the best location
41564for 'd' by specifying both constraints.
41565
415666.47.2.4 Flag Output Operands
41567.............................
41568
41569Some targets have a special register that holds the "flags" for the
41570result of an operation or comparison.  Normally, the contents of that
41571register are either unmodifed by the asm, or the 'asm' statement is
41572considered to clobber the contents.
41573
41574 On some targets, a special form of output operand exists by which
41575conditions in the flags register may be outputs of the asm.  The set of
41576conditions supported are target specific, but the general rule is that
41577the output variable must be a scalar integer, and the value is boolean.
41578When supported, the target defines the preprocessor symbol
41579'__GCC_ASM_FLAG_OUTPUTS__'.
41580
41581 Because of the special nature of the flag output operands, the
41582constraint may not include alternatives.
41583
41584 Most often, the target has only one flags register, and thus is an
41585implied operand of many instructions.  In this case, the operand should
41586not be referenced within the assembler template via '%0' etc, as there's
41587no corresponding text in the assembly language.
41588
41589ARM
41590AArch64
41591     The flag output constraints for the ARM family are of the form
41592     '=@ccCOND' where COND is one of the standard conditions defined in
41593     the ARM ARM for 'ConditionHolds'.
41594
41595     'eq'
41596          Z flag set, or equal
41597     'ne'
41598          Z flag clear or not equal
41599     'cs'
41600     'hs'
41601          C flag set or unsigned greater than equal
41602     'cc'
41603     'lo'
41604          C flag clear or unsigned less than
41605     'mi'
41606          N flag set or "minus"
41607     'pl'
41608          N flag clear or "plus"
41609     'vs'
41610          V flag set or signed overflow
41611     'vc'
41612          V flag clear
41613     'hi'
41614          unsigned greater than
41615     'ls'
41616          unsigned less than equal
41617     'ge'
41618          signed greater than equal
41619     'lt'
41620          signed less than
41621     'gt'
41622          signed greater than
41623     'le'
41624          signed less than equal
41625
41626     The flag output constraints are not supported in thumb1 mode.
41627
41628x86 family
41629     The flag output constraints for the x86 family are of the form
41630     '=@ccCOND' where COND is one of the standard conditions defined in
41631     the ISA manual for 'jCC' or 'setCC'.
41632
41633     'a'
41634          "above" or unsigned greater than
41635     'ae'
41636          "above or equal" or unsigned greater than or equal
41637     'b'
41638          "below" or unsigned less than
41639     'be'
41640          "below or equal" or unsigned less than or equal
41641     'c'
41642          carry flag set
41643     'e'
41644     'z'
41645          "equal" or zero flag set
41646     'g'
41647          signed greater than
41648     'ge'
41649          signed greater than or equal
41650     'l'
41651          signed less than
41652     'le'
41653          signed less than or equal
41654     'o'
41655          overflow flag set
41656     'p'
41657          parity flag set
41658     's'
41659          sign flag set
41660     'na'
41661     'nae'
41662     'nb'
41663     'nbe'
41664     'nc'
41665     'ne'
41666     'ng'
41667     'nge'
41668     'nl'
41669     'nle'
41670     'no'
41671     'np'
41672     'ns'
41673     'nz'
41674          "not" FLAG, or inverted versions of those above
41675
416766.47.2.5 Input Operands
41677.......................
41678
41679Input operands make values from C variables and expressions available to
41680the assembly code.
41681
41682 Operands are separated by commas.  Each operand has this format:
41683
41684     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CEXPRESSION)
41685
41686ASMSYMBOLICNAME
41687     Specifies a symbolic name for the operand.  Reference the name in
41688     the assembler template by enclosing it in square brackets (i.e.
41689     '%[Value]').  The scope of the name is the 'asm' statement that
41690     contains the definition.  Any valid C variable name is acceptable,
41691     including names already defined in the surrounding code.  No two
41692     operands within the same 'asm' statement can use the same symbolic
41693     name.
41694
41695     When not using an ASMSYMBOLICNAME, use the (zero-based) position of
41696     the operand in the list of operands in the assembler template.  For
41697     example if there are two output operands and three inputs, use '%2'
41698     in the template to refer to the first input operand, '%3' for the
41699     second, and '%4' for the third.
41700
41701CONSTRAINT
41702     A string constant specifying constraints on the placement of the
41703     operand; *Note Constraints::, for details.
41704
41705     Input constraint strings may not begin with either '=' or '+'.
41706     When you list more than one possible location (for example,
41707     '"irm"'), the compiler chooses the most efficient one based on the
41708     current context.  If you must use a specific register, but your
41709     Machine Constraints do not provide sufficient control to select the
41710     specific register you want, local register variables may provide a
41711     solution (*note Local Register Variables::).
41712
41713     Input constraints can also be digits (for example, '"0"').  This
41714     indicates that the specified input must be in the same place as the
41715     output constraint at the (zero-based) index in the output
41716     constraint list.  When using ASMSYMBOLICNAME syntax for the output
41717     operands, you may use these names (enclosed in brackets '[]')
41718     instead of digits.
41719
41720CEXPRESSION
41721     This is the C variable or expression being passed to the 'asm'
41722     statement as input.  The enclosing parentheses are a required part
41723     of the syntax.
41724
41725 When the compiler selects the registers to use to represent the input
41726operands, it does not use any of the clobbered registers (*note Clobbers
41727and Scratch Registers::).
41728
41729 If there are no output operands but there are input operands, place two
41730consecutive colons where the output operands would go:
41731
41732     __asm__ ("some instructions"
41733        : /* No outputs. */
41734        : "r" (Offset / 8));
41735
41736 *Warning:* Do _not_ modify the contents of input-only operands (except
41737for inputs tied to outputs).  The compiler assumes that on exit from the
41738'asm' statement these operands contain the same values as they had
41739before executing the statement.  It is _not_ possible to use clobbers to
41740inform the compiler that the values in these inputs are changing.  One
41741common work-around is to tie the changing input variable to an output
41742variable that never gets used.  Note, however, that if the code that
41743follows the 'asm' statement makes no use of any of the output operands,
41744the GCC optimizers may discard the 'asm' statement as unneeded (see
41745*note Volatile::).
41746
41747 'asm' supports operand modifiers on operands (for example '%k2' instead
41748of simply '%2').  Typically these qualifiers are hardware dependent.
41749The list of supported modifiers for x86 is found at *note x86 Operand
41750modifiers: x86Operandmodifiers.
41751
41752 In this example using the fictitious 'combine' instruction, the
41753constraint '"0"' for input operand 1 says that it must occupy the same
41754location as output operand 0.  Only input operands may use numbers in
41755constraints, and they must each refer to an output operand.  Only a
41756number (or the symbolic assembler name) in the constraint can guarantee
41757that one operand is in the same place as another.  The mere fact that
41758'foo' is the value of both operands is not enough to guarantee that they
41759are in the same place in the generated assembler code.
41760
41761     asm ("combine %2, %0"
41762        : "=r" (foo)
41763        : "0" (foo), "g" (bar));
41764
41765 Here is an example using symbolic names.
41766
41767     asm ("cmoveq %1, %2, %[result]"
41768        : [result] "=r"(result)
41769        : "r" (test), "r" (new), "[result]" (old));
41770
417716.47.2.6 Clobbers and Scratch Registers
41772.......................................
41773
41774While the compiler is aware of changes to entries listed in the output
41775operands, the inline 'asm' code may modify more than just the outputs.
41776For example, calculations may require additional registers, or the
41777processor may overwrite a register as a side effect of a particular
41778assembler instruction.  In order to inform the compiler of these
41779changes, list them in the clobber list.  Clobber list items are either
41780register names or the special clobbers (listed below).  Each clobber
41781list item is a string constant enclosed in double quotes and separated
41782by commas.
41783
41784 Clobber descriptions may not in any way overlap with an input or output
41785operand.  For example, you may not have an operand describing a register
41786class with one member when listing that register in the clobber list.
41787Variables declared to live in specific registers (*note Explicit
41788Register Variables::) and used as 'asm' input or output operands must
41789have no part mentioned in the clobber description.  In particular, there
41790is no way to specify that input operands get modified without also
41791specifying them as output operands.
41792
41793 When the compiler selects which registers to use to represent input and
41794output operands, it does not use any of the clobbered registers.  As a
41795result, clobbered registers are available for any use in the assembler
41796code.
41797
41798 Another restriction is that the clobber list should not contain the
41799stack pointer register.  This is because the compiler requires the value
41800of the stack pointer to be the same after an 'asm' statement as it was
41801on entry to the statement.  However, previous versions of GCC did not
41802enforce this rule and allowed the stack pointer to appear in the list,
41803with unclear semantics.  This behavior is deprecated and listing the
41804stack pointer may become an error in future versions of GCC.
41805
41806 Here is a realistic example for the VAX showing the use of clobbered
41807registers:
41808
41809     asm volatile ("movc3 %0, %1, %2"
41810                        : /* No outputs. */
41811                        : "g" (from), "g" (to), "g" (count)
41812                        : "r0", "r1", "r2", "r3", "r4", "r5", "memory");
41813
41814 Also, there are two special clobber arguments:
41815
41816'"cc"'
41817     The '"cc"' clobber indicates that the assembler code modifies the
41818     flags register.  On some machines, GCC represents the condition
41819     codes as a specific hardware register; '"cc"' serves to name this
41820     register.  On other machines, condition code handling is different,
41821     and specifying '"cc"' has no effect.  But it is valid no matter
41822     what the target.
41823
41824'"memory"'
41825     The '"memory"' clobber tells the compiler that the assembly code
41826     performs memory reads or writes to items other than those listed in
41827     the input and output operands (for example, accessing the memory
41828     pointed to by one of the input parameters).  To ensure memory
41829     contains correct values, GCC may need to flush specific register
41830     values to memory before executing the 'asm'.  Further, the compiler
41831     does not assume that any values read from memory before an 'asm'
41832     remain unchanged after that 'asm'; it reloads them as needed.
41833     Using the '"memory"' clobber effectively forms a read/write memory
41834     barrier for the compiler.
41835
41836     Note that this clobber does not prevent the _processor_ from doing
41837     speculative reads past the 'asm' statement.  To prevent that, you
41838     need processor-specific fence instructions.
41839
41840 Flushing registers to memory has performance implications and may be an
41841issue for time-sensitive code.  You can provide better information to
41842GCC to avoid this, as shown in the following examples.  At a minimum,
41843aliasing rules allow GCC to know what memory _doesn't_ need to be
41844flushed.
41845
41846 Here is a fictitious sum of squares instruction, that takes two
41847pointers to floating point values in memory and produces a floating
41848point register output.  Notice that 'x', and 'y' both appear twice in
41849the 'asm' parameters, once to specify memory accessed, and once to
41850specify a base register used by the 'asm'.  You won't normally be
41851wasting a register by doing this as GCC can use the same register for
41852both purposes.  However, it would be foolish to use both '%1' and '%3'
41853for 'x' in this 'asm' and expect them to be the same.  In fact, '%3' may
41854well not be a register.  It might be a symbolic memory reference to the
41855object pointed to by 'x'.
41856
41857     asm ("sumsq %0, %1, %2"
41858          : "+f" (result)
41859          : "r" (x), "r" (y), "m" (*x), "m" (*y));
41860
41861 Here is a fictitious '*z++ = *x++ * *y++' instruction.  Notice that the
41862'x', 'y' and 'z' pointer registers must be specified as input/output
41863because the 'asm' modifies them.
41864
41865     asm ("vecmul %0, %1, %2"
41866          : "+r" (z), "+r" (x), "+r" (y), "=m" (*z)
41867          : "m" (*x), "m" (*y));
41868
41869 An x86 example where the string memory argument is of unknown length.
41870
41871     asm("repne scasb"
41872         : "=c" (count), "+D" (p)
41873         : "m" (*(const char (*)[]) p), "0" (-1), "a" (0));
41874
41875 If you know the above will only be reading a ten byte array then you
41876could instead use a memory input like: '"m" (*(const char (*)[10]) p)'.
41877
41878 Here is an example of a PowerPC vector scale implemented in assembly,
41879complete with vector and condition code clobbers, and some initialized
41880offset registers that are unchanged by the 'asm'.
41881
41882     void
41883     dscal (size_t n, double *x, double alpha)
41884     {
41885       asm ("/* lots of asm here */"
41886            : "+m" (*(double (*)[n]) x), "+&r" (n), "+b" (x)
41887            : "d" (alpha), "b" (32), "b" (48), "b" (64),
41888              "b" (80), "b" (96), "b" (112)
41889            : "cr0",
41890              "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
41891              "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47");
41892     }
41893
41894 Rather than allocating fixed registers via clobbers to provide scratch
41895registers for an 'asm' statement, an alternative is to define a variable
41896and make it an early-clobber output as with 'a2' and 'a3' in the example
41897below.  This gives the compiler register allocator more freedom.  You
41898can also define a variable and make it an output tied to an input as
41899with 'a0' and 'a1', tied respectively to 'ap' and 'lda'.  Of course,
41900with tied outputs your 'asm' can't use the input value after modifying
41901the output register since they are one and the same register.  What's
41902more, if you omit the early-clobber on the output, it is possible that
41903GCC might allocate the same register to another of the inputs if GCC
41904could prove they had the same value on entry to the 'asm'.  This is why
41905'a1' has an early-clobber.  Its tied input, 'lda' might conceivably be
41906known to have the value 16 and without an early-clobber share the same
41907register as '%11'.  On the other hand, 'ap' can't be the same as any of
41908the other inputs, so an early-clobber on 'a0' is not needed.  It is also
41909not desirable in this case.  An early-clobber on 'a0' would cause GCC to
41910allocate a separate register for the '"m" (*(const double (*)[]) ap)'
41911input.  Note that tying an input to an output is the way to set up an
41912initialized temporary register modified by an 'asm' statement.  An input
41913not tied to an output is assumed by GCC to be unchanged, for example
41914'"b" (16)' below sets up '%11' to 16, and GCC might use that register in
41915following code if the value 16 happened to be needed.  You can even use
41916a normal 'asm' output for a scratch if all inputs that might share the
41917same register are consumed before the scratch is used.  The VSX
41918registers clobbered by the 'asm' statement could have used this
41919technique except for GCC's limit on the number of 'asm' parameters.
41920
41921     static void
41922     dgemv_kernel_4x4 (long n, const double *ap, long lda,
41923                       const double *x, double *y, double alpha)
41924     {
41925       double *a0;
41926       double *a1;
41927       double *a2;
41928       double *a3;
41929
41930       __asm__
41931         (
41932          /* lots of asm here */
41933          "#n=%1 ap=%8=%12 lda=%13 x=%7=%10 y=%0=%2 alpha=%9 o16=%11\n"
41934          "#a0=%3 a1=%4 a2=%5 a3=%6"
41935          :
41936            "+m" (*(double (*)[n]) y),
41937            "+&r" (n),	// 1
41938            "+b" (y),	// 2
41939            "=b" (a0),	// 3
41940            "=&b" (a1),	// 4
41941            "=&b" (a2),	// 5
41942            "=&b" (a3)	// 6
41943          :
41944            "m" (*(const double (*)[n]) x),
41945            "m" (*(const double (*)[]) ap),
41946            "d" (alpha),	// 9
41947            "r" (x),		// 10
41948            "b" (16),	// 11
41949            "3" (ap),	// 12
41950            "4" (lda)	// 13
41951          :
41952            "cr0",
41953            "vs32","vs33","vs34","vs35","vs36","vs37",
41954            "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47"
41955          );
41956     }
41957
419586.47.2.7 Goto Labels
41959....................
41960
41961'asm goto' allows assembly code to jump to one or more C labels.  The
41962GOTOLABELS section in an 'asm goto' statement contains a comma-separated
41963list of all C labels to which the assembler code may jump.  GCC assumes
41964that 'asm' execution falls through to the next statement (if this is not
41965the case, consider using the '__builtin_unreachable' intrinsic after the
41966'asm' statement).  Optimization of 'asm goto' may be improved by using
41967the 'hot' and 'cold' label attributes (*note Label Attributes::).
41968
41969 If the assembler code does modify anything, use the '"memory"' clobber
41970to force the optimizers to flush all register values to memory and
41971reload them if necessary after the 'asm' statement.
41972
41973 Also note that an 'asm goto' statement is always implicitly considered
41974volatile.
41975
41976 Be careful when you set output operands inside 'asm goto' only on some
41977possible control flow paths.  If you don't set up the output on given
41978path and never use it on this path, it is okay.  Otherwise, you should
41979use '+' constraint modifier meaning that the operand is input and output
41980one.  With this modifier you will have the correct values on all
41981possible paths from the 'asm goto'.
41982
41983 To reference a label in the assembler template, prefix it with '%l'
41984(lowercase 'L') followed by its (zero-based) position in GOTOLABELS plus
41985the number of input and output operands.  Output operand with constraint
41986modifier '+' is counted as two operands because it is considered as one
41987output and one input operand.  For example, if the 'asm' has three
41988inputs, one output operand with constraint modifier '+' and one output
41989operand with constraint modifier '=' and references two labels, refer to
41990the first label as '%l6' and the second as '%l7').
41991
41992 Alternately, you can reference labels using the actual C label name
41993enclosed in brackets.  For example, to reference a label named 'carry',
41994you can use '%l[carry]'.  The label must still be listed in the
41995GOTOLABELS section when using this approach.  It is better to use the
41996named references for labels as in this case you can avoid counting input
41997and output operands and special treatment of output operands with
41998constraint modifier '+'.
41999
42000 Here is an example of 'asm goto' for i386:
42001
42002     asm goto (
42003         "btl %1, %0\n\t"
42004         "jc %l2"
42005         : /* No outputs. */
42006         : "r" (p1), "r" (p2)
42007         : "cc"
42008         : carry);
42009
42010     return 0;
42011
42012     carry:
42013     return 1;
42014
42015 The following example shows an 'asm goto' that uses a memory clobber.
42016
42017     int frob(int x)
42018     {
42019       int y;
42020       asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
42021                 : /* No outputs. */
42022                 : "r"(x), "r"(&y)
42023                 : "r5", "memory"
42024                 : error);
42025       return y;
42026     error:
42027       return -1;
42028     }
42029
42030 The following example shows an 'asm goto' that uses an output.
42031
42032     int foo(int count)
42033     {
42034       asm goto ("dec %0; jb %l[stop]"
42035                 : "+r" (count)
42036                 :
42037                 :
42038                 : stop);
42039       return count;
42040     stop:
42041       return 0;
42042     }
42043
42044 The following artificial example shows an 'asm goto' that sets up an
42045output only on one path inside the 'asm goto'.  Usage of constraint
42046modifier '=' instead of '+' would be wrong as 'factor' is used on all
42047paths from the 'asm goto'.
42048
42049     int foo(int inp)
42050     {
42051       int factor = 0;
42052       asm goto ("cmp %1, 10; jb %l[lab]; mov 2, %0"
42053                 : "+r" (factor)
42054                 : "r" (inp)
42055                 :
42056                 : lab);
42057     lab:
42058       return inp * factor; /* return 2 * inp or 0 if inp < 10 */
42059     }
42060
420616.47.2.8 x86 Operand Modifiers
42062..............................
42063
42064References to input, output, and goto operands in the assembler template
42065of extended 'asm' statements can use modifiers to affect the way the
42066operands are formatted in the code output to the assembler.  For
42067example, the following code uses the 'h' and 'b' modifiers for x86:
42068
42069     uint16_t  num;
42070     asm volatile ("xchg %h0, %b0" : "+a" (num) );
42071
42072These modifiers generate this assembler code:
42073
42074     xchg %ah, %al
42075
42076 The rest of this discussion uses the following code for illustrative
42077purposes.
42078
42079     int main()
42080     {
42081        int iInt = 1;
42082
42083     top:
42084
42085        asm volatile goto ("some assembler instructions here"
42086        : /* No outputs. */
42087        : "q" (iInt), "X" (sizeof(unsigned char) + 1), "i" (42)
42088        : /* No clobbers. */
42089        : top);
42090     }
42091
42092 With no modifiers, this is what the output from the operands would be
42093for the 'att' and 'intel' dialects of assembler:
42094
42095Operand   'att'  'intel'
42096-----------------------------------
42097'%0'      '%eax' 'eax'
42098'%1'      '$2'   '2'
42099'%3'      '$.L3' 'OFFSET
42100                 FLAT:.L3'
42101'%4'      '$8'   '8'
42102'%5'      '%xmm0''xmm0'
42103'%7'      '$0'   '0'
42104
42105 The table below shows the list of supported modifiers and their
42106effects.
42107
42108Modifier   Description                                  Operand   'att'   'intel'
42109------------------------------------------------------------------------------------
42110'A'        Print an absolute memory reference.          '%A0'     '*%rax' 'rax'
42111'b'        Print the QImode name of the register.       '%b0'     '%al'   'al'
42112'B'        print the opcode suffix of b.                '%B0'     'b'
42113'c'        Require a constant operand and print the     '%c1'     '2'     '2'
42114           constant expression with no punctuation.
42115'd'        print duplicated register operand for AVX    '%d5'     '%xmm0, 'xmm0,
42116           instruction.                                           %xmm0'  xmm0'
42117'E'        Print the address in Double Integer          '%E1'     '%(rax)''[rax]'
42118           (DImode) mode (8 bytes) when the target is
42119           64-bit.  Otherwise mode is unspecified
42120           (VOIDmode).
42121'g'        Print the V16SFmode name of the register.    '%g0'     '%zmm0' 'zmm0'
42122'h'        Print the QImode name for a "high"           '%h0'     '%ah'   'ah'
42123           register.
42124'H'        Add 8 bytes to an offsettable memory         '%H0'     '8(%rax)''8[rax]'
42125           reference.  Useful when accessing the high
42126           8 bytes of SSE values.  For a memref in
42127           (%rax), it generates
42128'k'        Print the SImode name of the register.       '%k0'     '%eax'  'eax'
42129'l'        Print the label name with no punctuation.    '%l3'     '.L3'   '.L3'
42130'L'        print the opcode suffix of l.                '%L0'     'l'
42131'N'        print maskz.                                 '%N7'     '{z}'   '{z}'
42132'p'        Print raw symbol name (without               '%p2'     '42'    '42'
42133           syntax-specific prefixes).
42134'P'        If used for a function, print the PLT
42135           suffix and generate PIC code.  For
42136           example, emit 'foo@PLT' instead of 'foo'
42137           for the function foo().  If used for a
42138           constant, drop all syntax-specific
42139           prefixes and issue the bare constant.  See
42140           'p' above.
42141'q'        Print the DImode name of the register.       '%q0'     '%rax'  'rax'
42142'Q'        print the opcode suffix of q.                '%Q0'     'q'
42143'R'        print embedded rounding and sae.             '%R4'     '{rn-sae},',
42144                                                                  '       {rn-sae}'
42145'r'        print only sae.                              '%r4'     '{sae}, ',
42146                                                                  '       {sae}'
42147's'        print a shift double count, followed by      '%s1'     '$2,    '2, '
42148           the assemblers argument delimiterprint the             '
42149           opcode suffix of s.
42150'S'        print the opcode suffix of s.                '%S0'     's'
42151't'        print the V8SFmode name of the register.     '%t5'     '%ymm0' 'ymm0'
42152'T'        print the opcode suffix of t.                '%T0'     't'
42153'V'        print naked full integer register name       '%V0'     'eax'   'eax'
42154           without %.
42155'w'        Print the HImode name of the register.       '%w0'     '%ax'   'ax'
42156'W'        print the opcode suffix of w.                '%W0'     'w'
42157'x'        print the V4SFmode name of the register.     '%x5'     '%xmm0' 'xmm0'
42158'y'        print "st(0)" instead of "st" as a           '%y6'     '%st(0)''st(0)'
42159           register.
42160'z'        Print the opcode suffix for the size of      '%z0'     'l'
42161           the current integer operand (one of
42162           'b'/'w'/'l'/'q').
42163'Z'        Like 'z', with special suffixes for x87
42164           instructions.
42165
421666.47.2.9 x86 Floating-Point 'asm' Operands
42167..........................................
42168
42169On x86 targets, there are several rules on the usage of stack-like
42170registers in the operands of an 'asm'.  These rules apply only to the
42171operands that are stack-like registers:
42172
42173  1. Given a set of input registers that die in an 'asm', it is
42174     necessary to know which are implicitly popped by the 'asm', and
42175     which must be explicitly popped by GCC.
42176
42177     An input register that is implicitly popped by the 'asm' must be
42178     explicitly clobbered, unless it is constrained to match an output
42179     operand.
42180
42181  2. For any input register that is implicitly popped by an 'asm', it is
42182     necessary to know how to adjust the stack to compensate for the
42183     pop.  If any non-popped input is closer to the top of the reg-stack
42184     than the implicitly popped register, it would not be possible to
42185     know what the stack looked like--it's not clear how the rest of the
42186     stack "slides up".
42187
42188     All implicitly popped input registers must be closer to the top of
42189     the reg-stack than any input that is not implicitly popped.
42190
42191     It is possible that if an input dies in an 'asm', the compiler
42192     might use the input register for an output reload.  Consider this
42193     example:
42194
42195          asm ("foo" : "=t" (a) : "f" (b));
42196
42197     This code says that input 'b' is not popped by the 'asm', and that
42198     the 'asm' pushes a result onto the reg-stack, i.e., the stack is
42199     one deeper after the 'asm' than it was before.  But, it is possible
42200     that reload may think that it can use the same register for both
42201     the input and the output.
42202
42203     To prevent this from happening, if any input operand uses the 'f'
42204     constraint, all output register constraints must use the '&'
42205     early-clobber modifier.
42206
42207     The example above is correctly written as:
42208
42209          asm ("foo" : "=&t" (a) : "f" (b));
42210
42211  3. Some operands need to be in particular places on the stack.  All
42212     output operands fall in this category--GCC has no other way to know
42213     which registers the outputs appear in unless you indicate this in
42214     the constraints.
42215
42216     Output operands must specifically indicate which register an output
42217     appears in after an 'asm'.  '=f' is not allowed: the operand
42218     constraints must select a class with a single register.
42219
42220  4. Output operands may not be "inserted" between existing stack
42221     registers.  Since no 387 opcode uses a read/write operand, all
42222     output operands are dead before the 'asm', and are pushed by the
42223     'asm'.  It makes no sense to push anywhere but the top of the
42224     reg-stack.
42225
42226     Output operands must start at the top of the reg-stack: output
42227     operands may not "skip" a register.
42228
42229  5. Some 'asm' statements may need extra stack space for internal
42230     calculations.  This can be guaranteed by clobbering stack registers
42231     unrelated to the inputs and outputs.
42232
42233 This 'asm' takes one input, which is internally popped, and produces
42234two outputs.
42235
42236     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
42237
42238This 'asm' takes two inputs, which are popped by the 'fyl2xp1' opcode,
42239and replaces them with one output.  The 'st(1)' clobber is necessary for
42240the compiler to know that 'fyl2xp1' pops both inputs.
42241
42242     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
42243
422446.47.2.10 MSP430 Operand Modifiers
42245..................................
42246
42247The list below describes the supported modifiers and their effects for
42248MSP430.
42249
42250ModifierDescription
42251--------------------------------------------------------------------------
42252'A'     Select low 16-bits of the constant/register/memory operand.
42253'B'     Select high 16-bits of the constant/register/memory operand.
42254'C'     Select bits 32-47 of the constant/register/memory operand.
42255'D'     Select bits 48-63 of the constant/register/memory operand.
42256'H'     Equivalent to 'B' (for backwards compatibility).
42257'I'     Print the inverse (logical 'NOT') of the constant value.
42258'J'     Print an integer without a '#' prefix.
42259'L'     Equivalent to 'A' (for backwards compatibility).
42260'O'     Offset of the current frame from the top of the stack.
42261'Q'     Use the 'A' instruction postfix.
42262'R'     Inverse of condition code, for unsigned comparisons.
42263'W'     Subtract 16 from the constant value.
42264'X'     Use the 'X' instruction postfix.
42265'Y'     Subtract 4 from the constant value.
42266'Z'     Subtract 1 from the constant value.
42267'b'     Append '.B', '.W' or '.A' to the instruction, depending on the
42268        mode.
42269'd'     Offset 1 byte of a memory reference or constant value.
42270'e'     Offset 3 bytes of a memory reference or constant value.
42271'f'     Offset 5 bytes of a memory reference or constant value.
42272'g'     Offset 7 bytes of a memory reference or constant value.
42273'p'     Print the value of 2, raised to the power of the given
42274        constant.  Used to select the specified bit position.
42275'r'     Inverse of condition code, for signed comparisons.
42276'x'     Equivialent to 'X', but only for pointers.
42277
42278
42279File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: Using Assembly Language with C
42280
422816.47.3 Constraints for 'asm' Operands
42282-------------------------------------
42283
42284Here are specific details on what constraint letters you can use with
42285'asm' operands.  Constraints can say whether an operand may be in a
42286register, and which kinds of register; whether the operand can be a
42287memory reference, and which kinds of address; whether the operand may be
42288an immediate constant, and which possible values it may have.
42289Constraints can also require two operands to match.  Side-effects aren't
42290allowed in operands of inline 'asm', unless '<' or '>' constraints are
42291used, because there is no guarantee that the side effects will happen
42292exactly once in an instruction that can update the addressing register.
42293
42294* Menu:
42295
42296* Simple Constraints::  Basic use of constraints.
42297* Multi-Alternative::   When an insn has two alternative constraint-patterns.
42298* Modifiers::           More precise control over effects of constraints.
42299* Machine Constraints:: Special constraints for some particular machines.
42300
42301
42302File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
42303
423046.47.3.1 Simple Constraints
42305...........................
42306
42307The simplest kind of constraint is a string full of letters, each of
42308which describes one kind of operand that is permitted.  Here are the
42309letters that are allowed:
42310
42311whitespace
42312     Whitespace characters are ignored and can be inserted at any
42313     position except the first.  This enables each alternative for
42314     different operands to be visually aligned in the machine
42315     description even if they have different number of constraints and
42316     modifiers.
42317
42318'm'
42319     A memory operand is allowed, with any kind of address that the
42320     machine supports in general.  Note that the letter used for the
42321     general memory constraint can be re-defined by a back end using the
42322     'TARGET_MEM_CONSTRAINT' macro.
42323
42324'o'
42325     A memory operand is allowed, but only if the address is
42326     "offsettable".  This means that adding a small integer (actually,
42327     the width in bytes of the operand, as determined by its machine
42328     mode) may be added to the address and the result is also a valid
42329     memory address.
42330
42331     For example, an address which is constant is offsettable; so is an
42332     address that is the sum of a register and a constant (as long as a
42333     slightly larger constant is also within the range of
42334     address-offsets supported by the machine); but an autoincrement or
42335     autodecrement address is not offsettable.  More complicated
42336     indirect/indexed addresses may or may not be offsettable depending
42337     on the other addressing modes that the machine supports.
42338
42339     Note that in an output operand which can be matched by another
42340     operand, the constraint letter 'o' is valid only when accompanied
42341     by both '<' (if the target machine has predecrement addressing) and
42342     '>' (if the target machine has preincrement addressing).
42343
42344'V'
42345     A memory operand that is not offsettable.  In other words, anything
42346     that would fit the 'm' constraint but not the 'o' constraint.
42347
42348'<'
42349     A memory operand with autodecrement addressing (either predecrement
42350     or postdecrement) is allowed.  In inline 'asm' this constraint is
42351     only allowed if the operand is used exactly once in an instruction
42352     that can handle the side effects.  Not using an operand with '<' in
42353     constraint string in the inline 'asm' pattern at all or using it in
42354     multiple instructions isn't valid, because the side effects
42355     wouldn't be performed or would be performed more than once.
42356     Furthermore, on some targets the operand with '<' in constraint
42357     string must be accompanied by special instruction suffixes like
42358     '%U0' instruction suffix on PowerPC or '%P0' on IA-64.
42359
42360'>'
42361     A memory operand with autoincrement addressing (either preincrement
42362     or postincrement) is allowed.  In inline 'asm' the same
42363     restrictions as for '<' apply.
42364
42365'r'
42366     A register operand is allowed provided that it is in a general
42367     register.
42368
42369'i'
42370     An immediate integer operand (one with constant value) is allowed.
42371     This includes symbolic constants whose values will be known only at
42372     assembly time or later.
42373
42374'n'
42375     An immediate integer operand with a known numeric value is allowed.
42376     Many systems cannot support assembly-time constants for operands
42377     less than a word wide.  Constraints for these operands should use
42378     'n' rather than 'i'.
42379
42380'I', 'J', 'K', ... 'P'
42381     Other letters in the range 'I' through 'P' may be defined in a
42382     machine-dependent fashion to permit immediate integer operands with
42383     explicit integer values in specified ranges.  For example, on the
42384     68000, 'I' is defined to stand for the range of values 1 to 8.
42385     This is the range permitted as a shift count in the shift
42386     instructions.
42387
42388'E'
42389     An immediate floating operand (expression code 'const_double') is
42390     allowed, but only if the target floating point format is the same
42391     as that of the host machine (on which the compiler is running).
42392
42393'F'
42394     An immediate floating operand (expression code 'const_double' or
42395     'const_vector') is allowed.
42396
42397'G', 'H'
42398     'G' and 'H' may be defined in a machine-dependent fashion to permit
42399     immediate floating operands in particular ranges of values.
42400
42401's'
42402     An immediate integer operand whose value is not an explicit integer
42403     is allowed.
42404
42405     This might appear strange; if an insn allows a constant operand
42406     with a value not known at compile time, it certainly must allow any
42407     known value.  So why use 's' instead of 'i'?  Sometimes it allows
42408     better code to be generated.
42409
42410     For example, on the 68000 in a fullword instruction it is possible
42411     to use an immediate operand; but if the immediate value is between
42412     -128 and 127, better code results from loading the value into a
42413     register and using the register.  This is because the load into the
42414     register can be done with a 'moveq' instruction.  We arrange for
42415     this to happen by defining the letter 'K' to mean "any integer
42416     outside the range -128 to 127", and then specifying 'Ks' in the
42417     operand constraints.
42418
42419'g'
42420     Any register, memory or immediate integer operand is allowed,
42421     except for registers that are not general registers.
42422
42423'X'
42424     Any operand whatsoever is allowed.
42425
42426'0', '1', '2', ... '9'
42427     An operand that matches the specified operand number is allowed.
42428     If a digit is used together with letters within the same
42429     alternative, the digit should come last.
42430
42431     This number is allowed to be more than a single digit.  If multiple
42432     digits are encountered consecutively, they are interpreted as a
42433     single decimal integer.  There is scant chance for ambiguity, since
42434     to-date it has never been desirable that '10' be interpreted as
42435     matching either operand 1 _or_ operand 0.  Should this be desired,
42436     one can use multiple alternatives instead.
42437
42438     This is called a "matching constraint" and what it really means is
42439     that the assembler has only a single operand that fills two roles
42440     which 'asm' distinguishes.  For example, an add instruction uses
42441     two input operands and an output operand, but on most CISC machines
42442     an add instruction really has only two operands, one of them an
42443     input-output operand:
42444
42445          addl #35,r12
42446
42447     Matching constraints are used in these circumstances.  More
42448     precisely, the two operands that match must include one input-only
42449     operand and one output-only operand.  Moreover, the digit must be a
42450     smaller number than the number of the operand that uses it in the
42451     constraint.
42452
42453'p'
42454     An operand that is a valid memory address is allowed.  This is for
42455     "load address" and "push address" instructions.
42456
42457     'p' in the constraint must be accompanied by 'address_operand' as
42458     the predicate in the 'match_operand'.  This predicate interprets
42459     the mode specified in the 'match_operand' as the mode of the memory
42460     reference for which the address would be valid.
42461
42462OTHER-LETTERS
42463     Other letters can be defined in machine-dependent fashion to stand
42464     for particular classes of registers or other arbitrary operand
42465     types.  'd', 'a' and 'f' are defined on the 68000/68020 to stand
42466     for data, address and floating point registers.
42467
42468
42469File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
42470
424716.47.3.2 Multiple Alternative Constraints
42472.........................................
42473
42474Sometimes a single instruction has multiple alternative sets of possible
42475operands.  For example, on the 68000, a logical-or instruction can
42476combine register or an immediate value into memory, or it can combine
42477any kind of operand into a register; but it cannot combine one memory
42478location into another.
42479
42480 These constraints are represented as multiple alternatives.  An
42481alternative can be described by a series of letters for each operand.
42482The overall constraint for an operand is made from the letters for this
42483operand from the first alternative, a comma, the letters for this
42484operand from the second alternative, a comma, and so on until the last
42485alternative.  All operands for a single instruction must have the same
42486number of alternatives.
42487
42488 So the first alternative for the 68000's logical-or could be written as
42489'"+m" (output) : "ir" (input)'.  The second could be '"+r" (output):
42490"irm" (input)'.  However, the fact that two memory locations cannot be
42491used in a single instruction prevents simply using '"+rm" (output) :
42492"irm" (input)'.  Using multi-alternatives, this might be written as
42493'"+m,r" (output) : "ir,irm" (input)'.  This describes all the available
42494alternatives to the compiler, allowing it to choose the most efficient
42495one for the current conditions.
42496
42497 There is no way within the template to determine which alternative was
42498chosen.  However you may be able to wrap your 'asm' statements with
42499builtins such as '__builtin_constant_p' to achieve the desired results.
42500
42501
42502File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
42503
425046.47.3.3 Constraint Modifier Characters
42505.......................................
42506
42507Here are constraint modifier characters.
42508
42509'='
42510     Means that this operand is written to by this instruction: the
42511     previous value is discarded and replaced by new data.
42512
42513'+'
42514     Means that this operand is both read and written by the
42515     instruction.
42516
42517     When the compiler fixes up the operands to satisfy the constraints,
42518     it needs to know which operands are read by the instruction and
42519     which are written by it.  '=' identifies an operand which is only
42520     written; '+' identifies an operand that is both read and written;
42521     all other operands are assumed to only be read.
42522
42523     If you specify '=' or '+' in a constraint, you put it in the first
42524     character of the constraint string.
42525
42526'&'
42527     Means (in a particular alternative) that this operand is an
42528     "earlyclobber" operand, which is written before the instruction is
42529     finished using the input operands.  Therefore, this operand may not
42530     lie in a register that is read by the instruction or as part of any
42531     memory address.
42532
42533     '&' applies only to the alternative in which it is written.  In
42534     constraints with multiple alternatives, sometimes one alternative
42535     requires '&' while others do not.  See, for example, the 'movdf'
42536     insn of the 68000.
42537
42538     An operand which is read by the instruction can be tied to an
42539     earlyclobber operand if its only use as an input occurs before the
42540     early result is written.  Adding alternatives of this form often
42541     allows GCC to produce better code when only some of the read
42542     operands can be affected by the earlyclobber.  See, for example,
42543     the 'mulsi3' insn of the ARM.
42544
42545     Furthermore, if the "earlyclobber" operand is also a read/write
42546     operand, then that operand is written only after it's used.
42547
42548     '&' does not obviate the need to write '=' or '+'.  As
42549     "earlyclobber" operands are always written, a read-only
42550     "earlyclobber" operand is ill-formed and will be rejected by the
42551     compiler.
42552
42553'%'
42554     Declares the instruction to be commutative for this operand and the
42555     following operand.  This means that the compiler may interchange
42556     the two operands if that is the cheapest way to make all operands
42557     fit the constraints.  '%' applies to all alternatives and must
42558     appear as the first character in the constraint.  Only read-only
42559     operands can use '%'.
42560
42561     GCC can only handle one commutative pair in an asm; if you use
42562     more, the compiler may fail.  Note that you need not use the
42563     modifier if the two alternatives are strictly identical; this would
42564     only waste time in the reload pass.
42565
42566
42567File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
42568
425696.47.3.4 Constraints for Particular Machines
42570............................................
42571
42572Whenever possible, you should use the general-purpose constraint letters
42573in 'asm' arguments, since they will convey meaning more readily to
42574people reading your code.  Failing that, use the constraint letters that
42575usually have very similar meanings across architectures.  The most
42576commonly used constraints are 'm' and 'r' (for memory and
42577general-purpose registers respectively; *note Simple Constraints::), and
42578'I', usually the letter indicating the most common immediate-constant
42579format.
42580
42581 Each architecture defines additional constraints.  These constraints
42582are used by the compiler itself for instruction generation, as well as
42583for 'asm' statements; therefore, some of the constraints are not
42584particularly useful for 'asm'.  Here is a summary of some of the
42585machine-dependent constraints available on some particular machines; it
42586includes both constraints that are useful for 'asm' and constraints that
42587aren't.  The compiler source file mentioned in the table heading for
42588each architecture is the definitive reference for the meanings of that
42589architecture's constraints.
42590
42591_AArch64 family--'config/aarch64/constraints.md'_
42592     'k'
42593          The stack pointer register ('SP')
42594
42595     'w'
42596          Floating point register, Advanced SIMD vector register or SVE
42597          vector register
42598
42599     'x'
42600          Like 'w', but restricted to registers 0 to 15 inclusive.
42601
42602     'y'
42603          Like 'w', but restricted to registers 0 to 7 inclusive.
42604
42605     'Upl'
42606          One of the low eight SVE predicate registers ('P0' to 'P7')
42607
42608     'Upa'
42609          Any of the SVE predicate registers ('P0' to 'P15')
42610
42611     'I'
42612          Integer constant that is valid as an immediate operand in an
42613          'ADD' instruction
42614
42615     'J'
42616          Integer constant that is valid as an immediate operand in a
42617          'SUB' instruction (once negated)
42618
42619     'K'
42620          Integer constant that can be used with a 32-bit logical
42621          instruction
42622
42623     'L'
42624          Integer constant that can be used with a 64-bit logical
42625          instruction
42626
42627     'M'
42628          Integer constant that is valid as an immediate operand in a
42629          32-bit 'MOV' pseudo instruction.  The 'MOV' may be assembled
42630          to one of several different machine instructions depending on
42631          the value
42632
42633     'N'
42634          Integer constant that is valid as an immediate operand in a
42635          64-bit 'MOV' pseudo instruction
42636
42637     'S'
42638          An absolute symbolic address or a label reference
42639
42640     'Y'
42641          Floating point constant zero
42642
42643     'Z'
42644          Integer constant zero
42645
42646     'Ush'
42647          The high part (bits 12 and upwards) of the pc-relative address
42648          of a symbol within 4GB of the instruction
42649
42650     'Q'
42651          A memory address which uses a single base register with no
42652          offset
42653
42654     'Ump'
42655          A memory address suitable for a load/store pair instruction in
42656          SI, DI, SF and DF modes
42657
42658_AMD GCN --'config/gcn/constraints.md'_
42659     'I'
42660          Immediate integer in the range -16 to 64
42661
42662     'J'
42663          Immediate 16-bit signed integer
42664
42665     'Kf'
42666          Immediate constant -1
42667
42668     'L'
42669          Immediate 15-bit unsigned integer
42670
42671     'A'
42672          Immediate constant that can be inlined in an instruction
42673          encoding: integer -16..64, or float 0.0, +/-0.5, +/-1.0,
42674          +/-2.0, +/-4.0, 1.0/(2.0*PI)
42675
42676     'B'
42677          Immediate 32-bit signed integer that can be attached to an
42678          instruction encoding
42679
42680     'C'
42681          Immediate 32-bit integer in range -16..4294967295 (i.e.
42682          32-bit unsigned integer or 'A' constraint)
42683
42684     'DA'
42685          Immediate 64-bit constant that can be split into two 'A'
42686          constants
42687
42688     'DB'
42689          Immediate 64-bit constant that can be split into two 'B'
42690          constants
42691
42692     'U'
42693          Any 'unspec'
42694
42695     'Y'
42696          Any 'symbol_ref' or 'label_ref'
42697
42698     'v'
42699          VGPR register
42700
42701     'Sg'
42702          SGPR register
42703
42704     'SD'
42705          SGPR registers valid for instruction destinations, including
42706          VCC, M0 and EXEC
42707
42708     'SS'
42709          SGPR registers valid for instruction sources, including VCC,
42710          M0, EXEC and SCC
42711
42712     'Sm'
42713          SGPR registers valid as a source for scalar memory
42714          instructions (excludes M0 and EXEC)
42715
42716     'Sv'
42717          SGPR registers valid as a source or destination for vector
42718          instructions (excludes EXEC)
42719
42720     'ca'
42721          All condition registers: SCC, VCCZ, EXECZ
42722
42723     'cs'
42724          Scalar condition register: SCC
42725
42726     'cV'
42727          Vector condition register: VCC, VCC_LO, VCC_HI
42728
42729     'e'
42730          EXEC register (EXEC_LO and EXEC_HI)
42731
42732     'RB'
42733          Memory operand with address space suitable for 'buffer_*'
42734          instructions
42735
42736     'RF'
42737          Memory operand with address space suitable for 'flat_*'
42738          instructions
42739
42740     'RS'
42741          Memory operand with address space suitable for 's_*'
42742          instructions
42743
42744     'RL'
42745          Memory operand with address space suitable for 'ds_*' LDS
42746          instructions
42747
42748     'RG'
42749          Memory operand with address space suitable for 'ds_*' GDS
42750          instructions
42751
42752     'RD'
42753          Memory operand with address space suitable for any 'ds_*'
42754          instructions
42755
42756     'RM'
42757          Memory operand with address space suitable for 'global_*'
42758          instructions
42759
42760_ARC --'config/arc/constraints.md'_
42761     'q'
42762          Registers usable in ARCompact 16-bit instructions: 'r0'-'r3',
42763          'r12'-'r15'.  This constraint can only match when the '-mq'
42764          option is in effect.
42765
42766     'e'
42767          Registers usable as base-regs of memory addresses in ARCompact
42768          16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'.
42769          This constraint can only match when the '-mq' option is in
42770          effect.
42771     'D'
42772          ARC FPX (dpfp) 64-bit registers.  'D0', 'D1'.
42773
42774     'I'
42775          A signed 12-bit integer constant.
42776
42777     'Cal'
42778          constant for arithmetic/logical operations.  This might be any
42779          constant that can be put into a long immediate by the assmbler
42780          or linker without involving a PIC relocation.
42781
42782     'K'
42783          A 3-bit unsigned integer constant.
42784
42785     'L'
42786          A 6-bit unsigned integer constant.
42787
42788     'CnL'
42789          One's complement of a 6-bit unsigned integer constant.
42790
42791     'CmL'
42792          Two's complement of a 6-bit unsigned integer constant.
42793
42794     'M'
42795          A 5-bit unsigned integer constant.
42796
42797     'O'
42798          A 7-bit unsigned integer constant.
42799
42800     'P'
42801          A 8-bit unsigned integer constant.
42802
42803     'H'
42804          Any const_double value.
42805
42806_ARM family--'config/arm/constraints.md'_
42807
42808     'h'
42809          In Thumb state, the core registers 'r8'-'r15'.
42810
42811     'k'
42812          The stack pointer register.
42813
42814     'l'
42815          In Thumb State the core registers 'r0'-'r7'.  In ARM state
42816          this is an alias for the 'r' constraint.
42817
42818     't'
42819          VFP floating-point registers 's0'-'s31'.  Used for 32 bit
42820          values.
42821
42822     'w'
42823          VFP floating-point registers 'd0'-'d31' and the appropriate
42824          subset 'd0'-'d15' based on command line options.  Used for 64
42825          bit values only.  Not valid for Thumb1.
42826
42827     'y'
42828          The iWMMX co-processor registers.
42829
42830     'z'
42831          The iWMMX GR registers.
42832
42833     'G'
42834          The floating-point constant 0.0
42835
42836     'I'
42837          Integer that is valid as an immediate operand in a data
42838          processing instruction.  That is, an integer in the range 0 to
42839          255 rotated by a multiple of 2
42840
42841     'J'
42842          Integer in the range -4095 to 4095
42843
42844     'K'
42845          Integer that satisfies constraint 'I' when inverted (ones
42846          complement)
42847
42848     'L'
42849          Integer that satisfies constraint 'I' when negated (twos
42850          complement)
42851
42852     'M'
42853          Integer in the range 0 to 32
42854
42855     'Q'
42856          A memory reference where the exact address is in a single
42857          register (''m'' is preferable for 'asm' statements)
42858
42859     'R'
42860          An item in the constant pool
42861
42862     'S'
42863          A symbol in the text segment of the current file
42864
42865     'Uv'
42866          A memory reference suitable for VFP load/store insns
42867          (reg+constant offset)
42868
42869     'Uy'
42870          A memory reference suitable for iWMMXt load/store
42871          instructions.
42872
42873     'Uq'
42874          A memory reference suitable for the ARMv4 ldrsb instruction.
42875
42876_AVR family--'config/avr/constraints.md'_
42877     'l'
42878          Registers from r0 to r15
42879
42880     'a'
42881          Registers from r16 to r23
42882
42883     'd'
42884          Registers from r16 to r31
42885
42886     'w'
42887          Registers from r24 to r31.  These registers can be used in
42888          'adiw' command
42889
42890     'e'
42891          Pointer register (r26-r31)
42892
42893     'b'
42894          Base pointer register (r28-r31)
42895
42896     'q'
42897          Stack pointer register (SPH:SPL)
42898
42899     't'
42900          Temporary register r0
42901
42902     'x'
42903          Register pair X (r27:r26)
42904
42905     'y'
42906          Register pair Y (r29:r28)
42907
42908     'z'
42909          Register pair Z (r31:r30)
42910
42911     'I'
42912          Constant greater than -1, less than 64
42913
42914     'J'
42915          Constant greater than -64, less than 1
42916
42917     'K'
42918          Constant integer 2
42919
42920     'L'
42921          Constant integer 0
42922
42923     'M'
42924          Constant that fits in 8 bits
42925
42926     'N'
42927          Constant integer -1
42928
42929     'O'
42930          Constant integer 8, 16, or 24
42931
42932     'P'
42933          Constant integer 1
42934
42935     'G'
42936          A floating point constant 0.0
42937
42938     'Q'
42939          A memory address based on Y or Z pointer with displacement.
42940
42941_Blackfin family--'config/bfin/constraints.md'_
42942     'a'
42943          P register
42944
42945     'd'
42946          D register
42947
42948     'z'
42949          A call clobbered P register.
42950
42951     'qN'
42952          A single register.  If N is in the range 0 to 7, the
42953          corresponding D register.  If it is 'A', then the register P0.
42954
42955     'D'
42956          Even-numbered D register
42957
42958     'W'
42959          Odd-numbered D register
42960
42961     'e'
42962          Accumulator register.
42963
42964     'A'
42965          Even-numbered accumulator register.
42966
42967     'B'
42968          Odd-numbered accumulator register.
42969
42970     'b'
42971          I register
42972
42973     'v'
42974          B register
42975
42976     'f'
42977          M register
42978
42979     'c'
42980          Registers used for circular buffering, i.e. I, B, or L
42981          registers.
42982
42983     'C'
42984          The CC register.
42985
42986     't'
42987          LT0 or LT1.
42988
42989     'k'
42990          LC0 or LC1.
42991
42992     'u'
42993          LB0 or LB1.
42994
42995     'x'
42996          Any D, P, B, M, I or L register.
42997
42998     'y'
42999          Additional registers typically used only in prologues and
43000          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
43001          USP.
43002
43003     'w'
43004          Any register except accumulators or CC.
43005
43006     'Ksh'
43007          Signed 16 bit integer (in the range -32768 to 32767)
43008
43009     'Kuh'
43010          Unsigned 16 bit integer (in the range 0 to 65535)
43011
43012     'Ks7'
43013          Signed 7 bit integer (in the range -64 to 63)
43014
43015     'Ku7'
43016          Unsigned 7 bit integer (in the range 0 to 127)
43017
43018     'Ku5'
43019          Unsigned 5 bit integer (in the range 0 to 31)
43020
43021     'Ks4'
43022          Signed 4 bit integer (in the range -8 to 7)
43023
43024     'Ks3'
43025          Signed 3 bit integer (in the range -3 to 4)
43026
43027     'Ku3'
43028          Unsigned 3 bit integer (in the range 0 to 7)
43029
43030     'PN'
43031          Constant N, where N is a single-digit constant in the range 0
43032          to 4.
43033
43034     'PA'
43035          An integer equal to one of the MACFLAG_XXX constants that is
43036          suitable for use with either accumulator.
43037
43038     'PB'
43039          An integer equal to one of the MACFLAG_XXX constants that is
43040          suitable for use only with accumulator A1.
43041
43042     'M1'
43043          Constant 255.
43044
43045     'M2'
43046          Constant 65535.
43047
43048     'J'
43049          An integer constant with exactly a single bit set.
43050
43051     'L'
43052          An integer constant with all bits set except exactly one.
43053
43054     'H'
43055
43056     'Q'
43057          Any SYMBOL_REF.
43058
43059_CR16 Architecture--'config/cr16/cr16.h'_
43060
43061     'b'
43062          Registers from r0 to r14 (registers without stack pointer)
43063
43064     't'
43065          Register from r0 to r11 (all 16-bit registers)
43066
43067     'p'
43068          Register from r12 to r15 (all 32-bit registers)
43069
43070     'I'
43071          Signed constant that fits in 4 bits
43072
43073     'J'
43074          Signed constant that fits in 5 bits
43075
43076     'K'
43077          Signed constant that fits in 6 bits
43078
43079     'L'
43080          Unsigned constant that fits in 4 bits
43081
43082     'M'
43083          Signed constant that fits in 32 bits
43084
43085     'N'
43086          Check for 64 bits wide constants for add/sub instructions
43087
43088     'G'
43089          Floating point constant that is legal for store immediate
43090
43091_C-SKY--'config/csky/constraints.md'_
43092
43093     'a'
43094          The mini registers r0 - r7.
43095
43096     'b'
43097          The low registers r0 - r15.
43098
43099     'c'
43100          C register.
43101
43102     'y'
43103          HI and LO registers.
43104
43105     'l'
43106          LO register.
43107
43108     'h'
43109          HI register.
43110
43111     'v'
43112          Vector registers.
43113
43114     'z'
43115          Stack pointer register (SP).
43116
43117     'Q'
43118          A memory address which uses a base register with a short
43119          offset or with a index register with its scale.
43120
43121     'W'
43122          A memory address which uses a base register with a index
43123          register with its scale.
43124
43125_Epiphany--'config/epiphany/constraints.md'_
43126     'U16'
43127          An unsigned 16-bit constant.
43128
43129     'K'
43130          An unsigned 5-bit constant.
43131
43132     'L'
43133          A signed 11-bit constant.
43134
43135     'Cm1'
43136          A signed 11-bit constant added to -1.  Can only match when the
43137          '-m1reg-REG' option is active.
43138
43139     'Cl1'
43140          Left-shift of -1, i.e., a bit mask with a block of leading
43141          ones, the rest being a block of trailing zeroes.  Can only
43142          match when the '-m1reg-REG' option is active.
43143
43144     'Cr1'
43145          Right-shift of -1, i.e., a bit mask with a trailing block of
43146          ones, the rest being zeroes.  Or to put it another way, one
43147          less than a power of two.  Can only match when the
43148          '-m1reg-REG' option is active.
43149
43150     'Cal'
43151          Constant for arithmetic/logical operations.  This is like 'i',
43152          except that for position independent code, no symbols /
43153          expressions needing relocations are allowed.
43154
43155     'Csy'
43156          Symbolic constant for call/jump instruction.
43157
43158     'Rcs'
43159          The register class usable in short insns.  This is a register
43160          class constraint, and can thus drive register allocation.
43161          This constraint won't match unless '-mprefer-short-insn-regs'
43162          is in effect.
43163
43164     'Rsc'
43165          The the register class of registers that can be used to hold a
43166          sibcall call address.  I.e., a caller-saved register.
43167
43168     'Rct'
43169          Core control register class.
43170
43171     'Rgs'
43172          The register group usable in short insns.  This constraint
43173          does not use a register class, so that it only passively
43174          matches suitable registers, and doesn't drive register
43175          allocation.
43176
43177     'Rra'
43178          Matches the return address if it can be replaced with the link
43179          register.
43180
43181     'Rcc'
43182          Matches the integer condition code register.
43183
43184     'Sra'
43185          Matches the return address if it is in a stack slot.
43186
43187     'Cfm'
43188          Matches control register values to switch fp mode, which are
43189          encapsulated in 'UNSPEC_FP_MODE'.
43190
43191_FRV--'config/frv/frv.h'_
43192     'a'
43193          Register in the class 'ACC_REGS' ('acc0' to 'acc7').
43194
43195     'b'
43196          Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7').
43197
43198     'c'
43199          Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0'
43200          to 'icc3').
43201
43202     'd'
43203          Register in the class 'GPR_REGS' ('gr0' to 'gr63').
43204
43205     'e'
43206          Register in the class 'EVEN_REGS' ('gr0' to 'gr63').  Odd
43207          registers are excluded not in the class but through the use of
43208          a machine mode larger than 4 bytes.
43209
43210     'f'
43211          Register in the class 'FPR_REGS' ('fr0' to 'fr63').
43212
43213     'h'
43214          Register in the class 'FEVEN_REGS' ('fr0' to 'fr63').  Odd
43215          registers are excluded not in the class but through the use of
43216          a machine mode larger than 4 bytes.
43217
43218     'l'
43219          Register in the class 'LR_REG' (the 'lr' register).
43220
43221     'q'
43222          Register in the class 'QUAD_REGS' ('gr2' to 'gr63').  Register
43223          numbers not divisible by 4 are excluded not in the class but
43224          through the use of a machine mode larger than 8 bytes.
43225
43226     't'
43227          Register in the class 'ICC_REGS' ('icc0' to 'icc3').
43228
43229     'u'
43230          Register in the class 'FCC_REGS' ('fcc0' to 'fcc3').
43231
43232     'v'
43233          Register in the class 'ICR_REGS' ('cc4' to 'cc7').
43234
43235     'w'
43236          Register in the class 'FCR_REGS' ('cc0' to 'cc3').
43237
43238     'x'
43239          Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63').
43240          Register numbers not divisible by 4 are excluded not in the
43241          class but through the use of a machine mode larger than 8
43242          bytes.
43243
43244     'z'
43245          Register in the class 'SPR_REGS' ('lcr' and 'lr').
43246
43247     'A'
43248          Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7').
43249
43250     'B'
43251          Register in the class 'ACCG_REGS' ('accg0' to 'accg7').
43252
43253     'C'
43254          Register in the class 'CR_REGS' ('cc0' to 'cc7').
43255
43256     'G'
43257          Floating point constant zero
43258
43259     'I'
43260          6-bit signed integer constant
43261
43262     'J'
43263          10-bit signed integer constant
43264
43265     'L'
43266          16-bit signed integer constant
43267
43268     'M'
43269          16-bit unsigned integer constant
43270
43271     'N'
43272          12-bit signed integer constant that is negative--i.e. in the
43273          range of -2048 to -1
43274
43275     'O'
43276          Constant zero
43277
43278     'P'
43279          12-bit signed integer constant that is greater than zero--i.e.
43280          in the range of 1 to 2047.
43281
43282_FT32--'config/ft32/constraints.md'_
43283     'A'
43284          An absolute address
43285
43286     'B'
43287          An offset address
43288
43289     'W'
43290          A register indirect memory operand
43291
43292     'e'
43293          An offset address.
43294
43295     'f'
43296          An offset address.
43297
43298     'O'
43299          The constant zero or one
43300
43301     'I'
43302          A 16-bit signed constant (-32768 ... 32767)
43303
43304     'w'
43305          A bitfield mask suitable for bext or bins
43306
43307     'x'
43308          An inverted bitfield mask suitable for bext or bins
43309
43310     'L'
43311          A 16-bit unsigned constant, multiple of 4 (0 ... 65532)
43312
43313     'S'
43314          A 20-bit signed constant (-524288 ... 524287)
43315
43316     'b'
43317          A constant for a bitfield width (1 ... 16)
43318
43319     'KA'
43320          A 10-bit signed constant (-512 ... 511)
43321
43322_Hewlett-Packard PA-RISC--'config/pa/pa.h'_
43323     'a'
43324          General register 1
43325
43326     'f'
43327          Floating point register
43328
43329     'q'
43330          Shift amount register
43331
43332     'x'
43333          Floating point register (deprecated)
43334
43335     'y'
43336          Upper floating point register (32-bit), floating point
43337          register (64-bit)
43338
43339     'Z'
43340          Any register
43341
43342     'I'
43343          Signed 11-bit integer constant
43344
43345     'J'
43346          Signed 14-bit integer constant
43347
43348     'K'
43349          Integer constant that can be deposited with a 'zdepi'
43350          instruction
43351
43352     'L'
43353          Signed 5-bit integer constant
43354
43355     'M'
43356          Integer constant 0
43357
43358     'N'
43359          Integer constant that can be loaded with a 'ldil' instruction
43360
43361     'O'
43362          Integer constant whose value plus one is a power of 2
43363
43364     'P'
43365          Integer constant that can be used for 'and' operations in
43366          'depi' and 'extru' instructions
43367
43368     'S'
43369          Integer constant 31
43370
43371     'U'
43372          Integer constant 63
43373
43374     'G'
43375          Floating-point constant 0.0
43376
43377     'A'
43378          A 'lo_sum' data-linkage-table memory operand
43379
43380     'Q'
43381          A memory operand that can be used as the destination operand
43382          of an integer store instruction
43383
43384     'R'
43385          A scaled or unscaled indexed memory operand
43386
43387     'T'
43388          A memory operand for floating-point loads and stores
43389
43390     'W'
43391          A register indirect memory operand
43392
43393_Intel IA-64--'config/ia64/ia64.h'_
43394     'a'
43395          General register 'r0' to 'r3' for 'addl' instruction
43396
43397     'b'
43398          Branch register
43399
43400     'c'
43401          Predicate register ('c' as in "conditional")
43402
43403     'd'
43404          Application register residing in M-unit
43405
43406     'e'
43407          Application register residing in I-unit
43408
43409     'f'
43410          Floating-point register
43411
43412     'm'
43413          Memory operand.  If used together with '<' or '>', the operand
43414          can have postincrement and postdecrement which require
43415          printing with '%Pn' on IA-64.
43416
43417     'G'
43418          Floating-point constant 0.0 or 1.0
43419
43420     'I'
43421          14-bit signed integer constant
43422
43423     'J'
43424          22-bit signed integer constant
43425
43426     'K'
43427          8-bit signed integer constant for logical instructions
43428
43429     'L'
43430          8-bit adjusted signed integer constant for compare pseudo-ops
43431
43432     'M'
43433          6-bit unsigned integer constant for shift counts
43434
43435     'N'
43436          9-bit signed integer constant for load and store
43437          postincrements
43438
43439     'O'
43440          The constant zero
43441
43442     'P'
43443          0 or -1 for 'dep' instruction
43444
43445     'Q'
43446          Non-volatile memory for floating-point loads and stores
43447
43448     'R'
43449          Integer constant in the range 1 to 4 for 'shladd' instruction
43450
43451     'S'
43452          Memory operand except postincrement and postdecrement.  This
43453          is now roughly the same as 'm' when not used together with '<'
43454          or '>'.
43455
43456_M32C--'config/m32c/m32c.cc'_
43457     'Rsp'
43458     'Rfb'
43459     'Rsb'
43460          '$sp', '$fb', '$sb'.
43461
43462     'Rcr'
43463          Any control register, when they're 16 bits wide (nothing if
43464          control registers are 24 bits wide)
43465
43466     'Rcl'
43467          Any control register, when they're 24 bits wide.
43468
43469     'R0w'
43470     'R1w'
43471     'R2w'
43472     'R3w'
43473          $r0, $r1, $r2, $r3.
43474
43475     'R02'
43476          $r0 or $r2, or $r2r0 for 32 bit values.
43477
43478     'R13'
43479          $r1 or $r3, or $r3r1 for 32 bit values.
43480
43481     'Rdi'
43482          A register that can hold a 64 bit value.
43483
43484     'Rhl'
43485          $r0 or $r1 (registers with addressable high/low bytes)
43486
43487     'R23'
43488          $r2 or $r3
43489
43490     'Raa'
43491          Address registers
43492
43493     'Raw'
43494          Address registers when they're 16 bits wide.
43495
43496     'Ral'
43497          Address registers when they're 24 bits wide.
43498
43499     'Rqi'
43500          Registers that can hold QI values.
43501
43502     'Rad'
43503          Registers that can be used with displacements ($a0, $a1, $sb).
43504
43505     'Rsi'
43506          Registers that can hold 32 bit values.
43507
43508     'Rhi'
43509          Registers that can hold 16 bit values.
43510
43511     'Rhc'
43512          Registers chat can hold 16 bit values, including all control
43513          registers.
43514
43515     'Rra'
43516          $r0 through R1, plus $a0 and $a1.
43517
43518     'Rfl'
43519          The flags register.
43520
43521     'Rmm'
43522          The memory-based pseudo-registers $mem0 through $mem15.
43523
43524     'Rpi'
43525          Registers that can hold pointers (16 bit registers for r8c,
43526          m16c; 24 bit registers for m32cm, m32c).
43527
43528     'Rpa'
43529          Matches multiple registers in a PARALLEL to form a larger
43530          register.  Used to match function return values.
43531
43532     'Is3'
43533          -8 ... 7
43534
43535     'IS1'
43536          -128 ... 127
43537
43538     'IS2'
43539          -32768 ... 32767
43540
43541     'IU2'
43542          0 ... 65535
43543
43544     'In4'
43545          -8 ... -1 or 1 ... 8
43546
43547     'In5'
43548          -16 ... -1 or 1 ... 16
43549
43550     'In6'
43551          -32 ... -1 or 1 ... 32
43552
43553     'IM2'
43554          -65536 ... -1
43555
43556     'Ilb'
43557          An 8 bit value with exactly one bit set.
43558
43559     'Ilw'
43560          A 16 bit value with exactly one bit set.
43561
43562     'Sd'
43563          The common src/dest memory addressing modes.
43564
43565     'Sa'
43566          Memory addressed using $a0 or $a1.
43567
43568     'Si'
43569          Memory addressed with immediate addresses.
43570
43571     'Ss'
43572          Memory addressed using the stack pointer ($sp).
43573
43574     'Sf'
43575          Memory addressed using the frame base register ($fb).
43576
43577     'Ss'
43578          Memory addressed using the small base register ($sb).
43579
43580     'S1'
43581          $r1h
43582
43583_LoongArch--'config/loongarch/constraints.md'_
43584     'f'
43585          A floating-point register (if available).
43586     'k'
43587          A memory operand whose address is formed by a base register
43588          and (optionally scaled) index register.
43589     'l'
43590          A signed 16-bit constant.
43591     'm'
43592          A memory operand whose address is formed by a base register
43593          and offset that is suitable for use in instructions with the
43594          same addressing mode as 'st.w' and 'ld.w'.
43595     'I'
43596          A signed 12-bit constant (for arithmetic instructions).
43597     'K'
43598          An unsigned 12-bit constant (for logic instructions).
43599     'ZB'
43600          An address that is held in a general-purpose register.  The
43601          offset is zero.
43602     'ZC'
43603          A memory operand whose address is formed by a base register
43604          and offset that is suitable for use in instructions with the
43605          same addressing mode as 'll.w' and 'sc.w'.
43606
43607_MicroBlaze--'config/microblaze/constraints.md'_
43608     'd'
43609          A general register ('r0' to 'r31').
43610
43611     'z'
43612          A status register ('rmsr', '$fcc1' to '$fcc7').
43613
43614_MIPS--'config/mips/constraints.md'_
43615     'd'
43616          A general-purpose register.  This is equivalent to 'r' unless
43617          generating MIPS16 code, in which case the MIPS16 register set
43618          is used.
43619
43620     'f'
43621          A floating-point register (if available).
43622
43623     'h'
43624          Formerly the 'hi' register.  This constraint is no longer
43625          supported.
43626
43627     'l'
43628          The 'lo' register.  Use this register to store values that are
43629          no bigger than a word.
43630
43631     'x'
43632          The concatenated 'hi' and 'lo' registers.  Use this register
43633          to store doubleword values.
43634
43635     'c'
43636          A register suitable for use in an indirect jump.  This will
43637          always be '$25' for '-mabicalls'.
43638
43639     'v'
43640          Register '$3'.  Do not use this constraint in new code; it is
43641          retained only for compatibility with glibc.
43642
43643     'y'
43644          Equivalent to 'r'; retained for backwards compatibility.
43645
43646     'z'
43647          A floating-point condition code register.
43648
43649     'I'
43650          A signed 16-bit constant (for arithmetic instructions).
43651
43652     'J'
43653          Integer zero.
43654
43655     'K'
43656          An unsigned 16-bit constant (for logic instructions).
43657
43658     'L'
43659          A signed 32-bit constant in which the lower 16 bits are zero.
43660          Such constants can be loaded using 'lui'.
43661
43662     'M'
43663          A constant that cannot be loaded using 'lui', 'addiu' or
43664          'ori'.
43665
43666     'N'
43667          A constant in the range -65535 to -1 (inclusive).
43668
43669     'O'
43670          A signed 15-bit constant.
43671
43672     'P'
43673          A constant in the range 1 to 65535 (inclusive).
43674
43675     'G'
43676          Floating-point zero.
43677
43678     'R'
43679          An address that can be used in a non-macro load or store.
43680
43681     'ZC'
43682          A memory operand whose address is formed by a base register
43683          and offset that is suitable for use in instructions with the
43684          same addressing mode as 'll' and 'sc'.
43685
43686     'ZD'
43687          An address suitable for a 'prefetch' instruction, or for any
43688          other instruction with the same addressing mode as 'prefetch'.
43689
43690_Motorola 680x0--'config/m68k/constraints.md'_
43691     'a'
43692          Address register
43693
43694     'd'
43695          Data register
43696
43697     'f'
43698          68881 floating-point register, if available
43699
43700     'I'
43701          Integer in the range 1 to 8
43702
43703     'J'
43704          16-bit signed number
43705
43706     'K'
43707          Signed number whose magnitude is greater than 0x80
43708
43709     'L'
43710          Integer in the range -8 to -1
43711
43712     'M'
43713          Signed number whose magnitude is greater than 0x100
43714
43715     'N'
43716          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
43717
43718     'O'
43719          16 (for rotate using swap)
43720
43721     'P'
43722          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
43723
43724     'R'
43725          Numbers that mov3q can handle
43726
43727     'G'
43728          Floating point constant that is not a 68881 constant
43729
43730     'S'
43731          Operands that satisfy 'm' when -mpcrel is in effect
43732
43733     'T'
43734          Operands that satisfy 's' when -mpcrel is not in effect
43735
43736     'Q'
43737          Address register indirect addressing mode
43738
43739     'U'
43740          Register offset addressing
43741
43742     'W'
43743          const_call_operand
43744
43745     'Cs'
43746          symbol_ref or const
43747
43748     'Ci'
43749          const_int
43750
43751     'C0'
43752          const_int 0
43753
43754     'Cj'
43755          Range of signed numbers that don't fit in 16 bits
43756
43757     'Cmvq'
43758          Integers valid for mvq
43759
43760     'Capsw'
43761          Integers valid for a moveq followed by a swap
43762
43763     'Cmvz'
43764          Integers valid for mvz
43765
43766     'Cmvs'
43767          Integers valid for mvs
43768
43769     'Ap'
43770          push_operand
43771
43772     'Ac'
43773          Non-register operands allowed in clr
43774
43775_Moxie--'config/moxie/constraints.md'_
43776     'A'
43777          An absolute address
43778
43779     'B'
43780          An offset address
43781
43782     'W'
43783          A register indirect memory operand
43784
43785     'I'
43786          A constant in the range of 0 to 255.
43787
43788     'N'
43789          A constant in the range of 0 to -255.
43790
43791_MSP430-'config/msp430/constraints.md'_
43792
43793     'R12'
43794          Register R12.
43795
43796     'R13'
43797          Register R13.
43798
43799     'K'
43800          Integer constant 1.
43801
43802     'L'
43803          Integer constant -1^20..1^19.
43804
43805     'M'
43806          Integer constant 1-4.
43807
43808     'Ya'
43809          Memory references which do not require an extended MOVX
43810          instruction.
43811
43812     'Yl'
43813          Memory reference, labels only.
43814
43815     'Ys'
43816          Memory reference, stack only.
43817
43818_NDS32--'config/nds32/constraints.md'_
43819     'w'
43820          LOW register class $r0 to $r7 constraint for V3/V3M ISA.
43821     'l'
43822          LOW register class $r0 to $r7.
43823     'd'
43824          MIDDLE register class $r0 to $r11, $r16 to $r19.
43825     'h'
43826          HIGH register class $r12 to $r14, $r20 to $r31.
43827     't'
43828          Temporary assist register $ta (i.e. $r15).
43829     'k'
43830          Stack register $sp.
43831     'Iu03'
43832          Unsigned immediate 3-bit value.
43833     'In03'
43834          Negative immediate 3-bit value in the range of -7-0.
43835     'Iu04'
43836          Unsigned immediate 4-bit value.
43837     'Is05'
43838          Signed immediate 5-bit value.
43839     'Iu05'
43840          Unsigned immediate 5-bit value.
43841     'In05'
43842          Negative immediate 5-bit value in the range of -31-0.
43843     'Ip05'
43844          Unsigned immediate 5-bit value for movpi45 instruction with
43845          range 16-47.
43846     'Iu06'
43847          Unsigned immediate 6-bit value constraint for addri36.sp
43848          instruction.
43849     'Iu08'
43850          Unsigned immediate 8-bit value.
43851     'Iu09'
43852          Unsigned immediate 9-bit value.
43853     'Is10'
43854          Signed immediate 10-bit value.
43855     'Is11'
43856          Signed immediate 11-bit value.
43857     'Is15'
43858          Signed immediate 15-bit value.
43859     'Iu15'
43860          Unsigned immediate 15-bit value.
43861     'Ic15'
43862          A constant which is not in the range of imm15u but ok for bclr
43863          instruction.
43864     'Ie15'
43865          A constant which is not in the range of imm15u but ok for bset
43866          instruction.
43867     'It15'
43868          A constant which is not in the range of imm15u but ok for btgl
43869          instruction.
43870     'Ii15'
43871          A constant whose compliment value is in the range of imm15u
43872          and ok for bitci instruction.
43873     'Is16'
43874          Signed immediate 16-bit value.
43875     'Is17'
43876          Signed immediate 17-bit value.
43877     'Is19'
43878          Signed immediate 19-bit value.
43879     'Is20'
43880          Signed immediate 20-bit value.
43881     'Ihig'
43882          The immediate value that can be simply set high 20-bit.
43883     'Izeb'
43884          The immediate value 0xff.
43885     'Izeh'
43886          The immediate value 0xffff.
43887     'Ixls'
43888          The immediate value 0x01.
43889     'Ix11'
43890          The immediate value 0x7ff.
43891     'Ibms'
43892          The immediate value with power of 2.
43893     'Ifex'
43894          The immediate value with power of 2 minus 1.
43895     'U33'
43896          Memory constraint for 333 format.
43897     'U45'
43898          Memory constraint for 45 format.
43899     'U37'
43900          Memory constraint for 37 format.
43901
43902_Nios II family--'config/nios2/constraints.md'_
43903
43904     'I'
43905          Integer that is valid as an immediate operand in an
43906          instruction taking a signed 16-bit number.  Range -32768 to
43907          32767.
43908
43909     'J'
43910          Integer that is valid as an immediate operand in an
43911          instruction taking an unsigned 16-bit number.  Range 0 to
43912          65535.
43913
43914     'K'
43915          Integer that is valid as an immediate operand in an
43916          instruction taking only the upper 16-bits of a 32-bit number.
43917          Range 32-bit numbers with the lower 16-bits being 0.
43918
43919     'L'
43920          Integer that is valid as an immediate operand for a shift
43921          instruction.  Range 0 to 31.
43922
43923     'M'
43924          Integer that is valid as an immediate operand for only the
43925          value 0.  Can be used in conjunction with the format modifier
43926          'z' to use 'r0' instead of '0' in the assembly output.
43927
43928     'N'
43929          Integer that is valid as an immediate operand for a custom
43930          instruction opcode.  Range 0 to 255.
43931
43932     'P'
43933          An immediate operand for R2 andchi/andci instructions.
43934
43935     'S'
43936          Matches immediates which are addresses in the small data
43937          section and therefore can be added to 'gp' as a 16-bit
43938          immediate to re-create their 32-bit value.
43939
43940     'U'
43941          Matches constants suitable as an operand for the rdprs and
43942          cache instructions.
43943
43944     'v'
43945          A memory operand suitable for Nios II R2 load/store exclusive
43946          instructions.
43947
43948     'w'
43949          A memory operand suitable for load/store IO and cache
43950          instructions.
43951
43952_OpenRISC--'config/or1k/constraints.md'_
43953     'I'
43954          Integer that is valid as an immediate operand in an
43955          instruction taking a signed 16-bit number.  Range -32768 to
43956          32767.
43957
43958     'K'
43959          Integer that is valid as an immediate operand in an
43960          instruction taking an unsigned 16-bit number.  Range 0 to
43961          65535.
43962
43963     'M'
43964          Signed 16-bit constant shifted left 16 bits.  (Used with
43965          'l.movhi')
43966
43967     'O'
43968          Zero
43969
43970_PDP-11--'config/pdp11/constraints.md'_
43971     'a'
43972          Floating point registers AC0 through AC3.  These can be loaded
43973          from/to memory with a single instruction.
43974
43975     'd'
43976          Odd numbered general registers (R1, R3, R5).  These are used
43977          for 16-bit multiply operations.
43978
43979     'D'
43980          A memory reference that is encoded within the opcode, but not
43981          auto-increment or auto-decrement.
43982
43983     'f'
43984          Any of the floating point registers (AC0 through AC5).
43985
43986     'G'
43987          Floating point constant 0.
43988
43989     'h'
43990          Floating point registers AC4 and AC5.  These cannot be loaded
43991          from/to memory with a single instruction.
43992
43993     'I'
43994          An integer constant that fits in 16 bits.
43995
43996     'J'
43997          An integer constant whose low order 16 bits are zero.
43998
43999     'K'
44000          An integer constant that does not meet the constraints for
44001          codes 'I' or 'J'.
44002
44003     'L'
44004          The integer constant 1.
44005
44006     'M'
44007          The integer constant -1.
44008
44009     'N'
44010          The integer constant 0.
44011
44012     'O'
44013          Integer constants 0 through 3; shifts by these amounts are
44014          handled as multiple single-bit shifts rather than a single
44015          variable-length shift.
44016
44017     'Q'
44018          A memory reference which requires an additional word (address
44019          or offset) after the opcode.
44020
44021     'R'
44022          A memory reference that is encoded within the opcode.
44023
44024_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
44025     'r'
44026          A general purpose register (GPR), 'r0'...'r31'.
44027
44028     'b'
44029          A base register.  Like 'r', but 'r0' is not allowed, so
44030          'r1'...'r31'.
44031
44032     'f'
44033          A floating point register (FPR), 'f0'...'f31'.
44034
44035     'd'
44036          A floating point register.  This is the same as 'f' nowadays;
44037          historically 'f' was for single-precision and 'd' was for
44038          double-precision floating point.
44039
44040     'v'
44041          An Altivec vector register (VR), 'v0'...'v31'.
44042
44043     'wa'
44044          A VSX register (VSR), 'vs0'...'vs63'.  This is either an FPR
44045          ('vs0'...'vs31' are 'f0'...'f31') or a VR ('vs32'...'vs63' are
44046          'v0'...'v31').
44047
44048          When using 'wa', you should use the '%x' output modifier, so
44049          that the correct register number is printed.  For example:
44050
44051               asm ("xvadddp %x0,%x1,%x2"
44052                    : "=wa" (v1)
44053                    : "wa" (v2), "wa" (v3));
44054
44055          You should not use '%x' for 'v' operands:
44056
44057               asm ("xsaddqp %0,%1,%2"
44058                    : "=v" (v1)
44059                    : "v" (v2), "v" (v3));
44060
44061     'c'
44062          The count register, 'ctr'.
44063
44064     'l'
44065          The link register, 'lr'.
44066
44067     'x'
44068          Condition register field 0, 'cr0'.
44069
44070     'y'
44071          Any condition register field, 'cr0'...'cr7'.
44072
44073     'I'
44074          A signed 16-bit constant.
44075
44076     'J'
44077          An unsigned 16-bit constant shifted left 16 bits (use 'L'
44078          instead for 'SImode' constants).
44079
44080     'K'
44081          An unsigned 16-bit constant.
44082
44083     'L'
44084          A signed 16-bit constant shifted left 16 bits.
44085
44086     'eI'
44087          A signed 34-bit integer constant if prefixed instructions are
44088          supported.
44089
44090     'eP'
44091          A scalar floating point constant or a vector constant that can
44092          be loaded to a VSX register with one prefixed instruction.
44093
44094     'eQ'
44095          An IEEE 128-bit constant that can be loaded into a VSX
44096          register with the 'lxvkq' instruction.
44097
44098     'm'
44099          A memory operand.  Normally, 'm' does not allow addresses that
44100          update the base register.  If the '<' or '>' constraint is
44101          also used, they are allowed and therefore on PowerPC targets
44102          in that case it is only safe to use 'm<>' in an 'asm'
44103          statement if that 'asm' statement accesses the operand exactly
44104          once.  The 'asm' statement must also use '%U<OPNO>' as a
44105          placeholder for the "update" flag in the corresponding load or
44106          store instruction.  For example:
44107
44108               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
44109
44110          is correct but:
44111
44112               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
44113
44114          is not.
44115
44116     'Q'
44117          A memory operand addressed by just a base register.
44118
44119     'Z'
44120          A memory operand accessed with indexed or indirect addressing.
44121
44122     'a'
44123          An indexed or indirect address.
44124
44125_PRU--'config/pru/constraints.md'_
44126     'I'
44127          An unsigned 8-bit integer constant.
44128
44129     'J'
44130          An unsigned 16-bit integer constant.
44131
44132     'L'
44133          An unsigned 5-bit integer constant (for shift counts).
44134
44135     'T'
44136          A text segment (program memory) constant label.
44137
44138     'Z'
44139          Integer constant zero.
44140
44141_RL78--'config/rl78/constraints.md'_
44142
44143     'Int3'
44144          An integer constant in the range 1 ... 7.
44145     'Int8'
44146          An integer constant in the range 0 ... 255.
44147     'J'
44148          An integer constant in the range -255 ... 0
44149     'K'
44150          The integer constant 1.
44151     'L'
44152          The integer constant -1.
44153     'M'
44154          The integer constant 0.
44155     'N'
44156          The integer constant 2.
44157     'O'
44158          The integer constant -2.
44159     'P'
44160          An integer constant in the range 1 ... 15.
44161     'Qbi'
44162          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
44163     'Qsc'
44164          The synthetic compare types-gt, lt, ge, and le.
44165     'Wab'
44166          A memory reference with an absolute address.
44167     'Wbc'
44168          A memory reference using 'BC' as a base register, with an
44169          optional offset.
44170     'Wca'
44171          A memory reference using 'AX', 'BC', 'DE', or 'HL' for the
44172          address, for calls.
44173     'Wcv'
44174          A memory reference using any 16-bit register pair for the
44175          address, for calls.
44176     'Wd2'
44177          A memory reference using 'DE' as a base register, with an
44178          optional offset.
44179     'Wde'
44180          A memory reference using 'DE' as a base register, without any
44181          offset.
44182     'Wfr'
44183          Any memory reference to an address in the far address space.
44184     'Wh1'
44185          A memory reference using 'HL' as a base register, with an
44186          optional one-byte offset.
44187     'Whb'
44188          A memory reference using 'HL' as a base register, with 'B' or
44189          'C' as the index register.
44190     'Whl'
44191          A memory reference using 'HL' as a base register, without any
44192          offset.
44193     'Ws1'
44194          A memory reference using 'SP' as a base register, with an
44195          optional one-byte offset.
44196     'Y'
44197          Any memory reference to an address in the near address space.
44198     'A'
44199          The 'AX' register.
44200     'B'
44201          The 'BC' register.
44202     'D'
44203          The 'DE' register.
44204     'R'
44205          'A' through 'L' registers.
44206     'S'
44207          The 'SP' register.
44208     'T'
44209          The 'HL' register.
44210     'Z08W'
44211          The 16-bit 'R8' register.
44212     'Z10W'
44213          The 16-bit 'R10' register.
44214     'Zint'
44215          The registers reserved for interrupts ('R24' to 'R31').
44216     'a'
44217          The 'A' register.
44218     'b'
44219          The 'B' register.
44220     'c'
44221          The 'C' register.
44222     'd'
44223          The 'D' register.
44224     'e'
44225          The 'E' register.
44226     'h'
44227          The 'H' register.
44228     'l'
44229          The 'L' register.
44230     'v'
44231          The virtual registers.
44232     'w'
44233          The 'PSW' register.
44234     'x'
44235          The 'X' register.
44236
44237_RISC-V--'config/riscv/constraints.md'_
44238
44239     'f'
44240          A floating-point register (if available).
44241
44242     'I'
44243          An I-type 12-bit signed immediate.
44244
44245     'J'
44246          Integer zero.
44247
44248     'K'
44249          A 5-bit unsigned immediate for CSR access instructions.
44250
44251     'A'
44252          An address that is held in a general-purpose register.
44253
44254     'S'
44255          A constraint that matches an absolute symbolic address.
44256
44257_RX--'config/rx/constraints.md'_
44258     'Q'
44259          An address which does not involve register indirect addressing
44260          or pre/post increment/decrement addressing.
44261
44262     'Symbol'
44263          A symbol reference.
44264
44265     'Int08'
44266          A constant in the range -256 to 255, inclusive.
44267
44268     'Sint08'
44269          A constant in the range -128 to 127, inclusive.
44270
44271     'Sint16'
44272          A constant in the range -32768 to 32767, inclusive.
44273
44274     'Sint24'
44275          A constant in the range -8388608 to 8388607, inclusive.
44276
44277     'Uint04'
44278          A constant in the range 0 to 15, inclusive.
44279
44280_S/390 and zSeries--'config/s390/s390.h'_
44281     'a'
44282          Address register (general purpose register except r0)
44283
44284     'c'
44285          Condition code register
44286
44287     'd'
44288          Data register (arbitrary general purpose register)
44289
44290     'f'
44291          Floating-point register
44292
44293     'I'
44294          Unsigned 8-bit constant (0-255)
44295
44296     'J'
44297          Unsigned 12-bit constant (0-4095)
44298
44299     'K'
44300          Signed 16-bit constant (-32768-32767)
44301
44302     'L'
44303          Value appropriate as displacement.
44304          '(0..4095)'
44305               for short displacement
44306          '(-524288..524287)'
44307               for long displacement
44308
44309     'M'
44310          Constant integer with a value of 0x7fffffff.
44311
44312     'N'
44313          Multiple letter constraint followed by 4 parameter letters.
44314          '0..9:'
44315               number of the part counting from most to least
44316               significant
44317          'H,Q:'
44318               mode of the part
44319          'D,S,H:'
44320               mode of the containing operand
44321          '0,F:'
44322               value of the other parts (F--all bits set)
44323          The constraint matches if the specified part of a constant has
44324          a value different from its other parts.
44325
44326     'Q'
44327          Memory reference without index register and with short
44328          displacement.
44329
44330     'R'
44331          Memory reference with index register and short displacement.
44332
44333     'S'
44334          Memory reference without index register but with long
44335          displacement.
44336
44337     'T'
44338          Memory reference with index register and long displacement.
44339
44340     'U'
44341          Pointer with short displacement.
44342
44343     'W'
44344          Pointer with long displacement.
44345
44346     'Y'
44347          Shift count operand.
44348
44349_SPARC--'config/sparc/sparc.h'_
44350     'f'
44351          Floating-point register on the SPARC-V8 architecture and lower
44352          floating-point register on the SPARC-V9 architecture.
44353
44354     'e'
44355          Floating-point register.  It is equivalent to 'f' on the
44356          SPARC-V8 architecture and contains both lower and upper
44357          floating-point registers on the SPARC-V9 architecture.
44358
44359     'c'
44360          Floating-point condition code register.
44361
44362     'd'
44363          Lower floating-point register.  It is only valid on the
44364          SPARC-V9 architecture when the Visual Instruction Set is
44365          available.
44366
44367     'b'
44368          Floating-point register.  It is only valid on the SPARC-V9
44369          architecture when the Visual Instruction Set is available.
44370
44371     'h'
44372          64-bit global or out register for the SPARC-V8+ architecture.
44373
44374     'C'
44375          The constant all-ones, for floating-point.
44376
44377     'A'
44378          Signed 5-bit constant
44379
44380     'D'
44381          A vector constant
44382
44383     'I'
44384          Signed 13-bit constant
44385
44386     'J'
44387          Zero
44388
44389     'K'
44390          32-bit constant with the low 12 bits clear (a constant that
44391          can be loaded with the 'sethi' instruction)
44392
44393     'L'
44394          A constant in the range supported by 'movcc' instructions
44395          (11-bit signed immediate)
44396
44397     'M'
44398          A constant in the range supported by 'movrcc' instructions
44399          (10-bit signed immediate)
44400
44401     'N'
44402          Same as 'K', except that it verifies that bits that are not in
44403          the lower 32-bit range are all zero.  Must be used instead of
44404          'K' for modes wider than 'SImode'
44405
44406     'O'
44407          The constant 4096
44408
44409     'G'
44410          Floating-point zero
44411
44412     'H'
44413          Signed 13-bit constant, sign-extended to 32 or 64 bits
44414
44415     'P'
44416          The constant -1
44417
44418     'Q'
44419          Floating-point constant whose integral representation can be
44420          moved into an integer register using a single sethi
44421          instruction
44422
44423     'R'
44424          Floating-point constant whose integral representation can be
44425          moved into an integer register using a single mov instruction
44426
44427     'S'
44428          Floating-point constant whose integral representation can be
44429          moved into an integer register using a high/lo_sum instruction
44430          sequence
44431
44432     'T'
44433          Memory address aligned to an 8-byte boundary
44434
44435     'U'
44436          Even register
44437
44438     'W'
44439          Memory address for 'e' constraint registers
44440
44441     'w'
44442          Memory address with only a base register
44443
44444     'Y'
44445          Vector zero
44446
44447_TI C6X family--'config/c6x/constraints.md'_
44448     'a'
44449          Register file A (A0-A31).
44450
44451     'b'
44452          Register file B (B0-B31).
44453
44454     'A'
44455          Predicate registers in register file A (A0-A2 on C64X and
44456          higher, A1 and A2 otherwise).
44457
44458     'B'
44459          Predicate registers in register file B (B0-B2).
44460
44461     'C'
44462          A call-used register in register file B (B0-B9, B16-B31).
44463
44464     'Da'
44465          Register file A, excluding predicate registers (A3-A31, plus
44466          A0 if not C64X or higher).
44467
44468     'Db'
44469          Register file B, excluding predicate registers (B3-B31).
44470
44471     'Iu4'
44472          Integer constant in the range 0 ... 15.
44473
44474     'Iu5'
44475          Integer constant in the range 0 ... 31.
44476
44477     'In5'
44478          Integer constant in the range -31 ... 0.
44479
44480     'Is5'
44481          Integer constant in the range -16 ... 15.
44482
44483     'I5x'
44484          Integer constant that can be the operand of an ADDA or a SUBA
44485          insn.
44486
44487     'IuB'
44488          Integer constant in the range 0 ... 65535.
44489
44490     'IsB'
44491          Integer constant in the range -32768 ... 32767.
44492
44493     'IsC'
44494          Integer constant in the range -2^{20} ... 2^{20} - 1.
44495
44496     'Jc'
44497          Integer constant that is a valid mask for the clr instruction.
44498
44499     'Js'
44500          Integer constant that is a valid mask for the set instruction.
44501
44502     'Q'
44503          Memory location with A base register.
44504
44505     'R'
44506          Memory location with B base register.
44507
44508     'Z'
44509          Register B14 (aka DP).
44510
44511_TILE-Gx--'config/tilegx/constraints.md'_
44512     'R00'
44513     'R01'
44514     'R02'
44515     'R03'
44516     'R04'
44517     'R05'
44518     'R06'
44519     'R07'
44520     'R08'
44521     'R09'
44522     'R10'
44523          Each of these represents a register constraint for an
44524          individual register, from r0 to r10.
44525
44526     'I'
44527          Signed 8-bit integer constant.
44528
44529     'J'
44530          Signed 16-bit integer constant.
44531
44532     'K'
44533          Unsigned 16-bit integer constant.
44534
44535     'L'
44536          Integer constant that fits in one signed byte when incremented
44537          by one (-129 ... 126).
44538
44539     'm'
44540          Memory operand.  If used together with '<' or '>', the operand
44541          can have postincrement which requires printing with '%In' and
44542          '%in' on TILE-Gx.  For example:
44543
44544               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
44545
44546     'M'
44547          A bit mask suitable for the BFINS instruction.
44548
44549     'N'
44550          Integer constant that is a byte tiled out eight times.
44551
44552     'O'
44553          The integer zero constant.
44554
44555     'P'
44556          Integer constant that is a sign-extended byte tiled out as
44557          four shorts.
44558
44559     'Q'
44560          Integer constant that fits in one signed byte when incremented
44561          (-129 ... 126), but excluding -1.
44562
44563     'S'
44564          Integer constant that has all 1 bits consecutive and starting
44565          at bit 0.
44566
44567     'T'
44568          A 16-bit fragment of a got, tls, or pc-relative reference.
44569
44570     'U'
44571          Memory operand except postincrement.  This is roughly the same
44572          as 'm' when not used together with '<' or '>'.
44573
44574     'W'
44575          An 8-element vector constant with identical elements.
44576
44577     'Y'
44578          A 4-element vector constant with identical elements.
44579
44580     'Z0'
44581          The integer constant 0xffffffff.
44582
44583     'Z1'
44584          The integer constant 0xffffffff00000000.
44585
44586_TILEPro--'config/tilepro/constraints.md'_
44587     'R00'
44588     'R01'
44589     'R02'
44590     'R03'
44591     'R04'
44592     'R05'
44593     'R06'
44594     'R07'
44595     'R08'
44596     'R09'
44597     'R10'
44598          Each of these represents a register constraint for an
44599          individual register, from r0 to r10.
44600
44601     'I'
44602          Signed 8-bit integer constant.
44603
44604     'J'
44605          Signed 16-bit integer constant.
44606
44607     'K'
44608          Nonzero integer constant with low 16 bits zero.
44609
44610     'L'
44611          Integer constant that fits in one signed byte when incremented
44612          by one (-129 ... 126).
44613
44614     'm'
44615          Memory operand.  If used together with '<' or '>', the operand
44616          can have postincrement which requires printing with '%In' and
44617          '%in' on TILEPro.  For example:
44618
44619               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
44620
44621     'M'
44622          A bit mask suitable for the MM instruction.
44623
44624     'N'
44625          Integer constant that is a byte tiled out four times.
44626
44627     'O'
44628          The integer zero constant.
44629
44630     'P'
44631          Integer constant that is a sign-extended byte tiled out as two
44632          shorts.
44633
44634     'Q'
44635          Integer constant that fits in one signed byte when incremented
44636          (-129 ... 126), but excluding -1.
44637
44638     'T'
44639          A symbolic operand, or a 16-bit fragment of a got, tls, or
44640          pc-relative reference.
44641
44642     'U'
44643          Memory operand except postincrement.  This is roughly the same
44644          as 'm' when not used together with '<' or '>'.
44645
44646     'W'
44647          A 4-element vector constant with identical elements.
44648
44649     'Y'
44650          A 2-element vector constant with identical elements.
44651
44652_Visium--'config/visium/constraints.md'_
44653     'b'
44654          EAM register 'mdb'
44655
44656     'c'
44657          EAM register 'mdc'
44658
44659     'f'
44660          Floating point register
44661
44662     'l'
44663          General register, but not 'r29', 'r30' and 'r31'
44664
44665     't'
44666          Register 'r1'
44667
44668     'u'
44669          Register 'r2'
44670
44671     'v'
44672          Register 'r3'
44673
44674     'G'
44675          Floating-point constant 0.0
44676
44677     'J'
44678          Integer constant in the range 0 ..  65535 (16-bit immediate)
44679
44680     'K'
44681          Integer constant in the range 1 ..  31 (5-bit immediate)
44682
44683     'L'
44684          Integer constant in the range -65535 ..  -1 (16-bit negative
44685          immediate)
44686
44687     'M'
44688          Integer constant -1
44689
44690     'O'
44691          Integer constant 0
44692
44693     'P'
44694          Integer constant 32
44695
44696_x86 family--'config/i386/constraints.md'_
44697     'R'
44698          Legacy register--the eight integer registers available on all
44699          i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp').
44700
44701     'q'
44702          Any register accessible as 'Rl'.  In 32-bit mode, 'a', 'b',
44703          'c', and 'd'; in 64-bit mode, any integer register.
44704
44705     'Q'
44706          Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'.
44707
44708     'a'
44709          The 'a' register.
44710
44711     'b'
44712          The 'b' register.
44713
44714     'c'
44715          The 'c' register.
44716
44717     'd'
44718          The 'd' register.
44719
44720     'S'
44721          The 'si' register.
44722
44723     'D'
44724          The 'di' register.
44725
44726     'A'
44727          The 'a' and 'd' registers.  This class is used for
44728          instructions that return double word results in the 'ax:dx'
44729          register pair.  Single word values will be allocated either in
44730          'ax' or 'dx'.  For example on i386 the following implements
44731          'rdtsc':
44732
44733               unsigned long long rdtsc (void)
44734               {
44735                 unsigned long long tick;
44736                 __asm__ __volatile__("rdtsc":"=A"(tick));
44737                 return tick;
44738               }
44739
44740          This is not correct on x86-64 as it would allocate tick in
44741          either 'ax' or 'dx'.  You have to use the following variant
44742          instead:
44743
44744               unsigned long long rdtsc (void)
44745               {
44746                 unsigned int tickl, tickh;
44747                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
44748                 return ((unsigned long long)tickh << 32)|tickl;
44749               }
44750
44751     'U'
44752          The call-clobbered integer registers.
44753
44754     'f'
44755          Any 80387 floating-point (stack) register.
44756
44757     't'
44758          Top of 80387 floating-point stack ('%st(0)').
44759
44760     'u'
44761          Second from top of 80387 floating-point stack ('%st(1)').
44762
44763     'y'
44764          Any MMX register.
44765
44766     'x'
44767          Any SSE register.
44768
44769     'v'
44770          Any EVEX encodable SSE register ('%xmm0-%xmm31').
44771
44772     'Yz'
44773          First SSE register ('%xmm0').
44774
44775     'I'
44776          Integer constant in the range 0 ... 31, for 32-bit shifts.
44777
44778     'J'
44779          Integer constant in the range 0 ... 63, for 64-bit shifts.
44780
44781     'K'
44782          Signed 8-bit integer constant.
44783
44784     'L'
44785          '0xFF' or '0xFFFF', for andsi as a zero-extending move.
44786
44787     'M'
44788          0, 1, 2, or 3 (shifts for the 'lea' instruction).
44789
44790     'N'
44791          Unsigned 8-bit integer constant (for 'in' and 'out'
44792          instructions).
44793
44794     'G'
44795          Standard 80387 floating point constant.
44796
44797     'C'
44798          SSE constant zero operand.
44799
44800     'e'
44801          32-bit signed integer constant, or a symbolic reference known
44802          to fit that range (for immediate operands in sign-extending
44803          x86-64 instructions).
44804
44805     'We'
44806          32-bit signed integer constant, or a symbolic reference known
44807          to fit that range (for sign-extending conversion operations
44808          that require non-'VOIDmode' immediate operands).
44809
44810     'Wz'
44811          32-bit unsigned integer constant, or a symbolic reference
44812          known to fit that range (for zero-extending conversion
44813          operations that require non-'VOIDmode' immediate operands).
44814
44815     'Wd'
44816          128-bit integer constant where both the high and low 64-bit
44817          word satisfy the 'e' constraint.
44818
44819     'Z'
44820          32-bit unsigned integer constant, or a symbolic reference
44821          known to fit that range (for immediate operands in
44822          zero-extending x86-64 instructions).
44823
44824     'Tv'
44825          VSIB address operand.
44826
44827     'Ts'
44828          Address operand without segment register.
44829
44830_Xstormy16--'config/stormy16/stormy16.h'_
44831     'a'
44832          Register r0.
44833
44834     'b'
44835          Register r1.
44836
44837     'c'
44838          Register r2.
44839
44840     'd'
44841          Register r8.
44842
44843     'e'
44844          Registers r0 through r7.
44845
44846     't'
44847          Registers r0 and r1.
44848
44849     'y'
44850          The carry register.
44851
44852     'z'
44853          Registers r8 and r9.
44854
44855     'I'
44856          A constant between 0 and 3 inclusive.
44857
44858     'J'
44859          A constant that has exactly one bit set.
44860
44861     'K'
44862          A constant that has exactly one bit clear.
44863
44864     'L'
44865          A constant between 0 and 255 inclusive.
44866
44867     'M'
44868          A constant between -255 and 0 inclusive.
44869
44870     'N'
44871          A constant between -3 and 0 inclusive.
44872
44873     'O'
44874          A constant between 1 and 4 inclusive.
44875
44876     'P'
44877          A constant between -4 and -1 inclusive.
44878
44879     'Q'
44880          A memory reference that is a stack push.
44881
44882     'R'
44883          A memory reference that is a stack pop.
44884
44885     'S'
44886          A memory reference that refers to a constant address of known
44887          value.
44888
44889     'T'
44890          The register indicated by Rx (not implemented yet).
44891
44892     'U'
44893          A constant that is not between 2 and 15 inclusive.
44894
44895     'Z'
44896          The constant 0.
44897
44898_Xtensa--'config/xtensa/constraints.md'_
44899     'a'
44900          General-purpose 32-bit register
44901
44902     'b'
44903          One-bit boolean register
44904
44905     'A'
44906          MAC16 40-bit accumulator register
44907
44908     'I'
44909          Signed 12-bit integer constant, for use in MOVI instructions
44910
44911     'J'
44912          Signed 8-bit integer constant, for use in ADDI instructions
44913
44914     'K'
44915          Integer constant valid for BccI instructions
44916
44917     'L'
44918          Unsigned constant valid for BccUI instructions
44919
44920
44921File: gcc.info,  Node: Asm Labels,  Next: Explicit Register Variables,  Prev: Constraints,  Up: Using Assembly Language with C
44922
449236.47.4 Controlling Names Used in Assembler Code
44924-----------------------------------------------
44925
44926You can specify the name to be used in the assembler code for a C
44927function or variable by writing the 'asm' (or '__asm__') keyword after
44928the declarator.  It is up to you to make sure that the assembler names
44929you choose do not conflict with any other assembler symbols, or
44930reference registers.
44931
44932Assembler names for data:
44933.........................
44934
44935This sample shows how to specify the assembler name for data:
44936
44937     int foo asm ("myfoo") = 2;
44938
44939This specifies that the name to be used for the variable 'foo' in the
44940assembler code should be 'myfoo' rather than the usual '_foo'.
44941
44942 On systems where an underscore is normally prepended to the name of a C
44943variable, this feature allows you to define names for the linker that do
44944not start with an underscore.
44945
44946 GCC does not support using this feature with a non-static local
44947variable since such variables do not have assembler names.  If you are
44948trying to put the variable in a particular register, see *note Explicit
44949Register Variables::.
44950
44951Assembler names for functions:
44952..............................
44953
44954To specify the assembler name for functions, write a declaration for the
44955function before its definition and put 'asm' there, like this:
44956
44957     int func (int x, int y) asm ("MYFUNC");
44958
44959     int func (int x, int y)
44960     {
44961        /* ... */
44962
44963This specifies that the name to be used for the function 'func' in the
44964assembler code should be 'MYFUNC'.
44965
44966
44967File: gcc.info,  Node: Explicit Register Variables,  Next: Size of an asm,  Prev: Asm Labels,  Up: Using Assembly Language with C
44968
449696.47.5 Variables in Specified Registers
44970---------------------------------------
44971
44972GNU C allows you to associate specific hardware registers with C
44973variables.  In almost all cases, allowing the compiler to assign
44974registers produces the best code.  However under certain unusual
44975circumstances, more precise control over the variable storage is
44976required.
44977
44978 Both global and local variables can be associated with a register.  The
44979consequences of performing this association are very different between
44980the two, as explained in the sections below.
44981
44982* Menu:
44983
44984* Global Register Variables::   Variables declared at global scope.
44985* Local Register Variables::    Variables declared within a function.
44986
44987
44988File: gcc.info,  Node: Global Register Variables,  Next: Local Register Variables,  Up: Explicit Register Variables
44989
449906.47.5.1 Defining Global Register Variables
44991...........................................
44992
44993You can define a global register variable and associate it with a
44994specified register like this:
44995
44996     register int *foo asm ("r12");
44997
44998Here 'r12' is the name of the register that should be used.  Note that
44999this is the same syntax used for defining local register variables, but
45000for a global variable the declaration appears outside a function.  The
45001'register' keyword is required, and cannot be combined with 'static'.
45002The register name must be a valid register name for the target platform.
45003
45004 Do not use type qualifiers such as 'const' and 'volatile', as the
45005outcome may be contrary to expectations.  In particular, using the
45006'volatile' qualifier does not fully prevent the compiler from optimizing
45007accesses to the register.
45008
45009 Registers are a scarce resource on most systems and allowing the
45010compiler to manage their usage usually results in the best code.
45011However, under special circumstances it can make sense to reserve some
45012globally.  For example this may be useful in programs such as
45013programming language interpreters that have a couple of global variables
45014that are accessed very often.
45015
45016 After defining a global register variable, for the current compilation
45017unit:
45018
45019   * If the register is a call-saved register, call ABI is affected: the
45020     register will not be restored in function epilogue sequences after
45021     the variable has been assigned.  Therefore, functions cannot safely
45022     return to callers that assume standard ABI.
45023   * Conversely, if the register is a call-clobbered register, making
45024     calls to functions that use standard ABI may lose contents of the
45025     variable.  Such calls may be created by the compiler even if none
45026     are evident in the original program, for example when libgcc
45027     functions are used to make up for unavailable instructions.
45028   * Accesses to the variable may be optimized as usual and the register
45029     remains available for allocation and use in any computations,
45030     provided that observable values of the variable are not affected.
45031   * If the variable is referenced in inline assembly, the type of
45032     access must be provided to the compiler via constraints (*note
45033     Constraints::).  Accesses from basic asms are not supported.
45034
45035 Note that these points _only_ apply to code that is compiled with the
45036definition.  The behavior of code that is merely linked in (for example
45037code from libraries) is not affected.
45038
45039 If you want to recompile source files that do not actually use your
45040global register variable so they do not use the specified register for
45041any other purpose, you need not actually add the global register
45042declaration to their source code.  It suffices to specify the compiler
45043option '-ffixed-REG' (*note Code Gen Options::) to reserve the register.
45044
45045Declaring the variable
45046......................
45047
45048Global register variables cannot have initial values, because an
45049executable file has no means to supply initial contents for a register.
45050
45051 When selecting a register, choose one that is normally saved and
45052restored by function calls on your machine.  This ensures that code
45053which is unaware of this reservation (such as library routines) will
45054restore it before returning.
45055
45056 On machines with register windows, be sure to choose a global register
45057that is not affected magically by the function call mechanism.
45058
45059Using the variable
45060..................
45061
45062When calling routines that are not aware of the reservation, be cautious
45063if those routines call back into code which uses them.  As an example,
45064if you call the system library version of 'qsort', it may clobber your
45065registers during execution, but (if you have selected appropriate
45066registers) it will restore them before returning.  However it will _not_
45067restore them before calling 'qsort''s comparison function.  As a result,
45068global values will not reliably be available to the comparison function
45069unless the 'qsort' function itself is rebuilt.
45070
45071 Similarly, it is not safe to access the global register variables from
45072signal handlers or from more than one thread of control.  Unless you
45073recompile them specially for the task at hand, the system library
45074routines may temporarily use the register for other things.
45075Furthermore, since the register is not reserved exclusively for the
45076variable, accessing it from handlers of asynchronous signals may observe
45077unrelated temporary values residing in the register.
45078
45079 On most machines, 'longjmp' restores to each global register variable
45080the value it had at the time of the 'setjmp'.  On some machines,
45081however, 'longjmp' does not change the value of global register
45082variables.  To be portable, the function that called 'setjmp' should
45083make other arrangements to save the values of the global register
45084variables, and to restore them in a 'longjmp'.  This way, the same thing
45085happens regardless of what 'longjmp' does.
45086
45087
45088File: gcc.info,  Node: Local Register Variables,  Prev: Global Register Variables,  Up: Explicit Register Variables
45089
450906.47.5.2 Specifying Registers for Local Variables
45091.................................................
45092
45093You can define a local register variable and associate it with a
45094specified register like this:
45095
45096     register int *foo asm ("r12");
45097
45098Here 'r12' is the name of the register that should be used.  Note that
45099this is the same syntax used for defining global register variables, but
45100for a local variable the declaration appears within a function.  The
45101'register' keyword is required, and cannot be combined with 'static'.
45102The register name must be a valid register name for the target platform.
45103
45104 Do not use type qualifiers such as 'const' and 'volatile', as the
45105outcome may be contrary to expectations.  In particular, when the
45106'const' qualifier is used, the compiler may substitute the variable with
45107its initializer in 'asm' statements, which may cause the corresponding
45108operand to appear in a different register.
45109
45110 As with global register variables, it is recommended that you choose a
45111register that is normally saved and restored by function calls on your
45112machine, so that calls to library routines will not clobber it.
45113
45114 The only supported use for this feature is to specify registers for
45115input and output operands when calling Extended 'asm' (*note Extended
45116Asm::).  This may be necessary if the constraints for a particular
45117machine don't provide sufficient control to select the desired register.
45118To force an operand into a register, create a local variable and specify
45119the register name after the variable's declaration.  Then use the local
45120variable for the 'asm' operand and specify any constraint letter that
45121matches the register:
45122
45123     register int *p1 asm ("r0") = ...;
45124     register int *p2 asm ("r1") = ...;
45125     register int *result asm ("r0");
45126     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
45127
45128 _Warning:_ In the above example, be aware that a register (for example
45129'r0') can be call-clobbered by subsequent code, including function calls
45130and library calls for arithmetic operators on other variables (for
45131example the initialization of 'p2').  In this case, use temporary
45132variables for expressions between the register assignments:
45133
45134     int t1 = ...;
45135     register int *p1 asm ("r0") = ...;
45136     register int *p2 asm ("r1") = t1;
45137     register int *result asm ("r0");
45138     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
45139
45140 Defining a register variable does not reserve the register.  Other than
45141when invoking the Extended 'asm', the contents of the specified register
45142are not guaranteed.  For this reason, the following uses are explicitly
45143_not_ supported.  If they appear to work, it is only happenstance, and
45144may stop working as intended due to (seemingly) unrelated changes in
45145surrounding code, or even minor changes in the optimization of a future
45146version of gcc:
45147
45148   * Passing parameters to or from Basic 'asm'
45149   * Passing parameters to or from Extended 'asm' without using input or
45150     output operands.
45151   * Passing parameters to or from routines written in assembler (or
45152     other languages) using non-standard calling conventions.
45153
45154 Some developers use Local Register Variables in an attempt to improve
45155gcc's allocation of registers, especially in large functions.  In this
45156case the register name is essentially a hint to the register allocator.
45157While in some instances this can generate better code, improvements are
45158subject to the whims of the allocator/optimizers.  Since there are no
45159guarantees that your improvements won't be lost, this usage of Local
45160Register Variables is discouraged.
45161
45162 On the MIPS platform, there is related use for local register variables
45163with slightly different characteristics (*note Defining coprocessor
45164specifics for MIPS targets: (gccint)MIPS Coprocessors.).
45165
45166
45167File: gcc.info,  Node: Size of an asm,  Prev: Explicit Register Variables,  Up: Using Assembly Language with C
45168
451696.47.6 Size of an 'asm'
45170-----------------------
45171
45172Some targets require that GCC track the size of each instruction used in
45173order to generate correct code.  Because the final length of the code
45174produced by an 'asm' statement is only known by the assembler, GCC must
45175make an estimate as to how big it will be.  It does this by counting the
45176number of instructions in the pattern of the 'asm' and multiplying that
45177by the length of the longest instruction supported by that processor.
45178(When working out the number of instructions, it assumes that any
45179occurrence of a newline or of whatever statement separator character is
45180supported by the assembler -- typically ';' -- indicates the end of an
45181instruction.)
45182
45183 Normally, GCC's estimate is adequate to ensure that correct code is
45184generated, but it is possible to confuse the compiler if you use pseudo
45185instructions or assembler macros that expand into multiple real
45186instructions, or if you use assembler directives that expand to more
45187space in the object file than is needed for a single instruction.  If
45188this happens then the assembler may produce a diagnostic saying that a
45189label is unreachable.
45190
45191 This size is also used for inlining decisions.  If you use 'asm inline'
45192instead of just 'asm', then for inlining purposes the size of the asm is
45193taken as the minimum size, ignoring how many instructions GCC thinks it
45194is.
45195
45196
45197File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Using Assembly Language with C,  Up: C Extensions
45198
451996.48 Alternate Keywords
45200=======================
45201
45202'-ansi' and the various '-std' options disable certain keywords.  This
45203causes trouble when you want to use GNU C extensions, or a
45204general-purpose header file that should be usable by all programs,
45205including ISO C programs.  The keywords 'asm', 'typeof' and 'inline' are
45206not available in programs compiled with '-ansi' or '-std' (although
45207'inline' can be used in a program compiled with '-std=c99' or a later
45208standard).  The ISO C99 keyword 'restrict' is only available when
45209'-std=gnu99' (which will eventually be the default) or '-std=c99' (or
45210the equivalent '-std=iso9899:1999'), or an option for a later standard
45211version, is used.
45212
45213 The way to solve these problems is to put '__' at the beginning and end
45214of each problematical keyword.  For example, use '__asm__' instead of
45215'asm', and '__inline__' instead of 'inline'.
45216
45217 Other C compilers won't accept these alternative keywords; if you want
45218to compile with another compiler, you can define the alternate keywords
45219as macros to replace them with the customary keywords.  It looks like
45220this:
45221
45222     #ifndef __GNUC__
45223     #define __asm__ asm
45224     #endif
45225
45226 '-pedantic' and other options cause warnings for many GNU C extensions.
45227You can prevent such warnings within one expression by writing
45228'__extension__' before the expression.  '__extension__' has no effect
45229aside from this.
45230
45231
45232File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
45233
452346.49 Incomplete 'enum' Types
45235============================
45236
45237You can define an 'enum' tag without specifying its possible values.
45238This results in an incomplete type, much like what you get if you write
45239'struct foo' without describing the elements.  A later declaration that
45240does specify the possible values completes the type.
45241
45242 You cannot allocate variables or storage using the type while it is
45243incomplete.  However, you can work with pointers to that type.
45244
45245 This extension may not be very useful, but it makes the handling of
45246'enum' more consistent with the way 'struct' and 'union' are handled.
45247
45248 This extension is not supported by GNU C++.
45249
45250
45251File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
45252
452536.50 Function Names as Strings
45254==============================
45255
45256GCC provides three magic constants that hold the name of the current
45257function as a string.  In C++11 and later modes, all three are treated
45258as constant expressions and can be used in 'constexpr' constexts.  The
45259first of these constants is '__func__', which is part of the C99
45260standard:
45261
45262 The identifier '__func__' is implicitly declared by the translator as
45263if, immediately following the opening brace of each function definition,
45264the declaration
45265
45266     static const char __func__[] = "function-name";
45267
45268appeared, where function-name is the name of the lexically-enclosing
45269function.  This name is the unadorned name of the function.  As an
45270extension, at file (or, in C++, namespace scope), '__func__' evaluates
45271to the empty string.
45272
45273 '__FUNCTION__' is another name for '__func__', provided for backward
45274compatibility with old versions of GCC.
45275
45276 In C, '__PRETTY_FUNCTION__' is yet another name for '__func__', except
45277that at file scope (or, in C++, namespace scope), it evaluates to the
45278string '"top level"'.  In addition, in C++, '__PRETTY_FUNCTION__'
45279contains the signature of the function as well as its bare name.  For
45280example, this program:
45281
45282     extern "C" int printf (const char *, ...);
45283
45284     class a {
45285      public:
45286       void sub (int i)
45287         {
45288           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
45289           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
45290         }
45291     };
45292
45293     int
45294     main (void)
45295     {
45296       a ax;
45297       ax.sub (0);
45298       return 0;
45299     }
45300
45301gives this output:
45302
45303     __FUNCTION__ = sub
45304     __PRETTY_FUNCTION__ = void a::sub(int)
45305
45306 These identifiers are variables, not preprocessor macros, and may not
45307be used to initialize 'char' arrays or be concatenated with string
45308literals.
45309
45310
45311File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
45312
453136.51 Getting the Return or Frame Address of a Function
45314======================================================
45315
45316These functions may be used to get information about the callers of a
45317function.
45318
45319 -- Built-in Function: void * __builtin_return_address (unsigned int
45320          LEVEL)
45321     This function returns the return address of the current function,
45322     or of one of its callers.  The LEVEL argument is number of frames
45323     to scan up the call stack.  A value of '0' yields the return
45324     address of the current function, a value of '1' yields the return
45325     address of the caller of the current function, and so forth.  When
45326     inlining the expected behavior is that the function returns the
45327     address of the function that is returned to.  To work around this
45328     behavior use the 'noinline' function attribute.
45329
45330     The LEVEL argument must be a constant integer.
45331
45332     On some machines it may be impossible to determine the return
45333     address of any function other than the current one; in such cases,
45334     or when the top of the stack has been reached, this function
45335     returns an unspecified value.  In addition,
45336     '__builtin_frame_address' may be used to determine if the top of
45337     the stack has been reached.
45338
45339     Additional post-processing of the returned value may be needed, see
45340     '__builtin_extract_return_addr'.
45341
45342     The stored representation of the return address in memory may be
45343     different from the address returned by '__builtin_return_address'.
45344     For example, on AArch64 the stored address may be mangled with
45345     return address signing whereas the address returned by
45346     '__builtin_return_address' is not.
45347
45348     Calling this function with a nonzero argument can have
45349     unpredictable effects, including crashing the calling program.  As
45350     a result, calls that are considered unsafe are diagnosed when the
45351     '-Wframe-address' option is in effect.  Such calls should only be
45352     made in debugging situations.
45353
45354     On targets where code addresses are representable as 'void *',
45355          void *addr = __builtin_extract_return_addr (__builtin_return_address (0));
45356     gives the code address where the current function would return.
45357     For example, such an address may be used with 'dladdr' or other
45358     interfaces that work with code addresses.
45359
45360 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
45361     The address as returned by '__builtin_return_address' may have to
45362     be fed through this function to get the actual encoded address.
45363     For example, on the 31-bit S/390 platform the highest bit has to be
45364     masked out, or on SPARC platforms an offset has to be added for the
45365     true next instruction to be executed.
45366
45367     If no fixup is needed, this function simply passes through ADDR.
45368
45369 -- Built-in Function: void * __builtin_frob_return_addr (void *ADDR)
45370     This function does the reverse of '__builtin_extract_return_addr'.
45371
45372 -- Built-in Function: void * __builtin_frame_address (unsigned int
45373          LEVEL)
45374     This function is similar to '__builtin_return_address', but it
45375     returns the address of the function frame rather than the return
45376     address of the function.  Calling '__builtin_frame_address' with a
45377     value of '0' yields the frame address of the current function, a
45378     value of '1' yields the frame address of the caller of the current
45379     function, and so forth.
45380
45381     The frame is the area on the stack that holds local variables and
45382     saved registers.  The frame address is normally the address of the
45383     first word pushed on to the stack by the function.  However, the
45384     exact definition depends upon the processor and the calling
45385     convention.  If the processor has a dedicated frame pointer
45386     register, and the function has a frame, then
45387     '__builtin_frame_address' returns the value of the frame pointer
45388     register.
45389
45390     On some machines it may be impossible to determine the frame
45391     address of any function other than the current one; in such cases,
45392     or when the top of the stack has been reached, this function
45393     returns '0' if the first frame pointer is properly initialized by
45394     the startup code.
45395
45396     Calling this function with a nonzero argument can have
45397     unpredictable effects, including crashing the calling program.  As
45398     a result, calls that are considered unsafe are diagnosed when the
45399     '-Wframe-address' option is in effect.  Such calls should only be
45400     made in debugging situations.
45401
45402
45403File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
45404
454056.52 Using Vector Instructions through Built-in Functions
45406=========================================================
45407
45408On some targets, the instruction set contains SIMD vector instructions
45409which operate on multiple values contained in one large register at the
45410same time.  For example, on the x86 the MMX, 3DNow! and SSE extensions
45411can be used this way.
45412
45413 The first step in using these extensions is to provide the necessary
45414data types.  This should be done using an appropriate 'typedef':
45415
45416     typedef int v4si __attribute__ ((vector_size (16)));
45417
45418The 'int' type specifies the "base type", while the attribute specifies
45419the vector size for the variable, measured in bytes.  For example, the
45420declaration above causes the compiler to set the mode for the 'v4si'
45421type to be 16 bytes wide and divided into 'int' sized units.  For a
4542232-bit 'int' this means a vector of 4 units of 4 bytes, and the
45423corresponding mode of 'foo' is V4SI.
45424
45425 The 'vector_size' attribute is only applicable to integral and floating
45426scalars, although arrays, pointers, and function return values are
45427allowed in conjunction with this construct.  Only sizes that are
45428positive power-of-two multiples of the base type size are currently
45429allowed.
45430
45431 All the basic integer types can be used as base types, both as signed
45432and as unsigned: 'char', 'short', 'int', 'long', 'long long'.  In
45433addition, 'float' and 'double' can be used to build floating-point
45434vector types.
45435
45436 Specifying a combination that is not valid for the current architecture
45437causes GCC to synthesize the instructions using a narrower mode.  For
45438example, if you specify a variable of type 'V4SI' and your architecture
45439does not allow for this specific SIMD type, GCC produces code that uses
454404 'SIs'.
45441
45442 The types defined in this manner can be used with a subset of normal C
45443operations.  Currently, GCC allows using the following operators on
45444these types: '+, -, *, /, unary minus, ^, |, &, ~, %'.
45445
45446 The operations behave like C++ 'valarrays'.  Addition is defined as the
45447addition of the corresponding elements of the operands.  For example, in
45448the code below, each of the 4 elements in A is added to the
45449corresponding 4 elements in B and the resulting vector is stored in C.
45450
45451     typedef int v4si __attribute__ ((vector_size (16)));
45452
45453     v4si a, b, c;
45454
45455     c = a + b;
45456
45457 Subtraction, multiplication, division, and the logical operations
45458operate in a similar manner.  Likewise, the result of using the unary
45459minus or complement operators on a vector type is a vector whose
45460elements are the negative or complemented values of the corresponding
45461elements in the operand.
45462
45463 It is possible to use shifting operators '<<', '>>' on integer-type
45464vectors.  The operation is defined as following: '{a0, a1, ..., an} >>
45465{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'.  Vector
45466operands must have the same number of elements.
45467
45468 For convenience, it is allowed to use a binary vector operation where
45469one operand is a scalar.  In that case the compiler transforms the
45470scalar operand into a vector where each element is the scalar from the
45471operation.  The transformation happens only if the scalar could be
45472safely converted to the vector-element type.  Consider the following
45473code.
45474
45475     typedef int v4si __attribute__ ((vector_size (16)));
45476
45477     v4si a, b, c;
45478     long l;
45479
45480     a = b + 1;    /* a = b + {1,1,1,1}; */
45481     a = 2 * b;    /* a = {2,2,2,2} * b; */
45482
45483     a = l + a;    /* Error, cannot convert long to int. */
45484
45485 Vectors can be subscripted as if the vector were an array with the same
45486number of elements and base type.  Out of bound accesses invoke
45487undefined behavior at run time.  Warnings for out of bound accesses for
45488vector subscription can be enabled with '-Warray-bounds'.
45489
45490 Vector comparison is supported with standard comparison operators: '==,
45491!=, <, <=, >, >='.  Comparison operands can be vector expressions of
45492integer-type or real-type.  Comparison between integer-type vectors and
45493real-type vectors are not supported.  The result of the comparison is a
45494vector of the same width and number of elements as the comparison
45495operands with a signed integral element type.
45496
45497 Vectors are compared element-wise producing 0 when comparison is false
45498and -1 (constant of the appropriate type where all bits are set)
45499otherwise.  Consider the following example.
45500
45501     typedef int v4si __attribute__ ((vector_size (16)));
45502
45503     v4si a = {1,2,3,4};
45504     v4si b = {3,2,1,4};
45505     v4si c;
45506
45507     c = a >  b;     /* The result would be {0, 0,-1, 0}  */
45508     c = a == b;     /* The result would be {0,-1, 0,-1}  */
45509
45510 In C++, the ternary operator '?:' is available.  'a?b:c', where 'b' and
45511'c' are vectors of the same type and 'a' is an integer vector with the
45512same number of elements of the same size as 'b' and 'c', computes all
45513three arguments and creates a vector '{a[0]?b[0]:c[0], a[1]?b[1]:c[1],
45514...}'.  Note that unlike in OpenCL, 'a' is thus interpreted as 'a != 0'
45515and not 'a < 0'.  As in the case of binary operations, this syntax is
45516also accepted when one of 'b' or 'c' is a scalar that is then
45517transformed into a vector.  If both 'b' and 'c' are scalars and the type
45518of 'true?b:c' has the same size as the element type of 'a', then 'b' and
45519'c' are converted to a vector type whose elements have this type and
45520with the same number of elements as 'a'.
45521
45522 In C++, the logic operators '!, &&, ||' are available for vectors.
45523'!v' is equivalent to 'v == 0', 'a && b' is equivalent to 'a!=0 & b!=0'
45524and 'a || b' is equivalent to 'a!=0 | b!=0'.  For mixed operations
45525between a scalar 's' and a vector 'v', 's && v' is equivalent to
45526's?v!=0:0' (the evaluation is short-circuit) and 'v && s' is equivalent
45527to 'v!=0 & (s?-1:0)'.
45528
45529 Vector shuffling is available using functions '__builtin_shuffle (vec,
45530mask)' and '__builtin_shuffle (vec0, vec1, mask)'.  Both functions
45531construct a permutation of elements from one or two vectors and return a
45532vector of the same type as the input vector(s).  The MASK is an integral
45533vector with the same width (W) and element count (N) as the output
45534vector.
45535
45536 The elements of the input vectors are numbered in memory ordering of
45537VEC0 beginning at 0 and VEC1 beginning at N.  The elements of MASK are
45538considered modulo N in the single-operand case and modulo 2*N in the
45539two-operand case.
45540
45541 Consider the following example,
45542
45543     typedef int v4si __attribute__ ((vector_size (16)));
45544
45545     v4si a = {1,2,3,4};
45546     v4si b = {5,6,7,8};
45547     v4si mask1 = {0,1,1,3};
45548     v4si mask2 = {0,4,2,5};
45549     v4si res;
45550
45551     res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
45552     res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
45553
45554 Note that '__builtin_shuffle' is intentionally semantically compatible
45555with the OpenCL 'shuffle' and 'shuffle2' functions.
45556
45557 You can declare variables and use them in function calls and returns,
45558as well as in assignments and some casts.  You can specify a vector type
45559as a return type for a function.  Vector types can also be used as
45560function arguments.  It is possible to cast from one vector type to
45561another, provided they are of the same size (in fact, you can also cast
45562vectors to and from other datatypes of the same size).
45563
45564 You cannot operate between vectors of different lengths or different
45565signedness without a cast.
45566
45567 Vector shuffling is available using the '__builtin_shufflevector (vec1,
45568vec2, index...)' function.  VEC1 and VEC2 must be expressions with
45569vector type with a compatible element type.  The result of
45570'__builtin_shufflevector' is a vector with the same element type as VEC1
45571and VEC2 but that has an element count equal to the number of indices
45572specified.
45573
45574 The INDEX arguments are a list of integers that specify the elements
45575indices of the first two vectors that should be extracted and returned
45576in a new vector.  These element indices are numbered sequentially
45577starting with the first vector, continuing into the second vector.  An
45578index of -1 can be used to indicate that the corresponding element in
45579the returned vector is a don't care and can be freely chosen to
45580optimized the generated code sequence performing the shuffle operation.
45581
45582 Consider the following example,
45583     typedef int v4si __attribute__ ((vector_size (16)));
45584     typedef int v8si __attribute__ ((vector_size (32)));
45585
45586     v8si a = {1,-2,3,-4,5,-6,7,-8};
45587     v4si b = __builtin_shufflevector (a, a, 0, 2, 4, 6); /* b is {1,3,5,7} */
45588     v4si c = {-2,-4,-6,-8};
45589     v8si d = __builtin_shufflevector (c, b, 4, 0, 5, 1, 6, 2, 7, 3); /* d is a */
45590
45591 Vector conversion is available using the '__builtin_convertvector (vec,
45592vectype)' function.  VEC must be an expression with integral or floating
45593vector type and VECTYPE an integral or floating vector type with the
45594same number of elements.  The result has VECTYPE type and value of a C
45595cast of every element of VEC to the element type of VECTYPE.
45596
45597 Consider the following example,
45598     typedef int v4si __attribute__ ((vector_size (16)));
45599     typedef float v4sf __attribute__ ((vector_size (16)));
45600     typedef double v4df __attribute__ ((vector_size (32)));
45601     typedef unsigned long long v4di __attribute__ ((vector_size (32)));
45602
45603     v4si a = {1,-2,3,-4};
45604     v4sf b = {1.5f,-2.5f,3.f,7.f};
45605     v4di c = {1ULL,5ULL,0ULL,10ULL};
45606     v4sf d = __builtin_convertvector (a, v4sf); /* d is {1.f,-2.f,3.f,-4.f} */
45607     /* Equivalent of:
45608        v4sf d = { (float)a[0], (float)a[1], (float)a[2], (float)a[3] }; */
45609     v4df e = __builtin_convertvector (a, v4df); /* e is {1.,-2.,3.,-4.} */
45610     v4df f = __builtin_convertvector (b, v4df); /* f is {1.5,-2.5,3.,7.} */
45611     v4si g = __builtin_convertvector (f, v4si); /* g is {1,-2,3,7} */
45612     v4si h = __builtin_convertvector (c, v4si); /* h is {1,5,0,10} */
45613
45614 Sometimes it is desirable to write code using a mix of generic vector
45615operations (for clarity) and machine-specific vector intrinsics (to
45616access vector instructions that are not exposed via generic built-ins).
45617On x86, intrinsic functions for integer vectors typically use the same
45618vector type '__m128i' irrespective of how they interpret the vector,
45619making it necessary to cast their arguments and return values from/to
45620other vector types.  In C, you can make use of a 'union' type:
45621     #include <immintrin.h>
45622
45623     typedef unsigned char u8x16 __attribute__ ((vector_size (16)));
45624     typedef unsigned int  u32x4 __attribute__ ((vector_size (16)));
45625
45626     typedef union {
45627             __m128i mm;
45628             u8x16   u8;
45629             u32x4   u32;
45630     } v128;
45631
45632for variables that can be used with both built-in operators and x86
45633intrinsics:
45634
45635     v128 x, y = { 0 };
45636     memcpy (&x, ptr, sizeof x);
45637     y.u8  += 0x80;
45638     x.mm  = _mm_adds_epu8 (x.mm, y.mm);
45639     x.u32 &= 0xffffff;
45640
45641     /* Instead of a variable, a compound literal may be used to pass the
45642        return value of an intrinsic call to a function expecting the union: */
45643     v128 foo (v128);
45644     x = foo ((v128) {_mm_adds_epu8 (x.mm, y.mm)});
45645
45646
45647File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
45648
456496.53 Support for 'offsetof'
45650===========================
45651
45652GCC implements for both C and C++ a syntactic extension to implement the
45653'offsetof' macro.
45654
45655     primary:
45656             "__builtin_offsetof" "(" typename "," offsetof_member_designator ")"
45657
45658     offsetof_member_designator:
45659               identifier
45660             | offsetof_member_designator "." identifier
45661             | offsetof_member_designator "[" expr "]"
45662
45663 This extension is sufficient such that
45664
45665     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
45666
45667is a suitable definition of the 'offsetof' macro.  In C++, TYPE may be
45668dependent.  In either case, MEMBER may consist of a single identifier,
45669or a sequence of member accesses and array references.
45670
45671
45672File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
45673
456746.54 Legacy '__sync' Built-in Functions for Atomic Memory Access
45675================================================================
45676
45677The following built-in functions are intended to be compatible with
45678those described in the 'Intel Itanium Processor-specific Application
45679Binary Interface', section 7.4.  As such, they depart from normal GCC
45680practice by not using the '__builtin_' prefix and also by being
45681overloaded so that they work on multiple types.
45682
45683 The definition given in the Intel documentation allows only for the use
45684of the types 'int', 'long', 'long long' or their unsigned counterparts.
45685GCC allows any scalar type that is 1, 2, 4 or 8 bytes in size other than
45686the C type '_Bool' or the C++ type 'bool'.  Operations on pointer
45687arguments are performed as if the operands were of the 'uintptr_t' type.
45688That is, they are not scaled by the size of the type to which the
45689pointer points.
45690
45691 These functions are implemented in terms of the '__atomic' builtins
45692(*note __atomic Builtins::).  They should not be used for new code which
45693should use the '__atomic' builtins instead.
45694
45695 Not all operations are supported by all target processors.  If a
45696particular operation cannot be implemented on the target processor, a
45697warning is generated and a call to an external function is generated.
45698The external function carries the same name as the built-in version,
45699with an additional suffix '_N' where N is the size of the data type.
45700
45701 In most cases, these built-in functions are considered a "full
45702barrier".  That is, no memory operand is moved across the operation,
45703either forward or backward.  Further, instructions are issued as
45704necessary to prevent the processor from speculating loads across the
45705operation and from queuing stores after the operation.
45706
45707 All of the routines are described in the Intel documentation to take
45708"an optional list of variables protected by the memory barrier".  It's
45709not clear what is meant by that; it could mean that _only_ the listed
45710variables are protected, or it could mean a list of additional variables
45711to be protected.  The list is ignored by GCC which treats it as empty.
45712GCC interprets an empty list as meaning that all globally accessible
45713variables should be protected.
45714
45715'TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
45716'TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
45717'TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
45718'TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
45719'TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
45720'TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
45721     These built-in functions perform the operation suggested by the
45722     name, and returns the value that had previously been in memory.
45723     That is, operations on integer operands have the following
45724     semantics.  Operations on pointer arguments are performed as if the
45725     operands were of the 'uintptr_t' type.  That is, they are not
45726     scaled by the size of the type to which the pointer points.
45727
45728          { tmp = *ptr; *ptr OP= value; return tmp; }
45729          { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
45730
45731     The object pointed to by the first argument must be of integer or
45732     pointer type.  It must not be a boolean type.
45733
45734     _Note:_ GCC 4.4 and later implement '__sync_fetch_and_nand' as
45735     '*ptr = ~(tmp & value)' instead of '*ptr = ~tmp & value'.
45736
45737'TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
45738'TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
45739'TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
45740'TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
45741'TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
45742'TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
45743     These built-in functions perform the operation suggested by the
45744     name, and return the new value.  That is, operations on integer
45745     operands have the following semantics.  Operations on pointer
45746     operands are performed as if the operand's type were 'uintptr_t'.
45747
45748          { *ptr OP= value; return *ptr; }
45749          { *ptr = ~(*ptr & value); return *ptr; }   // nand
45750
45751     The same constraints on arguments apply as for the corresponding
45752     '__sync_op_and_fetch' built-in functions.
45753
45754     _Note:_ GCC 4.4 and later implement '__sync_nand_and_fetch' as
45755     '*ptr = ~(*ptr & value)' instead of '*ptr = ~*ptr & value'.
45756
45757'bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
45758'TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
45759     These built-in functions perform an atomic compare and swap.  That
45760     is, if the current value of '*PTR' is OLDVAL, then write NEWVAL
45761     into '*PTR'.
45762
45763     The "bool" version returns 'true' if the comparison is successful
45764     and NEWVAL is written.  The "val" version returns the contents of
45765     '*PTR' before the operation.
45766
45767'__sync_synchronize (...)'
45768     This built-in function issues a full memory barrier.
45769
45770'TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
45771     This built-in function, as described by Intel, is not a traditional
45772     test-and-set operation, but rather an atomic exchange operation.
45773     It writes VALUE into '*PTR', and returns the previous contents of
45774     '*PTR'.
45775
45776     Many targets have only minimal support for such locks, and do not
45777     support a full exchange operation.  In this case, a target may
45778     support reduced functionality here by which the _only_ valid value
45779     to store is the immediate constant 1.  The exact value actually
45780     stored in '*PTR' is implementation defined.
45781
45782     This built-in function is not a full barrier, but rather an
45783     "acquire barrier".  This means that references after the operation
45784     cannot move to (or be speculated to) before the operation, but
45785     previous memory stores may not be globally visible yet, and
45786     previous memory loads may not yet be satisfied.
45787
45788'void __sync_lock_release (TYPE *ptr, ...)'
45789     This built-in function releases the lock acquired by
45790     '__sync_lock_test_and_set'.  Normally this means writing the
45791     constant 0 to '*PTR'.
45792
45793     This built-in function is not a full barrier, but rather a "release
45794     barrier".  This means that all previous memory stores are globally
45795     visible, and all previous memory loads have been satisfied, but
45796     following memory reads are not prevented from being speculated to
45797     before the barrier.
45798
45799
45800File: gcc.info,  Node: __atomic Builtins,  Next: Integer Overflow Builtins,  Prev: __sync Builtins,  Up: C Extensions
45801
458026.55 Built-in Functions for Memory Model Aware Atomic Operations
45803================================================================
45804
45805The following built-in functions approximately match the requirements
45806for the C++11 memory model.  They are all identified by being prefixed
45807with '__atomic' and most are overloaded so that they work with multiple
45808types.
45809
45810 These functions are intended to replace the legacy '__sync' builtins.
45811The main difference is that the memory order that is requested is a
45812parameter to the functions.  New code should always use the '__atomic'
45813builtins rather than the '__sync' builtins.
45814
45815 Note that the '__atomic' builtins assume that programs will conform to
45816the C++11 memory model.  In particular, they assume that programs are
45817free of data races.  See the C++11 standard for detailed requirements.
45818
45819 The '__atomic' builtins can be used with any integral scalar or pointer
45820type that is 1, 2, 4, or 8 bytes in length.  16-byte integral types are
45821also allowed if '__int128' (*note __int128::) is supported by the
45822architecture.
45823
45824 The four non-arithmetic functions (load, store, exchange, and
45825compare_exchange) all have a generic version as well.  This generic
45826version works on any data type.  It uses the lock-free built-in function
45827if the specific data type size makes that possible; otherwise, an
45828external call is left to be resolved at run time.  This external call is
45829the same format with the addition of a 'size_t' parameter inserted as
45830the first parameter indicating the size of the object being pointed to.
45831All objects must be the same size.
45832
45833 There are 6 different memory orders that can be specified.  These map
45834to the C++11 memory orders with the same names, see the C++11 standard
45835or the GCC wiki on atomic synchronization
45836(https://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for detailed
45837definitions.  Individual targets may also support additional memory
45838orders for use on specific architectures.  Refer to the target
45839documentation for details of these.
45840
45841 An atomic operation can both constrain code motion and be mapped to
45842hardware instructions for synchronization between threads (e.g., a
45843fence).  To which extent this happens is controlled by the memory
45844orders, which are listed here in approximately ascending order of
45845strength.  The description of each memory order is only meant to roughly
45846illustrate the effects and is not a specification; see the C++11 memory
45847model for precise semantics.
45848
45849'__ATOMIC_RELAXED'
45850     Implies no inter-thread ordering constraints.
45851'__ATOMIC_CONSUME'
45852     This is currently implemented using the stronger '__ATOMIC_ACQUIRE'
45853     memory order because of a deficiency in C++11's semantics for
45854     'memory_order_consume'.
45855'__ATOMIC_ACQUIRE'
45856     Creates an inter-thread happens-before constraint from the release
45857     (or stronger) semantic store to this acquire load.  Can prevent
45858     hoisting of code to before the operation.
45859'__ATOMIC_RELEASE'
45860     Creates an inter-thread happens-before constraint to acquire (or
45861     stronger) semantic loads that read from this release store.  Can
45862     prevent sinking of code to after the operation.
45863'__ATOMIC_ACQ_REL'
45864     Combines the effects of both '__ATOMIC_ACQUIRE' and
45865     '__ATOMIC_RELEASE'.
45866'__ATOMIC_SEQ_CST'
45867     Enforces total ordering with all other '__ATOMIC_SEQ_CST'
45868     operations.
45869
45870 Note that in the C++11 memory model, _fences_ (e.g.,
45871'__atomic_thread_fence') take effect in combination with other atomic
45872operations on specific memory locations (e.g., atomic loads); operations
45873on specific memory locations do not necessarily affect other operations
45874in the same way.
45875
45876 Target architectures are encouraged to provide their own patterns for
45877each of the atomic built-in functions.  If no target is provided, the
45878original non-memory model set of '__sync' atomic built-in functions are
45879used, along with any required synchronization fences surrounding it in
45880order to achieve the proper behavior.  Execution in this case is subject
45881to the same restrictions as those built-in functions.
45882
45883 If there is no pattern or mechanism to provide a lock-free instruction
45884sequence, a call is made to an external routine with the same parameters
45885to be resolved at run time.
45886
45887 When implementing patterns for these built-in functions, the memory
45888order parameter can be ignored as long as the pattern implements the
45889most restrictive '__ATOMIC_SEQ_CST' memory order.  Any of the other
45890memory orders execute correctly with this memory order but they may not
45891execute as efficiently as they could with a more appropriate
45892implementation of the relaxed requirements.
45893
45894 Note that the C++11 standard allows for the memory order parameter to
45895be determined at run time rather than at compile time.  These built-in
45896functions map any run-time value to '__ATOMIC_SEQ_CST' rather than
45897invoke a runtime library call or inline a switch statement.  This is
45898standard compliant, safe, and the simplest approach for now.
45899
45900 The memory order parameter is a signed int, but only the lower 16 bits
45901are reserved for the memory order.  The remainder of the signed int is
45902reserved for target use and should be 0.  Use of the predefined atomic
45903values ensures proper usage.
45904
45905 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memorder)
45906     This built-in function implements an atomic load operation.  It
45907     returns the contents of '*PTR'.
45908
45909     The valid memory order variants are '__ATOMIC_RELAXED',
45910     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', and '__ATOMIC_CONSUME'.
45911
45912 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
45913          memorder)
45914     This is the generic version of an atomic load.  It returns the
45915     contents of '*PTR' in '*RET'.
45916
45917 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
45918          memorder)
45919     This built-in function implements an atomic store operation.  It
45920     writes 'VAL' into '*PTR'.
45921
45922     The valid memory order variants are '__ATOMIC_RELAXED',
45923     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
45924
45925 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
45926          memorder)
45927     This is the generic version of an atomic store.  It stores the
45928     value of '*VAL' into '*PTR'.
45929
45930 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
45931          int memorder)
45932     This built-in function implements an atomic exchange operation.  It
45933     writes VAL into '*PTR', and returns the previous contents of
45934     '*PTR'.
45935
45936     All memory order variants are valid.
45937
45938 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val,
45939          TYPE *ret, int memorder)
45940     This is the generic version of an atomic exchange.  It stores the
45941     contents of '*VAL' into '*PTR'.  The original value of '*PTR' is
45942     copied into '*RET'.
45943
45944 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, TYPE
45945          *expected, TYPE desired, bool weak, int success_memorder, int
45946          failure_memorder)
45947     This built-in function implements an atomic compare and exchange
45948     operation.  This compares the contents of '*PTR' with the contents
45949     of '*EXPECTED'.  If equal, the operation is a _read-modify-write_
45950     operation that writes DESIRED into '*PTR'.  If they are not equal,
45951     the operation is a _read_ and the current contents of '*PTR' are
45952     written into '*EXPECTED'.  WEAK is 'true' for weak
45953     compare_exchange, which may fail spuriously, and 'false' for the
45954     strong variation, which never fails spuriously.  Many targets only
45955     offer the strong variation and ignore the parameter.  When in
45956     doubt, use the strong variation.
45957
45958     If DESIRED is written into '*PTR' then 'true' is returned and
45959     memory is affected according to the memory order specified by
45960     SUCCESS_MEMORDER.  There are no restrictions on what memory order
45961     can be used here.
45962
45963     Otherwise, 'false' is returned and memory is affected according to
45964     FAILURE_MEMORDER.  This memory order cannot be '__ATOMIC_RELEASE'
45965     nor '__ATOMIC_ACQ_REL'.  It also cannot be a stronger order than
45966     that specified by SUCCESS_MEMORDER.
45967
45968 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE
45969          *expected, TYPE *desired, bool weak, int success_memorder, int
45970          failure_memorder)
45971     This built-in function implements the generic version of
45972     '__atomic_compare_exchange'.  The function is virtually identical
45973     to '__atomic_compare_exchange_n', except the desired value is also
45974     a pointer.
45975
45976 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, int
45977          memorder)
45978 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, int
45979          memorder)
45980 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, int
45981          memorder)
45982 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, int
45983          memorder)
45984 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
45985          memorder)
45986 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
45987          int memorder)
45988     These built-in functions perform the operation suggested by the
45989     name, and return the result of the operation.  Operations on
45990     pointer arguments are performed as if the operands were of the
45991     'uintptr_t' type.  That is, they are not scaled by the size of the
45992     type to which the pointer points.
45993
45994          { *ptr OP= val; return *ptr; }
45995          { *ptr = ~(*ptr & val); return *ptr; } // nand
45996
45997     The object pointed to by the first argument must be of integer or
45998     pointer type.  It must not be a boolean type.  All memory orders
45999     are valid.
46000
46001 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, int
46002          memorder)
46003 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, int
46004          memorder)
46005 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, int
46006          memorder)
46007 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, int
46008          memorder)
46009 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
46010          memorder)
46011 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
46012          int memorder)
46013     These built-in functions perform the operation suggested by the
46014     name, and return the value that had previously been in '*PTR'.
46015     Operations on pointer arguments are performed as if the operands
46016     were of the 'uintptr_t' type.  That is, they are not scaled by the
46017     size of the type to which the pointer points.
46018
46019          { tmp = *ptr; *ptr OP= val; return tmp; }
46020          { tmp = *ptr; *ptr = ~(*ptr & val); return tmp; } // nand
46021
46022     The same constraints on arguments apply as for the corresponding
46023     '__atomic_op_fetch' built-in functions.  All memory orders are
46024     valid.
46025
46026 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
46027          memorder)
46028
46029     This built-in function performs an atomic test-and-set operation on
46030     the byte at '*PTR'.  The byte is set to some implementation defined
46031     nonzero "set" value and the return value is 'true' if and only if
46032     the previous contents were "set".  It should be only used for
46033     operands of type 'bool' or 'char'.  For other types only part of
46034     the value may be set.
46035
46036     All memory orders are valid.
46037
46038 -- Built-in Function: void __atomic_clear (bool *ptr, int memorder)
46039
46040     This built-in function performs an atomic clear operation on
46041     '*PTR'.  After the operation, '*PTR' contains 0.  It should be only
46042     used for operands of type 'bool' or 'char' and in conjunction with
46043     '__atomic_test_and_set'.  For other types it may only clear
46044     partially.  If the type is not 'bool' prefer using
46045     '__atomic_store'.
46046
46047     The valid memory order variants are '__ATOMIC_RELAXED',
46048     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
46049
46050 -- Built-in Function: void __atomic_thread_fence (int memorder)
46051
46052     This built-in function acts as a synchronization fence between
46053     threads based on the specified memory order.
46054
46055     All memory orders are valid.
46056
46057 -- Built-in Function: void __atomic_signal_fence (int memorder)
46058
46059     This built-in function acts as a synchronization fence between a
46060     thread and signal handlers based in the same thread.
46061
46062     All memory orders are valid.
46063
46064 -- Built-in Function: bool __atomic_always_lock_free (size_t size, void
46065          *ptr)
46066
46067     This built-in function returns 'true' if objects of SIZE bytes
46068     always generate lock-free atomic instructions for the target
46069     architecture.  SIZE must resolve to a compile-time constant and the
46070     result also resolves to a compile-time constant.
46071
46072     PTR is an optional pointer to the object that may be used to
46073     determine alignment.  A value of 0 indicates typical alignment
46074     should be used.  The compiler may also ignore this parameter.
46075
46076          if (__atomic_always_lock_free (sizeof (long long), 0))
46077
46078 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
46079          *ptr)
46080
46081     This built-in function returns 'true' if objects of SIZE bytes
46082     always generate lock-free atomic instructions for the target
46083     architecture.  If the built-in function is not known to be
46084     lock-free, a call is made to a runtime routine named
46085     '__atomic_is_lock_free'.
46086
46087     PTR is an optional pointer to the object that may be used to
46088     determine alignment.  A value of 0 indicates typical alignment
46089     should be used.  The compiler may also ignore this parameter.
46090
46091
46092File: gcc.info,  Node: Integer Overflow Builtins,  Next: x86 specific memory model extensions for transactional memory,  Prev: __atomic Builtins,  Up: C Extensions
46093
460946.56 Built-in Functions to Perform Arithmetic with Overflow Checking
46095====================================================================
46096
46097The following built-in functions allow performing simple arithmetic
46098operations together with checking whether the operations overflowed.
46099
46100 -- Built-in Function: bool __builtin_add_overflow (TYPE1 a, TYPE2 b,
46101          TYPE3 *res)
46102 -- Built-in Function: bool __builtin_sadd_overflow (int a, int b, int
46103          *res)
46104 -- Built-in Function: bool __builtin_saddl_overflow (long int a, long
46105          int b, long int *res)
46106 -- Built-in Function: bool __builtin_saddll_overflow (long long int a,
46107          long long int b, long long int *res)
46108 -- Built-in Function: bool __builtin_uadd_overflow (unsigned int a,
46109          unsigned int b, unsigned int *res)
46110 -- Built-in Function: bool __builtin_uaddl_overflow (unsigned long int
46111          a, unsigned long int b, unsigned long int *res)
46112 -- Built-in Function: bool __builtin_uaddll_overflow (unsigned long
46113          long int a, unsigned long long int b, unsigned long long int
46114          *res)
46115
46116     These built-in functions promote the first two operands into
46117     infinite precision signed type and perform addition on those
46118     promoted operands.  The result is then cast to the type the third
46119     pointer argument points to and stored there.  If the stored result
46120     is equal to the infinite precision result, the built-in functions
46121     return 'false', otherwise they return 'true'.  As the addition is
46122     performed in infinite signed precision, these built-in functions
46123     have fully defined behavior for all argument values.
46124
46125     The first built-in function allows arbitrary integral types for
46126     operands and the result type must be pointer to some integral type
46127     other than enumerated or boolean type, the rest of the built-in
46128     functions have explicit integer types.
46129
46130     The compiler will attempt to use hardware instructions to implement
46131     these built-in functions where possible, like conditional jump on
46132     overflow after addition, conditional jump on carry etc.
46133
46134 -- Built-in Function: bool __builtin_sub_overflow (TYPE1 a, TYPE2 b,
46135          TYPE3 *res)
46136 -- Built-in Function: bool __builtin_ssub_overflow (int a, int b, int
46137          *res)
46138 -- Built-in Function: bool __builtin_ssubl_overflow (long int a, long
46139          int b, long int *res)
46140 -- Built-in Function: bool __builtin_ssubll_overflow (long long int a,
46141          long long int b, long long int *res)
46142 -- Built-in Function: bool __builtin_usub_overflow (unsigned int a,
46143          unsigned int b, unsigned int *res)
46144 -- Built-in Function: bool __builtin_usubl_overflow (unsigned long int
46145          a, unsigned long int b, unsigned long int *res)
46146 -- Built-in Function: bool __builtin_usubll_overflow (unsigned long
46147          long int a, unsigned long long int b, unsigned long long int
46148          *res)
46149
46150     These built-in functions are similar to the add overflow checking
46151     built-in functions above, except they perform subtraction, subtract
46152     the second argument from the first one, instead of addition.
46153
46154 -- Built-in Function: bool __builtin_mul_overflow (TYPE1 a, TYPE2 b,
46155          TYPE3 *res)
46156 -- Built-in Function: bool __builtin_smul_overflow (int a, int b, int
46157          *res)
46158 -- Built-in Function: bool __builtin_smull_overflow (long int a, long
46159          int b, long int *res)
46160 -- Built-in Function: bool __builtin_smulll_overflow (long long int a,
46161          long long int b, long long int *res)
46162 -- Built-in Function: bool __builtin_umul_overflow (unsigned int a,
46163          unsigned int b, unsigned int *res)
46164 -- Built-in Function: bool __builtin_umull_overflow (unsigned long int
46165          a, unsigned long int b, unsigned long int *res)
46166 -- Built-in Function: bool __builtin_umulll_overflow (unsigned long
46167          long int a, unsigned long long int b, unsigned long long int
46168          *res)
46169
46170     These built-in functions are similar to the add overflow checking
46171     built-in functions above, except they perform multiplication,
46172     instead of addition.
46173
46174 The following built-in functions allow checking if simple arithmetic
46175operation would overflow.
46176
46177 -- Built-in Function: bool __builtin_add_overflow_p (TYPE1 a, TYPE2 b,
46178          TYPE3 c)
46179 -- Built-in Function: bool __builtin_sub_overflow_p (TYPE1 a, TYPE2 b,
46180          TYPE3 c)
46181 -- Built-in Function: bool __builtin_mul_overflow_p (TYPE1 a, TYPE2 b,
46182          TYPE3 c)
46183
46184     These built-in functions are similar to '__builtin_add_overflow',
46185     '__builtin_sub_overflow', or '__builtin_mul_overflow', except that
46186     they don't store the result of the arithmetic operation anywhere
46187     and the last argument is not a pointer, but some expression with
46188     integral type other than enumerated or boolean type.
46189
46190     The built-in functions promote the first two operands into infinite
46191     precision signed type and perform addition on those promoted
46192     operands.  The result is then cast to the type of the third
46193     argument.  If the cast result is equal to the infinite precision
46194     result, the built-in functions return 'false', otherwise they
46195     return 'true'.  The value of the third argument is ignored, just
46196     the side effects in the third argument are evaluated, and no
46197     integral argument promotions are performed on the last argument.
46198     If the third argument is a bit-field, the type used for the result
46199     cast has the precision and signedness of the given bit-field,
46200     rather than precision and signedness of the underlying type.
46201
46202     For example, the following macro can be used to portably check, at
46203     compile-time, whether or not adding two constant integers will
46204     overflow, and perform the addition only when it is known to be safe
46205     and not to trigger a '-Woverflow' warning.
46206
46207          #define INT_ADD_OVERFLOW_P(a, b) \
46208             __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0)
46209
46210          enum {
46211              A = INT_MAX, B = 3,
46212              C = INT_ADD_OVERFLOW_P (A, B) ? 0 : A + B,
46213              D = __builtin_add_overflow_p (1, SCHAR_MAX, (signed char) 0)
46214          };
46215
46216     The compiler will attempt to use hardware instructions to implement
46217     these built-in functions where possible, like conditional jump on
46218     overflow after addition, conditional jump on carry etc.
46219
46220
46221File: gcc.info,  Node: x86 specific memory model extensions for transactional memory,  Next: Object Size Checking,  Prev: Integer Overflow Builtins,  Up: C Extensions
46222
462236.57 x86-Specific Memory Model Extensions for Transactional Memory
46224==================================================================
46225
46226The x86 architecture supports additional memory ordering flags to mark
46227critical sections for hardware lock elision.  These must be specified in
46228addition to an existing memory order to atomic intrinsics.
46229
46230'__ATOMIC_HLE_ACQUIRE'
46231     Start lock elision on a lock variable.  Memory order must be
46232     '__ATOMIC_ACQUIRE' or stronger.
46233'__ATOMIC_HLE_RELEASE'
46234     End lock elision on a lock variable.  Memory order must be
46235     '__ATOMIC_RELEASE' or stronger.
46236
46237 When a lock acquire fails, it is required for good performance to abort
46238the transaction quickly.  This can be done with a '_mm_pause'.
46239
46240     #include <immintrin.h> // For _mm_pause
46241
46242     int lockvar;
46243
46244     /* Acquire lock with lock elision */
46245     while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
46246         _mm_pause(); /* Abort failed transaction */
46247     ...
46248     /* Free lock with lock elision */
46249     __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
46250
46251
46252File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: x86 specific memory model extensions for transactional memory,  Up: C Extensions
46253
462546.58 Object Size Checking Built-in Functions
46255============================================
46256
46257GCC implements a limited buffer overflow protection mechanism that can
46258prevent some buffer overflow attacks by determining the sizes of objects
46259into which data is about to be written and preventing the writes when
46260the size isn't sufficient.  The built-in functions described below yield
46261the best results when used together and when optimization is enabled.
46262For example, to detect object sizes across function boundaries or to
46263follow pointer assignments through non-trivial control flow they rely on
46264various optimization passes enabled with '-O2'.  However, to a limited
46265extent, they can be used without optimization as well.
46266
46267 -- Built-in Function: size_t __builtin_object_size (const void * PTR,
46268          int TYPE)
46269     is a built-in construct that returns a constant number of bytes
46270     from PTR to the end of the object PTR pointer points to (if known
46271     at compile time).  To determine the sizes of dynamically allocated
46272     objects the function relies on the allocation functions called to
46273     obtain the storage to be declared with the 'alloc_size' attribute
46274     (*note Common Function Attributes::).  '__builtin_object_size'
46275     never evaluates its arguments for side effects.  If there are any
46276     side effects in them, it returns '(size_t) -1' for TYPE 0 or 1 and
46277     '(size_t) 0' for TYPE 2 or 3.  If there are multiple objects PTR
46278     can point to and all of them are known at compile time, the
46279     returned number is the maximum of remaining byte counts in those
46280     objects if TYPE & 2 is 0 and minimum if nonzero.  If it is not
46281     possible to determine which objects PTR points to at compile time,
46282     '__builtin_object_size' should return '(size_t) -1' for TYPE 0 or 1
46283     and '(size_t) 0' for TYPE 2 or 3.
46284
46285     TYPE is an integer constant from 0 to 3.  If the least significant
46286     bit is clear, objects are whole variables, if it is set, a closest
46287     surrounding subobject is considered the object a pointer points to.
46288     The second bit determines if maximum or minimum of remaining bytes
46289     is computed.
46290
46291          struct V { char buf1[10]; int b; char buf2[10]; } var;
46292          char *p = &var.buf1[1], *q = &var.b;
46293
46294          /* Here the object p points to is var.  */
46295          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
46296          /* The subobject p points to is var.buf1.  */
46297          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
46298          /* The object q points to is var.  */
46299          assert (__builtin_object_size (q, 0)
46300                  == (char *) (&var + 1) - (char *) &var.b);
46301          /* The subobject q points to is var.b.  */
46302          assert (__builtin_object_size (q, 1) == sizeof (var.b));
46303
46304 -- Built-in Function: size_t __builtin_dynamic_object_size (const void
46305          * PTR, int TYPE)
46306     is similar to '__builtin_object_size' in that it returns a number
46307     of bytes from PTR to the end of the object PTR pointer points to,
46308     except that the size returned may not be a constant.  This results
46309     in successful evaluation of object size estimates in a wider range
46310     of use cases and can be more precise than '__builtin_object_size',
46311     but it incurs a performance penalty since it may add a runtime
46312     overhead on size computation.  Semantics of TYPE as well as return
46313     values in case it is not possible to determine which objects PTR
46314     points to at compile time are the same as in the case of
46315     '__builtin_object_size'.
46316
46317 There are built-in functions added for many common string operation
46318functions, e.g., for 'memcpy' '__builtin___memcpy_chk' built-in is
46319provided.  This built-in has an additional last argument, which is the
46320number of bytes remaining in the object the DEST argument points to or
46321'(size_t) -1' if the size is not known.
46322
46323 The built-in functions are optimized into the normal string functions
46324like 'memcpy' if the last argument is '(size_t) -1' or if it is known at
46325compile time that the destination object will not be overflowed.  If the
46326compiler can determine at compile time that the object will always be
46327overflowed, it issues a warning.
46328
46329 The intended use can be e.g.
46330
46331     #undef memcpy
46332     #define bos0(dest) __builtin_object_size (dest, 0)
46333     #define memcpy(dest, src, n) \
46334       __builtin___memcpy_chk (dest, src, n, bos0 (dest))
46335
46336     char *volatile p;
46337     char buf[10];
46338     /* It is unknown what object p points to, so this is optimized
46339        into plain memcpy - no checking is possible.  */
46340     memcpy (p, "abcde", n);
46341     /* Destination is known and length too.  It is known at compile
46342        time there will be no overflow.  */
46343     memcpy (&buf[5], "abcde", 5);
46344     /* Destination is known, but the length is not known at compile time.
46345        This will result in __memcpy_chk call that can check for overflow
46346        at run time.  */
46347     memcpy (&buf[5], "abcde", n);
46348     /* Destination is known and it is known at compile time there will
46349        be overflow.  There will be a warning and __memcpy_chk call that
46350        will abort the program at run time.  */
46351     memcpy (&buf[6], "abcde", 5);
46352
46353 Such built-in functions are provided for 'memcpy', 'mempcpy',
46354'memmove', 'memset', 'strcpy', 'stpcpy', 'strncpy', 'strcat' and
46355'strncat'.
46356
46357 There are also checking built-in functions for formatted output
46358functions.
46359     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
46360     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
46361                                   const char *fmt, ...);
46362     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
46363                                   va_list ap);
46364     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
46365                                    const char *fmt, va_list ap);
46366
46367 The added FLAG argument is passed unchanged to '__sprintf_chk' etc.
46368functions and can contain implementation specific flags on what
46369additional security measures the checking function might take, such as
46370handling '%n' differently.
46371
46372 The OS argument is the object size S points to, like in the other
46373built-in functions.  There is a small difference in the behavior though,
46374if OS is '(size_t) -1', the built-in functions are optimized into the
46375non-checking functions only if FLAG is 0, otherwise the checking
46376function is called with OS argument set to '(size_t) -1'.
46377
46378 In addition to this, there are checking built-in functions
46379'__builtin___printf_chk', '__builtin___vprintf_chk',
46380'__builtin___fprintf_chk' and '__builtin___vfprintf_chk'.  These have
46381just one additional argument, FLAG, right before format string FMT.  If
46382the compiler is able to optimize them to 'fputc' etc. functions, it
46383does, otherwise the checking function is called and the FLAG argument
46384passed to it.
46385
46386
46387File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
46388
463896.59 Other Built-in Functions Provided by GCC
46390=============================================
46391
46392GCC provides a large number of built-in functions other than the ones
46393mentioned above.  Some of these are for internal use in the processing
46394of exceptions or variable-length argument lists and are not documented
46395here because they may change from time to time; we do not recommend
46396general use of these functions.
46397
46398 The remaining functions are provided for optimization purposes.
46399
46400 With the exception of built-ins that have library equivalents such as
46401the standard C library functions discussed below, or that expand to
46402library calls, GCC built-in functions are always expanded inline and
46403thus do not have corresponding entry points and their address cannot be
46404obtained.  Attempting to use them in an expression other than a function
46405call results in a compile-time error.
46406
46407 GCC includes built-in versions of many of the functions in the standard
46408C library.  These functions come in two forms: one whose names start
46409with the '__builtin_' prefix, and the other without.  Both forms have
46410the same type (including prototype), the same address (when their
46411address is taken), and the same meaning as the C library functions even
46412if you specify the '-fno-builtin' option *note C Dialect Options::).
46413Many of these functions are only optimized in certain cases; if they are
46414not optimized in a particular case, a call to the library function is
46415emitted.
46416
46417 Outside strict ISO C mode ('-ansi', '-std=c90', '-std=c99' or
46418'-std=c11'), the functions '_exit', 'alloca', 'bcmp', 'bzero',
46419'dcgettext', 'dgettext', 'dremf', 'dreml', 'drem', 'exp10f', 'exp10l',
46420'exp10', 'ffsll', 'ffsl', 'ffs', 'fprintf_unlocked', 'fputs_unlocked',
46421'gammaf', 'gammal', 'gamma', 'gammaf_r', 'gammal_r', 'gamma_r',
46422'gettext', 'index', 'isascii', 'j0f', 'j0l', 'j0', 'j1f', 'j1l', 'j1',
46423'jnf', 'jnl', 'jn', 'lgammaf_r', 'lgammal_r', 'lgamma_r', 'mempcpy',
46424'pow10f', 'pow10l', 'pow10', 'printf_unlocked', 'rindex', 'roundeven',
46425'roundevenf', 'roundevenl', 'scalbf', 'scalbl', 'scalb', 'signbit',
46426'signbitf', 'signbitl', 'signbitd32', 'signbitd64', 'signbitd128',
46427'significandf', 'significandl', 'significand', 'sincosf', 'sincosl',
46428'sincos', 'stpcpy', 'stpncpy', 'strcasecmp', 'strdup', 'strfmon',
46429'strncasecmp', 'strndup', 'strnlen', 'toascii', 'y0f', 'y0l', 'y0',
46430'y1f', 'y1l', 'y1', 'ynf', 'ynl' and 'yn' may be handled as built-in
46431functions.  All these functions have corresponding versions prefixed
46432with '__builtin_', which may be used even in strict C90 mode.
46433
46434 The ISO C99 functions '_Exit', 'acoshf', 'acoshl', 'acosh', 'asinhf',
46435'asinhl', 'asinh', 'atanhf', 'atanhl', 'atanh', 'cabsf', 'cabsl',
46436'cabs', 'cacosf', 'cacoshf', 'cacoshl', 'cacosh', 'cacosl', 'cacos',
46437'cargf', 'cargl', 'carg', 'casinf', 'casinhf', 'casinhl', 'casinh',
46438'casinl', 'casin', 'catanf', 'catanhf', 'catanhl', 'catanh', 'catanl',
46439'catan', 'cbrtf', 'cbrtl', 'cbrt', 'ccosf', 'ccoshf', 'ccoshl', 'ccosh',
46440'ccosl', 'ccos', 'cexpf', 'cexpl', 'cexp', 'cimagf', 'cimagl', 'cimag',
46441'clogf', 'clogl', 'clog', 'conjf', 'conjl', 'conj', 'copysignf',
46442'copysignl', 'copysign', 'cpowf', 'cpowl', 'cpow', 'cprojf', 'cprojl',
46443'cproj', 'crealf', 'creall', 'creal', 'csinf', 'csinhf', 'csinhl',
46444'csinh', 'csinl', 'csin', 'csqrtf', 'csqrtl', 'csqrt', 'ctanf',
46445'ctanhf', 'ctanhl', 'ctanh', 'ctanl', 'ctan', 'erfcf', 'erfcl', 'erfc',
46446'erff', 'erfl', 'erf', 'exp2f', 'exp2l', 'exp2', 'expm1f', 'expm1l',
46447'expm1', 'fdimf', 'fdiml', 'fdim', 'fmaf', 'fmal', 'fmaxf', 'fmaxl',
46448'fmax', 'fma', 'fminf', 'fminl', 'fmin', 'hypotf', 'hypotl', 'hypot',
46449'ilogbf', 'ilogbl', 'ilogb', 'imaxabs', 'isblank', 'iswblank',
46450'lgammaf', 'lgammal', 'lgamma', 'llabs', 'llrintf', 'llrintl', 'llrint',
46451'llroundf', 'llroundl', 'llround', 'log1pf', 'log1pl', 'log1p', 'log2f',
46452'log2l', 'log2', 'logbf', 'logbl', 'logb', 'lrintf', 'lrintl', 'lrint',
46453'lroundf', 'lroundl', 'lround', 'nearbyintf', 'nearbyintl', 'nearbyint',
46454'nextafterf', 'nextafterl', 'nextafter', 'nexttowardf', 'nexttowardl',
46455'nexttoward', 'remainderf', 'remainderl', 'remainder', 'remquof',
46456'remquol', 'remquo', 'rintf', 'rintl', 'rint', 'roundf', 'roundl',
46457'round', 'scalblnf', 'scalblnl', 'scalbln', 'scalbnf', 'scalbnl',
46458'scalbn', 'snprintf', 'tgammaf', 'tgammal', 'tgamma', 'truncf',
46459'truncl', 'trunc', 'vfscanf', 'vscanf', 'vsnprintf' and 'vsscanf' are
46460handled as built-in functions except in strict ISO C90 mode ('-ansi' or
46461'-std=c90').
46462
46463 There are also built-in versions of the ISO C99 functions 'acosf',
46464'acosl', 'asinf', 'asinl', 'atan2f', 'atan2l', 'atanf', 'atanl',
46465'ceilf', 'ceill', 'cosf', 'coshf', 'coshl', 'cosl', 'expf', 'expl',
46466'fabsf', 'fabsl', 'floorf', 'floorl', 'fmodf', 'fmodl', 'frexpf',
46467'frexpl', 'ldexpf', 'ldexpl', 'log10f', 'log10l', 'logf', 'logl',
46468'modfl', 'modff', 'powf', 'powl', 'sinf', 'sinhf', 'sinhl', 'sinl',
46469'sqrtf', 'sqrtl', 'tanf', 'tanhf', 'tanhl' and 'tanl' that are
46470recognized in any mode since ISO C90 reserves these names for the
46471purpose to which ISO C99 puts them.  All these functions have
46472corresponding versions prefixed with '__builtin_'.
46473
46474 There are also built-in functions '__builtin_fabsfN',
46475'__builtin_fabsfNx', '__builtin_copysignfN' and '__builtin_copysignfNx',
46476corresponding to the TS 18661-3 functions 'fabsfN', 'fabsfNx',
46477'copysignfN' and 'copysignfNx', for supported types '_FloatN' and
46478'_FloatNx'.
46479
46480 There are also GNU extension functions 'clog10', 'clog10f' and
46481'clog10l' which names are reserved by ISO C99 for future use.  All these
46482functions have versions prefixed with '__builtin_'.
46483
46484 The ISO C94 functions 'iswalnum', 'iswalpha', 'iswcntrl', 'iswdigit',
46485'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace', 'iswupper',
46486'iswxdigit', 'towlower' and 'towupper' are handled as built-in functions
46487except in strict ISO C90 mode ('-ansi' or '-std=c90').
46488
46489 The ISO C90 functions 'abort', 'abs', 'acos', 'asin', 'atan2', 'atan',
46490'calloc', 'ceil', 'cosh', 'cos', 'exit', 'exp', 'fabs', 'floor', 'fmod',
46491'fprintf', 'fputs', 'free', 'frexp', 'fscanf', 'isalnum', 'isalpha',
46492'iscntrl', 'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct',
46493'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper', 'labs', 'ldexp',
46494'log10', 'log', 'malloc', 'memchr', 'memcmp', 'memcpy', 'memset',
46495'modf', 'pow', 'printf', 'putchar', 'puts', 'realloc', 'scanf', 'sinh',
46496'sin', 'snprintf', 'sprintf', 'sqrt', 'sscanf', 'strcat', 'strchr',
46497'strcmp', 'strcpy', 'strcspn', 'strlen', 'strncat', 'strncmp',
46498'strncpy', 'strpbrk', 'strrchr', 'strspn', 'strstr', 'tanh', 'tan',
46499'vfprintf', 'vprintf' and 'vsprintf' are all recognized as built-in
46500functions unless '-fno-builtin' is specified (or '-fno-builtin-FUNCTION'
46501is specified for an individual function).  All of these functions have
46502corresponding versions prefixed with '__builtin_'.
46503
46504 GCC provides built-in versions of the ISO C99 floating-point comparison
46505macros that avoid raising exceptions for unordered operands.  They have
46506the same names as the standard macros ( 'isgreater', 'isgreaterequal',
46507'isless', 'islessequal', 'islessgreater', and 'isunordered') , with
46508'__builtin_' prefixed.  We intend for a library implementor to be able
46509to simply '#define' each standard macro to its built-in equivalent.  In
46510the same fashion, GCC provides 'fpclassify', 'isfinite', 'isinf_sign',
46511'isnormal' and 'signbit' built-ins used with '__builtin_' prefixed.  The
46512'isinf' and 'isnan' built-in functions appear both with and without the
46513'__builtin_' prefix.
46514
46515 GCC provides built-in versions of the ISO C99 floating-point rounding
46516and exceptions handling functions 'fegetround', 'feclearexcept' and
46517'feraiseexcept'.  They may not be available for all targets, and because
46518they need close interaction with libc internal values, they may not be
46519available for all target libcs, but in all cases they will gracefully
46520fallback to libc calls.  These built-in functions appear both with and
46521without the '__builtin_' prefix.
46522
46523 -- Built-in Function: void *__builtin_alloca (size_t size)
46524     The '__builtin_alloca' function must be called at block scope.  The
46525     function allocates an object SIZE bytes large on the stack of the
46526     calling function.  The object is aligned on the default stack
46527     alignment boundary for the target determined by the
46528     '__BIGGEST_ALIGNMENT__' macro.  The '__builtin_alloca' function
46529     returns a pointer to the first byte of the allocated object.  The
46530     lifetime of the allocated object ends just before the calling
46531     function returns to its caller.  This is so even when
46532     '__builtin_alloca' is called within a nested block.
46533
46534     For example, the following function allocates eight objects of 'n'
46535     bytes each on the stack, storing a pointer to each in consecutive
46536     elements of the array 'a'.  It then passes the array to function
46537     'g' which can safely use the storage pointed to by each of the
46538     array elements.
46539
46540          void f (unsigned n)
46541          {
46542            void *a [8];
46543            for (int i = 0; i != 8; ++i)
46544              a [i] = __builtin_alloca (n);
46545
46546            g (a, n);   // safe
46547          }
46548
46549     Since the '__builtin_alloca' function doesn't validate its argument
46550     it is the responsibility of its caller to make sure the argument
46551     doesn't cause it to exceed the stack size limit.  The
46552     '__builtin_alloca' function is provided to make it possible to
46553     allocate on the stack arrays of bytes with an upper bound that may
46554     be computed at run time.  Since C99 Variable Length Arrays offer
46555     similar functionality under a portable, more convenient, and safer
46556     interface they are recommended instead, in both C99 and C++
46557     programs where GCC provides them as an extension.  *Note Variable
46558     Length::, for details.
46559
46560 -- Built-in Function: void *__builtin_alloca_with_align (size_t size,
46561          size_t alignment)
46562     The '__builtin_alloca_with_align' function must be called at block
46563     scope.  The function allocates an object SIZE bytes large on the
46564     stack of the calling function.  The allocated object is aligned on
46565     the boundary specified by the argument ALIGNMENT whose unit is
46566     given in bits (not bytes).  The SIZE argument must be positive and
46567     not exceed the stack size limit.  The ALIGNMENT argument must be a
46568     constant integer expression that evaluates to a power of 2 greater
46569     than or equal to 'CHAR_BIT' and less than some unspecified maximum.
46570     Invocations with other values are rejected with an error indicating
46571     the valid bounds.  The function returns a pointer to the first byte
46572     of the allocated object.  The lifetime of the allocated object ends
46573     at the end of the block in which the function was called.  The
46574     allocated storage is released no later than just before the calling
46575     function returns to its caller, but may be released at the end of
46576     the block in which the function was called.
46577
46578     For example, in the following function the call to 'g' is unsafe
46579     because when 'overalign' is non-zero, the space allocated by
46580     '__builtin_alloca_with_align' may have been released at the end of
46581     the 'if' statement in which it was called.
46582
46583          void f (unsigned n, bool overalign)
46584          {
46585            void *p;
46586            if (overalign)
46587              p = __builtin_alloca_with_align (n, 64 /* bits */);
46588            else
46589              p = __builtin_alloc (n);
46590
46591            g (p, n);   // unsafe
46592          }
46593
46594     Since the '__builtin_alloca_with_align' function doesn't validate
46595     its SIZE argument it is the responsibility of its caller to make
46596     sure the argument doesn't cause it to exceed the stack size limit.
46597     The '__builtin_alloca_with_align' function is provided to make it
46598     possible to allocate on the stack overaligned arrays of bytes with
46599     an upper bound that may be computed at run time.  Since C99
46600     Variable Length Arrays offer the same functionality under a
46601     portable, more convenient, and safer interface they are recommended
46602     instead, in both C99 and C++ programs where GCC provides them as an
46603     extension.  *Note Variable Length::, for details.
46604
46605 -- Built-in Function: void *__builtin_alloca_with_align_and_max (size_t
46606          size, size_t alignment, size_t max_size)
46607     Similar to '__builtin_alloca_with_align' but takes an extra
46608     argument specifying an upper bound for SIZE in case its value
46609     cannot be computed at compile time, for use by '-fstack-usage',
46610     '-Wstack-usage' and '-Walloca-larger-than'.  MAX_SIZE must be a
46611     constant integer expression, it has no effect on code generation
46612     and no attempt is made to check its compatibility with SIZE.
46613
46614 -- Built-in Function: bool __builtin_has_attribute (TYPE-OR-EXPRESSION,
46615          ATTRIBUTE)
46616     The '__builtin_has_attribute' function evaluates to an integer
46617     constant expression equal to 'true' if the symbol or type
46618     referenced by the TYPE-OR-EXPRESSION argument has been declared
46619     with the ATTRIBUTE referenced by the second argument.  For an
46620     TYPE-OR-EXPRESSION argument that does not reference a symbol, since
46621     attributes do not apply to expressions the built-in consider the
46622     type of the argument.  Neither argument is evaluated.  The
46623     TYPE-OR-EXPRESSION argument is subject to the same restrictions as
46624     the argument to 'typeof' (*note Typeof::).  The ATTRIBUTE argument
46625     is an attribute name optionally followed by a comma-separated list
46626     of arguments enclosed in parentheses.  Both forms of attribute
46627     names--with and without double leading and trailing
46628     underscores--are recognized.  *Note Attribute Syntax::, for
46629     details.  When no attribute arguments are specified for an
46630     attribute that expects one or more arguments the function returns
46631     'true' if TYPE-OR-EXPRESSION has been declared with the attribute
46632     regardless of the attribute argument values.  Arguments provided
46633     for an attribute that expects some are validated and matched up to
46634     the provided number.  The function returns 'true' if all provided
46635     arguments match.  For example, the first call to the function below
46636     evaluates to 'true' because 'x' is declared with the 'aligned'
46637     attribute but the second call evaluates to 'false' because 'x' is
46638     declared 'aligned (8)' and not 'aligned (4)'.
46639
46640          __attribute__ ((aligned (8))) int x;
46641          _Static_assert (__builtin_has_attribute (x, aligned), "aligned");
46642          _Static_assert (!__builtin_has_attribute (x, aligned (4)), "aligned (4)");
46643
46644     Due to a limitation the '__builtin_has_attribute' function returns
46645     'false' for the 'mode' attribute even if the type or variable
46646     referenced by the TYPE-OR-EXPRESSION argument was declared with
46647     one.  The function is also not supported with labels, and in C with
46648     enumerators.
46649
46650     Note that unlike the '__has_attribute' preprocessor operator which
46651     is suitable for use in '#if' preprocessing directives
46652     '__builtin_has_attribute' is an intrinsic function that is not
46653     recognized in such contexts.
46654
46655 -- Built-in Function: TYPE __builtin_speculation_safe_value (TYPE val,
46656          TYPE failval)
46657
46658     This built-in function can be used to help mitigate against unsafe
46659     speculative execution.  TYPE may be any integral type or any
46660     pointer type.
46661
46662       1. If the CPU is not speculatively executing the code, then VAL
46663          is returned.
46664       2. If the CPU is executing speculatively then either:
46665             * The function may cause execution to pause until it is
46666               known that the code is no-longer being executed
46667               speculatively (in which case VAL can be returned, as
46668               above); or
46669             * The function may use target-dependent speculation
46670               tracking state to cause FAILVAL to be returned when it is
46671               known that speculative execution has incorrectly
46672               predicted a conditional branch operation.
46673
46674     The second argument, FAILVAL, is optional and defaults to zero if
46675     omitted.
46676
46677     GCC defines the preprocessor macro
46678     '__HAVE_BUILTIN_SPECULATION_SAFE_VALUE' for targets that have been
46679     updated to support this builtin.
46680
46681     The built-in function can be used where a variable appears to be
46682     used in a safe way, but the CPU, due to speculative execution may
46683     temporarily ignore the bounds checks.  Consider, for example, the
46684     following function:
46685
46686          int array[500];
46687          int f (unsigned untrusted_index)
46688          {
46689            if (untrusted_index < 500)
46690              return array[untrusted_index];
46691            return 0;
46692          }
46693
46694     If the function is called repeatedly with 'untrusted_index' less
46695     than the limit of 500, then a branch predictor will learn that the
46696     block of code that returns a value stored in 'array' will be
46697     executed.  If the function is subsequently called with an
46698     out-of-range value it will still try to execute that block of code
46699     first until the CPU determines that the prediction was incorrect
46700     (the CPU will unwind any incorrect operations at that point).
46701     However, depending on how the result of the function is used, it
46702     might be possible to leave traces in the cache that can reveal what
46703     was stored at the out-of-bounds location.  The built-in function
46704     can be used to provide some protection against leaking data in this
46705     way by changing the code to:
46706
46707          int array[500];
46708          int f (unsigned untrusted_index)
46709          {
46710            if (untrusted_index < 500)
46711              return array[__builtin_speculation_safe_value (untrusted_index)];
46712            return 0;
46713          }
46714
46715     The built-in function will either cause execution to stall until
46716     the conditional branch has been fully resolved, or it may permit
46717     speculative execution to continue, but using 0 instead of
46718     'untrusted_value' if that exceeds the limit.
46719
46720     If accessing any memory location is potentially unsafe when
46721     speculative execution is incorrect, then the code can be rewritten
46722     as
46723
46724          int array[500];
46725          int f (unsigned untrusted_index)
46726          {
46727            if (untrusted_index < 500)
46728              return *__builtin_speculation_safe_value (&array[untrusted_index], NULL);
46729            return 0;
46730          }
46731
46732     which will cause a 'NULL' pointer to be used for the unsafe case.
46733
46734 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
46735
46736     You can use the built-in function '__builtin_types_compatible_p' to
46737     determine whether two types are the same.
46738
46739     This built-in function returns 1 if the unqualified versions of the
46740     types TYPE1 and TYPE2 (which are types, not expressions) are
46741     compatible, 0 otherwise.  The result of this built-in function can
46742     be used in integer constant expressions.
46743
46744     This built-in function ignores top level qualifiers (e.g., 'const',
46745     'volatile').  For example, 'int' is equivalent to 'const int'.
46746
46747     The type 'int[]' and 'int[5]' are compatible.  On the other hand,
46748     'int' and 'char *' are not compatible, even if the size of their
46749     types, on the particular architecture are the same.  Also, the
46750     amount of pointer indirection is taken into account when
46751     determining similarity.  Consequently, 'short *' is not similar to
46752     'short **'.  Furthermore, two types that are typedefed are
46753     considered compatible if their underlying types are compatible.
46754
46755     An 'enum' type is not considered to be compatible with another
46756     'enum' type even if both are compatible with the same integer type;
46757     this is what the C standard specifies.  For example, 'enum {foo,
46758     bar}' is not similar to 'enum {hot, dog}'.
46759
46760     You typically use this function in code whose execution varies
46761     depending on the arguments' types.  For example:
46762
46763          #define foo(x)                                                  \
46764            ({                                                           \
46765              typeof (x) tmp = (x);                                       \
46766              if (__builtin_types_compatible_p (typeof (x), long double)) \
46767                tmp = foo_long_double (tmp);                              \
46768              else if (__builtin_types_compatible_p (typeof (x), double)) \
46769                tmp = foo_double (tmp);                                   \
46770              else if (__builtin_types_compatible_p (typeof (x), float))  \
46771                tmp = foo_float (tmp);                                    \
46772              else                                                        \
46773                abort ();                                                 \
46774              tmp;                                                        \
46775            })
46776
46777     _Note:_ This construct is only available for C.
46778
46779 -- Built-in Function: TYPE __builtin_call_with_static_chain (CALL_EXP,
46780          POINTER_EXP)
46781
46782     The CALL_EXP expression must be a function call, and the
46783     POINTER_EXP expression must be a pointer.  The POINTER_EXP is
46784     passed to the function call in the target's static chain location.
46785     The result of builtin is the result of the function call.
46786
46787     _Note:_ This builtin is only available for C.  This builtin can be
46788     used to call Go closures from C.
46789
46790 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
46791          EXP2)
46792
46793     You can use the built-in function '__builtin_choose_expr' to
46794     evaluate code depending on the value of a constant expression.
46795     This built-in function returns EXP1 if CONST_EXP, which is an
46796     integer constant expression, is nonzero.  Otherwise it returns
46797     EXP2.
46798
46799     This built-in function is analogous to the '? :' operator in C,
46800     except that the expression returned has its type unaltered by
46801     promotion rules.  Also, the built-in function does not evaluate the
46802     expression that is not chosen.  For example, if CONST_EXP evaluates
46803     to 'true', EXP2 is not evaluated even if it has side effects.
46804
46805     This built-in function can return an lvalue if the chosen argument
46806     is an lvalue.
46807
46808     If EXP1 is returned, the return type is the same as EXP1's type.
46809     Similarly, if EXP2 is returned, its return type is the same as
46810     EXP2.
46811
46812     Example:
46813
46814          #define foo(x)                                                    \
46815            __builtin_choose_expr (                                         \
46816              __builtin_types_compatible_p (typeof (x), double),            \
46817              foo_double (x),                                               \
46818              __builtin_choose_expr (                                       \
46819                __builtin_types_compatible_p (typeof (x), float),           \
46820                foo_float (x),                                              \
46821                /* The void expression results in a compile-time error  \
46822                   when assigning the result to something.  */          \
46823                (void)0))
46824
46825     _Note:_ This construct is only available for C.  Furthermore, the
46826     unused expression (EXP1 or EXP2 depending on the value of
46827     CONST_EXP) may still generate syntax errors.  This may change in
46828     future revisions.
46829
46830 -- Built-in Function: TYPE __builtin_tgmath (FUNCTIONS, ARGUMENTS)
46831
46832     The built-in function '__builtin_tgmath', available only for C and
46833     Objective-C, calls a function determined according to the rules of
46834     '<tgmath.h>' macros.  It is intended to be used in implementations
46835     of that header, so that expansions of macros from that header only
46836     expand each of their arguments once, to avoid problems when calls
46837     to such macros are nested inside the arguments of other calls to
46838     such macros; in addition, it results in better diagnostics for
46839     invalid calls to '<tgmath.h>' macros than implementations using
46840     other GNU C language features.  For example, the 'pow' type-generic
46841     macro might be defined as:
46842
46843          #define pow(a, b) __builtin_tgmath (powf, pow, powl, \
46844                                              cpowf, cpow, cpowl, a, b)
46845
46846     The arguments to '__builtin_tgmath' are at least two pointers to
46847     functions, followed by the arguments to the type-generic macro
46848     (which will be passed as arguments to the selected function).  All
46849     the pointers to functions must be pointers to prototyped functions,
46850     none of which may have variable arguments, and all of which must
46851     have the same number of parameters; the number of parameters of the
46852     first function determines how many arguments to '__builtin_tgmath'
46853     are interpreted as function pointers, and how many as the arguments
46854     to the called function.
46855
46856     The types of the specified functions must all be different, but
46857     related to each other in the same way as a set of functions that
46858     may be selected between by a macro in '<tgmath.h>'.  This means
46859     that the functions are parameterized by a floating-point type T,
46860     different for each such function.  The function return types may
46861     all be the same type, or they may be T for each function, or they
46862     may be the real type corresponding to T for each function (if some
46863     of the types T are complex).  Likewise, for each parameter
46864     position, the type of the parameter in that position may always be
46865     the same type, or may be T for each function (this case must apply
46866     for at least one parameter position), or may be the real type
46867     corresponding to T for each function.
46868
46869     The standard rules for '<tgmath.h>' macros are used to find a
46870     common type U from the types of the arguments for parameters whose
46871     types vary between the functions; complex integer types (a GNU
46872     extension) are treated like '_Complex double' for this purpose (or
46873     '_Complex _Float64' if all the function return types are the same
46874     '_FloatN' or '_FloatNx' type).  If the function return types vary,
46875     or are all the same integer type, the function called is the one
46876     for which T is U, and it is an error if there is no such function.
46877     If the function return types are all the same floating-point type,
46878     the type-generic macro is taken to be one of those from TS 18661
46879     that rounds the result to a narrower type; if there is a function
46880     for which T is U, it is called, and otherwise the first function,
46881     if any, for which T has at least the range and precision of U is
46882     called, and it is an error if there is no such function.
46883
46884 -- Built-in Function: int __builtin_constant_p (EXP)
46885     You can use the built-in function '__builtin_constant_p' to
46886     determine if a value is known to be constant at compile time and
46887     hence that GCC can perform constant-folding on expressions
46888     involving that value.  The argument of the function is the value to
46889     test.  The function returns the integer 1 if the argument is known
46890     to be a compile-time constant and 0 if it is not known to be a
46891     compile-time constant.  A return of 0 does not indicate that the
46892     value is _not_ a constant, but merely that GCC cannot prove it is a
46893     constant with the specified value of the '-O' option.
46894
46895     You typically use this function in an embedded application where
46896     memory is a critical resource.  If you have some complex
46897     calculation, you may want it to be folded if it involves constants,
46898     but need to call a function if it does not.  For example:
46899
46900          #define Scale_Value(X)      \
46901            (__builtin_constant_p (X) \
46902            ? ((X) * SCALE + OFFSET) : Scale (X))
46903
46904     You may use this built-in function in either a macro or an inline
46905     function.  However, if you use it in an inlined function and pass
46906     an argument of the function as the argument to the built-in, GCC
46907     never returns 1 when you call the inline function with a string
46908     constant or compound literal (*note Compound Literals::) and does
46909     not return 1 when you pass a constant numeric value to the inline
46910     function unless you specify the '-O' option.
46911
46912     You may also use '__builtin_constant_p' in initializers for static
46913     data.  For instance, you can write
46914
46915          static const int table[] = {
46916             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
46917             /* ... */
46918          };
46919
46920     This is an acceptable initializer even if EXPRESSION is not a
46921     constant expression, including the case where
46922     '__builtin_constant_p' returns 1 because EXPRESSION can be folded
46923     to a constant but EXPRESSION contains operands that are not
46924     otherwise permitted in a static initializer (for example, '0 && foo
46925     ()').  GCC must be more conservative about evaluating the built-in
46926     in this case, because it has no opportunity to perform
46927     optimization.
46928
46929 -- Built-in Function: bool __builtin_is_constant_evaluated (void)
46930     The '__builtin_is_constant_evaluated' function is available only in
46931     C++.  The built-in is intended to be used by implementations of the
46932     'std::is_constant_evaluated' C++ function.  Programs should make
46933     use of the latter function rather than invoking the built-in
46934     directly.
46935
46936     The main use case of the built-in is to determine whether a
46937     'constexpr' function is being called in a 'constexpr' context.  A
46938     call to the function evaluates to a core constant expression with
46939     the value 'true' if and only if it occurs within the evaluation of
46940     an expression or conversion that is manifestly constant-evaluated
46941     as defined in the C++ standard.  Manifestly constant-evaluated
46942     contexts include constant-expressions, the conditions of 'constexpr
46943     if' statements, constraint-expressions, and initializers of
46944     variables usable in constant expressions.  For more details refer
46945     to the latest revision of the C++ standard.
46946
46947 -- Built-in Function: void __builtin_clear_padding (PTR)
46948     The built-in function '__builtin_clear_padding' function clears
46949     padding bits inside of the object representation of object pointed
46950     by PTR, which has to be a pointer.  The value representation of the
46951     object is not affected.  The type of the object is assumed to be
46952     the type the pointer points to.  Inside of a union, the only
46953     cleared bits are bits that are padding bits for all the union
46954     members.
46955
46956     This built-in-function is useful if the padding bits of an object
46957     might have intederminate values and the object representation needs
46958     to be bitwise compared to some other object, for example for atomic
46959     operations.
46960
46961     For C++, PTR argument type should be pointer to trivially-copyable
46962     type, unless the argument is address of a variable or parameter,
46963     because otherwise it isn't known if the type isn't just a base
46964     class whose padding bits are reused or laid out differently in a
46965     derived class.
46966
46967 -- Built-in Function: TYPE __builtin_bit_cast (TYPE, ARG)
46968     The '__builtin_bit_cast' function is available only in C++.  The
46969     built-in is intended to be used by implementations of the
46970     'std::bit_cast' C++ template function.  Programs should make use of
46971     the latter function rather than invoking the built-in directly.
46972
46973     This built-in function allows reinterpreting the bits of the ARG
46974     argument as if it had type TYPE.  TYPE and the type of the ARG
46975     argument need to be trivially copyable types with the same size.
46976     When manifestly constant-evaluated, it performs extra diagnostics
46977     required for 'std::bit_cast' and returns a constant expression if
46978     ARG is a constant expression.  For more details refer to the latest
46979     revision of the C++ standard.
46980
46981 -- Built-in Function: long __builtin_expect (long EXP, long C)
46982     You may use '__builtin_expect' to provide the compiler with branch
46983     prediction information.  In general, you should prefer to use
46984     actual profile feedback for this ('-fprofile-arcs'), as programmers
46985     are notoriously bad at predicting how their programs actually
46986     perform.  However, there are applications in which this data is
46987     hard to collect.
46988
46989     The return value is the value of EXP, which should be an integral
46990     expression.  The semantics of the built-in are that it is expected
46991     that EXP == C.  For example:
46992
46993          if (__builtin_expect (x, 0))
46994            foo ();
46995
46996     indicates that we do not expect to call 'foo', since we expect 'x'
46997     to be zero.  Since you are limited to integral expressions for EXP,
46998     you should use constructions such as
46999
47000          if (__builtin_expect (ptr != NULL, 1))
47001            foo (*ptr);
47002
47003     when testing pointer or floating-point values.
47004
47005     For the purposes of branch prediction optimizations, the
47006     probability that a '__builtin_expect' expression is 'true' is
47007     controlled by GCC's 'builtin-expect-probability' parameter, which
47008     defaults to 90%.
47009
47010     You can also use '__builtin_expect_with_probability' to explicitly
47011     assign a probability value to individual expressions.  If the
47012     built-in is used in a loop construct, the provided probability will
47013     influence the expected number of iterations made by loop
47014     optimizations.
47015
47016 -- Built-in Function: long __builtin_expect_with_probability
47017     (long EXP, long C, double PROBABILITY)
47018
47019     This function has the same semantics as '__builtin_expect', but the
47020     caller provides the expected probability that EXP == C.  The last
47021     argument, PROBABILITY, is a floating-point value in the range 0.0
47022     to 1.0, inclusive.  The PROBABILITY argument must be constant
47023     floating-point expression.
47024
47025 -- Built-in Function: void __builtin_trap (void)
47026     This function causes the program to exit abnormally.  GCC
47027     implements this function by using a target-dependent mechanism
47028     (such as intentionally executing an illegal instruction) or by
47029     calling 'abort'.  The mechanism used may vary from release to
47030     release so you should not rely on any particular implementation.
47031
47032 -- Built-in Function: void __builtin_unreachable (void)
47033     If control flow reaches the point of the '__builtin_unreachable',
47034     the program is undefined.  It is useful in situations where the
47035     compiler cannot deduce the unreachability of the code.
47036
47037     One such case is immediately following an 'asm' statement that
47038     either never terminates, or one that transfers control elsewhere
47039     and never returns.  In this example, without the
47040     '__builtin_unreachable', GCC issues a warning that control reaches
47041     the end of a non-void function.  It also generates code to return
47042     after the 'asm'.
47043
47044          int f (int c, int v)
47045          {
47046            if (c)
47047              {
47048                return v;
47049              }
47050            else
47051              {
47052                asm("jmp error_handler");
47053                __builtin_unreachable ();
47054              }
47055          }
47056
47057     Because the 'asm' statement unconditionally transfers control out
47058     of the function, control never reaches the end of the function
47059     body.  The '__builtin_unreachable' is in fact unreachable and
47060     communicates this fact to the compiler.
47061
47062     Another use for '__builtin_unreachable' is following a call a
47063     function that never returns but that is not declared
47064     '__attribute__((noreturn))', as in this example:
47065
47066          void function_that_never_returns (void);
47067
47068          int g (int c)
47069          {
47070            if (c)
47071              {
47072                return 1;
47073              }
47074            else
47075              {
47076                function_that_never_returns ();
47077                __builtin_unreachable ();
47078              }
47079          }
47080
47081 -- Built-in Function: TYPE __builtin_assoc_barrier (TYPE EXPR)
47082     This built-in inhibits re-association of the floating-point
47083     expression EXPR with expressions consuming the return value of the
47084     built-in.  The expression EXPR itself can be reordered, and the
47085     whole expression EXPR can be reordered with operands after the
47086     barrier.  The barrier is only relevant when '-fassociative-math' is
47087     active, since otherwise floating-point is not treated as
47088     associative.
47089
47090          float x0 = a + b - b;
47091          float x1 = __builtin_assoc_barrier(a + b) - b;
47092
47093     means that, with '-fassociative-math', 'x0' can be optimized to 'x0
47094     = a' but 'x1' cannot.
47095
47096 -- Built-in Function: void * __builtin_assume_aligned (const void *EXP,
47097          size_t ALIGN, ...)
47098     This function returns its first argument, and allows the compiler
47099     to assume that the returned pointer is at least ALIGN bytes
47100     aligned.  This built-in can have either two or three arguments, if
47101     it has three, the third argument should have integer type, and if
47102     it is nonzero means misalignment offset.  For example:
47103
47104          void *x = __builtin_assume_aligned (arg, 16);
47105
47106     means that the compiler can assume 'x', set to 'arg', is at least
47107     16-byte aligned, while:
47108
47109          void *x = __builtin_assume_aligned (arg, 32, 8);
47110
47111     means that the compiler can assume for 'x', set to 'arg', that
47112     '(char *) x - 8' is 32-byte aligned.
47113
47114 -- Built-in Function: int __builtin_LINE ()
47115     This function is the equivalent of the preprocessor '__LINE__'
47116     macro and returns a constant integer expression that evaluates to
47117     the line number of the invocation of the built-in.  When used as a
47118     C++ default argument for a function F, it returns the line number
47119     of the call to F.
47120
47121 -- Built-in Function: const char * __builtin_FUNCTION ()
47122     This function is the equivalent of the '__FUNCTION__' symbol and
47123     returns an address constant pointing to the name of the function
47124     from which the built-in was invoked, or the empty string if the
47125     invocation is not at function scope.  When used as a C++ default
47126     argument for a function F, it returns the name of F's caller or the
47127     empty string if the call was not made at function scope.
47128
47129 -- Built-in Function: const char * __builtin_FILE ()
47130     This function is the equivalent of the preprocessor '__FILE__'
47131     macro and returns an address constant pointing to the file name
47132     containing the invocation of the built-in, or the empty string if
47133     the invocation is not at function scope.  When used as a C++
47134     default argument for a function F, it returns the file name of the
47135     call to F or the empty string if the call was not made at function
47136     scope.
47137
47138     For example, in the following, each call to function 'foo' will
47139     print a line similar to '"file.c:123: foo: message"' with the name
47140     of the file and the line number of the 'printf' call, the name of
47141     the function 'foo', followed by the word 'message'.
47142
47143          const char*
47144          function (const char *func = __builtin_FUNCTION ())
47145          {
47146            return func;
47147          }
47148
47149          void foo (void)
47150          {
47151            printf ("%s:%i: %s: message\n", file (), line (), function ());
47152          }
47153
47154 -- Built-in Function: void __builtin___clear_cache (void *BEGIN, void
47155          *END)
47156     This function is used to flush the processor's instruction cache
47157     for the region of memory between BEGIN inclusive and END exclusive.
47158     Some targets require that the instruction cache be flushed, after
47159     modifying memory containing code, in order to obtain deterministic
47160     behavior.
47161
47162     If the target does not require instruction cache flushes,
47163     '__builtin___clear_cache' has no effect.  Otherwise either
47164     instructions are emitted in-line to clear the instruction cache or
47165     a call to the '__clear_cache' function in libgcc is made.
47166
47167 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
47168     This function is used to minimize cache-miss latency by moving data
47169     into a cache before it is accessed.  You can insert calls to
47170     '__builtin_prefetch' into code for which you know addresses of data
47171     in memory that is likely to be accessed soon.  If the target
47172     supports them, data prefetch instructions are generated.  If the
47173     prefetch is done early enough before the access then the data will
47174     be in the cache by the time it is accessed.
47175
47176     The value of ADDR is the address of the memory to prefetch.  There
47177     are two optional arguments, RW and LOCALITY.  The value of RW is a
47178     compile-time constant one or zero; one means that the prefetch is
47179     preparing for a write to the memory address and zero, the default,
47180     means that the prefetch is preparing for a read.  The value
47181     LOCALITY must be a compile-time constant integer between zero and
47182     three.  A value of zero means that the data has no temporal
47183     locality, so it need not be left in the cache after the access.  A
47184     value of three means that the data has a high degree of temporal
47185     locality and should be left in all levels of cache possible.
47186     Values of one and two mean, respectively, a low or moderate degree
47187     of temporal locality.  The default is three.
47188
47189          for (i = 0; i < n; i++)
47190            {
47191              a[i] = a[i] + b[i];
47192              __builtin_prefetch (&a[i+j], 1, 1);
47193              __builtin_prefetch (&b[i+j], 0, 1);
47194              /* ... */
47195            }
47196
47197     Data prefetch does not generate faults if ADDR is invalid, but the
47198     address expression itself must be valid.  For example, a prefetch
47199     of 'p->next' does not fault if 'p->next' is not a valid address,
47200     but evaluation faults if 'p' is not a valid address.
47201
47202     If the target does not support data prefetch, the address
47203     expression is evaluated if it includes side effects but no other
47204     code is generated and GCC does not issue a warning.
47205
47206 -- Built-in Function: size_t __builtin_object_size (const void * PTR,
47207          int TYPE)
47208     Returns the size of an object pointed to by PTR.  *Note Object Size
47209     Checking::, for a detailed description of the function.
47210
47211 -- Built-in Function: double __builtin_huge_val (void)
47212     Returns a positive infinity, if supported by the floating-point
47213     format, else 'DBL_MAX'.  This function is suitable for implementing
47214     the ISO C macro 'HUGE_VAL'.
47215
47216 -- Built-in Function: float __builtin_huge_valf (void)
47217     Similar to '__builtin_huge_val', except the return type is 'float'.
47218
47219 -- Built-in Function: long double __builtin_huge_vall (void)
47220     Similar to '__builtin_huge_val', except the return type is 'long
47221     double'.
47222
47223 -- Built-in Function: _FloatN __builtin_huge_valfN (void)
47224     Similar to '__builtin_huge_val', except the return type is
47225     '_FloatN'.
47226
47227 -- Built-in Function: _FloatNx __builtin_huge_valfNx (void)
47228     Similar to '__builtin_huge_val', except the return type is
47229     '_FloatNx'.
47230
47231 -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
47232          int, ...)
47233     This built-in implements the C99 fpclassify functionality.  The
47234     first five int arguments should be the target library's notion of
47235     the possible FP classes and are used for return values.  They must
47236     be constant values and they must appear in this order: 'FP_NAN',
47237     'FP_INFINITE', 'FP_NORMAL', 'FP_SUBNORMAL' and 'FP_ZERO'.  The
47238     ellipsis is for exactly one floating-point value to classify.  GCC
47239     treats the last argument as type-generic, which means it does not
47240     do default promotion from float to double.
47241
47242 -- Built-in Function: double __builtin_inf (void)
47243     Similar to '__builtin_huge_val', except a warning is generated if
47244     the target floating-point format does not support infinities.
47245
47246 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
47247     Similar to '__builtin_inf', except the return type is '_Decimal32'.
47248
47249 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
47250     Similar to '__builtin_inf', except the return type is '_Decimal64'.
47251
47252 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
47253     Similar to '__builtin_inf', except the return type is
47254     '_Decimal128'.
47255
47256 -- Built-in Function: float __builtin_inff (void)
47257     Similar to '__builtin_inf', except the return type is 'float'.
47258     This function is suitable for implementing the ISO C99 macro
47259     'INFINITY'.
47260
47261 -- Built-in Function: long double __builtin_infl (void)
47262     Similar to '__builtin_inf', except the return type is 'long
47263     double'.
47264
47265 -- Built-in Function: _FloatN __builtin_inffN (void)
47266     Similar to '__builtin_inf', except the return type is '_FloatN'.
47267
47268 -- Built-in Function: _FloatN __builtin_inffNx (void)
47269     Similar to '__builtin_inf', except the return type is '_FloatNx'.
47270
47271 -- Built-in Function: int __builtin_isinf_sign (...)
47272     Similar to 'isinf', except the return value is -1 for an argument
47273     of '-Inf' and 1 for an argument of '+Inf'.  Note while the
47274     parameter list is an ellipsis, this function only accepts exactly
47275     one floating-point argument.  GCC treats this parameter as
47276     type-generic, which means it does not do default promotion from
47277     float to double.
47278
47279 -- Built-in Function: double __builtin_nan (const char *str)
47280     This is an implementation of the ISO C99 function 'nan'.
47281
47282     Since ISO C99 defines this function in terms of 'strtod', which we
47283     do not implement, a description of the parsing is in order.  The
47284     string is parsed as by 'strtol'; that is, the base is recognized by
47285     leading '0' or '0x' prefixes.  The number parsed is placed in the
47286     significand such that the least significant bit of the number is at
47287     the least significant bit of the significand.  The number is
47288     truncated to fit the significand field provided.  The significand
47289     is forced to be a quiet NaN.
47290
47291     This function, if given a string literal all of which would have
47292     been consumed by 'strtol', is evaluated early enough that it is
47293     considered a compile-time constant.
47294
47295 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
47296     Similar to '__builtin_nan', except the return type is '_Decimal32'.
47297
47298 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
47299     Similar to '__builtin_nan', except the return type is '_Decimal64'.
47300
47301 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
47302     Similar to '__builtin_nan', except the return type is
47303     '_Decimal128'.
47304
47305 -- Built-in Function: float __builtin_nanf (const char *str)
47306     Similar to '__builtin_nan', except the return type is 'float'.
47307
47308 -- Built-in Function: long double __builtin_nanl (const char *str)
47309     Similar to '__builtin_nan', except the return type is 'long
47310     double'.
47311
47312 -- Built-in Function: _FloatN __builtin_nanfN (const char *str)
47313     Similar to '__builtin_nan', except the return type is '_FloatN'.
47314
47315 -- Built-in Function: _FloatNx __builtin_nanfNx (const char *str)
47316     Similar to '__builtin_nan', except the return type is '_FloatNx'.
47317
47318 -- Built-in Function: double __builtin_nans (const char *str)
47319     Similar to '__builtin_nan', except the significand is forced to be
47320     a signaling NaN.  The 'nans' function is proposed by WG14 N965.
47321
47322 -- Built-in Function: _Decimal32 __builtin_nansd32 (const char *str)
47323     Similar to '__builtin_nans', except the return type is
47324     '_Decimal32'.
47325
47326 -- Built-in Function: _Decimal64 __builtin_nansd64 (const char *str)
47327     Similar to '__builtin_nans', except the return type is
47328     '_Decimal64'.
47329
47330 -- Built-in Function: _Decimal128 __builtin_nansd128 (const char *str)
47331     Similar to '__builtin_nans', except the return type is
47332     '_Decimal128'.
47333
47334 -- Built-in Function: float __builtin_nansf (const char *str)
47335     Similar to '__builtin_nans', except the return type is 'float'.
47336
47337 -- Built-in Function: long double __builtin_nansl (const char *str)
47338     Similar to '__builtin_nans', except the return type is 'long
47339     double'.
47340
47341 -- Built-in Function: _FloatN __builtin_nansfN (const char *str)
47342     Similar to '__builtin_nans', except the return type is '_FloatN'.
47343
47344 -- Built-in Function: _FloatNx __builtin_nansfNx (const char *str)
47345     Similar to '__builtin_nans', except the return type is '_FloatNx'.
47346
47347 -- Built-in Function: int __builtin_ffs (int x)
47348     Returns one plus the index of the least significant 1-bit of X, or
47349     if X is zero, returns zero.
47350
47351 -- Built-in Function: int __builtin_clz (unsigned int x)
47352     Returns the number of leading 0-bits in X, starting at the most
47353     significant bit position.  If X is 0, the result is undefined.
47354
47355 -- Built-in Function: int __builtin_ctz (unsigned int x)
47356     Returns the number of trailing 0-bits in X, starting at the least
47357     significant bit position.  If X is 0, the result is undefined.
47358
47359 -- Built-in Function: int __builtin_clrsb (int x)
47360     Returns the number of leading redundant sign bits in X, i.e. the
47361     number of bits following the most significant bit that are
47362     identical to it.  There are no special cases for 0 or other values.
47363
47364 -- Built-in Function: int __builtin_popcount (unsigned int x)
47365     Returns the number of 1-bits in X.
47366
47367 -- Built-in Function: int __builtin_parity (unsigned int x)
47368     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
47369
47370 -- Built-in Function: int __builtin_ffsl (long)
47371     Similar to '__builtin_ffs', except the argument type is 'long'.
47372
47373 -- Built-in Function: int __builtin_clzl (unsigned long)
47374     Similar to '__builtin_clz', except the argument type is 'unsigned
47375     long'.
47376
47377 -- Built-in Function: int __builtin_ctzl (unsigned long)
47378     Similar to '__builtin_ctz', except the argument type is 'unsigned
47379     long'.
47380
47381 -- Built-in Function: int __builtin_clrsbl (long)
47382     Similar to '__builtin_clrsb', except the argument type is 'long'.
47383
47384 -- Built-in Function: int __builtin_popcountl (unsigned long)
47385     Similar to '__builtin_popcount', except the argument type is
47386     'unsigned long'.
47387
47388 -- Built-in Function: int __builtin_parityl (unsigned long)
47389     Similar to '__builtin_parity', except the argument type is
47390     'unsigned long'.
47391
47392 -- Built-in Function: int __builtin_ffsll (long long)
47393     Similar to '__builtin_ffs', except the argument type is 'long
47394     long'.
47395
47396 -- Built-in Function: int __builtin_clzll (unsigned long long)
47397     Similar to '__builtin_clz', except the argument type is 'unsigned
47398     long long'.
47399
47400 -- Built-in Function: int __builtin_ctzll (unsigned long long)
47401     Similar to '__builtin_ctz', except the argument type is 'unsigned
47402     long long'.
47403
47404 -- Built-in Function: int __builtin_clrsbll (long long)
47405     Similar to '__builtin_clrsb', except the argument type is 'long
47406     long'.
47407
47408 -- Built-in Function: int __builtin_popcountll (unsigned long long)
47409     Similar to '__builtin_popcount', except the argument type is
47410     'unsigned long long'.
47411
47412 -- Built-in Function: int __builtin_parityll (unsigned long long)
47413     Similar to '__builtin_parity', except the argument type is
47414     'unsigned long long'.
47415
47416 -- Built-in Function: double __builtin_powi (double, int)
47417     Returns the first argument raised to the power of the second.
47418     Unlike the 'pow' function no guarantees about precision and
47419     rounding are made.
47420
47421 -- Built-in Function: float __builtin_powif (float, int)
47422     Similar to '__builtin_powi', except the argument and return types
47423     are 'float'.
47424
47425 -- Built-in Function: long double __builtin_powil (long double, int)
47426     Similar to '__builtin_powi', except the argument and return types
47427     are 'long double'.
47428
47429 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
47430     Returns X with the order of the bytes reversed; for example,
47431     '0xaabb' becomes '0xbbaa'.  Byte here always means exactly 8 bits.
47432
47433 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
47434     Similar to '__builtin_bswap16', except the argument and return
47435     types are 32-bit.
47436
47437 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
47438     Similar to '__builtin_bswap32', except the argument and return
47439     types are 64-bit.
47440
47441 -- Built-in Function: uint128_t __builtin_bswap128 (uint128_t x)
47442     Similar to '__builtin_bswap64', except the argument and return
47443     types are 128-bit.  Only supported on targets when 128-bit types
47444     are supported.
47445
47446 -- Built-in Function: Pmode __builtin_extend_pointer (void * x)
47447     On targets where the user visible pointer size is smaller than the
47448     size of an actual hardware address this function returns the
47449     extended user pointer.  Targets where this is true included ILP32
47450     mode on x86_64 or Aarch64.  This function is mainly useful when
47451     writing inline assembly code.
47452
47453 -- Built-in Function: int __builtin_goacc_parlevel_id (int x)
47454     Returns the openacc gang, worker or vector id depending on whether
47455     X is 0, 1 or 2.
47456
47457 -- Built-in Function: int __builtin_goacc_parlevel_size (int x)
47458     Returns the openacc gang, worker or vector size depending on
47459     whether X is 0, 1 or 2.
47460
47461
47462File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
47463
474646.60 Built-in Functions Specific to Particular Target Machines
47465==============================================================
47466
47467On some target machines, GCC supports many built-in functions specific
47468to those machines.  Generally these generate calls to specific machine
47469instructions, but allow the compiler to schedule those calls.
47470
47471* Menu:
47472
47473* AArch64 Built-in Functions::
47474* Alpha Built-in Functions::
47475* Altera Nios II Built-in Functions::
47476* ARC Built-in Functions::
47477* ARC SIMD Built-in Functions::
47478* ARM iWMMXt Built-in Functions::
47479* ARM C Language Extensions (ACLE)::
47480* ARM Floating Point Status and Control Intrinsics::
47481* ARM ARMv8-M Security Extensions::
47482* AVR Built-in Functions::
47483* Blackfin Built-in Functions::
47484* BPF Built-in Functions::
47485* FR-V Built-in Functions::
47486* MIPS DSP Built-in Functions::
47487* MIPS Paired-Single Support::
47488* MIPS Loongson Built-in Functions::
47489* MIPS SIMD Architecture (MSA) Support::
47490* Other MIPS Built-in Functions::
47491* MSP430 Built-in Functions::
47492* NDS32 Built-in Functions::
47493* picoChip Built-in Functions::
47494* Basic PowerPC Built-in Functions::
47495* PowerPC AltiVec/VSX Built-in Functions::
47496* PowerPC Hardware Transactional Memory Built-in Functions::
47497* PowerPC Atomic Memory Operation Functions::
47498* PowerPC Matrix-Multiply Assist Built-in Functions::
47499* PRU Built-in Functions::
47500* RISC-V Built-in Functions::
47501* RX Built-in Functions::
47502* S/390 System z Built-in Functions::
47503* SH Built-in Functions::
47504* SPARC VIS Built-in Functions::
47505* TI C6X Built-in Functions::
47506* TILE-Gx Built-in Functions::
47507* TILEPro Built-in Functions::
47508* x86 Built-in Functions::
47509* x86 transactional memory intrinsics::
47510* x86 control-flow protection intrinsics::
47511
47512
47513File: gcc.info,  Node: AArch64 Built-in Functions,  Next: Alpha Built-in Functions,  Up: Target Builtins
47514
475156.60.1 AArch64 Built-in Functions
47516---------------------------------
47517
47518These built-in functions are available for the AArch64 family of
47519processors.
47520     unsigned int __builtin_aarch64_get_fpcr ();
47521     void __builtin_aarch64_set_fpcr (unsigned int);
47522     unsigned int __builtin_aarch64_get_fpsr ();
47523     void __builtin_aarch64_set_fpsr (unsigned int);
47524
47525     unsigned long long __builtin_aarch64_get_fpcr64 ();
47526     void __builtin_aarch64_set_fpcr64 (unsigned long long);
47527     unsigned long long __builtin_aarch64_get_fpsr64 ();
47528     void __builtin_aarch64_set_fpsr64 (unsigned long long);
47529
47530
47531File: gcc.info,  Node: Alpha Built-in Functions,  Next: Altera Nios II Built-in Functions,  Prev: AArch64 Built-in Functions,  Up: Target Builtins
47532
475336.60.2 Alpha Built-in Functions
47534-------------------------------
47535
47536These built-in functions are available for the Alpha family of
47537processors, depending on the command-line switches used.
47538
47539 The following built-in functions are always available.  They all
47540generate the machine instruction that is part of the name.
47541
47542     long __builtin_alpha_implver (void);
47543     long __builtin_alpha_rpcc (void);
47544     long __builtin_alpha_amask (long);
47545     long __builtin_alpha_cmpbge (long, long);
47546     long __builtin_alpha_extbl (long, long);
47547     long __builtin_alpha_extwl (long, long);
47548     long __builtin_alpha_extll (long, long);
47549     long __builtin_alpha_extql (long, long);
47550     long __builtin_alpha_extwh (long, long);
47551     long __builtin_alpha_extlh (long, long);
47552     long __builtin_alpha_extqh (long, long);
47553     long __builtin_alpha_insbl (long, long);
47554     long __builtin_alpha_inswl (long, long);
47555     long __builtin_alpha_insll (long, long);
47556     long __builtin_alpha_insql (long, long);
47557     long __builtin_alpha_inswh (long, long);
47558     long __builtin_alpha_inslh (long, long);
47559     long __builtin_alpha_insqh (long, long);
47560     long __builtin_alpha_mskbl (long, long);
47561     long __builtin_alpha_mskwl (long, long);
47562     long __builtin_alpha_mskll (long, long);
47563     long __builtin_alpha_mskql (long, long);
47564     long __builtin_alpha_mskwh (long, long);
47565     long __builtin_alpha_msklh (long, long);
47566     long __builtin_alpha_mskqh (long, long);
47567     long __builtin_alpha_umulh (long, long);
47568     long __builtin_alpha_zap (long, long);
47569     long __builtin_alpha_zapnot (long, long);
47570
47571 The following built-in functions are always with '-mmax' or '-mcpu=CPU'
47572where CPU is 'pca56' or later.  They all generate the machine
47573instruction that is part of the name.
47574
47575     long __builtin_alpha_pklb (long);
47576     long __builtin_alpha_pkwb (long);
47577     long __builtin_alpha_unpkbl (long);
47578     long __builtin_alpha_unpkbw (long);
47579     long __builtin_alpha_minub8 (long, long);
47580     long __builtin_alpha_minsb8 (long, long);
47581     long __builtin_alpha_minuw4 (long, long);
47582     long __builtin_alpha_minsw4 (long, long);
47583     long __builtin_alpha_maxub8 (long, long);
47584     long __builtin_alpha_maxsb8 (long, long);
47585     long __builtin_alpha_maxuw4 (long, long);
47586     long __builtin_alpha_maxsw4 (long, long);
47587     long __builtin_alpha_perr (long, long);
47588
47589 The following built-in functions are always with '-mcix' or '-mcpu=CPU'
47590where CPU is 'ev67' or later.  They all generate the machine instruction
47591that is part of the name.
47592
47593     long __builtin_alpha_cttz (long);
47594     long __builtin_alpha_ctlz (long);
47595     long __builtin_alpha_ctpop (long);
47596
47597 The following built-in functions are available on systems that use the
47598OSF/1 PALcode.  Normally they invoke the 'rduniq' and 'wruniq' PAL
47599calls, but when invoked with '-mtls-kernel', they invoke 'rdval' and
47600'wrval'.
47601
47602     void *__builtin_thread_pointer (void);
47603     void __builtin_set_thread_pointer (void *);
47604
47605
47606File: gcc.info,  Node: Altera Nios II Built-in Functions,  Next: ARC Built-in Functions,  Prev: Alpha Built-in Functions,  Up: Target Builtins
47607
476086.60.3 Altera Nios II Built-in Functions
47609----------------------------------------
47610
47611These built-in functions are available for the Altera Nios II family of
47612processors.
47613
47614 The following built-in functions are always available.  They all
47615generate the machine instruction that is part of the name.
47616
47617     int __builtin_ldbio (volatile const void *);
47618     int __builtin_ldbuio (volatile const void *);
47619     int __builtin_ldhio (volatile const void *);
47620     int __builtin_ldhuio (volatile const void *);
47621     int __builtin_ldwio (volatile const void *);
47622     void __builtin_stbio (volatile void *, int);
47623     void __builtin_sthio (volatile void *, int);
47624     void __builtin_stwio (volatile void *, int);
47625     void __builtin_sync (void);
47626     int __builtin_rdctl (int);
47627     int __builtin_rdprs (int, int);
47628     void __builtin_wrctl (int, int);
47629     void __builtin_flushd (volatile void *);
47630     void __builtin_flushda (volatile void *);
47631     int __builtin_wrpie (int);
47632     void __builtin_eni (int);
47633     int __builtin_ldex (volatile const void *);
47634     int __builtin_stex (volatile void *, int);
47635     int __builtin_ldsex (volatile const void *);
47636     int __builtin_stsex (volatile void *, int);
47637
47638 The following built-in functions are always available.  They all
47639generate a Nios II Custom Instruction.  The name of the function
47640represents the types that the function takes and returns.  The letter
47641before the 'n' is the return type or void if absent.  The 'n' represents
47642the first parameter to all the custom instructions, the custom
47643instruction number.  The two letters after the 'n' represent the up to
47644two parameters to the function.
47645
47646 The letters represent the following data types:
47647'<no letter>'
47648     'void' for return type and no parameter for parameter types.
47649
47650'i'
47651     'int' for return type and parameter type
47652
47653'f'
47654     'float' for return type and parameter type
47655
47656'p'
47657     'void *' for return type and parameter type
47658
47659 And the function names are:
47660     void __builtin_custom_n (void);
47661     void __builtin_custom_ni (int);
47662     void __builtin_custom_nf (float);
47663     void __builtin_custom_np (void *);
47664     void __builtin_custom_nii (int, int);
47665     void __builtin_custom_nif (int, float);
47666     void __builtin_custom_nip (int, void *);
47667     void __builtin_custom_nfi (float, int);
47668     void __builtin_custom_nff (float, float);
47669     void __builtin_custom_nfp (float, void *);
47670     void __builtin_custom_npi (void *, int);
47671     void __builtin_custom_npf (void *, float);
47672     void __builtin_custom_npp (void *, void *);
47673     int __builtin_custom_in (void);
47674     int __builtin_custom_ini (int);
47675     int __builtin_custom_inf (float);
47676     int __builtin_custom_inp (void *);
47677     int __builtin_custom_inii (int, int);
47678     int __builtin_custom_inif (int, float);
47679     int __builtin_custom_inip (int, void *);
47680     int __builtin_custom_infi (float, int);
47681     int __builtin_custom_inff (float, float);
47682     int __builtin_custom_infp (float, void *);
47683     int __builtin_custom_inpi (void *, int);
47684     int __builtin_custom_inpf (void *, float);
47685     int __builtin_custom_inpp (void *, void *);
47686     float __builtin_custom_fn (void);
47687     float __builtin_custom_fni (int);
47688     float __builtin_custom_fnf (float);
47689     float __builtin_custom_fnp (void *);
47690     float __builtin_custom_fnii (int, int);
47691     float __builtin_custom_fnif (int, float);
47692     float __builtin_custom_fnip (int, void *);
47693     float __builtin_custom_fnfi (float, int);
47694     float __builtin_custom_fnff (float, float);
47695     float __builtin_custom_fnfp (float, void *);
47696     float __builtin_custom_fnpi (void *, int);
47697     float __builtin_custom_fnpf (void *, float);
47698     float __builtin_custom_fnpp (void *, void *);
47699     void * __builtin_custom_pn (void);
47700     void * __builtin_custom_pni (int);
47701     void * __builtin_custom_pnf (float);
47702     void * __builtin_custom_pnp (void *);
47703     void * __builtin_custom_pnii (int, int);
47704     void * __builtin_custom_pnif (int, float);
47705     void * __builtin_custom_pnip (int, void *);
47706     void * __builtin_custom_pnfi (float, int);
47707     void * __builtin_custom_pnff (float, float);
47708     void * __builtin_custom_pnfp (float, void *);
47709     void * __builtin_custom_pnpi (void *, int);
47710     void * __builtin_custom_pnpf (void *, float);
47711     void * __builtin_custom_pnpp (void *, void *);
47712
47713
47714File: gcc.info,  Node: ARC Built-in Functions,  Next: ARC SIMD Built-in Functions,  Prev: Altera Nios II Built-in Functions,  Up: Target Builtins
47715
477166.60.4 ARC Built-in Functions
47717-----------------------------
47718
47719The following built-in functions are provided for ARC targets.  The
47720built-ins generate the corresponding assembly instructions.  In the
47721examples given below, the generated code often requires an operand or
47722result to be in a register.  Where necessary further code will be
47723generated to ensure this is true, but for brevity this is not described
47724in each case.
47725
47726 _Note:_ Using a built-in to generate an instruction not supported by a
47727target may cause problems.  At present the compiler is not guaranteed to
47728detect such misuse, and as a result an internal compiler error may be
47729generated.
47730
47731 -- Built-in Function: int __builtin_arc_aligned (void *VAL, int
47732          ALIGNVAL)
47733     Return 1 if VAL is known to have the byte alignment given by
47734     ALIGNVAL, otherwise return 0.  Note that this is different from
47735          __alignof__(*(char *)VAL) >= alignval
47736     because __alignof__ sees only the type of the dereference, whereas
47737     __builtin_arc_align uses alignment information from the pointer as
47738     well as from the pointed-to type.  The information available will
47739     depend on optimization level.
47740
47741 -- Built-in Function: void __builtin_arc_brk (void)
47742     Generates
47743          brk
47744
47745 -- Built-in Function: unsigned int __builtin_arc_core_read (unsigned
47746          int REGNO)
47747     The operand is the number of a register to be read.  Generates:
47748          mov  DEST, rREGNO
47749     where the value in DEST will be the result returned from the
47750     built-in.
47751
47752 -- Built-in Function: void __builtin_arc_core_write (unsigned int
47753          REGNO, unsigned int VAL)
47754     The first operand is the number of a register to be written, the
47755     second operand is a compile time constant to write into that
47756     register.  Generates:
47757          mov  rREGNO, VAL
47758
47759 -- Built-in Function: int __builtin_arc_divaw (int A, int B)
47760     Only available if either '-mcpu=ARC700' or '-meA' is set.
47761     Generates:
47762          divaw  DEST, A, B
47763     where the value in DEST will be the result returned from the
47764     built-in.
47765
47766 -- Built-in Function: void __builtin_arc_flag (unsigned int A)
47767     Generates
47768          flag  A
47769
47770 -- Built-in Function: unsigned int __builtin_arc_lr (unsigned int AUXR)
47771     The operand, AUXV, is the address of an auxiliary register and must
47772     be a compile time constant.  Generates:
47773          lr  DEST, [AUXR]
47774     Where the value in DEST will be the result returned from the
47775     built-in.
47776
47777 -- Built-in Function: void __builtin_arc_mul64 (int A, int B)
47778     Only available with '-mmul64'.  Generates:
47779          mul64  A, B
47780
47781 -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A,
47782          unsigned int B)
47783     Only available with '-mmul64'.  Generates:
47784          mulu64  A, B
47785
47786 -- Built-in Function: void __builtin_arc_nop (void)
47787     Generates:
47788          nop
47789
47790 -- Built-in Function: int __builtin_arc_norm (int SRC)
47791     Only valid if the 'norm' instruction is available through the
47792     '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
47793          norm  DEST, SRC
47794     Where the value in DEST will be the result returned from the
47795     built-in.
47796
47797 -- Built-in Function: short int __builtin_arc_normw (short int SRC)
47798     Only valid if the 'normw' instruction is available through the
47799     '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
47800          normw  DEST, SRC
47801     Where the value in DEST will be the result returned from the
47802     built-in.
47803
47804 -- Built-in Function: void __builtin_arc_rtie (void)
47805     Generates:
47806          rtie
47807
47808 -- Built-in Function: void __builtin_arc_sleep (int A
47809     Generates:
47810          sleep  A
47811
47812 -- Built-in Function: void __builtin_arc_sr (unsigned int VAL, unsigned
47813          int AUXR)
47814     The first argument, VAL, is a compile time constant to be written
47815     to the register, the second argument, AUXR, is the address of an
47816     auxiliary register.  Generates:
47817          sr  VAL, [AUXR]
47818
47819 -- Built-in Function: int __builtin_arc_swap (int SRC)
47820     Only valid with '-mswap'.  Generates:
47821          swap  DEST, SRC
47822     Where the value in DEST will be the result returned from the
47823     built-in.
47824
47825 -- Built-in Function: void __builtin_arc_swi (void)
47826     Generates:
47827          swi
47828
47829 -- Built-in Function: void __builtin_arc_sync (void)
47830     Only available with '-mcpu=ARC700'.  Generates:
47831          sync
47832
47833 -- Built-in Function: void __builtin_arc_trap_s (unsigned int C)
47834     Only available with '-mcpu=ARC700'.  Generates:
47835          trap_s  C
47836
47837 -- Built-in Function: void __builtin_arc_unimp_s (void)
47838     Only available with '-mcpu=ARC700'.  Generates:
47839          unimp_s
47840
47841 The instructions generated by the following builtins are not considered
47842as candidates for scheduling.  They are not moved around by the compiler
47843during scheduling, and thus can be expected to appear where they are put
47844in the C code:
47845     __builtin_arc_brk()
47846     __builtin_arc_core_read()
47847     __builtin_arc_core_write()
47848     __builtin_arc_flag()
47849     __builtin_arc_lr()
47850     __builtin_arc_sleep()
47851     __builtin_arc_sr()
47852     __builtin_arc_swi()
47853
47854
47855File: gcc.info,  Node: ARC SIMD Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Prev: ARC Built-in Functions,  Up: Target Builtins
47856
478576.60.5 ARC SIMD Built-in Functions
47858----------------------------------
47859
47860SIMD builtins provided by the compiler can be used to generate the
47861vector instructions.  This section describes the available builtins and
47862their usage in programs.  With the '-msimd' option, the compiler
47863provides 128-bit vector types, which can be specified using the
47864'vector_size' attribute.  The header file 'arc-simd.h' can be included
47865to use the following predefined types:
47866     typedef int __v4si   __attribute__((vector_size(16)));
47867     typedef short __v8hi __attribute__((vector_size(16)));
47868
47869 These types can be used to define 128-bit variables.  The built-in
47870functions listed in the following section can be used on these variables
47871to generate the vector operations.
47872
47873 For all builtins, '__builtin_arc_SOMEINSN', the header file
47874'arc-simd.h' also provides equivalent macros called '_SOMEINSN' that can
47875be used for programming ease and improved readability.  The following
47876macros for DMA control are also provided:
47877     #define _setup_dma_in_channel_reg _vdiwr
47878     #define _setup_dma_out_channel_reg _vdowr
47879
47880 The following is a complete list of all the SIMD built-ins provided for
47881ARC, grouped by calling signature.
47882
47883 The following take two '__v8hi' arguments and return a '__v8hi' result:
47884     __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi);
47885     __v8hi __builtin_arc_vaddw (__v8hi, __v8hi);
47886     __v8hi __builtin_arc_vand (__v8hi, __v8hi);
47887     __v8hi __builtin_arc_vandaw (__v8hi, __v8hi);
47888     __v8hi __builtin_arc_vavb (__v8hi, __v8hi);
47889     __v8hi __builtin_arc_vavrb (__v8hi, __v8hi);
47890     __v8hi __builtin_arc_vbic (__v8hi, __v8hi);
47891     __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi);
47892     __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi);
47893     __v8hi __builtin_arc_vdifw (__v8hi, __v8hi);
47894     __v8hi __builtin_arc_veqw (__v8hi, __v8hi);
47895     __v8hi __builtin_arc_vh264f (__v8hi, __v8hi);
47896     __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi);
47897     __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi);
47898     __v8hi __builtin_arc_vlew (__v8hi, __v8hi);
47899     __v8hi __builtin_arc_vltw (__v8hi, __v8hi);
47900     __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi);
47901     __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi);
47902     __v8hi __builtin_arc_vminaw (__v8hi, __v8hi);
47903     __v8hi __builtin_arc_vminw (__v8hi, __v8hi);
47904     __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi);
47905     __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi);
47906     __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi);
47907     __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi);
47908     __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi);
47909     __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi);
47910     __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi);
47911     __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi);
47912     __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi);
47913     __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi);
47914     __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi);
47915     __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi);
47916     __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi);
47917     __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi);
47918     __v8hi __builtin_arc_vmrb (__v8hi, __v8hi);
47919     __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi);
47920     __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi);
47921     __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi);
47922     __v8hi __builtin_arc_vmulw (__v8hi, __v8hi);
47923     __v8hi __builtin_arc_vnew (__v8hi, __v8hi);
47924     __v8hi __builtin_arc_vor (__v8hi, __v8hi);
47925     __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi);
47926     __v8hi __builtin_arc_vsubw (__v8hi, __v8hi);
47927     __v8hi __builtin_arc_vsummw (__v8hi, __v8hi);
47928     __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi);
47929     __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi);
47930     __v8hi __builtin_arc_vxor (__v8hi, __v8hi);
47931     __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi);
47932
47933 The following take one '__v8hi' and one 'int' argument and return a
47934'__v8hi' result:
47935
47936     __v8hi __builtin_arc_vbaddw (__v8hi, int);
47937     __v8hi __builtin_arc_vbmaxw (__v8hi, int);
47938     __v8hi __builtin_arc_vbminw (__v8hi, int);
47939     __v8hi __builtin_arc_vbmulaw (__v8hi, int);
47940     __v8hi __builtin_arc_vbmulfw (__v8hi, int);
47941     __v8hi __builtin_arc_vbmulw (__v8hi, int);
47942     __v8hi __builtin_arc_vbrsubw (__v8hi, int);
47943     __v8hi __builtin_arc_vbsubw (__v8hi, int);
47944
47945 The following take one '__v8hi' argument and one 'int' argument which
47946must be a 3-bit compile time constant indicating a register number
47947I0-I7.  They return a '__v8hi' result.
47948     __v8hi __builtin_arc_vasrw (__v8hi, const int);
47949     __v8hi __builtin_arc_vsr8 (__v8hi, const int);
47950     __v8hi __builtin_arc_vsr8aw (__v8hi, const int);
47951
47952 The following take one '__v8hi' argument and one 'int' argument which
47953must be a 6-bit compile time constant.  They return a '__v8hi' result.
47954     __v8hi __builtin_arc_vasrpwbi (__v8hi, const int);
47955     __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int);
47956     __v8hi __builtin_arc_vasrrwi (__v8hi, const int);
47957     __v8hi __builtin_arc_vasrsrwi (__v8hi, const int);
47958     __v8hi __builtin_arc_vasrwi (__v8hi, const int);
47959     __v8hi __builtin_arc_vsr8awi (__v8hi, const int);
47960     __v8hi __builtin_arc_vsr8i (__v8hi, const int);
47961
47962 The following take one '__v8hi' argument and one 'int' argument which
47963must be a 8-bit compile time constant.  They return a '__v8hi' result.
47964     __v8hi __builtin_arc_vd6tapf (__v8hi, const int);
47965     __v8hi __builtin_arc_vmvaw (__v8hi, const int);
47966     __v8hi __builtin_arc_vmvw (__v8hi, const int);
47967     __v8hi __builtin_arc_vmvzw (__v8hi, const int);
47968
47969 The following take two 'int' arguments, the second of which which must
47970be a 8-bit compile time constant.  They return a '__v8hi' result:
47971     __v8hi __builtin_arc_vmovaw (int, const int);
47972     __v8hi __builtin_arc_vmovw (int, const int);
47973     __v8hi __builtin_arc_vmovzw (int, const int);
47974
47975 The following take a single '__v8hi' argument and return a '__v8hi'
47976result:
47977     __v8hi __builtin_arc_vabsaw (__v8hi);
47978     __v8hi __builtin_arc_vabsw (__v8hi);
47979     __v8hi __builtin_arc_vaddsuw (__v8hi);
47980     __v8hi __builtin_arc_vexch1 (__v8hi);
47981     __v8hi __builtin_arc_vexch2 (__v8hi);
47982     __v8hi __builtin_arc_vexch4 (__v8hi);
47983     __v8hi __builtin_arc_vsignw (__v8hi);
47984     __v8hi __builtin_arc_vupbaw (__v8hi);
47985     __v8hi __builtin_arc_vupbw (__v8hi);
47986     __v8hi __builtin_arc_vupsbaw (__v8hi);
47987     __v8hi __builtin_arc_vupsbw (__v8hi);
47988
47989 The following take two 'int' arguments and return no result:
47990     void __builtin_arc_vdirun (int, int);
47991     void __builtin_arc_vdorun (int, int);
47992
47993 The following take two 'int' arguments and return no result.  The first
47994argument must a 3-bit compile time constant indicating one of the
47995DR0-DR7 DMA setup channels:
47996     void __builtin_arc_vdiwr (const int, int);
47997     void __builtin_arc_vdowr (const int, int);
47998
47999 The following take an 'int' argument and return no result:
48000     void __builtin_arc_vendrec (int);
48001     void __builtin_arc_vrec (int);
48002     void __builtin_arc_vrecrun (int);
48003     void __builtin_arc_vrun (int);
48004
48005 The following take a '__v8hi' argument and two 'int' arguments and
48006return a '__v8hi' result.  The second argument must be a 3-bit compile
48007time constants, indicating one the registers I0-I7, and the third
48008argument must be an 8-bit compile time constant.
48009
48010 _Note:_ Although the equivalent hardware instructions do not take an
48011SIMD register as an operand, these builtins overwrite the relevant bits
48012of the '__v8hi' register provided as the first argument with the value
48013loaded from the '[Ib, u8]' location in the SDM.
48014
48015     __v8hi __builtin_arc_vld32 (__v8hi, const int, const int);
48016     __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int);
48017     __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int);
48018     __v8hi __builtin_arc_vld64 (__v8hi, const int, const int);
48019
48020 The following take two 'int' arguments and return a '__v8hi' result.
48021The first argument must be a 3-bit compile time constants, indicating
48022one the registers I0-I7, and the second argument must be an 8-bit
48023compile time constant.
48024
48025     __v8hi __builtin_arc_vld128 (const int, const int);
48026     __v8hi __builtin_arc_vld64w (const int, const int);
48027
48028 The following take a '__v8hi' argument and two 'int' arguments and
48029return no result.  The second argument must be a 3-bit compile time
48030constants, indicating one the registers I0-I7, and the third argument
48031must be an 8-bit compile time constant.
48032
48033     void __builtin_arc_vst128 (__v8hi, const int, const int);
48034     void __builtin_arc_vst64 (__v8hi, const int, const int);
48035
48036 The following take a '__v8hi' argument and three 'int' arguments and
48037return no result.  The second argument must be a 3-bit compile-time
48038constant, identifying the 16-bit sub-register to be stored, the third
48039argument must be a 3-bit compile time constants, indicating one the
48040registers I0-I7, and the fourth argument must be an 8-bit compile time
48041constant.
48042
48043     void __builtin_arc_vst16_n (__v8hi, const int, const int, const int);
48044     void __builtin_arc_vst32_n (__v8hi, const int, const int, const int);
48045
48046
48047File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM C Language Extensions (ACLE),  Prev: ARC SIMD Built-in Functions,  Up: Target Builtins
48048
480496.60.6 ARM iWMMXt Built-in Functions
48050------------------------------------
48051
48052These built-in functions are available for the ARM family of processors
48053when the '-mcpu=iwmmxt' switch is used:
48054
48055     typedef int v2si __attribute__ ((vector_size (8)));
48056     typedef short v4hi __attribute__ ((vector_size (8)));
48057     typedef char v8qi __attribute__ ((vector_size (8)));
48058
48059     int __builtin_arm_getwcgr0 (void);
48060     void __builtin_arm_setwcgr0 (int);
48061     int __builtin_arm_getwcgr1 (void);
48062     void __builtin_arm_setwcgr1 (int);
48063     int __builtin_arm_getwcgr2 (void);
48064     void __builtin_arm_setwcgr2 (int);
48065     int __builtin_arm_getwcgr3 (void);
48066     void __builtin_arm_setwcgr3 (int);
48067     int __builtin_arm_textrmsb (v8qi, int);
48068     int __builtin_arm_textrmsh (v4hi, int);
48069     int __builtin_arm_textrmsw (v2si, int);
48070     int __builtin_arm_textrmub (v8qi, int);
48071     int __builtin_arm_textrmuh (v4hi, int);
48072     int __builtin_arm_textrmuw (v2si, int);
48073     v8qi __builtin_arm_tinsrb (v8qi, int, int);
48074     v4hi __builtin_arm_tinsrh (v4hi, int, int);
48075     v2si __builtin_arm_tinsrw (v2si, int, int);
48076     long long __builtin_arm_tmia (long long, int, int);
48077     long long __builtin_arm_tmiabb (long long, int, int);
48078     long long __builtin_arm_tmiabt (long long, int, int);
48079     long long __builtin_arm_tmiaph (long long, int, int);
48080     long long __builtin_arm_tmiatb (long long, int, int);
48081     long long __builtin_arm_tmiatt (long long, int, int);
48082     int __builtin_arm_tmovmskb (v8qi);
48083     int __builtin_arm_tmovmskh (v4hi);
48084     int __builtin_arm_tmovmskw (v2si);
48085     long long __builtin_arm_waccb (v8qi);
48086     long long __builtin_arm_wacch (v4hi);
48087     long long __builtin_arm_waccw (v2si);
48088     v8qi __builtin_arm_waddb (v8qi, v8qi);
48089     v8qi __builtin_arm_waddbss (v8qi, v8qi);
48090     v8qi __builtin_arm_waddbus (v8qi, v8qi);
48091     v4hi __builtin_arm_waddh (v4hi, v4hi);
48092     v4hi __builtin_arm_waddhss (v4hi, v4hi);
48093     v4hi __builtin_arm_waddhus (v4hi, v4hi);
48094     v2si __builtin_arm_waddw (v2si, v2si);
48095     v2si __builtin_arm_waddwss (v2si, v2si);
48096     v2si __builtin_arm_waddwus (v2si, v2si);
48097     v8qi __builtin_arm_walign (v8qi, v8qi, int);
48098     long long __builtin_arm_wand(long long, long long);
48099     long long __builtin_arm_wandn (long long, long long);
48100     v8qi __builtin_arm_wavg2b (v8qi, v8qi);
48101     v8qi __builtin_arm_wavg2br (v8qi, v8qi);
48102     v4hi __builtin_arm_wavg2h (v4hi, v4hi);
48103     v4hi __builtin_arm_wavg2hr (v4hi, v4hi);
48104     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi);
48105     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi);
48106     v2si __builtin_arm_wcmpeqw (v2si, v2si);
48107     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi);
48108     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi);
48109     v2si __builtin_arm_wcmpgtsw (v2si, v2si);
48110     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi);
48111     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi);
48112     v2si __builtin_arm_wcmpgtuw (v2si, v2si);
48113     long long __builtin_arm_wmacs (long long, v4hi, v4hi);
48114     long long __builtin_arm_wmacsz (v4hi, v4hi);
48115     long long __builtin_arm_wmacu (long long, v4hi, v4hi);
48116     long long __builtin_arm_wmacuz (v4hi, v4hi);
48117     v4hi __builtin_arm_wmadds (v4hi, v4hi);
48118     v4hi __builtin_arm_wmaddu (v4hi, v4hi);
48119     v8qi __builtin_arm_wmaxsb (v8qi, v8qi);
48120     v4hi __builtin_arm_wmaxsh (v4hi, v4hi);
48121     v2si __builtin_arm_wmaxsw (v2si, v2si);
48122     v8qi __builtin_arm_wmaxub (v8qi, v8qi);
48123     v4hi __builtin_arm_wmaxuh (v4hi, v4hi);
48124     v2si __builtin_arm_wmaxuw (v2si, v2si);
48125     v8qi __builtin_arm_wminsb (v8qi, v8qi);
48126     v4hi __builtin_arm_wminsh (v4hi, v4hi);
48127     v2si __builtin_arm_wminsw (v2si, v2si);
48128     v8qi __builtin_arm_wminub (v8qi, v8qi);
48129     v4hi __builtin_arm_wminuh (v4hi, v4hi);
48130     v2si __builtin_arm_wminuw (v2si, v2si);
48131     v4hi __builtin_arm_wmulsm (v4hi, v4hi);
48132     v4hi __builtin_arm_wmulul (v4hi, v4hi);
48133     v4hi __builtin_arm_wmulum (v4hi, v4hi);
48134     long long __builtin_arm_wor (long long, long long);
48135     v2si __builtin_arm_wpackdss (long long, long long);
48136     v2si __builtin_arm_wpackdus (long long, long long);
48137     v8qi __builtin_arm_wpackhss (v4hi, v4hi);
48138     v8qi __builtin_arm_wpackhus (v4hi, v4hi);
48139     v4hi __builtin_arm_wpackwss (v2si, v2si);
48140     v4hi __builtin_arm_wpackwus (v2si, v2si);
48141     long long __builtin_arm_wrord (long long, long long);
48142     long long __builtin_arm_wrordi (long long, int);
48143     v4hi __builtin_arm_wrorh (v4hi, long long);
48144     v4hi __builtin_arm_wrorhi (v4hi, int);
48145     v2si __builtin_arm_wrorw (v2si, long long);
48146     v2si __builtin_arm_wrorwi (v2si, int);
48147     v2si __builtin_arm_wsadb (v2si, v8qi, v8qi);
48148     v2si __builtin_arm_wsadbz (v8qi, v8qi);
48149     v2si __builtin_arm_wsadh (v2si, v4hi, v4hi);
48150     v2si __builtin_arm_wsadhz (v4hi, v4hi);
48151     v4hi __builtin_arm_wshufh (v4hi, int);
48152     long long __builtin_arm_wslld (long long, long long);
48153     long long __builtin_arm_wslldi (long long, int);
48154     v4hi __builtin_arm_wsllh (v4hi, long long);
48155     v4hi __builtin_arm_wsllhi (v4hi, int);
48156     v2si __builtin_arm_wsllw (v2si, long long);
48157     v2si __builtin_arm_wsllwi (v2si, int);
48158     long long __builtin_arm_wsrad (long long, long long);
48159     long long __builtin_arm_wsradi (long long, int);
48160     v4hi __builtin_arm_wsrah (v4hi, long long);
48161     v4hi __builtin_arm_wsrahi (v4hi, int);
48162     v2si __builtin_arm_wsraw (v2si, long long);
48163     v2si __builtin_arm_wsrawi (v2si, int);
48164     long long __builtin_arm_wsrld (long long, long long);
48165     long long __builtin_arm_wsrldi (long long, int);
48166     v4hi __builtin_arm_wsrlh (v4hi, long long);
48167     v4hi __builtin_arm_wsrlhi (v4hi, int);
48168     v2si __builtin_arm_wsrlw (v2si, long long);
48169     v2si __builtin_arm_wsrlwi (v2si, int);
48170     v8qi __builtin_arm_wsubb (v8qi, v8qi);
48171     v8qi __builtin_arm_wsubbss (v8qi, v8qi);
48172     v8qi __builtin_arm_wsubbus (v8qi, v8qi);
48173     v4hi __builtin_arm_wsubh (v4hi, v4hi);
48174     v4hi __builtin_arm_wsubhss (v4hi, v4hi);
48175     v4hi __builtin_arm_wsubhus (v4hi, v4hi);
48176     v2si __builtin_arm_wsubw (v2si, v2si);
48177     v2si __builtin_arm_wsubwss (v2si, v2si);
48178     v2si __builtin_arm_wsubwus (v2si, v2si);
48179     v4hi __builtin_arm_wunpckehsb (v8qi);
48180     v2si __builtin_arm_wunpckehsh (v4hi);
48181     long long __builtin_arm_wunpckehsw (v2si);
48182     v4hi __builtin_arm_wunpckehub (v8qi);
48183     v2si __builtin_arm_wunpckehuh (v4hi);
48184     long long __builtin_arm_wunpckehuw (v2si);
48185     v4hi __builtin_arm_wunpckelsb (v8qi);
48186     v2si __builtin_arm_wunpckelsh (v4hi);
48187     long long __builtin_arm_wunpckelsw (v2si);
48188     v4hi __builtin_arm_wunpckelub (v8qi);
48189     v2si __builtin_arm_wunpckeluh (v4hi);
48190     long long __builtin_arm_wunpckeluw (v2si);
48191     v8qi __builtin_arm_wunpckihb (v8qi, v8qi);
48192     v4hi __builtin_arm_wunpckihh (v4hi, v4hi);
48193     v2si __builtin_arm_wunpckihw (v2si, v2si);
48194     v8qi __builtin_arm_wunpckilb (v8qi, v8qi);
48195     v4hi __builtin_arm_wunpckilh (v4hi, v4hi);
48196     v2si __builtin_arm_wunpckilw (v2si, v2si);
48197     long long __builtin_arm_wxor (long long, long long);
48198     long long __builtin_arm_wzero ();
48199
48200
48201File: 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
48202
482036.60.7 ARM C Language Extensions (ACLE)
48204---------------------------------------
48205
48206GCC implements extensions for C as described in the ARM C Language
48207Extensions (ACLE) specification, which can be found at
48208<https://developer.arm.com/documentation/ihi0053/latest/>.
48209
48210 As a part of ACLE, GCC implements extensions for Advanced SIMD as
48211described in the ARM C Language Extensions Specification.  The complete
48212list of Advanced SIMD intrinsics can be found at
48213<https://developer.arm.com/documentation/ihi0073/latest/>.  The built-in
48214intrinsics for the Advanced SIMD extension are available when NEON is
48215enabled.
48216
48217 Currently, ARM and AArch64 back ends do not support ACLE 2.0 fully.
48218Both back ends support CRC32 intrinsics and the ARM back end supports
48219the Coprocessor intrinsics, all from 'arm_acle.h'.  The ARM back end's
4822016-bit floating-point Advanced SIMD intrinsics currently comply to ACLE
48221v1.1.  AArch64's back end does not have support for 16-bit floating
48222point Advanced SIMD intrinsics yet.
48223
48224 See *note ARM Options:: and *note AArch64 Options:: for more
48225information on the availability of extensions.
48226
48227
48228File: 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
48229
482306.60.8 ARM Floating Point Status and Control Intrinsics
48231-------------------------------------------------------
48232
48233These built-in functions are available for the ARM family of processors
48234with floating-point unit.
48235
48236     unsigned int __builtin_arm_get_fpscr ();
48237     void __builtin_arm_set_fpscr (unsigned int);
48238
48239
48240File: gcc.info,  Node: ARM ARMv8-M Security Extensions,  Next: AVR Built-in Functions,  Prev: ARM Floating Point Status and Control Intrinsics,  Up: Target Builtins
48241
482426.60.9 ARM ARMv8-M Security Extensions
48243--------------------------------------
48244
48245GCC implements the ARMv8-M Security Extensions as described in the
48246ARMv8-M Security Extensions: Requirements on Development Tools
48247Engineering Specification, which can be found at
48248<https://developer.arm.com/documentation/ecm0359818/latest/>.
48249
48250 As part of the Security Extensions GCC implements two new function
48251attributes: 'cmse_nonsecure_entry' and 'cmse_nonsecure_call'.
48252
48253 As part of the Security Extensions GCC implements the intrinsics below.
48254FPTR is used here to mean any function pointer type.
48255
48256     cmse_address_info_t cmse_TT (void *);
48257     cmse_address_info_t cmse_TT_fptr (FPTR);
48258     cmse_address_info_t cmse_TTT (void *);
48259     cmse_address_info_t cmse_TTT_fptr (FPTR);
48260     cmse_address_info_t cmse_TTA (void *);
48261     cmse_address_info_t cmse_TTA_fptr (FPTR);
48262     cmse_address_info_t cmse_TTAT (void *);
48263     cmse_address_info_t cmse_TTAT_fptr (FPTR);
48264     void * cmse_check_address_range (void *, size_t, int);
48265     typeof(p) cmse_nsfptr_create (FPTR p);
48266     intptr_t cmse_is_nsfptr (FPTR);
48267     int cmse_nonsecure_caller (void);
48268
48269
48270File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM ARMv8-M Security Extensions,  Up: Target Builtins
48271
482726.60.10 AVR Built-in Functions
48273------------------------------
48274
48275For each built-in function for AVR, there is an equally named, uppercase
48276built-in macro defined.  That way users can easily query if or if not a
48277specific built-in is implemented or not.  For example, if
48278'__builtin_avr_nop' is available the macro '__BUILTIN_AVR_NOP' is
48279defined to '1' and undefined otherwise.
48280
48281'void __builtin_avr_nop (void)'
48282'void __builtin_avr_sei (void)'
48283'void __builtin_avr_cli (void)'
48284'void __builtin_avr_sleep (void)'
48285'void __builtin_avr_wdr (void)'
48286'unsigned char __builtin_avr_swap (unsigned char)'
48287'unsigned int __builtin_avr_fmul (unsigned char, unsigned char)'
48288'int __builtin_avr_fmuls (char, char)'
48289'int __builtin_avr_fmulsu (char, unsigned char)'
48290     These built-in functions map to the respective machine instruction,
48291     i.e. 'nop', 'sei', 'cli', 'sleep', 'wdr', 'swap', 'fmul', 'fmuls'
48292     resp.  'fmulsu'.  The three 'fmul*' built-ins are implemented as
48293     library call if no hardware multiplier is available.
48294
48295'void __builtin_avr_delay_cycles (unsigned long ticks)'
48296     Delay execution for TICKS cycles.  Note that this built-in does not
48297     take into account the effect of interrupts that might increase
48298     delay time.  TICKS must be a compile-time integer constant; delays
48299     with a variable number of cycles are not supported.
48300
48301'char __builtin_avr_flash_segment (const __memx void*)'
48302     This built-in takes a byte address to the 24-bit *note address
48303     space: AVR Named Address Spaces. '__memx' and returns the number of
48304     the flash segment (the 64 KiB chunk) where the address points to.
48305     Counting starts at '0'.  If the address does not point to flash
48306     memory, return '-1'.
48307
48308'uint8_t __builtin_avr_insert_bits (uint32_t map, uint8_t bits, uint8_t val)'
48309     Insert bits from BITS into VAL and return the resulting value.  The
48310     nibbles of MAP determine how the insertion is performed: Let X be
48311     the N-th nibble of MAP
48312       1. If X is '0xf', then the N-th bit of VAL is returned unaltered.
48313
48314       2. If X is in the range 0...7, then the N-th result bit is set to
48315          the X-th bit of BITS
48316
48317       3. If X is in the range 8...'0xe', then the N-th result bit is
48318          undefined.
48319
48320     One typical use case for this built-in is adjusting input and
48321     output values to non-contiguous port layouts.  Some examples:
48322
48323          // same as val, bits is unused
48324          __builtin_avr_insert_bits (0xffffffff, bits, val);
48325
48326          // same as bits, val is unused
48327          __builtin_avr_insert_bits (0x76543210, bits, val);
48328
48329          // same as rotating bits by 4
48330          __builtin_avr_insert_bits (0x32107654, bits, 0);
48331
48332          // high nibble of result is the high nibble of val
48333          // low nibble of result is the low nibble of bits
48334          __builtin_avr_insert_bits (0xffff3210, bits, val);
48335
48336          // reverse the bit order of bits
48337          __builtin_avr_insert_bits (0x01234567, bits, 0);
48338
48339'void __builtin_avr_nops (unsigned count)'
48340     Insert COUNT 'NOP' instructions.  The number of instructions must
48341     be a compile-time integer constant.
48342
48343There are many more AVR-specific built-in functions that are used to
48344implement the ISO/IEC TR 18037 "Embedded C" fixed-point functions of
48345section 7.18a.6.  You don't need to use these built-ins directly.
48346Instead, use the declarations as supplied by the 'stdfix.h' header with
48347GNU-C99:
48348
48349     #include <stdfix.h>
48350
48351     // Re-interpret the bit representation of unsigned 16-bit
48352     // integer UVAL as Q-format 0.16 value.
48353     unsigned fract get_bits (uint_ur_t uval)
48354     {
48355         return urbits (uval);
48356     }
48357
48358
48359File: gcc.info,  Node: Blackfin Built-in Functions,  Next: BPF Built-in Functions,  Prev: AVR Built-in Functions,  Up: Target Builtins
48360
483616.60.11 Blackfin Built-in Functions
48362-----------------------------------
48363
48364Currently, there are two Blackfin-specific built-in functions.  These
48365are used for generating 'CSYNC' and 'SSYNC' machine insns without using
48366inline assembly; by using these built-in functions the compiler can
48367automatically add workarounds for hardware errata involving these
48368instructions.  These functions are named as follows:
48369
48370     void __builtin_bfin_csync (void);
48371     void __builtin_bfin_ssync (void);
48372
48373
48374File: gcc.info,  Node: BPF Built-in Functions,  Next: FR-V Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
48375
483766.60.12 BPF Built-in Functions
48377------------------------------
48378
48379The following built-in functions are available for eBPF targets.
48380
48381 -- Built-in Function: unsigned long long __builtin_bpf_load_byte
48382          (unsigned long long OFFSET)
48383     Load a byte from the 'struct sk_buff' packet data pointed by the
48384     register '%r6' and return it.
48385
48386 -- Built-in Function: unsigned long long __builtin_bpf_load_half
48387          (unsigned long long OFFSET)
48388     Load 16-bits from the 'struct sk_buff' packet data pointed by the
48389     register '%r6' and return it.
48390
48391 -- Built-in Function: unsigned long long __builtin_bpf_load_word
48392          (unsigned long long OFFSET)
48393     Load 32-bits from the 'struct sk_buff' packet data pointed by the
48394     register '%r6' and return it.
48395
48396 -- Built-in Function: void * __builtin_preserve_access_index (EXPR)
48397     BPF Compile Once-Run Everywhere (CO-RE) support.  Instruct GCC to
48398     generate CO-RE relocation records for any accesses to aggregate
48399     data structures (struct, union, array types) in EXPR.  This builtin
48400     is otherwise transparent, the return value is whatever EXPR
48401     evaluates to.  It is also overloaded: EXPR may be of any type (not
48402     necessarily a pointer), the return type is the same.  Has no effect
48403     if '-mco-re' is not in effect (either specified or implied).
48404
48405
48406File: gcc.info,  Node: FR-V Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: BPF Built-in Functions,  Up: Target Builtins
48407
484086.60.13 FR-V Built-in Functions
48409-------------------------------
48410
48411GCC provides many FR-V-specific built-in functions.  In general, these
48412functions are intended to be compatible with those described by 'FR-V
48413Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.  The
48414two exceptions are '__MDUNPACKH' and '__MBTOHE', the GCC forms of which
48415pass 128-bit values by pointer rather than by value.
48416
48417 Most of the functions are named after specific FR-V instructions.  Such
48418functions are said to be "directly mapped" and are summarized here in
48419tabular form.
48420
48421* Menu:
48422
48423* Argument Types::
48424* Directly-mapped Integer Functions::
48425* Directly-mapped Media Functions::
48426* Raw read/write Functions::
48427* Other Built-in Functions::
48428
48429
48430File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
48431
484326.60.13.1 Argument Types
48433........................
48434
48435The arguments to the built-in functions can be divided into three
48436groups: register numbers, compile-time constants and run-time values.
48437In order to make this classification clear at a glance, the arguments
48438and return values are given the following pseudo types:
48439
48440Pseudo type    Real C type            Constant?   Description
48441----------------------------------------------------------------------------
48442'uh'           'unsigned short'       No          an unsigned halfword
48443'uw1'          'unsigned int'         No          an unsigned word
48444'sw1'          'int'                  No          a signed word
48445'uw2'          'unsigned long long'   No          an unsigned doubleword
48446'sw2'          'long long'            No          a signed doubleword
48447'const'        'int'                  Yes         an integer constant
48448'acc'          'int'                  Yes         an ACC register number
48449'iacc'         'int'                  Yes         an IACC register number
48450
48451 These pseudo types are not defined by GCC, they are simply a notational
48452convenience used in this manual.
48453
48454 Arguments of type 'uh', 'uw1', 'sw1', 'uw2' and 'sw2' are evaluated at
48455run time.  They correspond to register operands in the underlying FR-V
48456instructions.
48457
48458 'const' arguments represent immediate operands in the underlying FR-V
48459instructions.  They must be compile-time constants.
48460
48461 'acc' arguments are evaluated at compile time and specify the number of
48462an accumulator register.  For example, an 'acc' argument of 2 selects
48463the ACC2 register.
48464
48465 'iacc' arguments are similar to 'acc' arguments but specify the number
48466of an IACC register.  See *note Other Built-in Functions:: for more
48467details.
48468
48469
48470File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
48471
484726.60.13.2 Directly-Mapped Integer Functions
48473...........................................
48474
48475The functions listed below map directly to FR-V I-type instructions.
48476
48477Function prototype               Example usage           Assembly output
48478---------------------------------------------------------------------------
48479'sw1 __ADDSS (sw1, sw1)'         'C = __ADDSS (A, B)'    'ADDSS A,B,C'
48480'sw1 __SCAN (sw1, sw1)'          'C = __SCAN (A, B)'     'SCAN A,B,C'
48481'sw1 __SCUTSS (sw1)'             'B = __SCUTSS (A)'      'SCUTSS A,B'
48482'sw1 __SLASS (sw1, sw1)'         'C = __SLASS (A, B)'    'SLASS A,B,C'
48483'void __SMASS (sw1, sw1)'        '__SMASS (A, B)'        'SMASS A,B'
48484'void __SMSSS (sw1, sw1)'        '__SMSSS (A, B)'        'SMSSS A,B'
48485'void __SMU (sw1, sw1)'          '__SMU (A, B)'          'SMU A,B'
48486'sw2 __SMUL (sw1, sw1)'          'C = __SMUL (A, B)'     'SMUL A,B,C'
48487'sw1 __SUBSS (sw1, sw1)'         'C = __SUBSS (A, B)'    'SUBSS A,B,C'
48488'uw2 __UMUL (uw1, uw1)'          'C = __UMUL (A, B)'     'UMUL A,B,C'
48489
48490
48491File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
48492
484936.60.13.3 Directly-Mapped Media Functions
48494.........................................
48495
48496The functions listed below map directly to FR-V M-type instructions.
48497
48498Function prototype               Example usage           Assembly output
48499---------------------------------------------------------------------------
48500'uw1 __MABSHS (sw1)'             'B = __MABSHS (A)'      'MABSHS A,B'
48501'void __MADDACCS (acc, acc)'     '__MADDACCS (B, A)'     'MADDACCS A,B'
48502'sw1 __MADDHSS (sw1, sw1)'       'C = __MADDHSS (A,      'MADDHSS A,B,C'
48503                                 B)'
48504'uw1 __MADDHUS (uw1, uw1)'       'C = __MADDHUS (A,      'MADDHUS A,B,C'
48505                                 B)'
48506'uw1 __MAND (uw1, uw1)'          'C = __MAND (A, B)'     'MAND A,B,C'
48507'void __MASACCS (acc, acc)'      '__MASACCS (B, A)'      'MASACCS A,B'
48508'uw1 __MAVEH (uw1, uw1)'         'C = __MAVEH (A, B)'    'MAVEH A,B,C'
48509'uw2 __MBTOH (uw1)'              'B = __MBTOH (A)'       'MBTOH A,B'
48510'void __MBTOHE (uw1 *, uw1)'     '__MBTOHE (&B, A)'      'MBTOHE A,B'
48511'void __MCLRACC (acc)'           '__MCLRACC (A)'         'MCLRACC A'
48512'void __MCLRACCA (void)'         '__MCLRACCA ()'         'MCLRACCA'
48513'uw1 __Mcop1 (uw1, uw1)'         'C = __Mcop1 (A, B)'    'Mcop1 A,B,C'
48514'uw1 __Mcop2 (uw1, uw1)'         'C = __Mcop2 (A, B)'    'Mcop2 A,B,C'
48515'uw1 __MCPLHI (uw2, const)'      'C = __MCPLHI (A, B)'   'MCPLHI A,#B,C'
48516'uw1 __MCPLI (uw2, const)'       'C = __MCPLI (A, B)'    'MCPLI A,#B,C'
48517'void __MCPXIS (acc, sw1,        '__MCPXIS (C, A, B)'    'MCPXIS A,B,C'
48518sw1)'
48519'void __MCPXIU (acc, uw1,        '__MCPXIU (C, A, B)'    'MCPXIU A,B,C'
48520uw1)'
48521'void __MCPXRS (acc, sw1,        '__MCPXRS (C, A, B)'    'MCPXRS A,B,C'
48522sw1)'
48523'void __MCPXRU (acc, uw1,        '__MCPXRU (C, A, B)'    'MCPXRU A,B,C'
48524uw1)'
48525'uw1 __MCUT (acc, uw1)'          'C = __MCUT (A, B)'     'MCUT A,B,C'
48526'uw1 __MCUTSS (acc, sw1)'        'C = __MCUTSS (A, B)'   'MCUTSS A,B,C'
48527'void __MDADDACCS (acc, acc)'    '__MDADDACCS (B, A)'    'MDADDACCS A,B'
48528'void __MDASACCS (acc, acc)'     '__MDASACCS (B, A)'     'MDASACCS A,B'
48529'uw2 __MDCUTSSI (acc, const)'    'C = __MDCUTSSI (A,     'MDCUTSSI
48530                                 B)'                     A,#B,C'
48531'uw2 __MDPACKH (uw2, uw2)'       'C = __MDPACKH (A,      'MDPACKH A,B,C'
48532                                 B)'
48533'uw2 __MDROTLI (uw2, const)'     'C = __MDROTLI (A,      'MDROTLI
48534                                 B)'                     A,#B,C'
48535'void __MDSUBACCS (acc, acc)'    '__MDSUBACCS (B, A)'    'MDSUBACCS A,B'
48536'void __MDUNPACKH (uw1 *,        '__MDUNPACKH (&B, A)'   'MDUNPACKH A,B'
48537uw2)'
48538'uw2 __MEXPDHD (uw1, const)'     'C = __MEXPDHD (A,      'MEXPDHD
48539                                 B)'                     A,#B,C'
48540'uw1 __MEXPDHW (uw1, const)'     'C = __MEXPDHW (A,      'MEXPDHW
48541                                 B)'                     A,#B,C'
48542'uw1 __MHDSETH (uw1, const)'     'C = __MHDSETH (A,      'MHDSETH
48543                                 B)'                     A,#B,C'
48544'sw1 __MHDSETS (const)'          'B = __MHDSETS (A)'     'MHDSETS #A,B'
48545'uw1 __MHSETHIH (uw1, const)'    'B = __MHSETHIH (B,     'MHSETHIH #A,B'
48546                                 A)'
48547'sw1 __MHSETHIS (sw1, const)'    'B = __MHSETHIS (B,     'MHSETHIS #A,B'
48548                                 A)'
48549'uw1 __MHSETLOH (uw1, const)'    'B = __MHSETLOH (B,     'MHSETLOH #A,B'
48550                                 A)'
48551'sw1 __MHSETLOS (sw1, const)'    'B = __MHSETLOS (B,     'MHSETLOS #A,B'
48552                                 A)'
48553'uw1 __MHTOB (uw2)'              'B = __MHTOB (A)'       'MHTOB A,B'
48554'void __MMACHS (acc, sw1,        '__MMACHS (C, A, B)'    'MMACHS A,B,C'
48555sw1)'
48556'void __MMACHU (acc, uw1,        '__MMACHU (C, A, B)'    'MMACHU A,B,C'
48557uw1)'
48558'void __MMRDHS (acc, sw1,        '__MMRDHS (C, A, B)'    'MMRDHS A,B,C'
48559sw1)'
48560'void __MMRDHU (acc, uw1,        '__MMRDHU (C, A, B)'    'MMRDHU A,B,C'
48561uw1)'
48562'void __MMULHS (acc, sw1,        '__MMULHS (C, A, B)'    'MMULHS A,B,C'
48563sw1)'
48564'void __MMULHU (acc, uw1,        '__MMULHU (C, A, B)'    'MMULHU A,B,C'
48565uw1)'
48566'void __MMULXHS (acc, sw1,       '__MMULXHS (C, A, B)'   'MMULXHS A,B,C'
48567sw1)'
48568'void __MMULXHU (acc, uw1,       '__MMULXHU (C, A, B)'   'MMULXHU A,B,C'
48569uw1)'
48570'uw1 __MNOT (uw1)'               'B = __MNOT (A)'        'MNOT A,B'
48571'uw1 __MOR (uw1, uw1)'           'C = __MOR (A, B)'      'MOR A,B,C'
48572'uw1 __MPACKH (uh, uh)'          'C = __MPACKH (A, B)'   'MPACKH A,B,C'
48573'sw2 __MQADDHSS (sw2, sw2)'      'C = __MQADDHSS (A,     'MQADDHSS
48574                                 B)'                     A,B,C'
48575'uw2 __MQADDHUS (uw2, uw2)'      'C = __MQADDHUS (A,     'MQADDHUS
48576                                 B)'                     A,B,C'
48577'void __MQCPXIS (acc, sw2,       '__MQCPXIS (C, A, B)'   'MQCPXIS A,B,C'
48578sw2)'
48579'void __MQCPXIU (acc, uw2,       '__MQCPXIU (C, A, B)'   'MQCPXIU A,B,C'
48580uw2)'
48581'void __MQCPXRS (acc, sw2,       '__MQCPXRS (C, A, B)'   'MQCPXRS A,B,C'
48582sw2)'
48583'void __MQCPXRU (acc, uw2,       '__MQCPXRU (C, A, B)'   'MQCPXRU A,B,C'
48584uw2)'
48585'sw2 __MQLCLRHS (sw2, sw2)'      'C = __MQLCLRHS (A,     'MQLCLRHS
48586                                 B)'                     A,B,C'
48587'sw2 __MQLMTHS (sw2, sw2)'       'C = __MQLMTHS (A,      'MQLMTHS A,B,C'
48588                                 B)'
48589'void __MQMACHS (acc, sw2,       '__MQMACHS (C, A, B)'   'MQMACHS A,B,C'
48590sw2)'
48591'void __MQMACHU (acc, uw2,       '__MQMACHU (C, A, B)'   'MQMACHU A,B,C'
48592uw2)'
48593'void __MQMACXHS (acc, sw2,      '__MQMACXHS (C, A,      'MQMACXHS
48594sw2)'                            B)'                     A,B,C'
48595'void __MQMULHS (acc, sw2,       '__MQMULHS (C, A, B)'   'MQMULHS A,B,C'
48596sw2)'
48597'void __MQMULHU (acc, uw2,       '__MQMULHU (C, A, B)'   'MQMULHU A,B,C'
48598uw2)'
48599'void __MQMULXHS (acc, sw2,      '__MQMULXHS (C, A,      'MQMULXHS
48600sw2)'                            B)'                     A,B,C'
48601'void __MQMULXHU (acc, uw2,      '__MQMULXHU (C, A,      'MQMULXHU
48602uw2)'                            B)'                     A,B,C'
48603'sw2 __MQSATHS (sw2, sw2)'       'C = __MQSATHS (A,      'MQSATHS A,B,C'
48604                                 B)'
48605'uw2 __MQSLLHI (uw2, int)'       'C = __MQSLLHI (A,      'MQSLLHI A,B,C'
48606                                 B)'
48607'sw2 __MQSRAHI (sw2, int)'       'C = __MQSRAHI (A,      'MQSRAHI A,B,C'
48608                                 B)'
48609'sw2 __MQSUBHSS (sw2, sw2)'      'C = __MQSUBHSS (A,     'MQSUBHSS
48610                                 B)'                     A,B,C'
48611'uw2 __MQSUBHUS (uw2, uw2)'      'C = __MQSUBHUS (A,     'MQSUBHUS
48612                                 B)'                     A,B,C'
48613'void __MQXMACHS (acc, sw2,      '__MQXMACHS (C, A,      'MQXMACHS
48614sw2)'                            B)'                     A,B,C'
48615'void __MQXMACXHS (acc, sw2,     '__MQXMACXHS (C, A,     'MQXMACXHS
48616sw2)'                            B)'                     A,B,C'
48617'uw1 __MRDACC (acc)'             'B = __MRDACC (A)'      'MRDACC A,B'
48618'uw1 __MRDACCG (acc)'            'B = __MRDACCG (A)'     'MRDACCG A,B'
48619'uw1 __MROTLI (uw1, const)'      'C = __MROTLI (A, B)'   'MROTLI A,#B,C'
48620'uw1 __MROTRI (uw1, const)'      'C = __MROTRI (A, B)'   'MROTRI A,#B,C'
48621'sw1 __MSATHS (sw1, sw1)'        'C = __MSATHS (A, B)'   'MSATHS A,B,C'
48622'uw1 __MSATHU (uw1, uw1)'        'C = __MSATHU (A, B)'   'MSATHU A,B,C'
48623'uw1 __MSLLHI (uw1, const)'      'C = __MSLLHI (A, B)'   'MSLLHI A,#B,C'
48624'sw1 __MSRAHI (sw1, const)'      'C = __MSRAHI (A, B)'   'MSRAHI A,#B,C'
48625'uw1 __MSRLHI (uw1, const)'      'C = __MSRLHI (A, B)'   'MSRLHI A,#B,C'
48626'void __MSUBACCS (acc, acc)'     '__MSUBACCS (B, A)'     'MSUBACCS A,B'
48627'sw1 __MSUBHSS (sw1, sw1)'       'C = __MSUBHSS (A,      'MSUBHSS A,B,C'
48628                                 B)'
48629'uw1 __MSUBHUS (uw1, uw1)'       'C = __MSUBHUS (A,      'MSUBHUS A,B,C'
48630                                 B)'
48631'void __MTRAP (void)'            '__MTRAP ()'            'MTRAP'
48632'uw2 __MUNPACKH (uw1)'           'B = __MUNPACKH (A)'    'MUNPACKH A,B'
48633'uw1 __MWCUT (uw2, uw1)'         'C = __MWCUT (A, B)'    'MWCUT A,B,C'
48634'void __MWTACC (acc, uw1)'       '__MWTACC (B, A)'       'MWTACC A,B'
48635'void __MWTACCG (acc, uw1)'      '__MWTACCG (B, A)'      'MWTACCG A,B'
48636'uw1 __MXOR (uw1, uw1)'          'C = __MXOR (A, B)'     'MXOR A,B,C'
48637
48638
48639File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
48640
486416.60.13.4 Raw Read/Write Functions
48642..................................
48643
48644This sections describes built-in functions related to read and write
48645instructions to access memory.  These functions generate 'membar'
48646instructions to flush the I/O load and stores where appropriate, as
48647described in Fujitsu's manual described above.
48648
48649'unsigned char __builtin_read8 (void *DATA)'
48650'unsigned short __builtin_read16 (void *DATA)'
48651'unsigned long __builtin_read32 (void *DATA)'
48652'unsigned long long __builtin_read64 (void *DATA)'
48653
48654'void __builtin_write8 (void *DATA, unsigned char DATUM)'
48655'void __builtin_write16 (void *DATA, unsigned short DATUM)'
48656'void __builtin_write32 (void *DATA, unsigned long DATUM)'
48657'void __builtin_write64 (void *DATA, unsigned long long DATUM)'
48658
48659
48660File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
48661
486626.60.13.5 Other Built-in Functions
48663..................................
48664
48665This section describes built-in functions that are not named after a
48666specific FR-V instruction.
48667
48668'sw2 __IACCreadll (iacc REG)'
48669     Return the full 64-bit value of IACC0.  The REG argument is
48670     reserved for future expansion and must be 0.
48671
48672'sw1 __IACCreadl (iacc REG)'
48673     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
48674     Other values of REG are rejected as invalid.
48675
48676'void __IACCsetll (iacc REG, sw2 X)'
48677     Set the full 64-bit value of IACC0 to X.  The REG argument is
48678     reserved for future expansion and must be 0.
48679
48680'void __IACCsetl (iacc REG, sw1 X)'
48681     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
48682     values of REG are rejected as invalid.
48683
48684'void __data_prefetch0 (const void *X)'
48685     Use the 'dcpl' instruction to load the contents of address X into
48686     the data cache.
48687
48688'void __data_prefetch (const void *X)'
48689     Use the 'nldub' instruction to load the contents of address X into
48690     the data cache.  The instruction is issued in slot I1.
48691
48692
48693File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: FR-V Built-in Functions,  Up: Target Builtins
48694
486956.60.14 MIPS DSP Built-in Functions
48696-----------------------------------
48697
48698The MIPS DSP Application-Specific Extension (ASE) includes new
48699instructions that are designed to improve the performance of DSP and
48700media applications.  It provides instructions that operate on packed
487018-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
48702
48703 GCC supports MIPS DSP operations using both the generic vector
48704extensions (*note Vector Extensions::) and a collection of MIPS-specific
48705built-in functions.  Both kinds of support are enabled by the '-mdsp'
48706command-line option.
48707
48708 Revision 2 of the ASE was introduced in the second half of 2006.  This
48709revision adds extra instructions to the original ASE, but is otherwise
48710backwards-compatible with it.  You can select revision 2 using the
48711command-line option '-mdspr2'; this option implies '-mdsp'.
48712
48713 The SCOUNT and POS bits of the DSP control register are global.  The
48714WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and POS
48715bits.  During optimization, the compiler does not delete these
48716instructions and it does not delete calls to functions containing these
48717instructions.
48718
48719 At present, GCC only provides support for operations on 32-bit vectors.
48720The vector type associated with 8-bit integer data is usually called
48721'v4i8', the vector type associated with Q7 is usually called 'v4q7', the
48722vector type associated with 16-bit integer data is usually called
48723'v2i16', and the vector type associated with Q15 is usually called
48724'v2q15'.  They can be defined in C as follows:
48725
48726     typedef signed char v4i8 __attribute__ ((vector_size(4)));
48727     typedef signed char v4q7 __attribute__ ((vector_size(4)));
48728     typedef short v2i16 __attribute__ ((vector_size(4)));
48729     typedef short v2q15 __attribute__ ((vector_size(4)));
48730
48731 'v4i8', 'v4q7', 'v2i16' and 'v2q15' values are initialized in the same
48732way as aggregates.  For example:
48733
48734     v4i8 a = {1, 2, 3, 4};
48735     v4i8 b;
48736     b = (v4i8) {5, 6, 7, 8};
48737
48738     v2q15 c = {0x0fcb, 0x3a75};
48739     v2q15 d;
48740     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
48741
48742 _Note:_ The CPU's endianness determines the order in which values are
48743packed.  On little-endian targets, the first value is the least
48744significant and the last value is the most significant.  The opposite
48745order applies to big-endian targets.  For example, the code above sets
48746the lowest byte of 'a' to '1' on little-endian targets and '4' on
48747big-endian targets.
48748
48749 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
48750representation.  As shown in this example, the integer representation of
48751a Q7 value can be obtained by multiplying the fractional value by
48752'0x1.0p7'.  The equivalent for Q15 values is to multiply by '0x1.0p15'.
48753The equivalent for Q31 values is to multiply by '0x1.0p31'.
48754
48755 The table below lists the 'v4i8' and 'v2q15' operations for which
48756hardware support exists.  'a' and 'b' are 'v4i8' values, and 'c' and 'd'
48757are 'v2q15' values.
48758
48759C code                               MIPS instruction
48760--------------------------------------------------------------------------
48761'a + b'                              'addu.qb'
48762'c + d'                              'addq.ph'
48763'a - b'                              'subu.qb'
48764'c - d'                              'subq.ph'
48765
48766 The table below lists the 'v2i16' operation for which hardware support
48767exists for the DSP ASE REV 2.  'e' and 'f' are 'v2i16' values.
48768
48769C code                               MIPS instruction
48770--------------------------------------------------------------------------
48771'e * f'                              'mul.ph'
48772
48773 It is easier to describe the DSP built-in functions if we first define
48774the following types:
48775
48776     typedef int q31;
48777     typedef int i32;
48778     typedef unsigned int ui32;
48779     typedef long long a64;
48780
48781 'q31' and 'i32' are actually the same as 'int', but we use 'q31' to
48782indicate a Q31 fractional value and 'i32' to indicate a 32-bit integer
48783value.  Similarly, 'a64' is the same as 'long long', but we use 'a64' to
48784indicate values that are placed in one of the four DSP accumulators
48785('$ac0', '$ac1', '$ac2' or '$ac3').
48786
48787 Also, some built-in functions prefer or require immediate numbers as
48788parameters, because the corresponding DSP instructions accept both
48789immediate numbers and register operands, or accept immediate numbers
48790only.  The immediate parameters are listed as follows.
48791
48792     imm0_3: 0 to 3.
48793     imm0_7: 0 to 7.
48794     imm0_15: 0 to 15.
48795     imm0_31: 0 to 31.
48796     imm0_63: 0 to 63.
48797     imm0_255: 0 to 255.
48798     imm_n32_31: -32 to 31.
48799     imm_n512_511: -512 to 511.
48800
48801 The following built-in functions map directly to a particular MIPS DSP
48802instruction.  Please refer to the architecture specification for details
48803on what each instruction does.
48804
48805     v2q15 __builtin_mips_addq_ph (v2q15, v2q15);
48806     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15);
48807     q31 __builtin_mips_addq_s_w (q31, q31);
48808     v4i8 __builtin_mips_addu_qb (v4i8, v4i8);
48809     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8);
48810     v2q15 __builtin_mips_subq_ph (v2q15, v2q15);
48811     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15);
48812     q31 __builtin_mips_subq_s_w (q31, q31);
48813     v4i8 __builtin_mips_subu_qb (v4i8, v4i8);
48814     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8);
48815     i32 __builtin_mips_addsc (i32, i32);
48816     i32 __builtin_mips_addwc (i32, i32);
48817     i32 __builtin_mips_modsub (i32, i32);
48818     i32 __builtin_mips_raddu_w_qb (v4i8);
48819     v2q15 __builtin_mips_absq_s_ph (v2q15);
48820     q31 __builtin_mips_absq_s_w (q31);
48821     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15);
48822     v2q15 __builtin_mips_precrq_ph_w (q31, q31);
48823     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31);
48824     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15);
48825     q31 __builtin_mips_preceq_w_phl (v2q15);
48826     q31 __builtin_mips_preceq_w_phr (v2q15);
48827     v2q15 __builtin_mips_precequ_ph_qbl (v4i8);
48828     v2q15 __builtin_mips_precequ_ph_qbr (v4i8);
48829     v2q15 __builtin_mips_precequ_ph_qbla (v4i8);
48830     v2q15 __builtin_mips_precequ_ph_qbra (v4i8);
48831     v2q15 __builtin_mips_preceu_ph_qbl (v4i8);
48832     v2q15 __builtin_mips_preceu_ph_qbr (v4i8);
48833     v2q15 __builtin_mips_preceu_ph_qbla (v4i8);
48834     v2q15 __builtin_mips_preceu_ph_qbra (v4i8);
48835     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7);
48836     v4i8 __builtin_mips_shll_qb (v4i8, i32);
48837     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15);
48838     v2q15 __builtin_mips_shll_ph (v2q15, i32);
48839     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15);
48840     v2q15 __builtin_mips_shll_s_ph (v2q15, i32);
48841     q31 __builtin_mips_shll_s_w (q31, imm0_31);
48842     q31 __builtin_mips_shll_s_w (q31, i32);
48843     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7);
48844     v4i8 __builtin_mips_shrl_qb (v4i8, i32);
48845     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15);
48846     v2q15 __builtin_mips_shra_ph (v2q15, i32);
48847     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15);
48848     v2q15 __builtin_mips_shra_r_ph (v2q15, i32);
48849     q31 __builtin_mips_shra_r_w (q31, imm0_31);
48850     q31 __builtin_mips_shra_r_w (q31, i32);
48851     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15);
48852     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15);
48853     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15);
48854     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15);
48855     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15);
48856     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8);
48857     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8);
48858     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8);
48859     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8);
48860     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15);
48861     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31);
48862     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15);
48863     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31);
48864     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15);
48865     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15);
48866     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15);
48867     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15);
48868     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15);
48869     i32 __builtin_mips_bitrev (i32);
48870     i32 __builtin_mips_insv (i32, i32);
48871     v4i8 __builtin_mips_repl_qb (imm0_255);
48872     v4i8 __builtin_mips_repl_qb (i32);
48873     v2q15 __builtin_mips_repl_ph (imm_n512_511);
48874     v2q15 __builtin_mips_repl_ph (i32);
48875     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8);
48876     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8);
48877     void __builtin_mips_cmpu_le_qb (v4i8, v4i8);
48878     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8);
48879     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8);
48880     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8);
48881     void __builtin_mips_cmp_eq_ph (v2q15, v2q15);
48882     void __builtin_mips_cmp_lt_ph (v2q15, v2q15);
48883     void __builtin_mips_cmp_le_ph (v2q15, v2q15);
48884     v4i8 __builtin_mips_pick_qb (v4i8, v4i8);
48885     v2q15 __builtin_mips_pick_ph (v2q15, v2q15);
48886     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15);
48887     i32 __builtin_mips_extr_w (a64, imm0_31);
48888     i32 __builtin_mips_extr_w (a64, i32);
48889     i32 __builtin_mips_extr_r_w (a64, imm0_31);
48890     i32 __builtin_mips_extr_s_h (a64, i32);
48891     i32 __builtin_mips_extr_rs_w (a64, imm0_31);
48892     i32 __builtin_mips_extr_rs_w (a64, i32);
48893     i32 __builtin_mips_extr_s_h (a64, imm0_31);
48894     i32 __builtin_mips_extr_r_w (a64, i32);
48895     i32 __builtin_mips_extp (a64, imm0_31);
48896     i32 __builtin_mips_extp (a64, i32);
48897     i32 __builtin_mips_extpdp (a64, imm0_31);
48898     i32 __builtin_mips_extpdp (a64, i32);
48899     a64 __builtin_mips_shilo (a64, imm_n32_31);
48900     a64 __builtin_mips_shilo (a64, i32);
48901     a64 __builtin_mips_mthlip (a64, i32);
48902     void __builtin_mips_wrdsp (i32, imm0_63);
48903     i32 __builtin_mips_rddsp (imm0_63);
48904     i32 __builtin_mips_lbux (void *, i32);
48905     i32 __builtin_mips_lhx (void *, i32);
48906     i32 __builtin_mips_lwx (void *, i32);
48907     a64 __builtin_mips_ldx (void *, i32); /* MIPS64 only */
48908     i32 __builtin_mips_bposge32 (void);
48909     a64 __builtin_mips_madd (a64, i32, i32);
48910     a64 __builtin_mips_maddu (a64, ui32, ui32);
48911     a64 __builtin_mips_msub (a64, i32, i32);
48912     a64 __builtin_mips_msubu (a64, ui32, ui32);
48913     a64 __builtin_mips_mult (i32, i32);
48914     a64 __builtin_mips_multu (ui32, ui32);
48915
48916 The following built-in functions map directly to a particular MIPS DSP
48917REV 2 instruction.  Please refer to the architecture specification for
48918details on what each instruction does.
48919
48920     v4q7 __builtin_mips_absq_s_qb (v4q7);
48921     v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
48922     v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
48923     v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
48924     v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
48925     i32 __builtin_mips_append (i32, i32, imm0_31);
48926     i32 __builtin_mips_balign (i32, i32, imm0_3);
48927     i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
48928     i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
48929     i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
48930     a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
48931     a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
48932     v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
48933     v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
48934     q31 __builtin_mips_mulq_rs_w (q31, q31);
48935     v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
48936     q31 __builtin_mips_mulq_s_w (q31, q31);
48937     a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
48938     v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
48939     v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
48940     v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
48941     i32 __builtin_mips_prepend (i32, i32, imm0_31);
48942     v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
48943     v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
48944     v4i8 __builtin_mips_shra_qb (v4i8, i32);
48945     v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
48946     v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
48947     v2i16 __builtin_mips_shrl_ph (v2i16, i32);
48948     v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
48949     v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
48950     v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
48951     v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
48952     v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
48953     v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
48954     q31 __builtin_mips_addqh_w (q31, q31);
48955     q31 __builtin_mips_addqh_r_w (q31, q31);
48956     v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
48957     v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
48958     q31 __builtin_mips_subqh_w (q31, q31);
48959     q31 __builtin_mips_subqh_r_w (q31, q31);
48960     a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
48961     a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
48962     a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
48963     a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
48964     a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
48965     a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
48966
48967
48968File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
48969
489706.60.15 MIPS Paired-Single Support
48971----------------------------------
48972
48973The MIPS64 architecture includes a number of instructions that operate
48974on pairs of single-precision floating-point values.  Each pair is packed
48975into a 64-bit floating-point register, with one element being designated
48976the "upper half" and the other being designated the "lower half".
48977
48978 GCC supports paired-single operations using both the generic vector
48979extensions (*note Vector Extensions::) and a collection of MIPS-specific
48980built-in functions.  Both kinds of support are enabled by the
48981'-mpaired-single' command-line option.
48982
48983 The vector type associated with paired-single values is usually called
48984'v2sf'.  It can be defined in C as follows:
48985
48986     typedef float v2sf __attribute__ ((vector_size (8)));
48987
48988 'v2sf' values are initialized in the same way as aggregates.  For
48989example:
48990
48991     v2sf a = {1.5, 9.1};
48992     v2sf b;
48993     float e, f;
48994     b = (v2sf) {e, f};
48995
48996 _Note:_ The CPU's endianness determines which value is stored in the
48997upper half of a register and which value is stored in the lower half.
48998On little-endian targets, the first value is the lower one and the
48999second value is the upper one.  The opposite order applies to big-endian
49000targets.  For example, the code above sets the lower half of 'a' to
49001'1.5' on little-endian targets and '9.1' on big-endian targets.
49002
49003
49004File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: MIPS SIMD Architecture (MSA) Support,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
49005
490066.60.16 MIPS Loongson Built-in Functions
49007----------------------------------------
49008
49009GCC provides intrinsics to access the SIMD instructions provided by the
49010ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
49011available after inclusion of the 'loongson.h' header file, operate on
49012the following 64-bit vector types:
49013
49014   * 'uint8x8_t', a vector of eight unsigned 8-bit integers;
49015   * 'uint16x4_t', a vector of four unsigned 16-bit integers;
49016   * 'uint32x2_t', a vector of two unsigned 32-bit integers;
49017   * 'int8x8_t', a vector of eight signed 8-bit integers;
49018   * 'int16x4_t', a vector of four signed 16-bit integers;
49019   * 'int32x2_t', a vector of two signed 32-bit integers.
49020
49021 The intrinsics provided are listed below; each is named after the
49022machine instruction to which it corresponds, with suffixes added as
49023appropriate to distinguish intrinsics that expand to the same machine
49024instruction yet have different argument types.  Refer to the
49025architecture documentation for a description of the functionality of
49026each instruction.
49027
49028     int16x4_t packsswh (int32x2_t s, int32x2_t t);
49029     int8x8_t packsshb (int16x4_t s, int16x4_t t);
49030     uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
49031     uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
49032     uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
49033     uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
49034     int32x2_t paddw_s (int32x2_t s, int32x2_t t);
49035     int16x4_t paddh_s (int16x4_t s, int16x4_t t);
49036     int8x8_t paddb_s (int8x8_t s, int8x8_t t);
49037     uint64_t paddd_u (uint64_t s, uint64_t t);
49038     int64_t paddd_s (int64_t s, int64_t t);
49039     int16x4_t paddsh (int16x4_t s, int16x4_t t);
49040     int8x8_t paddsb (int8x8_t s, int8x8_t t);
49041     uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
49042     uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
49043     uint64_t pandn_ud (uint64_t s, uint64_t t);
49044     uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
49045     uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
49046     uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
49047     int64_t pandn_sd (int64_t s, int64_t t);
49048     int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
49049     int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
49050     int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
49051     uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
49052     uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
49053     uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
49054     uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
49055     uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
49056     int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
49057     int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
49058     int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
49059     uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
49060     uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
49061     uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
49062     int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
49063     int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
49064     int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
49065     uint16x4_t pextrh_u (uint16x4_t s, int field);
49066     int16x4_t pextrh_s (int16x4_t s, int field);
49067     uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
49068     uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
49069     uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
49070     uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
49071     int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
49072     int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
49073     int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
49074     int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
49075     int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
49076     int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
49077     uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
49078     int16x4_t pminsh (int16x4_t s, int16x4_t t);
49079     uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
49080     uint8x8_t pmovmskb_u (uint8x8_t s);
49081     int8x8_t pmovmskb_s (int8x8_t s);
49082     uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
49083     int16x4_t pmulhh (int16x4_t s, int16x4_t t);
49084     int16x4_t pmullh (int16x4_t s, int16x4_t t);
49085     int64_t pmuluw (uint32x2_t s, uint32x2_t t);
49086     uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
49087     uint16x4_t biadd (uint8x8_t s);
49088     uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
49089     uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
49090     int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
49091     uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
49092     int16x4_t psllh_s (int16x4_t s, uint8_t amount);
49093     uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
49094     int32x2_t psllw_s (int32x2_t s, uint8_t amount);
49095     uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
49096     int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
49097     uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
49098     int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
49099     uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
49100     int16x4_t psrah_s (int16x4_t s, uint8_t amount);
49101     uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
49102     int32x2_t psraw_s (int32x2_t s, uint8_t amount);
49103     uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
49104     uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
49105     uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
49106     int32x2_t psubw_s (int32x2_t s, int32x2_t t);
49107     int16x4_t psubh_s (int16x4_t s, int16x4_t t);
49108     int8x8_t psubb_s (int8x8_t s, int8x8_t t);
49109     uint64_t psubd_u (uint64_t s, uint64_t t);
49110     int64_t psubd_s (int64_t s, int64_t t);
49111     int16x4_t psubsh (int16x4_t s, int16x4_t t);
49112     int8x8_t psubsb (int8x8_t s, int8x8_t t);
49113     uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
49114     uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
49115     uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
49116     uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
49117     uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
49118     int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
49119     int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
49120     int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
49121     uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
49122     uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
49123     uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
49124     int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
49125     int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
49126     int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
49127
49128* Menu:
49129
49130* Paired-Single Arithmetic::
49131* Paired-Single Built-in Functions::
49132* MIPS-3D Built-in Functions::
49133
49134
49135File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
49136
491376.60.16.1 Paired-Single Arithmetic
49138..................................
49139
49140The table below lists the 'v2sf' operations for which hardware support
49141exists.  'a', 'b' and 'c' are 'v2sf' values and 'x' is an integral
49142value.
49143
49144C code                               MIPS instruction
49145--------------------------------------------------------------------------
49146'a + b'                              'add.ps'
49147'a - b'                              'sub.ps'
49148'-a'                                 'neg.ps'
49149'a * b'                              'mul.ps'
49150'a * b + c'                          'madd.ps'
49151'a * b - c'                          'msub.ps'
49152'-(a * b + c)'                       'nmadd.ps'
49153'-(a * b - c)'                       'nmsub.ps'
49154'x ? a : b'                          'movn.ps'/'movz.ps'
49155
49156 Note that the multiply-accumulate instructions can be disabled using
49157the command-line option '-mno-fused-madd'.
49158
49159
49160File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
49161
491626.60.16.2 Paired-Single Built-in Functions
49163..........................................
49164
49165The following paired-single functions map directly to a particular MIPS
49166instruction.  Please refer to the architecture specification for details
49167on what each instruction does.
49168
49169'v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
49170     Pair lower lower ('pll.ps').
49171
49172'v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
49173     Pair upper lower ('pul.ps').
49174
49175'v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
49176     Pair lower upper ('plu.ps').
49177
49178'v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
49179     Pair upper upper ('puu.ps').
49180
49181'v2sf __builtin_mips_cvt_ps_s (float, float)'
49182     Convert pair to paired single ('cvt.ps.s').
49183
49184'float __builtin_mips_cvt_s_pl (v2sf)'
49185     Convert pair lower to single ('cvt.s.pl').
49186
49187'float __builtin_mips_cvt_s_pu (v2sf)'
49188     Convert pair upper to single ('cvt.s.pu').
49189
49190'v2sf __builtin_mips_abs_ps (v2sf)'
49191     Absolute value ('abs.ps').
49192
49193'v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
49194     Align variable ('alnv.ps').
49195
49196     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
49197     otherwise the result is unpredictable.  Please read the instruction
49198     description for details.
49199
49200 The following multi-instruction functions are also available.  In each
49201case, COND can be any of the 16 floating-point conditions: 'f', 'un',
49202'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
49203'lt', 'nge', 'le' or 'ngt'.
49204
49205'v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
49206'v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
49207     Conditional move based on floating-point comparison ('c.COND.ps',
49208     'movt.ps'/'movf.ps').
49209
49210     The 'movt' functions return the value X computed by:
49211
49212          c.COND.ps CC,A,B
49213          mov.ps X,C
49214          movt.ps X,D,CC
49215
49216     The 'movf' functions are similar but use 'movf.ps' instead of
49217     'movt.ps'.
49218
49219'int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
49220'int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
49221     Comparison of two paired-single values ('c.COND.ps',
49222     'bc1t'/'bc1f').
49223
49224     These functions compare A and B using 'c.COND.ps' and return either
49225     the upper or lower half of the result.  For example:
49226
49227          v2sf a, b;
49228          if (__builtin_mips_upper_c_eq_ps (a, b))
49229            upper_halves_are_equal ();
49230          else
49231            upper_halves_are_unequal ();
49232
49233          if (__builtin_mips_lower_c_eq_ps (a, b))
49234            lower_halves_are_equal ();
49235          else
49236            lower_halves_are_unequal ();
49237
49238
49239File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
49240
492416.60.16.3 MIPS-3D Built-in Functions
49242....................................
49243
49244The MIPS-3D Application-Specific Extension (ASE) includes additional
49245paired-single instructions that are designed to improve the performance
49246of 3D graphics operations.  Support for these instructions is controlled
49247by the '-mips3d' command-line option.
49248
49249 The functions listed below map directly to a particular MIPS-3D
49250instruction.  Please refer to the architecture specification for more
49251details on what each instruction does.
49252
49253'v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
49254     Reduction add ('addr.ps').
49255
49256'v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
49257     Reduction multiply ('mulr.ps').
49258
49259'v2sf __builtin_mips_cvt_pw_ps (v2sf)'
49260     Convert paired single to paired word ('cvt.pw.ps').
49261
49262'v2sf __builtin_mips_cvt_ps_pw (v2sf)'
49263     Convert paired word to paired single ('cvt.ps.pw').
49264
49265'float __builtin_mips_recip1_s (float)'
49266'double __builtin_mips_recip1_d (double)'
49267'v2sf __builtin_mips_recip1_ps (v2sf)'
49268     Reduced-precision reciprocal (sequence step 1) ('recip1.FMT').
49269
49270'float __builtin_mips_recip2_s (float, float)'
49271'double __builtin_mips_recip2_d (double, double)'
49272'v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
49273     Reduced-precision reciprocal (sequence step 2) ('recip2.FMT').
49274
49275'float __builtin_mips_rsqrt1_s (float)'
49276'double __builtin_mips_rsqrt1_d (double)'
49277'v2sf __builtin_mips_rsqrt1_ps (v2sf)'
49278     Reduced-precision reciprocal square root (sequence step 1)
49279     ('rsqrt1.FMT').
49280
49281'float __builtin_mips_rsqrt2_s (float, float)'
49282'double __builtin_mips_rsqrt2_d (double, double)'
49283'v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
49284     Reduced-precision reciprocal square root (sequence step 2)
49285     ('rsqrt2.FMT').
49286
49287 The following multi-instruction functions are also available.  In each
49288case, COND can be any of the 16 floating-point conditions: 'f', 'un',
49289'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
49290'lt', 'nge', 'le' or 'ngt'.
49291
49292'int __builtin_mips_cabs_COND_s (float A, float B)'
49293'int __builtin_mips_cabs_COND_d (double A, double B)'
49294     Absolute comparison of two scalar values ('cabs.COND.FMT',
49295     'bc1t'/'bc1f').
49296
49297     These functions compare A and B using 'cabs.COND.s' or
49298     'cabs.COND.d' and return the result as a boolean value.  For
49299     example:
49300
49301          float a, b;
49302          if (__builtin_mips_cabs_eq_s (a, b))
49303            true ();
49304          else
49305            false ();
49306
49307'int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
49308'int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
49309     Absolute comparison of two paired-single values ('cabs.COND.ps',
49310     'bc1t'/'bc1f').
49311
49312     These functions compare A and B using 'cabs.COND.ps' and return
49313     either the upper or lower half of the result.  For example:
49314
49315          v2sf a, b;
49316          if (__builtin_mips_upper_cabs_eq_ps (a, b))
49317            upper_halves_are_equal ();
49318          else
49319            upper_halves_are_unequal ();
49320
49321          if (__builtin_mips_lower_cabs_eq_ps (a, b))
49322            lower_halves_are_equal ();
49323          else
49324            lower_halves_are_unequal ();
49325
49326'v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
49327'v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
49328     Conditional move based on absolute comparison ('cabs.COND.ps',
49329     'movt.ps'/'movf.ps').
49330
49331     The 'movt' functions return the value X computed by:
49332
49333          cabs.COND.ps CC,A,B
49334          mov.ps X,C
49335          movt.ps X,D,CC
49336
49337     The 'movf' functions are similar but use 'movf.ps' instead of
49338     'movt.ps'.
49339
49340'int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
49341'int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
49342'int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
49343'int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
49344     Comparison of two paired-single values ('c.COND.ps'/'cabs.COND.ps',
49345     'bc1any2t'/'bc1any2f').
49346
49347     These functions compare A and B using 'c.COND.ps' or
49348     'cabs.COND.ps'.  The 'any' forms return 'true' if either result is
49349     'true' and the 'all' forms return 'true' if both results are
49350     'true'.  For example:
49351
49352          v2sf a, b;
49353          if (__builtin_mips_any_c_eq_ps (a, b))
49354            one_is_true ();
49355          else
49356            both_are_false ();
49357
49358          if (__builtin_mips_all_c_eq_ps (a, b))
49359            both_are_true ();
49360          else
49361            one_is_false ();
49362
49363'int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
49364'int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
49365'int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
49366'int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
49367     Comparison of four paired-single values
49368     ('c.COND.ps'/'cabs.COND.ps', 'bc1any4t'/'bc1any4f').
49369
49370     These functions use 'c.COND.ps' or 'cabs.COND.ps' to compare A with
49371     B and to compare C with D.  The 'any' forms return 'true' if any of
49372     the four results are 'true' and the 'all' forms return 'true' if
49373     all four results are 'true'.  For example:
49374
49375          v2sf a, b, c, d;
49376          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
49377            some_are_true ();
49378          else
49379            all_are_false ();
49380
49381          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
49382            all_are_true ();
49383          else
49384            some_are_false ();
49385
49386
49387File: gcc.info,  Node: MIPS SIMD Architecture (MSA) Support,  Next: Other MIPS Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
49388
493896.60.17 MIPS SIMD Architecture (MSA) Support
49390--------------------------------------------
49391
49392* Menu:
49393
49394* MIPS SIMD Architecture Built-in Functions::
49395
49396GCC provides intrinsics to access the SIMD instructions provided by the
49397MSA MIPS SIMD Architecture.  The interface is made available by
49398including '<msa.h>' and using '-mmsa -mhard-float -mfp64 -mnan=2008'.
49399For each '__builtin_msa_*', there is a shortened name of the intrinsic,
49400'__msa_*'.
49401
49402 MSA implements 128-bit wide vector registers, operating on 8-, 16-, 32-
49403and 64-bit integer, 16- and 32-bit fixed-point, or 32- and 64-bit
49404floating point data elements.  The following vectors typedefs are
49405included in 'msa.h':
49406   * 'v16i8', a vector of sixteen signed 8-bit integers;
49407   * 'v16u8', a vector of sixteen unsigned 8-bit integers;
49408   * 'v8i16', a vector of eight signed 16-bit integers;
49409   * 'v8u16', a vector of eight unsigned 16-bit integers;
49410   * 'v4i32', a vector of four signed 32-bit integers;
49411   * 'v4u32', a vector of four unsigned 32-bit integers;
49412   * 'v2i64', a vector of two signed 64-bit integers;
49413   * 'v2u64', a vector of two unsigned 64-bit integers;
49414   * 'v4f32', a vector of four 32-bit floats;
49415   * 'v2f64', a vector of two 64-bit doubles.
49416
49417 Instructions and corresponding built-ins may have additional
49418restrictions and/or input/output values manipulated:
49419   * 'imm0_1', an integer literal in range 0 to 1;
49420   * 'imm0_3', an integer literal in range 0 to 3;
49421   * 'imm0_7', an integer literal in range 0 to 7;
49422   * 'imm0_15', an integer literal in range 0 to 15;
49423   * 'imm0_31', an integer literal in range 0 to 31;
49424   * 'imm0_63', an integer literal in range 0 to 63;
49425   * 'imm0_255', an integer literal in range 0 to 255;
49426   * 'imm_n16_15', an integer literal in range -16 to 15;
49427   * 'imm_n512_511', an integer literal in range -512 to 511;
49428   * 'imm_n1024_1022', an integer literal in range -512 to 511 left
49429     shifted by 1 bit, i.e., -1024, -1022, ..., 1020, 1022;
49430   * 'imm_n2048_2044', an integer literal in range -512 to 511 left
49431     shifted by 2 bits, i.e., -2048, -2044, ..., 2040, 2044;
49432   * 'imm_n4096_4088', an integer literal in range -512 to 511 left
49433     shifted by 3 bits, i.e., -4096, -4088, ..., 4080, 4088;
49434   * 'imm1_4', an integer literal in range 1 to 4;
49435   * 'i32, i64, u32, u64, f32, f64', defined as follows:
49436
49437     {
49438     typedef int i32;
49439     #if __LONG_MAX__ == __LONG_LONG_MAX__
49440     typedef long i64;
49441     #else
49442     typedef long long i64;
49443     #endif
49444
49445     typedef unsigned int u32;
49446     #if __LONG_MAX__ == __LONG_LONG_MAX__
49447     typedef unsigned long u64;
49448     #else
49449     typedef unsigned long long u64;
49450     #endif
49451
49452     typedef double f64;
49453     typedef float f32;
49454     }
49455
49456
49457File: gcc.info,  Node: MIPS SIMD Architecture Built-in Functions,  Up: MIPS SIMD Architecture (MSA) Support
49458
494596.60.17.1 MIPS SIMD Architecture Built-in Functions
49460...................................................
49461
49462The intrinsics provided are listed below; each is named after the
49463machine instruction.
49464
49465     v16i8 __builtin_msa_add_a_b (v16i8, v16i8);
49466     v8i16 __builtin_msa_add_a_h (v8i16, v8i16);
49467     v4i32 __builtin_msa_add_a_w (v4i32, v4i32);
49468     v2i64 __builtin_msa_add_a_d (v2i64, v2i64);
49469
49470     v16i8 __builtin_msa_adds_a_b (v16i8, v16i8);
49471     v8i16 __builtin_msa_adds_a_h (v8i16, v8i16);
49472     v4i32 __builtin_msa_adds_a_w (v4i32, v4i32);
49473     v2i64 __builtin_msa_adds_a_d (v2i64, v2i64);
49474
49475     v16i8 __builtin_msa_adds_s_b (v16i8, v16i8);
49476     v8i16 __builtin_msa_adds_s_h (v8i16, v8i16);
49477     v4i32 __builtin_msa_adds_s_w (v4i32, v4i32);
49478     v2i64 __builtin_msa_adds_s_d (v2i64, v2i64);
49479
49480     v16u8 __builtin_msa_adds_u_b (v16u8, v16u8);
49481     v8u16 __builtin_msa_adds_u_h (v8u16, v8u16);
49482     v4u32 __builtin_msa_adds_u_w (v4u32, v4u32);
49483     v2u64 __builtin_msa_adds_u_d (v2u64, v2u64);
49484
49485     v16i8 __builtin_msa_addv_b (v16i8, v16i8);
49486     v8i16 __builtin_msa_addv_h (v8i16, v8i16);
49487     v4i32 __builtin_msa_addv_w (v4i32, v4i32);
49488     v2i64 __builtin_msa_addv_d (v2i64, v2i64);
49489
49490     v16i8 __builtin_msa_addvi_b (v16i8, imm0_31);
49491     v8i16 __builtin_msa_addvi_h (v8i16, imm0_31);
49492     v4i32 __builtin_msa_addvi_w (v4i32, imm0_31);
49493     v2i64 __builtin_msa_addvi_d (v2i64, imm0_31);
49494
49495     v16u8 __builtin_msa_and_v (v16u8, v16u8);
49496
49497     v16u8 __builtin_msa_andi_b (v16u8, imm0_255);
49498
49499     v16i8 __builtin_msa_asub_s_b (v16i8, v16i8);
49500     v8i16 __builtin_msa_asub_s_h (v8i16, v8i16);
49501     v4i32 __builtin_msa_asub_s_w (v4i32, v4i32);
49502     v2i64 __builtin_msa_asub_s_d (v2i64, v2i64);
49503
49504     v16u8 __builtin_msa_asub_u_b (v16u8, v16u8);
49505     v8u16 __builtin_msa_asub_u_h (v8u16, v8u16);
49506     v4u32 __builtin_msa_asub_u_w (v4u32, v4u32);
49507     v2u64 __builtin_msa_asub_u_d (v2u64, v2u64);
49508
49509     v16i8 __builtin_msa_ave_s_b (v16i8, v16i8);
49510     v8i16 __builtin_msa_ave_s_h (v8i16, v8i16);
49511     v4i32 __builtin_msa_ave_s_w (v4i32, v4i32);
49512     v2i64 __builtin_msa_ave_s_d (v2i64, v2i64);
49513
49514     v16u8 __builtin_msa_ave_u_b (v16u8, v16u8);
49515     v8u16 __builtin_msa_ave_u_h (v8u16, v8u16);
49516     v4u32 __builtin_msa_ave_u_w (v4u32, v4u32);
49517     v2u64 __builtin_msa_ave_u_d (v2u64, v2u64);
49518
49519     v16i8 __builtin_msa_aver_s_b (v16i8, v16i8);
49520     v8i16 __builtin_msa_aver_s_h (v8i16, v8i16);
49521     v4i32 __builtin_msa_aver_s_w (v4i32, v4i32);
49522     v2i64 __builtin_msa_aver_s_d (v2i64, v2i64);
49523
49524     v16u8 __builtin_msa_aver_u_b (v16u8, v16u8);
49525     v8u16 __builtin_msa_aver_u_h (v8u16, v8u16);
49526     v4u32 __builtin_msa_aver_u_w (v4u32, v4u32);
49527     v2u64 __builtin_msa_aver_u_d (v2u64, v2u64);
49528
49529     v16u8 __builtin_msa_bclr_b (v16u8, v16u8);
49530     v8u16 __builtin_msa_bclr_h (v8u16, v8u16);
49531     v4u32 __builtin_msa_bclr_w (v4u32, v4u32);
49532     v2u64 __builtin_msa_bclr_d (v2u64, v2u64);
49533
49534     v16u8 __builtin_msa_bclri_b (v16u8, imm0_7);
49535     v8u16 __builtin_msa_bclri_h (v8u16, imm0_15);
49536     v4u32 __builtin_msa_bclri_w (v4u32, imm0_31);
49537     v2u64 __builtin_msa_bclri_d (v2u64, imm0_63);
49538
49539     v16u8 __builtin_msa_binsl_b (v16u8, v16u8, v16u8);
49540     v8u16 __builtin_msa_binsl_h (v8u16, v8u16, v8u16);
49541     v4u32 __builtin_msa_binsl_w (v4u32, v4u32, v4u32);
49542     v2u64 __builtin_msa_binsl_d (v2u64, v2u64, v2u64);
49543
49544     v16u8 __builtin_msa_binsli_b (v16u8, v16u8, imm0_7);
49545     v8u16 __builtin_msa_binsli_h (v8u16, v8u16, imm0_15);
49546     v4u32 __builtin_msa_binsli_w (v4u32, v4u32, imm0_31);
49547     v2u64 __builtin_msa_binsli_d (v2u64, v2u64, imm0_63);
49548
49549     v16u8 __builtin_msa_binsr_b (v16u8, v16u8, v16u8);
49550     v8u16 __builtin_msa_binsr_h (v8u16, v8u16, v8u16);
49551     v4u32 __builtin_msa_binsr_w (v4u32, v4u32, v4u32);
49552     v2u64 __builtin_msa_binsr_d (v2u64, v2u64, v2u64);
49553
49554     v16u8 __builtin_msa_binsri_b (v16u8, v16u8, imm0_7);
49555     v8u16 __builtin_msa_binsri_h (v8u16, v8u16, imm0_15);
49556     v4u32 __builtin_msa_binsri_w (v4u32, v4u32, imm0_31);
49557     v2u64 __builtin_msa_binsri_d (v2u64, v2u64, imm0_63);
49558
49559     v16u8 __builtin_msa_bmnz_v (v16u8, v16u8, v16u8);
49560
49561     v16u8 __builtin_msa_bmnzi_b (v16u8, v16u8, imm0_255);
49562
49563     v16u8 __builtin_msa_bmz_v (v16u8, v16u8, v16u8);
49564
49565     v16u8 __builtin_msa_bmzi_b (v16u8, v16u8, imm0_255);
49566
49567     v16u8 __builtin_msa_bneg_b (v16u8, v16u8);
49568     v8u16 __builtin_msa_bneg_h (v8u16, v8u16);
49569     v4u32 __builtin_msa_bneg_w (v4u32, v4u32);
49570     v2u64 __builtin_msa_bneg_d (v2u64, v2u64);
49571
49572     v16u8 __builtin_msa_bnegi_b (v16u8, imm0_7);
49573     v8u16 __builtin_msa_bnegi_h (v8u16, imm0_15);
49574     v4u32 __builtin_msa_bnegi_w (v4u32, imm0_31);
49575     v2u64 __builtin_msa_bnegi_d (v2u64, imm0_63);
49576
49577     i32 __builtin_msa_bnz_b (v16u8);
49578     i32 __builtin_msa_bnz_h (v8u16);
49579     i32 __builtin_msa_bnz_w (v4u32);
49580     i32 __builtin_msa_bnz_d (v2u64);
49581
49582     i32 __builtin_msa_bnz_v (v16u8);
49583
49584     v16u8 __builtin_msa_bsel_v (v16u8, v16u8, v16u8);
49585
49586     v16u8 __builtin_msa_bseli_b (v16u8, v16u8, imm0_255);
49587
49588     v16u8 __builtin_msa_bset_b (v16u8, v16u8);
49589     v8u16 __builtin_msa_bset_h (v8u16, v8u16);
49590     v4u32 __builtin_msa_bset_w (v4u32, v4u32);
49591     v2u64 __builtin_msa_bset_d (v2u64, v2u64);
49592
49593     v16u8 __builtin_msa_bseti_b (v16u8, imm0_7);
49594     v8u16 __builtin_msa_bseti_h (v8u16, imm0_15);
49595     v4u32 __builtin_msa_bseti_w (v4u32, imm0_31);
49596     v2u64 __builtin_msa_bseti_d (v2u64, imm0_63);
49597
49598     i32 __builtin_msa_bz_b (v16u8);
49599     i32 __builtin_msa_bz_h (v8u16);
49600     i32 __builtin_msa_bz_w (v4u32);
49601     i32 __builtin_msa_bz_d (v2u64);
49602
49603     i32 __builtin_msa_bz_v (v16u8);
49604
49605     v16i8 __builtin_msa_ceq_b (v16i8, v16i8);
49606     v8i16 __builtin_msa_ceq_h (v8i16, v8i16);
49607     v4i32 __builtin_msa_ceq_w (v4i32, v4i32);
49608     v2i64 __builtin_msa_ceq_d (v2i64, v2i64);
49609
49610     v16i8 __builtin_msa_ceqi_b (v16i8, imm_n16_15);
49611     v8i16 __builtin_msa_ceqi_h (v8i16, imm_n16_15);
49612     v4i32 __builtin_msa_ceqi_w (v4i32, imm_n16_15);
49613     v2i64 __builtin_msa_ceqi_d (v2i64, imm_n16_15);
49614
49615     i32 __builtin_msa_cfcmsa (imm0_31);
49616
49617     v16i8 __builtin_msa_cle_s_b (v16i8, v16i8);
49618     v8i16 __builtin_msa_cle_s_h (v8i16, v8i16);
49619     v4i32 __builtin_msa_cle_s_w (v4i32, v4i32);
49620     v2i64 __builtin_msa_cle_s_d (v2i64, v2i64);
49621
49622     v16i8 __builtin_msa_cle_u_b (v16u8, v16u8);
49623     v8i16 __builtin_msa_cle_u_h (v8u16, v8u16);
49624     v4i32 __builtin_msa_cle_u_w (v4u32, v4u32);
49625     v2i64 __builtin_msa_cle_u_d (v2u64, v2u64);
49626
49627     v16i8 __builtin_msa_clei_s_b (v16i8, imm_n16_15);
49628     v8i16 __builtin_msa_clei_s_h (v8i16, imm_n16_15);
49629     v4i32 __builtin_msa_clei_s_w (v4i32, imm_n16_15);
49630     v2i64 __builtin_msa_clei_s_d (v2i64, imm_n16_15);
49631
49632     v16i8 __builtin_msa_clei_u_b (v16u8, imm0_31);
49633     v8i16 __builtin_msa_clei_u_h (v8u16, imm0_31);
49634     v4i32 __builtin_msa_clei_u_w (v4u32, imm0_31);
49635     v2i64 __builtin_msa_clei_u_d (v2u64, imm0_31);
49636
49637     v16i8 __builtin_msa_clt_s_b (v16i8, v16i8);
49638     v8i16 __builtin_msa_clt_s_h (v8i16, v8i16);
49639     v4i32 __builtin_msa_clt_s_w (v4i32, v4i32);
49640     v2i64 __builtin_msa_clt_s_d (v2i64, v2i64);
49641
49642     v16i8 __builtin_msa_clt_u_b (v16u8, v16u8);
49643     v8i16 __builtin_msa_clt_u_h (v8u16, v8u16);
49644     v4i32 __builtin_msa_clt_u_w (v4u32, v4u32);
49645     v2i64 __builtin_msa_clt_u_d (v2u64, v2u64);
49646
49647     v16i8 __builtin_msa_clti_s_b (v16i8, imm_n16_15);
49648     v8i16 __builtin_msa_clti_s_h (v8i16, imm_n16_15);
49649     v4i32 __builtin_msa_clti_s_w (v4i32, imm_n16_15);
49650     v2i64 __builtin_msa_clti_s_d (v2i64, imm_n16_15);
49651
49652     v16i8 __builtin_msa_clti_u_b (v16u8, imm0_31);
49653     v8i16 __builtin_msa_clti_u_h (v8u16, imm0_31);
49654     v4i32 __builtin_msa_clti_u_w (v4u32, imm0_31);
49655     v2i64 __builtin_msa_clti_u_d (v2u64, imm0_31);
49656
49657     i32 __builtin_msa_copy_s_b (v16i8, imm0_15);
49658     i32 __builtin_msa_copy_s_h (v8i16, imm0_7);
49659     i32 __builtin_msa_copy_s_w (v4i32, imm0_3);
49660     i64 __builtin_msa_copy_s_d (v2i64, imm0_1);
49661
49662     u32 __builtin_msa_copy_u_b (v16i8, imm0_15);
49663     u32 __builtin_msa_copy_u_h (v8i16, imm0_7);
49664     u32 __builtin_msa_copy_u_w (v4i32, imm0_3);
49665     u64 __builtin_msa_copy_u_d (v2i64, imm0_1);
49666
49667     void __builtin_msa_ctcmsa (imm0_31, i32);
49668
49669     v16i8 __builtin_msa_div_s_b (v16i8, v16i8);
49670     v8i16 __builtin_msa_div_s_h (v8i16, v8i16);
49671     v4i32 __builtin_msa_div_s_w (v4i32, v4i32);
49672     v2i64 __builtin_msa_div_s_d (v2i64, v2i64);
49673
49674     v16u8 __builtin_msa_div_u_b (v16u8, v16u8);
49675     v8u16 __builtin_msa_div_u_h (v8u16, v8u16);
49676     v4u32 __builtin_msa_div_u_w (v4u32, v4u32);
49677     v2u64 __builtin_msa_div_u_d (v2u64, v2u64);
49678
49679     v8i16 __builtin_msa_dotp_s_h (v16i8, v16i8);
49680     v4i32 __builtin_msa_dotp_s_w (v8i16, v8i16);
49681     v2i64 __builtin_msa_dotp_s_d (v4i32, v4i32);
49682
49683     v8u16 __builtin_msa_dotp_u_h (v16u8, v16u8);
49684     v4u32 __builtin_msa_dotp_u_w (v8u16, v8u16);
49685     v2u64 __builtin_msa_dotp_u_d (v4u32, v4u32);
49686
49687     v8i16 __builtin_msa_dpadd_s_h (v8i16, v16i8, v16i8);
49688     v4i32 __builtin_msa_dpadd_s_w (v4i32, v8i16, v8i16);
49689     v2i64 __builtin_msa_dpadd_s_d (v2i64, v4i32, v4i32);
49690
49691     v8u16 __builtin_msa_dpadd_u_h (v8u16, v16u8, v16u8);
49692     v4u32 __builtin_msa_dpadd_u_w (v4u32, v8u16, v8u16);
49693     v2u64 __builtin_msa_dpadd_u_d (v2u64, v4u32, v4u32);
49694
49695     v8i16 __builtin_msa_dpsub_s_h (v8i16, v16i8, v16i8);
49696     v4i32 __builtin_msa_dpsub_s_w (v4i32, v8i16, v8i16);
49697     v2i64 __builtin_msa_dpsub_s_d (v2i64, v4i32, v4i32);
49698
49699     v8i16 __builtin_msa_dpsub_u_h (v8i16, v16u8, v16u8);
49700     v4i32 __builtin_msa_dpsub_u_w (v4i32, v8u16, v8u16);
49701     v2i64 __builtin_msa_dpsub_u_d (v2i64, v4u32, v4u32);
49702
49703     v4f32 __builtin_msa_fadd_w (v4f32, v4f32);
49704     v2f64 __builtin_msa_fadd_d (v2f64, v2f64);
49705
49706     v4i32 __builtin_msa_fcaf_w (v4f32, v4f32);
49707     v2i64 __builtin_msa_fcaf_d (v2f64, v2f64);
49708
49709     v4i32 __builtin_msa_fceq_w (v4f32, v4f32);
49710     v2i64 __builtin_msa_fceq_d (v2f64, v2f64);
49711
49712     v4i32 __builtin_msa_fclass_w (v4f32);
49713     v2i64 __builtin_msa_fclass_d (v2f64);
49714
49715     v4i32 __builtin_msa_fcle_w (v4f32, v4f32);
49716     v2i64 __builtin_msa_fcle_d (v2f64, v2f64);
49717
49718     v4i32 __builtin_msa_fclt_w (v4f32, v4f32);
49719     v2i64 __builtin_msa_fclt_d (v2f64, v2f64);
49720
49721     v4i32 __builtin_msa_fcne_w (v4f32, v4f32);
49722     v2i64 __builtin_msa_fcne_d (v2f64, v2f64);
49723
49724     v4i32 __builtin_msa_fcor_w (v4f32, v4f32);
49725     v2i64 __builtin_msa_fcor_d (v2f64, v2f64);
49726
49727     v4i32 __builtin_msa_fcueq_w (v4f32, v4f32);
49728     v2i64 __builtin_msa_fcueq_d (v2f64, v2f64);
49729
49730     v4i32 __builtin_msa_fcule_w (v4f32, v4f32);
49731     v2i64 __builtin_msa_fcule_d (v2f64, v2f64);
49732
49733     v4i32 __builtin_msa_fcult_w (v4f32, v4f32);
49734     v2i64 __builtin_msa_fcult_d (v2f64, v2f64);
49735
49736     v4i32 __builtin_msa_fcun_w (v4f32, v4f32);
49737     v2i64 __builtin_msa_fcun_d (v2f64, v2f64);
49738
49739     v4i32 __builtin_msa_fcune_w (v4f32, v4f32);
49740     v2i64 __builtin_msa_fcune_d (v2f64, v2f64);
49741
49742     v4f32 __builtin_msa_fdiv_w (v4f32, v4f32);
49743     v2f64 __builtin_msa_fdiv_d (v2f64, v2f64);
49744
49745     v8i16 __builtin_msa_fexdo_h (v4f32, v4f32);
49746     v4f32 __builtin_msa_fexdo_w (v2f64, v2f64);
49747
49748     v4f32 __builtin_msa_fexp2_w (v4f32, v4i32);
49749     v2f64 __builtin_msa_fexp2_d (v2f64, v2i64);
49750
49751     v4f32 __builtin_msa_fexupl_w (v8i16);
49752     v2f64 __builtin_msa_fexupl_d (v4f32);
49753
49754     v4f32 __builtin_msa_fexupr_w (v8i16);
49755     v2f64 __builtin_msa_fexupr_d (v4f32);
49756
49757     v4f32 __builtin_msa_ffint_s_w (v4i32);
49758     v2f64 __builtin_msa_ffint_s_d (v2i64);
49759
49760     v4f32 __builtin_msa_ffint_u_w (v4u32);
49761     v2f64 __builtin_msa_ffint_u_d (v2u64);
49762
49763     v4f32 __builtin_msa_ffql_w (v8i16);
49764     v2f64 __builtin_msa_ffql_d (v4i32);
49765
49766     v4f32 __builtin_msa_ffqr_w (v8i16);
49767     v2f64 __builtin_msa_ffqr_d (v4i32);
49768
49769     v16i8 __builtin_msa_fill_b (i32);
49770     v8i16 __builtin_msa_fill_h (i32);
49771     v4i32 __builtin_msa_fill_w (i32);
49772     v2i64 __builtin_msa_fill_d (i64);
49773
49774     v4f32 __builtin_msa_flog2_w (v4f32);
49775     v2f64 __builtin_msa_flog2_d (v2f64);
49776
49777     v4f32 __builtin_msa_fmadd_w (v4f32, v4f32, v4f32);
49778     v2f64 __builtin_msa_fmadd_d (v2f64, v2f64, v2f64);
49779
49780     v4f32 __builtin_msa_fmax_w (v4f32, v4f32);
49781     v2f64 __builtin_msa_fmax_d (v2f64, v2f64);
49782
49783     v4f32 __builtin_msa_fmax_a_w (v4f32, v4f32);
49784     v2f64 __builtin_msa_fmax_a_d (v2f64, v2f64);
49785
49786     v4f32 __builtin_msa_fmin_w (v4f32, v4f32);
49787     v2f64 __builtin_msa_fmin_d (v2f64, v2f64);
49788
49789     v4f32 __builtin_msa_fmin_a_w (v4f32, v4f32);
49790     v2f64 __builtin_msa_fmin_a_d (v2f64, v2f64);
49791
49792     v4f32 __builtin_msa_fmsub_w (v4f32, v4f32, v4f32);
49793     v2f64 __builtin_msa_fmsub_d (v2f64, v2f64, v2f64);
49794
49795     v4f32 __builtin_msa_fmul_w (v4f32, v4f32);
49796     v2f64 __builtin_msa_fmul_d (v2f64, v2f64);
49797
49798     v4f32 __builtin_msa_frint_w (v4f32);
49799     v2f64 __builtin_msa_frint_d (v2f64);
49800
49801     v4f32 __builtin_msa_frcp_w (v4f32);
49802     v2f64 __builtin_msa_frcp_d (v2f64);
49803
49804     v4f32 __builtin_msa_frsqrt_w (v4f32);
49805     v2f64 __builtin_msa_frsqrt_d (v2f64);
49806
49807     v4i32 __builtin_msa_fsaf_w (v4f32, v4f32);
49808     v2i64 __builtin_msa_fsaf_d (v2f64, v2f64);
49809
49810     v4i32 __builtin_msa_fseq_w (v4f32, v4f32);
49811     v2i64 __builtin_msa_fseq_d (v2f64, v2f64);
49812
49813     v4i32 __builtin_msa_fsle_w (v4f32, v4f32);
49814     v2i64 __builtin_msa_fsle_d (v2f64, v2f64);
49815
49816     v4i32 __builtin_msa_fslt_w (v4f32, v4f32);
49817     v2i64 __builtin_msa_fslt_d (v2f64, v2f64);
49818
49819     v4i32 __builtin_msa_fsne_w (v4f32, v4f32);
49820     v2i64 __builtin_msa_fsne_d (v2f64, v2f64);
49821
49822     v4i32 __builtin_msa_fsor_w (v4f32, v4f32);
49823     v2i64 __builtin_msa_fsor_d (v2f64, v2f64);
49824
49825     v4f32 __builtin_msa_fsqrt_w (v4f32);
49826     v2f64 __builtin_msa_fsqrt_d (v2f64);
49827
49828     v4f32 __builtin_msa_fsub_w (v4f32, v4f32);
49829     v2f64 __builtin_msa_fsub_d (v2f64, v2f64);
49830
49831     v4i32 __builtin_msa_fsueq_w (v4f32, v4f32);
49832     v2i64 __builtin_msa_fsueq_d (v2f64, v2f64);
49833
49834     v4i32 __builtin_msa_fsule_w (v4f32, v4f32);
49835     v2i64 __builtin_msa_fsule_d (v2f64, v2f64);
49836
49837     v4i32 __builtin_msa_fsult_w (v4f32, v4f32);
49838     v2i64 __builtin_msa_fsult_d (v2f64, v2f64);
49839
49840     v4i32 __builtin_msa_fsun_w (v4f32, v4f32);
49841     v2i64 __builtin_msa_fsun_d (v2f64, v2f64);
49842
49843     v4i32 __builtin_msa_fsune_w (v4f32, v4f32);
49844     v2i64 __builtin_msa_fsune_d (v2f64, v2f64);
49845
49846     v4i32 __builtin_msa_ftint_s_w (v4f32);
49847     v2i64 __builtin_msa_ftint_s_d (v2f64);
49848
49849     v4u32 __builtin_msa_ftint_u_w (v4f32);
49850     v2u64 __builtin_msa_ftint_u_d (v2f64);
49851
49852     v8i16 __builtin_msa_ftq_h (v4f32, v4f32);
49853     v4i32 __builtin_msa_ftq_w (v2f64, v2f64);
49854
49855     v4i32 __builtin_msa_ftrunc_s_w (v4f32);
49856     v2i64 __builtin_msa_ftrunc_s_d (v2f64);
49857
49858     v4u32 __builtin_msa_ftrunc_u_w (v4f32);
49859     v2u64 __builtin_msa_ftrunc_u_d (v2f64);
49860
49861     v8i16 __builtin_msa_hadd_s_h (v16i8, v16i8);
49862     v4i32 __builtin_msa_hadd_s_w (v8i16, v8i16);
49863     v2i64 __builtin_msa_hadd_s_d (v4i32, v4i32);
49864
49865     v8u16 __builtin_msa_hadd_u_h (v16u8, v16u8);
49866     v4u32 __builtin_msa_hadd_u_w (v8u16, v8u16);
49867     v2u64 __builtin_msa_hadd_u_d (v4u32, v4u32);
49868
49869     v8i16 __builtin_msa_hsub_s_h (v16i8, v16i8);
49870     v4i32 __builtin_msa_hsub_s_w (v8i16, v8i16);
49871     v2i64 __builtin_msa_hsub_s_d (v4i32, v4i32);
49872
49873     v8i16 __builtin_msa_hsub_u_h (v16u8, v16u8);
49874     v4i32 __builtin_msa_hsub_u_w (v8u16, v8u16);
49875     v2i64 __builtin_msa_hsub_u_d (v4u32, v4u32);
49876
49877     v16i8 __builtin_msa_ilvev_b (v16i8, v16i8);
49878     v8i16 __builtin_msa_ilvev_h (v8i16, v8i16);
49879     v4i32 __builtin_msa_ilvev_w (v4i32, v4i32);
49880     v2i64 __builtin_msa_ilvev_d (v2i64, v2i64);
49881
49882     v16i8 __builtin_msa_ilvl_b (v16i8, v16i8);
49883     v8i16 __builtin_msa_ilvl_h (v8i16, v8i16);
49884     v4i32 __builtin_msa_ilvl_w (v4i32, v4i32);
49885     v2i64 __builtin_msa_ilvl_d (v2i64, v2i64);
49886
49887     v16i8 __builtin_msa_ilvod_b (v16i8, v16i8);
49888     v8i16 __builtin_msa_ilvod_h (v8i16, v8i16);
49889     v4i32 __builtin_msa_ilvod_w (v4i32, v4i32);
49890     v2i64 __builtin_msa_ilvod_d (v2i64, v2i64);
49891
49892     v16i8 __builtin_msa_ilvr_b (v16i8, v16i8);
49893     v8i16 __builtin_msa_ilvr_h (v8i16, v8i16);
49894     v4i32 __builtin_msa_ilvr_w (v4i32, v4i32);
49895     v2i64 __builtin_msa_ilvr_d (v2i64, v2i64);
49896
49897     v16i8 __builtin_msa_insert_b (v16i8, imm0_15, i32);
49898     v8i16 __builtin_msa_insert_h (v8i16, imm0_7, i32);
49899     v4i32 __builtin_msa_insert_w (v4i32, imm0_3, i32);
49900     v2i64 __builtin_msa_insert_d (v2i64, imm0_1, i64);
49901
49902     v16i8 __builtin_msa_insve_b (v16i8, imm0_15, v16i8);
49903     v8i16 __builtin_msa_insve_h (v8i16, imm0_7, v8i16);
49904     v4i32 __builtin_msa_insve_w (v4i32, imm0_3, v4i32);
49905     v2i64 __builtin_msa_insve_d (v2i64, imm0_1, v2i64);
49906
49907     v16i8 __builtin_msa_ld_b (const void *, imm_n512_511);
49908     v8i16 __builtin_msa_ld_h (const void *, imm_n1024_1022);
49909     v4i32 __builtin_msa_ld_w (const void *, imm_n2048_2044);
49910     v2i64 __builtin_msa_ld_d (const void *, imm_n4096_4088);
49911
49912     v16i8 __builtin_msa_ldi_b (imm_n512_511);
49913     v8i16 __builtin_msa_ldi_h (imm_n512_511);
49914     v4i32 __builtin_msa_ldi_w (imm_n512_511);
49915     v2i64 __builtin_msa_ldi_d (imm_n512_511);
49916
49917     v8i16 __builtin_msa_madd_q_h (v8i16, v8i16, v8i16);
49918     v4i32 __builtin_msa_madd_q_w (v4i32, v4i32, v4i32);
49919
49920     v8i16 __builtin_msa_maddr_q_h (v8i16, v8i16, v8i16);
49921     v4i32 __builtin_msa_maddr_q_w (v4i32, v4i32, v4i32);
49922
49923     v16i8 __builtin_msa_maddv_b (v16i8, v16i8, v16i8);
49924     v8i16 __builtin_msa_maddv_h (v8i16, v8i16, v8i16);
49925     v4i32 __builtin_msa_maddv_w (v4i32, v4i32, v4i32);
49926     v2i64 __builtin_msa_maddv_d (v2i64, v2i64, v2i64);
49927
49928     v16i8 __builtin_msa_max_a_b (v16i8, v16i8);
49929     v8i16 __builtin_msa_max_a_h (v8i16, v8i16);
49930     v4i32 __builtin_msa_max_a_w (v4i32, v4i32);
49931     v2i64 __builtin_msa_max_a_d (v2i64, v2i64);
49932
49933     v16i8 __builtin_msa_max_s_b (v16i8, v16i8);
49934     v8i16 __builtin_msa_max_s_h (v8i16, v8i16);
49935     v4i32 __builtin_msa_max_s_w (v4i32, v4i32);
49936     v2i64 __builtin_msa_max_s_d (v2i64, v2i64);
49937
49938     v16u8 __builtin_msa_max_u_b (v16u8, v16u8);
49939     v8u16 __builtin_msa_max_u_h (v8u16, v8u16);
49940     v4u32 __builtin_msa_max_u_w (v4u32, v4u32);
49941     v2u64 __builtin_msa_max_u_d (v2u64, v2u64);
49942
49943     v16i8 __builtin_msa_maxi_s_b (v16i8, imm_n16_15);
49944     v8i16 __builtin_msa_maxi_s_h (v8i16, imm_n16_15);
49945     v4i32 __builtin_msa_maxi_s_w (v4i32, imm_n16_15);
49946     v2i64 __builtin_msa_maxi_s_d (v2i64, imm_n16_15);
49947
49948     v16u8 __builtin_msa_maxi_u_b (v16u8, imm0_31);
49949     v8u16 __builtin_msa_maxi_u_h (v8u16, imm0_31);
49950     v4u32 __builtin_msa_maxi_u_w (v4u32, imm0_31);
49951     v2u64 __builtin_msa_maxi_u_d (v2u64, imm0_31);
49952
49953     v16i8 __builtin_msa_min_a_b (v16i8, v16i8);
49954     v8i16 __builtin_msa_min_a_h (v8i16, v8i16);
49955     v4i32 __builtin_msa_min_a_w (v4i32, v4i32);
49956     v2i64 __builtin_msa_min_a_d (v2i64, v2i64);
49957
49958     v16i8 __builtin_msa_min_s_b (v16i8, v16i8);
49959     v8i16 __builtin_msa_min_s_h (v8i16, v8i16);
49960     v4i32 __builtin_msa_min_s_w (v4i32, v4i32);
49961     v2i64 __builtin_msa_min_s_d (v2i64, v2i64);
49962
49963     v16u8 __builtin_msa_min_u_b (v16u8, v16u8);
49964     v8u16 __builtin_msa_min_u_h (v8u16, v8u16);
49965     v4u32 __builtin_msa_min_u_w (v4u32, v4u32);
49966     v2u64 __builtin_msa_min_u_d (v2u64, v2u64);
49967
49968     v16i8 __builtin_msa_mini_s_b (v16i8, imm_n16_15);
49969     v8i16 __builtin_msa_mini_s_h (v8i16, imm_n16_15);
49970     v4i32 __builtin_msa_mini_s_w (v4i32, imm_n16_15);
49971     v2i64 __builtin_msa_mini_s_d (v2i64, imm_n16_15);
49972
49973     v16u8 __builtin_msa_mini_u_b (v16u8, imm0_31);
49974     v8u16 __builtin_msa_mini_u_h (v8u16, imm0_31);
49975     v4u32 __builtin_msa_mini_u_w (v4u32, imm0_31);
49976     v2u64 __builtin_msa_mini_u_d (v2u64, imm0_31);
49977
49978     v16i8 __builtin_msa_mod_s_b (v16i8, v16i8);
49979     v8i16 __builtin_msa_mod_s_h (v8i16, v8i16);
49980     v4i32 __builtin_msa_mod_s_w (v4i32, v4i32);
49981     v2i64 __builtin_msa_mod_s_d (v2i64, v2i64);
49982
49983     v16u8 __builtin_msa_mod_u_b (v16u8, v16u8);
49984     v8u16 __builtin_msa_mod_u_h (v8u16, v8u16);
49985     v4u32 __builtin_msa_mod_u_w (v4u32, v4u32);
49986     v2u64 __builtin_msa_mod_u_d (v2u64, v2u64);
49987
49988     v16i8 __builtin_msa_move_v (v16i8);
49989
49990     v8i16 __builtin_msa_msub_q_h (v8i16, v8i16, v8i16);
49991     v4i32 __builtin_msa_msub_q_w (v4i32, v4i32, v4i32);
49992
49993     v8i16 __builtin_msa_msubr_q_h (v8i16, v8i16, v8i16);
49994     v4i32 __builtin_msa_msubr_q_w (v4i32, v4i32, v4i32);
49995
49996     v16i8 __builtin_msa_msubv_b (v16i8, v16i8, v16i8);
49997     v8i16 __builtin_msa_msubv_h (v8i16, v8i16, v8i16);
49998     v4i32 __builtin_msa_msubv_w (v4i32, v4i32, v4i32);
49999     v2i64 __builtin_msa_msubv_d (v2i64, v2i64, v2i64);
50000
50001     v8i16 __builtin_msa_mul_q_h (v8i16, v8i16);
50002     v4i32 __builtin_msa_mul_q_w (v4i32, v4i32);
50003
50004     v8i16 __builtin_msa_mulr_q_h (v8i16, v8i16);
50005     v4i32 __builtin_msa_mulr_q_w (v4i32, v4i32);
50006
50007     v16i8 __builtin_msa_mulv_b (v16i8, v16i8);
50008     v8i16 __builtin_msa_mulv_h (v8i16, v8i16);
50009     v4i32 __builtin_msa_mulv_w (v4i32, v4i32);
50010     v2i64 __builtin_msa_mulv_d (v2i64, v2i64);
50011
50012     v16i8 __builtin_msa_nloc_b (v16i8);
50013     v8i16 __builtin_msa_nloc_h (v8i16);
50014     v4i32 __builtin_msa_nloc_w (v4i32);
50015     v2i64 __builtin_msa_nloc_d (v2i64);
50016
50017     v16i8 __builtin_msa_nlzc_b (v16i8);
50018     v8i16 __builtin_msa_nlzc_h (v8i16);
50019     v4i32 __builtin_msa_nlzc_w (v4i32);
50020     v2i64 __builtin_msa_nlzc_d (v2i64);
50021
50022     v16u8 __builtin_msa_nor_v (v16u8, v16u8);
50023
50024     v16u8 __builtin_msa_nori_b (v16u8, imm0_255);
50025
50026     v16u8 __builtin_msa_or_v (v16u8, v16u8);
50027
50028     v16u8 __builtin_msa_ori_b (v16u8, imm0_255);
50029
50030     v16i8 __builtin_msa_pckev_b (v16i8, v16i8);
50031     v8i16 __builtin_msa_pckev_h (v8i16, v8i16);
50032     v4i32 __builtin_msa_pckev_w (v4i32, v4i32);
50033     v2i64 __builtin_msa_pckev_d (v2i64, v2i64);
50034
50035     v16i8 __builtin_msa_pckod_b (v16i8, v16i8);
50036     v8i16 __builtin_msa_pckod_h (v8i16, v8i16);
50037     v4i32 __builtin_msa_pckod_w (v4i32, v4i32);
50038     v2i64 __builtin_msa_pckod_d (v2i64, v2i64);
50039
50040     v16i8 __builtin_msa_pcnt_b (v16i8);
50041     v8i16 __builtin_msa_pcnt_h (v8i16);
50042     v4i32 __builtin_msa_pcnt_w (v4i32);
50043     v2i64 __builtin_msa_pcnt_d (v2i64);
50044
50045     v16i8 __builtin_msa_sat_s_b (v16i8, imm0_7);
50046     v8i16 __builtin_msa_sat_s_h (v8i16, imm0_15);
50047     v4i32 __builtin_msa_sat_s_w (v4i32, imm0_31);
50048     v2i64 __builtin_msa_sat_s_d (v2i64, imm0_63);
50049
50050     v16u8 __builtin_msa_sat_u_b (v16u8, imm0_7);
50051     v8u16 __builtin_msa_sat_u_h (v8u16, imm0_15);
50052     v4u32 __builtin_msa_sat_u_w (v4u32, imm0_31);
50053     v2u64 __builtin_msa_sat_u_d (v2u64, imm0_63);
50054
50055     v16i8 __builtin_msa_shf_b (v16i8, imm0_255);
50056     v8i16 __builtin_msa_shf_h (v8i16, imm0_255);
50057     v4i32 __builtin_msa_shf_w (v4i32, imm0_255);
50058
50059     v16i8 __builtin_msa_sld_b (v16i8, v16i8, i32);
50060     v8i16 __builtin_msa_sld_h (v8i16, v8i16, i32);
50061     v4i32 __builtin_msa_sld_w (v4i32, v4i32, i32);
50062     v2i64 __builtin_msa_sld_d (v2i64, v2i64, i32);
50063
50064     v16i8 __builtin_msa_sldi_b (v16i8, v16i8, imm0_15);
50065     v8i16 __builtin_msa_sldi_h (v8i16, v8i16, imm0_7);
50066     v4i32 __builtin_msa_sldi_w (v4i32, v4i32, imm0_3);
50067     v2i64 __builtin_msa_sldi_d (v2i64, v2i64, imm0_1);
50068
50069     v16i8 __builtin_msa_sll_b (v16i8, v16i8);
50070     v8i16 __builtin_msa_sll_h (v8i16, v8i16);
50071     v4i32 __builtin_msa_sll_w (v4i32, v4i32);
50072     v2i64 __builtin_msa_sll_d (v2i64, v2i64);
50073
50074     v16i8 __builtin_msa_slli_b (v16i8, imm0_7);
50075     v8i16 __builtin_msa_slli_h (v8i16, imm0_15);
50076     v4i32 __builtin_msa_slli_w (v4i32, imm0_31);
50077     v2i64 __builtin_msa_slli_d (v2i64, imm0_63);
50078
50079     v16i8 __builtin_msa_splat_b (v16i8, i32);
50080     v8i16 __builtin_msa_splat_h (v8i16, i32);
50081     v4i32 __builtin_msa_splat_w (v4i32, i32);
50082     v2i64 __builtin_msa_splat_d (v2i64, i32);
50083
50084     v16i8 __builtin_msa_splati_b (v16i8, imm0_15);
50085     v8i16 __builtin_msa_splati_h (v8i16, imm0_7);
50086     v4i32 __builtin_msa_splati_w (v4i32, imm0_3);
50087     v2i64 __builtin_msa_splati_d (v2i64, imm0_1);
50088
50089     v16i8 __builtin_msa_sra_b (v16i8, v16i8);
50090     v8i16 __builtin_msa_sra_h (v8i16, v8i16);
50091     v4i32 __builtin_msa_sra_w (v4i32, v4i32);
50092     v2i64 __builtin_msa_sra_d (v2i64, v2i64);
50093
50094     v16i8 __builtin_msa_srai_b (v16i8, imm0_7);
50095     v8i16 __builtin_msa_srai_h (v8i16, imm0_15);
50096     v4i32 __builtin_msa_srai_w (v4i32, imm0_31);
50097     v2i64 __builtin_msa_srai_d (v2i64, imm0_63);
50098
50099     v16i8 __builtin_msa_srar_b (v16i8, v16i8);
50100     v8i16 __builtin_msa_srar_h (v8i16, v8i16);
50101     v4i32 __builtin_msa_srar_w (v4i32, v4i32);
50102     v2i64 __builtin_msa_srar_d (v2i64, v2i64);
50103
50104     v16i8 __builtin_msa_srari_b (v16i8, imm0_7);
50105     v8i16 __builtin_msa_srari_h (v8i16, imm0_15);
50106     v4i32 __builtin_msa_srari_w (v4i32, imm0_31);
50107     v2i64 __builtin_msa_srari_d (v2i64, imm0_63);
50108
50109     v16i8 __builtin_msa_srl_b (v16i8, v16i8);
50110     v8i16 __builtin_msa_srl_h (v8i16, v8i16);
50111     v4i32 __builtin_msa_srl_w (v4i32, v4i32);
50112     v2i64 __builtin_msa_srl_d (v2i64, v2i64);
50113
50114     v16i8 __builtin_msa_srli_b (v16i8, imm0_7);
50115     v8i16 __builtin_msa_srli_h (v8i16, imm0_15);
50116     v4i32 __builtin_msa_srli_w (v4i32, imm0_31);
50117     v2i64 __builtin_msa_srli_d (v2i64, imm0_63);
50118
50119     v16i8 __builtin_msa_srlr_b (v16i8, v16i8);
50120     v8i16 __builtin_msa_srlr_h (v8i16, v8i16);
50121     v4i32 __builtin_msa_srlr_w (v4i32, v4i32);
50122     v2i64 __builtin_msa_srlr_d (v2i64, v2i64);
50123
50124     v16i8 __builtin_msa_srlri_b (v16i8, imm0_7);
50125     v8i16 __builtin_msa_srlri_h (v8i16, imm0_15);
50126     v4i32 __builtin_msa_srlri_w (v4i32, imm0_31);
50127     v2i64 __builtin_msa_srlri_d (v2i64, imm0_63);
50128
50129     void __builtin_msa_st_b (v16i8, void *, imm_n512_511);
50130     void __builtin_msa_st_h (v8i16, void *, imm_n1024_1022);
50131     void __builtin_msa_st_w (v4i32, void *, imm_n2048_2044);
50132     void __builtin_msa_st_d (v2i64, void *, imm_n4096_4088);
50133
50134     v16i8 __builtin_msa_subs_s_b (v16i8, v16i8);
50135     v8i16 __builtin_msa_subs_s_h (v8i16, v8i16);
50136     v4i32 __builtin_msa_subs_s_w (v4i32, v4i32);
50137     v2i64 __builtin_msa_subs_s_d (v2i64, v2i64);
50138
50139     v16u8 __builtin_msa_subs_u_b (v16u8, v16u8);
50140     v8u16 __builtin_msa_subs_u_h (v8u16, v8u16);
50141     v4u32 __builtin_msa_subs_u_w (v4u32, v4u32);
50142     v2u64 __builtin_msa_subs_u_d (v2u64, v2u64);
50143
50144     v16u8 __builtin_msa_subsus_u_b (v16u8, v16i8);
50145     v8u16 __builtin_msa_subsus_u_h (v8u16, v8i16);
50146     v4u32 __builtin_msa_subsus_u_w (v4u32, v4i32);
50147     v2u64 __builtin_msa_subsus_u_d (v2u64, v2i64);
50148
50149     v16i8 __builtin_msa_subsuu_s_b (v16u8, v16u8);
50150     v8i16 __builtin_msa_subsuu_s_h (v8u16, v8u16);
50151     v4i32 __builtin_msa_subsuu_s_w (v4u32, v4u32);
50152     v2i64 __builtin_msa_subsuu_s_d (v2u64, v2u64);
50153
50154     v16i8 __builtin_msa_subv_b (v16i8, v16i8);
50155     v8i16 __builtin_msa_subv_h (v8i16, v8i16);
50156     v4i32 __builtin_msa_subv_w (v4i32, v4i32);
50157     v2i64 __builtin_msa_subv_d (v2i64, v2i64);
50158
50159     v16i8 __builtin_msa_subvi_b (v16i8, imm0_31);
50160     v8i16 __builtin_msa_subvi_h (v8i16, imm0_31);
50161     v4i32 __builtin_msa_subvi_w (v4i32, imm0_31);
50162     v2i64 __builtin_msa_subvi_d (v2i64, imm0_31);
50163
50164     v16i8 __builtin_msa_vshf_b (v16i8, v16i8, v16i8);
50165     v8i16 __builtin_msa_vshf_h (v8i16, v8i16, v8i16);
50166     v4i32 __builtin_msa_vshf_w (v4i32, v4i32, v4i32);
50167     v2i64 __builtin_msa_vshf_d (v2i64, v2i64, v2i64);
50168
50169     v16u8 __builtin_msa_xor_v (v16u8, v16u8);
50170
50171     v16u8 __builtin_msa_xori_b (v16u8, imm0_255);
50172
50173
50174File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: MSP430 Built-in Functions,  Prev: MIPS SIMD Architecture (MSA) Support,  Up: Target Builtins
50175
501766.60.18 Other MIPS Built-in Functions
50177-------------------------------------
50178
50179GCC provides other MIPS-specific built-in functions:
50180
50181'void __builtin_mips_cache (int OP, const volatile void *ADDR)'
50182     Insert a 'cache' instruction with operands OP and ADDR.  GCC
50183     defines the preprocessor macro '___GCC_HAVE_BUILTIN_MIPS_CACHE'
50184     when this function is available.
50185
50186'unsigned int __builtin_mips_get_fcsr (void)'
50187'void __builtin_mips_set_fcsr (unsigned int VALUE)'
50188     Get and set the contents of the floating-point control and status
50189     register (FPU control register 31).  These functions are only
50190     available in hard-float code but can be called in both MIPS16 and
50191     non-MIPS16 contexts.
50192
50193     '__builtin_mips_set_fcsr' can be used to change any bit of the
50194     register except the condition codes, which GCC assumes are
50195     preserved.
50196
50197
50198File: gcc.info,  Node: MSP430 Built-in Functions,  Next: NDS32 Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
50199
502006.60.19 MSP430 Built-in Functions
50201---------------------------------
50202
50203GCC provides a couple of special builtin functions to aid in the writing
50204of interrupt handlers in C.
50205
50206'__bic_SR_register_on_exit (int MASK)'
50207     This clears the indicated bits in the saved copy of the status
50208     register currently residing on the stack.  This only works inside
50209     interrupt handlers and the changes to the status register will only
50210     take affect once the handler returns.
50211
50212'__bis_SR_register_on_exit (int MASK)'
50213     This sets the indicated bits in the saved copy of the status
50214     register currently residing on the stack.  This only works inside
50215     interrupt handlers and the changes to the status register will only
50216     take affect once the handler returns.
50217
50218'__delay_cycles (long long CYCLES)'
50219     This inserts an instruction sequence that takes exactly CYCLES
50220     cycles (between 0 and about 17E9) to complete.  The inserted
50221     sequence may use jumps, loops, or no-ops, and does not interfere
50222     with any other instructions.  Note that CYCLES must be a
50223     compile-time constant integer - that is, you must pass a number,
50224     not a variable that may be optimized to a constant later.  The
50225     number of cycles delayed by this builtin is exact.
50226
50227
50228File: gcc.info,  Node: NDS32 Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MSP430 Built-in Functions,  Up: Target Builtins
50229
502306.60.20 NDS32 Built-in Functions
50231--------------------------------
50232
50233These built-in functions are available for the NDS32 target:
50234
50235 -- Built-in Function: void __builtin_nds32_isync (int *ADDR)
50236     Insert an ISYNC instruction into the instruction stream where ADDR
50237     is an instruction address for serialization.
50238
50239 -- Built-in Function: void __builtin_nds32_isb (void)
50240     Insert an ISB instruction into the instruction stream.
50241
50242 -- Built-in Function: int __builtin_nds32_mfsr (int SR)
50243     Return the content of a system register which is mapped by SR.
50244
50245 -- Built-in Function: int __builtin_nds32_mfusr (int USR)
50246     Return the content of a user space register which is mapped by USR.
50247
50248 -- Built-in Function: void __builtin_nds32_mtsr (int VALUE, int SR)
50249     Move the VALUE to a system register which is mapped by SR.
50250
50251 -- Built-in Function: void __builtin_nds32_mtusr (int VALUE, int USR)
50252     Move the VALUE to a user space register which is mapped by USR.
50253
50254 -- Built-in Function: void __builtin_nds32_setgie_en (void)
50255     Enable global interrupt.
50256
50257 -- Built-in Function: void __builtin_nds32_setgie_dis (void)
50258     Disable global interrupt.
50259
50260
50261File: gcc.info,  Node: picoChip Built-in Functions,  Next: Basic PowerPC Built-in Functions,  Prev: NDS32 Built-in Functions,  Up: Target Builtins
50262
502636.60.21 picoChip Built-in Functions
50264-----------------------------------
50265
50266GCC provides an interface to selected machine instructions from the
50267picoChip instruction set.
50268
50269'int __builtin_sbc (int VALUE)'
50270     Sign bit count.  Return the number of consecutive bits in VALUE
50271     that have the same value as the sign bit.  The result is the number
50272     of leading sign bits minus one, giving the number of redundant sign
50273     bits in VALUE.
50274
50275'int __builtin_byteswap (int VALUE)'
50276     Byte swap.  Return the result of swapping the upper and lower bytes
50277     of VALUE.
50278
50279'int __builtin_brev (int VALUE)'
50280     Bit reversal.  Return the result of reversing the bits in VALUE.
50281     Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
50282     on.
50283
50284'int __builtin_adds (int X, int Y)'
50285     Saturating addition.  Return the result of adding X and Y, storing
50286     the value 32767 if the result overflows.
50287
50288'int __builtin_subs (int X, int Y)'
50289     Saturating subtraction.  Return the result of subtracting Y from X,
50290     storing the value -32768 if the result overflows.
50291
50292'void __builtin_halt (void)'
50293     Halt.  The processor stops execution.  This built-in is useful for
50294     implementing assertions.
50295
50296
50297File: gcc.info,  Node: Basic PowerPC Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
50298
502996.60.22 Basic PowerPC Built-in Functions
50300----------------------------------------
50301
50302* Menu:
50303
50304* Basic PowerPC Built-in Functions Available on all Configurations::
50305* Basic PowerPC Built-in Functions Available on ISA 2.05::
50306* Basic PowerPC Built-in Functions Available on ISA 2.06::
50307* Basic PowerPC Built-in Functions Available on ISA 2.07::
50308* Basic PowerPC Built-in Functions Available on ISA 3.0::
50309* Basic PowerPC Built-in Functions Available on ISA 3.1::
50310
50311This section describes PowerPC built-in functions that do not require
50312the inclusion of any special header files to declare prototypes or
50313provide macro definitions.  The sections that follow describe additional
50314PowerPC built-in functions.
50315
50316
50317File: 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
50318
503196.60.22.1 Basic PowerPC Built-in Functions Available on all Configurations
50320..........................................................................
50321
50322 -- Built-in Function: void __builtin_cpu_init (void)
50323     This function is a 'nop' on the PowerPC platform and is included
50324     solely to maintain API compatibility with the x86 builtins.
50325
50326 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
50327     This function returns a value of '1' if the run-time CPU is of type
50328     CPUNAME and returns '0' otherwise
50329
50330     The '__builtin_cpu_is' function requires GLIBC 2.23 or newer which
50331     exports the hardware capability bits.  GCC defines the macro
50332     '__BUILTIN_CPU_SUPPORTS__' if the '__builtin_cpu_supports' built-in
50333     function is fully supported.
50334
50335     If GCC was configured to use a GLIBC before 2.23, the built-in
50336     function '__builtin_cpu_is' always returns a 0 and the compiler
50337     issues a warning.
50338
50339     The following CPU names can be detected:
50340
50341     'power10'
50342          IBM POWER10 Server CPU.
50343     'power9'
50344          IBM POWER9 Server CPU.
50345     'power8'
50346          IBM POWER8 Server CPU.
50347     'power7'
50348          IBM POWER7 Server CPU.
50349     'power6x'
50350          IBM POWER6 Server CPU (RAW mode).
50351     'power6'
50352          IBM POWER6 Server CPU (Architected mode).
50353     'power5+'
50354          IBM POWER5+ Server CPU.
50355     'power5'
50356          IBM POWER5 Server CPU.
50357     'ppc970'
50358          IBM 970 Server CPU (ie, Apple G5).
50359     'power4'
50360          IBM POWER4 Server CPU.
50361     'ppca2'
50362          IBM A2 64-bit Embedded CPU
50363     'ppc476'
50364          IBM PowerPC 476FP 32-bit Embedded CPU.
50365     'ppc464'
50366          IBM PowerPC 464 32-bit Embedded CPU.
50367     'ppc440'
50368          PowerPC 440 32-bit Embedded CPU.
50369     'ppc405'
50370          PowerPC 405 32-bit Embedded CPU.
50371     'ppc-cell-be'
50372          IBM PowerPC Cell Broadband Engine Architecture CPU.
50373
50374     Here is an example:
50375          #ifdef __BUILTIN_CPU_SUPPORTS__
50376            if (__builtin_cpu_is ("power8"))
50377              {
50378                 do_power8 (); // POWER8 specific implementation.
50379              }
50380            else
50381          #endif
50382              {
50383                 do_generic (); // Generic implementation.
50384              }
50385
50386 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
50387     This function returns a value of '1' if the run-time CPU supports
50388     the HWCAP feature FEATURE and returns '0' otherwise.
50389
50390     The '__builtin_cpu_supports' function requires GLIBC 2.23 or newer
50391     which exports the hardware capability bits.  GCC defines the macro
50392     '__BUILTIN_CPU_SUPPORTS__' if the '__builtin_cpu_supports' built-in
50393     function is fully supported.
50394
50395     If GCC was configured to use a GLIBC before 2.23, the built-in
50396     function '__builtin_cpu_supports' always returns a 0 and the
50397     compiler issues a warning.
50398
50399     The following features can be detected:
50400
50401     '4xxmac'
50402          4xx CPU has a Multiply Accumulator.
50403     'altivec'
50404          CPU has a SIMD/Vector Unit.
50405     'arch_2_05'
50406          CPU supports ISA 2.05 (eg, POWER6)
50407     'arch_2_06'
50408          CPU supports ISA 2.06 (eg, POWER7)
50409     'arch_2_07'
50410          CPU supports ISA 2.07 (eg, POWER8)
50411     'arch_3_00'
50412          CPU supports ISA 3.0 (eg, POWER9)
50413     'arch_3_1'
50414          CPU supports ISA 3.1 (eg, POWER10)
50415     'archpmu'
50416          CPU supports the set of compatible performance monitoring
50417          events.
50418     'booke'
50419          CPU supports the Embedded ISA category.
50420     'cellbe'
50421          CPU has a CELL broadband engine.
50422     'darn'
50423          CPU supports the 'darn' (deliver a random number) instruction.
50424     'dfp'
50425          CPU has a decimal floating point unit.
50426     'dscr'
50427          CPU supports the data stream control register.
50428     'ebb'
50429          CPU supports event base branching.
50430     'efpdouble'
50431          CPU has a SPE double precision floating point unit.
50432     'efpsingle'
50433          CPU has a SPE single precision floating point unit.
50434     'fpu'
50435          CPU has a floating point unit.
50436     'htm'
50437          CPU has hardware transaction memory instructions.
50438     'htm-nosc'
50439          Kernel aborts hardware transactions when a syscall is made.
50440     'htm-no-suspend'
50441          CPU supports hardware transaction memory but does not support
50442          the 'tsuspend.' instruction.
50443     'ic_snoop'
50444          CPU supports icache snooping capabilities.
50445     'ieee128'
50446          CPU supports 128-bit IEEE binary floating point instructions.
50447     'isel'
50448          CPU supports the integer select instruction.
50449     'mma'
50450          CPU supports the matrix-multiply assist instructions.
50451     'mmu'
50452          CPU has a memory management unit.
50453     'notb'
50454          CPU does not have a timebase (eg, 601 and 403gx).
50455     'pa6t'
50456          CPU supports the PA Semi 6T CORE ISA.
50457     'power4'
50458          CPU supports ISA 2.00 (eg, POWER4)
50459     'power5'
50460          CPU supports ISA 2.02 (eg, POWER5)
50461     'power5+'
50462          CPU supports ISA 2.03 (eg, POWER5+)
50463     'power6x'
50464          CPU supports ISA 2.05 (eg, POWER6) extended opcodes mffgpr and
50465          mftgpr.
50466     'ppc32'
50467          CPU supports 32-bit mode execution.
50468     'ppc601'
50469          CPU supports the old POWER ISA (eg, 601)
50470     'ppc64'
50471          CPU supports 64-bit mode execution.
50472     'ppcle'
50473          CPU supports a little-endian mode that uses address swizzling.
50474     'scv'
50475          Kernel supports system call vectored.
50476     'smt'
50477          CPU support simultaneous multi-threading.
50478     'spe'
50479          CPU has a signal processing extension unit.
50480     'tar'
50481          CPU supports the target address register.
50482     'true_le'
50483          CPU supports true little-endian mode.
50484     'ucache'
50485          CPU has unified I/D cache.
50486     'vcrypto'
50487          CPU supports the vector cryptography instructions.
50488     'vsx'
50489          CPU supports the vector-scalar extension.
50490
50491     Here is an example:
50492          #ifdef __BUILTIN_CPU_SUPPORTS__
50493            if (__builtin_cpu_supports ("fpu"))
50494              {
50495                 asm("fadd %0,%1,%2" : "=d"(dst) : "d"(src1), "d"(src2));
50496              }
50497            else
50498          #endif
50499              {
50500                 dst = __fadd (src1, src2); // Software FP addition function.
50501              }
50502
50503 The following built-in functions are also available on all PowerPC
50504processors:
50505     uint64_t __builtin_ppc_get_timebase ();
50506     unsigned long __builtin_ppc_mftb ();
50507     double __builtin_unpack_ibm128 (__ibm128, int);
50508     __ibm128 __builtin_pack_ibm128 (double, double);
50509     double __builtin_mffs (void);
50510     void __builtin_mtfsf (const int, double);
50511     void __builtin_mtfsb0 (const int);
50512     void __builtin_mtfsb1 (const int);
50513     void __builtin_set_fpscr_rn (int);
50514
50515 The '__builtin_ppc_get_timebase' and '__builtin_ppc_mftb' functions
50516generate instructions to read the Time Base Register.  The
50517'__builtin_ppc_get_timebase' function may generate multiple instructions
50518and always returns the 64 bits of the Time Base Register.  The
50519'__builtin_ppc_mftb' function always generates one instruction and
50520returns the Time Base Register value as an unsigned long, throwing away
50521the most significant word on 32-bit environments.  The '__builtin_mffs'
50522return the value of the FPSCR register.  Note, ISA 3.0 supports the
50523'__builtin_mffsl()' which permits software to read the control and
50524non-sticky status bits in the FSPCR without the higher latency
50525associated with accessing the sticky status bits.  The '__builtin_mtfsf'
50526takes a constant 8-bit integer field mask and a double precision
50527floating point argument and generates the 'mtfsf' (extended mnemonic)
50528instruction to write new values to selected fields of the FPSCR. The
50529'__builtin_mtfsb0' and '__builtin_mtfsb1' take the bit to change as an
50530argument.  The valid bit range is between 0 and 31.  The builtins map to
50531the 'mtfsb0' and 'mtfsb1' instructions which take the argument and add
5053232.  Hence these instructions only modify the FPSCR[32:63] bits by
50533changing the specified bit to a zero or one respectively.  The
50534'__builtin_set_fpscr_rn' builtin allows changing both of the floating
50535point rounding mode bits.  The argument is a 2-bit value.  The argument
50536can either be a 'const int' or stored in a variable.  The builtin uses
50537the ISA 3.0 instruction 'mffscrn' if available, otherwise it reads the
50538FPSCR, masks the current rounding mode bits out and OR's in the new
50539value.
50540
50541
50542File: 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
50543
505446.60.22.2 Basic PowerPC Built-in Functions Available on ISA 2.05
50545................................................................
50546
50547The basic built-in functions described in this section are available on
50548the PowerPC family of processors starting with ISA 2.05 or later.
50549Unless specific options are explicitly disabled on the command line,
50550specifying option '-mcpu=power6' has the effect of enabling the
50551'-mpowerpc64', '-mpowerpc-gpopt', '-mpowerpc-gfxopt', '-mmfcrf',
50552'-mpopcntb', '-mfprnd', '-mcmpb', '-mhard-dfp', and '-mrecip-precision'
50553options.  Specify the '-maltivec' option explicitly in combination with
50554the above options if desired.
50555
50556 The following functions require option '-mcmpb'.
50557     unsigned long long __builtin_cmpb (unsigned long long int, unsigned long long int);
50558     unsigned int __builtin_cmpb (unsigned int, unsigned int);
50559
50560 The '__builtin_cmpb' function performs a byte-wise compare on the
50561contents of its two arguments, returning the result of the byte-wise
50562comparison as the returned value.  For each byte comparison, the
50563corresponding byte of the return value holds 0xff if the input bytes are
50564equal and 0 if the input bytes are not equal.  If either of the
50565arguments to this built-in function is wider than 32 bits, the function
50566call expands into the form that expects 'unsigned long long int'
50567arguments which is only available on 64-bit targets.
50568
50569 The following built-in functions are available when hardware decimal
50570floating point ('-mhard-dfp') is available:
50571     void __builtin_set_fpscr_drn(int);
50572     _Decimal64 __builtin_ddedpd (int, _Decimal64);
50573     _Decimal128 __builtin_ddedpdq (int, _Decimal128);
50574     _Decimal64 __builtin_denbcd (int, _Decimal64);
50575     _Decimal128 __builtin_denbcdq (int, _Decimal128);
50576     _Decimal64 __builtin_diex (long long, _Decimal64);
50577     _Decimal128 _builtin_diexq (long long, _Decimal128);
50578     _Decimal64 __builtin_dscli (_Decimal64, int);
50579     _Decimal128 __builtin_dscliq (_Decimal128, int);
50580     _Decimal64 __builtin_dscri (_Decimal64, int);
50581     _Decimal128 __builtin_dscriq (_Decimal128, int);
50582     long long __builtin_dxex (_Decimal64);
50583     long long __builtin_dxexq (_Decimal128);
50584     _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
50585     unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
50586
50587     The __builtin_set_fpscr_drn builtin allows changing the three decimal
50588     floating point rounding mode bits.  The argument is a 3-bit value.  The
50589     argument can either be a const int or the value can be stored in
50590     a variable.
50591     The builtin uses the ISA 3.0 instruction mffscdrn if available.
50592     Otherwise the builtin reads the FPSCR, masks the current decimal rounding
50593     mode bits out and OR's in the new value.
50594
50595
50596 The following functions require '-mhard-float', '-mpowerpc-gfxopt', and
50597'-mpopcntb' options.
50598
50599     double __builtin_recipdiv (double, double);
50600     float __builtin_recipdivf (float, float);
50601     double __builtin_rsqrt (double);
50602     float __builtin_rsqrtf (float);
50603
50604 The 'vec_rsqrt', '__builtin_rsqrt', and '__builtin_rsqrtf' functions
50605generate multiple instructions to implement the reciprocal sqrt
50606functionality using reciprocal sqrt estimate instructions.
50607
50608 The '__builtin_recipdiv', and '__builtin_recipdivf' functions generate
50609multiple instructions to implement division using the reciprocal
50610estimate instructions.
50611
50612 The following functions require '-mhard-float' and '-mmultiple'
50613options.
50614
50615 The '__builtin_unpack_longdouble' function takes a 'long double'
50616argument and a compile time constant of 0 or 1.  If the constant is 0,
50617the first 'double' within the 'long double' is returned, otherwise the
50618second 'double' is returned.  The '__builtin_unpack_longdouble' function
50619is only available if 'long double' uses the IBM extended double
50620representation.
50621
50622 The '__builtin_pack_longdouble' function takes two 'double' arguments
50623and returns a 'long double' value that combines the two arguments.  The
50624'__builtin_pack_longdouble' function is only available if 'long double'
50625uses the IBM extended double representation.
50626
50627 The '__builtin_unpack_ibm128' function takes a '__ibm128' argument and
50628a compile time constant of 0 or 1.  If the constant is 0, the first
50629'double' within the '__ibm128' is returned, otherwise the second
50630'double' is returned.
50631
50632 The '__builtin_pack_ibm128' function takes two 'double' arguments and
50633returns a '__ibm128' value that combines the two arguments.
50634
50635 Additional built-in functions are available for the 64-bit PowerPC
50636family of processors, for efficient use of 128-bit floating point
50637('__float128') values.
50638
50639
50640File: 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
50641
506426.60.22.3 Basic PowerPC Built-in Functions Available on ISA 2.06
50643................................................................
50644
50645The basic built-in functions described in this section are available on
50646the PowerPC family of processors starting with ISA 2.05 or later.
50647Unless specific options are explicitly disabled on the command line,
50648specifying option '-mcpu=power7' has the effect of enabling all the same
50649options as for '-mcpu=power6' in addition to the '-maltivec',
50650'-mpopcntd', and '-mvsx' options.
50651
50652 The following basic built-in functions require '-mpopcntd':
50653     unsigned int __builtin_addg6s (unsigned int, unsigned int);
50654     long long __builtin_bpermd (long long, long long);
50655     unsigned int __builtin_cbcdtd (unsigned int);
50656     unsigned int __builtin_cdtbcd (unsigned int);
50657     long long __builtin_divde (long long, long long);
50658     unsigned long long __builtin_divdeu (unsigned long long, unsigned long long);
50659     int __builtin_divwe (int, int);
50660     unsigned int __builtin_divweu (unsigned int, unsigned int);
50661     vector __int128 __builtin_pack_vector_int128 (long long, long long);
50662     void __builtin_rs6000_speculation_barrier (void);
50663     long long __builtin_unpack_vector_int128 (vector __int128, signed char);
50664
50665 Of these, the '__builtin_divde' and '__builtin_divdeu' functions
50666require a 64-bit environment.
50667
50668 The following basic built-in functions, which are also supported on x86
50669targets, require '-mfloat128'.
50670     __float128 __builtin_fabsq (__float128);
50671     __float128 __builtin_copysignq (__float128, __float128);
50672     __float128 __builtin_infq (void);
50673     __float128 __builtin_huge_valq (void);
50674     __float128 __builtin_nanq (void);
50675     __float128 __builtin_nansq (void);
50676
50677     __float128 __builtin_sqrtf128 (__float128);
50678     __float128 __builtin_fmaf128 (__float128, __float128, __float128);
50679
50680
50681File: 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
50682
506836.60.22.4 Basic PowerPC Built-in Functions Available on ISA 2.07
50684................................................................
50685
50686The basic built-in functions described in this section are available on
50687the PowerPC family of processors starting with ISA 2.07 or later.
50688Unless specific options are explicitly disabled on the command line,
50689specifying option '-mcpu=power8' has the effect of enabling all the same
50690options as for '-mcpu=power7' in addition to the '-mpower8-fusion',
50691'-mpower8-vector', '-mcrypto', '-mhtm', '-mquad-memory', and
50692'-mquad-memory-atomic' options.
50693
50694 This section intentionally empty.
50695
50696
50697File: gcc.info,  Node: Basic PowerPC Built-in Functions Available on ISA 3.0,  Next: Basic PowerPC Built-in Functions Available on ISA 3.1,  Prev: Basic PowerPC Built-in Functions Available on ISA 2.07,  Up: Basic PowerPC Built-in Functions
50698
506996.60.22.5 Basic PowerPC Built-in Functions Available on ISA 3.0
50700...............................................................
50701
50702The basic built-in functions described in this section are available on
50703the PowerPC family of processors starting with ISA 3.0 or later.  Unless
50704specific options are explicitly disabled on the command line, specifying
50705option '-mcpu=power9' has the effect of enabling all the same options as
50706for '-mcpu=power8' in addition to the '-misel' option.
50707
50708 The following built-in functions are available on Linux 64-bit systems
50709that use the ISA 3.0 instruction set ('-mcpu=power9'):
50710
50711'__float128 __builtin_addf128_round_to_odd (__float128, __float128)'
50712     Perform a 128-bit IEEE floating point add using round to odd as the
50713     rounding mode.
50714
50715'__float128 __builtin_subf128_round_to_odd (__float128, __float128)'
50716     Perform a 128-bit IEEE floating point subtract using round to odd
50717     as the rounding mode.
50718
50719'__float128 __builtin_mulf128_round_to_odd (__float128, __float128)'
50720     Perform a 128-bit IEEE floating point multiply using round to odd
50721     as the rounding mode.
50722
50723'__float128 __builtin_divf128_round_to_odd (__float128, __float128)'
50724     Perform a 128-bit IEEE floating point divide using round to odd as
50725     the rounding mode.
50726
50727'__float128 __builtin_sqrtf128_round_to_odd (__float128)'
50728     Perform a 128-bit IEEE floating point square root using round to
50729     odd as the rounding mode.
50730
50731'__float128 __builtin_fmaf128_round_to_odd (__float128, __float128, __float128)'
50732     Perform a 128-bit IEEE floating point fused multiply and add
50733     operation using round to odd as the rounding mode.
50734
50735'double __builtin_truncf128_round_to_odd (__float128)'
50736     Convert a 128-bit IEEE floating point value to 'double' using round
50737     to odd as the rounding mode.
50738
50739 The following additional built-in functions are also available for the
50740PowerPC family of processors, starting with ISA 3.0 or later:
50741     long long __builtin_darn (void);
50742     long long __builtin_darn_raw (void);
50743     int __builtin_darn_32 (void);
50744
50745 The '__builtin_darn' and '__builtin_darn_raw' functions require a
5074664-bit environment supporting ISA 3.0 or later.  The '__builtin_darn'
50747function provides a 64-bit conditioned random number.  The
50748'__builtin_darn_raw' function provides a 64-bit raw random number.  The
50749'__builtin_darn_32' function provides a 32-bit conditioned random
50750number.
50751
50752 The following additional built-in functions are also available for the
50753PowerPC family of processors, starting with ISA 3.0 or later:
50754
50755     int __builtin_byte_in_set (unsigned char u, unsigned long long set);
50756     int __builtin_byte_in_range (unsigned char u, unsigned int range);
50757     int __builtin_byte_in_either_range (unsigned char u, unsigned int ranges);
50758
50759     int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal64 value);
50760     int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal128 value);
50761     int __builtin_dfp_dtstsfi_lt_dd (unsigned int comparison, _Decimal64 value);
50762     int __builtin_dfp_dtstsfi_lt_td (unsigned int comparison, _Decimal128 value);
50763
50764     int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal64 value);
50765     int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal128 value);
50766     int __builtin_dfp_dtstsfi_gt_dd (unsigned int comparison, _Decimal64 value);
50767     int __builtin_dfp_dtstsfi_gt_td (unsigned int comparison, _Decimal128 value);
50768
50769     int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal64 value);
50770     int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal128 value);
50771     int __builtin_dfp_dtstsfi_eq_dd (unsigned int comparison, _Decimal64 value);
50772     int __builtin_dfp_dtstsfi_eq_td (unsigned int comparison, _Decimal128 value);
50773
50774     int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal64 value);
50775     int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal128 value);
50776     int __builtin_dfp_dtstsfi_ov_dd (unsigned int comparison, _Decimal64 value);
50777     int __builtin_dfp_dtstsfi_ov_td (unsigned int comparison, _Decimal128 value);
50778
50779     double __builtin_mffsl(void);
50780
50781 The '__builtin_byte_in_set' function requires a 64-bit environment
50782supporting ISA 3.0 or later.  This function returns a non-zero value if
50783and only if its 'u' argument exactly equals one of the eight bytes
50784contained within its 64-bit 'set' argument.
50785
50786 The '__builtin_byte_in_range' and '__builtin_byte_in_either_range'
50787require an environment supporting ISA 3.0 or later.  For these two
50788functions, the 'range' argument is encoded as 4 bytes, organized as
50789'hi_1:lo_1:hi_2:lo_2'.  The '__builtin_byte_in_range' function returns a
50790non-zero value if and only if its 'u' argument is within the range
50791bounded between 'lo_2' and 'hi_2' inclusive.  The
50792'__builtin_byte_in_either_range' function returns non-zero if and only
50793if its 'u' argument is within either the range bounded between 'lo_1'
50794and 'hi_1' inclusive or the range bounded between 'lo_2' and 'hi_2'
50795inclusive.
50796
50797 The '__builtin_dfp_dtstsfi_lt' function returns a non-zero value if and
50798only if the number of signficant digits of its 'value' argument is less
50799than its 'comparison' argument.  The '__builtin_dfp_dtstsfi_lt_dd' and
50800'__builtin_dfp_dtstsfi_lt_td' functions behave similarly, but require
50801that the type of the 'value' argument be '__Decimal64' and
50802'__Decimal128' respectively.
50803
50804 The '__builtin_dfp_dtstsfi_gt' function returns a non-zero value if and
50805only if the number of signficant digits of its 'value' argument is
50806greater than its 'comparison' argument.  The
50807'__builtin_dfp_dtstsfi_gt_dd' and '__builtin_dfp_dtstsfi_gt_td'
50808functions behave similarly, but require that the type of the 'value'
50809argument be '__Decimal64' and '__Decimal128' respectively.
50810
50811 The '__builtin_dfp_dtstsfi_eq' function returns a non-zero value if and
50812only if the number of signficant digits of its 'value' argument equals
50813its 'comparison' argument.  The '__builtin_dfp_dtstsfi_eq_dd' and
50814'__builtin_dfp_dtstsfi_eq_td' functions behave similarly, but require
50815that the type of the 'value' argument be '__Decimal64' and
50816'__Decimal128' respectively.
50817
50818 The '__builtin_dfp_dtstsfi_ov' function returns a non-zero value if and
50819only if its 'value' argument has an undefined number of significant
50820digits, such as when 'value' is an encoding of 'NaN'.  The
50821'__builtin_dfp_dtstsfi_ov_dd' and '__builtin_dfp_dtstsfi_ov_td'
50822functions behave similarly, but require that the type of the 'value'
50823argument be '__Decimal64' and '__Decimal128' respectively.
50824
50825 The '__builtin_mffsl' uses the ISA 3.0 'mffsl' instruction to read the
50826FPSCR. The instruction is a lower latency version of the 'mffs'
50827instruction.  If the 'mffsl' instruction is not available, then the
50828builtin uses the older 'mffs' instruction to read the FPSCR.
50829
50830
50831File: gcc.info,  Node: Basic PowerPC Built-in Functions Available on ISA 3.1,  Prev: Basic PowerPC Built-in Functions Available on ISA 3.0,  Up: Basic PowerPC Built-in Functions
50832
508336.60.22.6 Basic PowerPC Built-in Functions Available on ISA 3.1
50834...............................................................
50835
50836The basic built-in functions described in this section are available on
50837the PowerPC family of processors starting with ISA 3.1.  Unless specific
50838options are explicitly disabled on the command line, specifying option
50839'-mcpu=power10' has the effect of enabling all the same options as for
50840'-mcpu=power9'.
50841
50842 The following built-in functions are available on Linux 64-bit systems
50843that use a future architecture instruction set ('-mcpu=power10'):
50844
50845unsigned long long
50846__builtin_cfuged (unsigned long long, unsigned long long)
50847 Perform a 64-bit centrifuge operation, as if implemented by the
50848'cfuged' instruction.
50849
50850unsigned long long
50851__builtin_cntlzdm (unsigned long long, unsigned long long)
50852 Perform a 64-bit count leading zeros operation under mask, as if
50853implemented by the 'cntlzdm' instruction.
50854
50855unsigned long long
50856__builtin_cnttzdm (unsigned long long, unsigned long long)
50857 Perform a 64-bit count trailing zeros operation under mask, as if
50858implemented by the 'cnttzdm' instruction.
50859
50860unsigned long long
50861__builtin_pdepd (unsigned long long, unsigned long long)
50862 Perform a 64-bit parallel bits deposit operation, as if implemented by
50863the 'pdepd' instruction.
50864
50865unsigned long long
50866__builtin_pextd (unsigned long long, unsigned long long)
50867 Perform a 64-bit parallel bits extract operation, as if implemented by
50868the 'pextd' instruction.
50869
50870vector signed __int128 vsx_xl_sext (signed long long, signed char *)
50871
50872vector signed __int128 vsx_xl_sext (signed long long, signed short *)
50873
50874vector signed __int128 vsx_xl_sext (signed long long, signed int *)
50875
50876vector signed __int128 vsx_xl_sext (signed long long, signed long long *)
50877
50878vector unsigned __int128 vsx_xl_zext (signed long long, unsigned char *)
50879
50880vector unsigned __int128 vsx_xl_zext (signed long long, unsigned short *)
50881
50882vector unsigned __int128 vsx_xl_zext (signed long long, unsigned int *)
50883
50884vector unsigned __int128 vsx_xl_zext (signed long long, unsigned long long *)
50885
50886 Load (and sign extend) to an __int128 vector, as if implemented by the
50887ISA 3.1 'lxvrbx', 'lxvrhx', 'lxvrwx', and 'lxvrdx' instructions.
50888
50889void vec_xst_trunc (vector signed __int128, signed long long, signed char *)
50890
50891void vec_xst_trunc (vector signed __int128, signed long long, signed short *)
50892
50893void vec_xst_trunc (vector signed __int128, signed long long, signed int *)
50894
50895void vec_xst_trunc (vector signed __int128, signed long long, signed long long *)
50896
50897void vec_xst_trunc (vector unsigned __int128, signed long long, unsigned char *)
50898
50899void vec_xst_trunc (vector unsigned __int128, signed long long, unsigned short *)
50900
50901void vec_xst_trunc (vector unsigned __int128, signed long long, unsigned int *)
50902
50903void vec_xst_trunc (vector unsigned __int128, signed long long, unsigned long long *)
50904
50905 Truncate and store the rightmost element of a vector, as if implemented
50906by the ISA 3.1 'stxvrbx', 'stxvrhx', 'stxvrwx', and 'stxvrdx'
50907instructions.
50908
50909
50910File: 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
50911
509126.60.23 PowerPC AltiVec/VSX Built-in Functions
50913----------------------------------------------
50914
50915GCC provides an interface for the PowerPC family of processors to access
50916the AltiVec operations described in Motorola's AltiVec Programming
50917Interface Manual.  The interface is made available by including
50918'<altivec.h>' and using '-maltivec' and '-mabi=altivec'.  The interface
50919supports the following vector types.
50920
50921     vector unsigned char
50922     vector signed char
50923     vector bool char
50924
50925     vector unsigned short
50926     vector signed short
50927     vector bool short
50928     vector pixel
50929
50930     vector unsigned int
50931     vector signed int
50932     vector bool int
50933     vector float
50934
50935 GCC's implementation of the high-level language interface available
50936from C and C++ code differs from Motorola's documentation in several
50937ways.
50938
50939   * A vector constant is a list of constant expressions within curly
50940     braces.
50941
50942   * A vector initializer requires no cast if the vector constant is of
50943     the same type as the variable it is initializing.
50944
50945   * If 'signed' or 'unsigned' is omitted, the signedness of the vector
50946     type is the default signedness of the base type.  The default
50947     varies depending on the operating system, so a portable program
50948     should always specify the signedness.
50949
50950   * Compiling with '-maltivec' adds keywords '__vector', 'vector',
50951     '__pixel', 'pixel', '__bool' and 'bool'.  When compiling ISO C, the
50952     context-sensitive substitution of the keywords 'vector', 'pixel'
50953     and 'bool' is disabled.  To use them, you must include
50954     '<altivec.h>' instead.
50955
50956   * GCC allows using a 'typedef' name as the type specifier for a
50957     vector type, but only under the following circumstances:
50958
50959        * When using '__vector' instead of 'vector'; for example,
50960
50961               typedef signed short int16;
50962               __vector int16 data;
50963
50964        * When using 'vector' in keyword-and-predefine mode; for
50965          example,
50966
50967               typedef signed short int16;
50968               vector int16 data;
50969
50970          Note that keyword-and-predefine mode is enabled by disabling
50971          GNU extensions (e.g., by using '-std=c11') and including
50972          '<altivec.h>'.
50973
50974   * For C, overloaded functions are implemented with macros so the
50975     following does not work:
50976
50977            vec_add ((vector signed int){1, 2, 3, 4}, foo);
50978
50979     Since 'vec_add' is a macro, the vector constant in the example is
50980     treated as four separate arguments.  Wrap the entire argument in
50981     parentheses for this to work.
50982
50983 _Note:_ Only the '<altivec.h>' interface is supported.  Internally, GCC
50984uses built-in functions to achieve the functionality in the
50985aforementioned header file, but they are not supported and are subject
50986to change without notice.
50987
50988 GCC complies with the Power Vector Intrinsic Programming Reference
50989(PVIPR), which may be found at
50990<https://openpowerfoundation.org/?resource_lib=power-vector-intrinsic-programming-reference>.
50991Chapter 4 of this document fully documents the vector API interfaces
50992that must be provided by compliant compilers.  Programmers should
50993preferentially use the interfaces described therein.  However,
50994historically GCC has provided additional interfaces for access to vector
50995instructions.  These are briefly described below.  Where the PVIPR
50996provides a portable interface, other functions in GCC that provide the
50997same capabilities should be considered deprecated.
50998
50999 The PVIPR documents the following overloaded functions:
51000
51001'vec_abs'                'vec_absd'               'vec_abss'
51002'vec_add'                'vec_addc'               'vec_adde'
51003'vec_addec'              'vec_adds'               'vec_all_eq'
51004'vec_all_ge'             'vec_all_gt'             'vec_all_in'
51005'vec_all_le'             'vec_all_lt'             'vec_all_nan'
51006'vec_all_ne'             'vec_all_nge'            'vec_all_ngt'
51007'vec_all_nle'            'vec_all_nlt'            'vec_all_numeric'
51008'vec_and'                'vec_andc'               'vec_any_eq'
51009'vec_any_ge'             'vec_any_gt'             'vec_any_le'
51010'vec_any_lt'             'vec_any_nan'            'vec_any_ne'
51011'vec_any_nge'            'vec_any_ngt'            'vec_any_nle'
51012'vec_any_nlt'            'vec_any_numeric'        'vec_any_out'
51013'vec_avg'                'vec_bperm'              'vec_ceil'
51014'vec_cipher_be'          'vec_cipherlast_be'      'vec_cmpb'
51015'vec_cmpeq'              'vec_cmpge'              'vec_cmpgt'
51016'vec_cmple'              'vec_cmplt'              'vec_cmpne'
51017'vec_cmpnez'             'vec_cntlz'              'vec_cntlz_lsbb'
51018'vec_cnttz'              'vec_cnttz_lsbb'         'vec_cpsgn'
51019'vec_ctf'                'vec_cts'                'vec_ctu'
51020'vec_div'                'vec_double'             'vec_doublee'
51021'vec_doubleh'            'vec_doublel'            'vec_doubleo'
51022'vec_eqv'                'vec_expte'              'vec_extract'
51023'vec_extract_exp'        'vec_extract_fp32_from_shorth''vec_extract_fp32_from_shortl'
51024'vec_extract_sig'        'vec_extract_4b'         'vec_first_match_index'
51025'vec_first_match_or_eos_index''vec_first_mismatch_index''vec_first_mismatch_or_eos_index'
51026'vec_float'              'vec_float2'             'vec_floate'
51027'vec_floato'             'vec_floor'              'vec_gb'
51028'vec_insert'             'vec_insert_exp'         'vec_insert4b'
51029'vec_ld'                 'vec_lde'                'vec_ldl'
51030'vec_loge'               'vec_madd'               'vec_madds'
51031'vec_max'                'vec_mergee'             'vec_mergeh'
51032'vec_mergel'             'vec_mergeo'             'vec_mfvscr'
51033'vec_min'                'vec_mradds'             'vec_msub'
51034'vec_msum'               'vec_msums'              'vec_mtvscr'
51035'vec_mul'                'vec_mule'               'vec_mulo'
51036'vec_nabs'               'vec_nand'               'vec_ncipher_be'
51037'vec_ncipherlast_be'     'vec_nearbyint'          'vec_neg'
51038'vec_nmadd'              'vec_nmsub'              'vec_nor'
51039'vec_or'                 'vec_orc'                'vec_pack'
51040'vec_pack_to_short_fp32' 'vec_packpx'             'vec_packs'
51041'vec_packsu'             'vec_parity_lsbb'        'vec_perm'
51042'vec_permxor'            'vec_pmsum_be'           'vec_popcnt'
51043'vec_re'                 'vec_recipdiv'           'vec_revb'
51044'vec_reve'               'vec_rint'               'vec_rl'
51045'vec_rlmi'               'vec_rlnm'               'vec_round'
51046'vec_rsqrt'              'vec_rsqrte'             'vec_sbox_be'
51047'vec_sel'                'vec_shasigma_be'        'vec_signed'
51048'vec_signed2'            'vec_signede'            'vec_signedo'
51049'vec_sl'                 'vec_sld'                'vec_sldw'
51050'vec_sll'                'vec_slo'                'vec_slv'
51051'vec_splat'              'vec_splat_s8'           'vec_splat_s16'
51052'vec_splat_s32'          'vec_splat_u8'           'vec_splat_u16'
51053'vec_splat_u32'          'vec_splats'             'vec_sqrt'
51054'vec_sr'                 'vec_sra'                'vec_srl'
51055'vec_sro'                'vec_srv'                'vec_st'
51056'vec_ste'                'vec_stl'                'vec_sub'
51057'vec_subc'               'vec_sube'               'vec_subec'
51058'vec_subs'               'vec_sum2s'              'vec_sum4s'
51059'vec_sums'               'vec_test_data_class'    'vec_trunc'
51060'vec_unpackh'            'vec_unpackl'            'vec_unsigned'
51061'vec_unsigned2'          'vec_unsignede'          'vec_unsignedo'
51062'vec_xl'                 'vec_xl_be'              'vec_xl_len'
51063'vec_xl_len_r'           'vec_xor'                'vec_xst'
51064'vec_xst_be'             'vec_xst_len'            'vec_xst_len_r'
51065                                                  
51066
51067* Menu:
51068
51069* PowerPC AltiVec Built-in Functions on ISA 2.05::
51070* PowerPC AltiVec Built-in Functions Available on ISA 2.06::
51071* PowerPC AltiVec Built-in Functions Available on ISA 2.07::
51072* PowerPC AltiVec Built-in Functions Available on ISA 3.0::
51073* PowerPC AltiVec Built-in Functions Available on ISA 3.1::
51074
51075
51076File: 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
51077
510786.60.23.1 PowerPC AltiVec Built-in Functions on ISA 2.05
51079........................................................
51080
51081The following interfaces are supported for the generic and specific
51082AltiVec operations and the AltiVec predicates.  In cases where there is
51083a direct mapping between generic and specific operations, only the
51084generic names are shown here, although the specific operations can also
51085be used.
51086
51087 Arguments that are documented as 'const int' require literal integral
51088values within the range required for that operation.
51089
51090 Only functions excluded from the PVIPR are listed here.
51091
51092     void vec_dss (const int);
51093
51094     void vec_dssall (void);
51095
51096     void vec_dst (const vector unsigned char *, int, const int);
51097     void vec_dst (const vector signed char *, int, const int);
51098     void vec_dst (const vector bool char *, int, const int);
51099     void vec_dst (const vector unsigned short *, int, const int);
51100     void vec_dst (const vector signed short *, int, const int);
51101     void vec_dst (const vector bool short *, int, const int);
51102     void vec_dst (const vector pixel *, int, const int);
51103     void vec_dst (const vector unsigned int *, int, const int);
51104     void vec_dst (const vector signed int *, int, const int);
51105     void vec_dst (const vector bool int *, int, const int);
51106     void vec_dst (const vector float *, int, const int);
51107     void vec_dst (const unsigned char *, int, const int);
51108     void vec_dst (const signed char *, int, const int);
51109     void vec_dst (const unsigned short *, int, const int);
51110     void vec_dst (const short *, int, const int);
51111     void vec_dst (const unsigned int *, int, const int);
51112     void vec_dst (const int *, int, const int);
51113     void vec_dst (const float *, int, const int);
51114
51115     void vec_dstst (const vector unsigned char *, int, const int);
51116     void vec_dstst (const vector signed char *, int, const int);
51117     void vec_dstst (const vector bool char *, int, const int);
51118     void vec_dstst (const vector unsigned short *, int, const int);
51119     void vec_dstst (const vector signed short *, int, const int);
51120     void vec_dstst (const vector bool short *, int, const int);
51121     void vec_dstst (const vector pixel *, int, const int);
51122     void vec_dstst (const vector unsigned int *, int, const int);
51123     void vec_dstst (const vector signed int *, int, const int);
51124     void vec_dstst (const vector bool int *, int, const int);
51125     void vec_dstst (const vector float *, int, const int);
51126     void vec_dstst (const unsigned char *, int, const int);
51127     void vec_dstst (const signed char *, int, const int);
51128     void vec_dstst (const unsigned short *, int, const int);
51129     void vec_dstst (const short *, int, const int);
51130     void vec_dstst (const unsigned int *, int, const int);
51131     void vec_dstst (const int *, int, const int);
51132     void vec_dstst (const unsigned long *, int, const int);
51133     void vec_dstst (const long *, int, const int);
51134     void vec_dstst (const float *, int, const int);
51135
51136     void vec_dststt (const vector unsigned char *, int, const int);
51137     void vec_dststt (const vector signed char *, int, const int);
51138     void vec_dststt (const vector bool char *, int, const int);
51139     void vec_dststt (const vector unsigned short *, int, const int);
51140     void vec_dststt (const vector signed short *, int, const int);
51141     void vec_dststt (const vector bool short *, int, const int);
51142     void vec_dststt (const vector pixel *, int, const int);
51143     void vec_dststt (const vector unsigned int *, int, const int);
51144     void vec_dststt (const vector signed int *, int, const int);
51145     void vec_dststt (const vector bool int *, int, const int);
51146     void vec_dststt (const vector float *, int, const int);
51147     void vec_dststt (const unsigned char *, int, const int);
51148     void vec_dststt (const signed char *, int, const int);
51149     void vec_dststt (const unsigned short *, int, const int);
51150     void vec_dststt (const short *, int, const int);
51151     void vec_dststt (const unsigned int *, int, const int);
51152     void vec_dststt (const int *, int, const int);
51153     void vec_dststt (const float *, int, const int);
51154
51155     void vec_dstt (const vector unsigned char *, int, const int);
51156     void vec_dstt (const vector signed char *, int, const int);
51157     void vec_dstt (const vector bool char *, int, const int);
51158     void vec_dstt (const vector unsigned short *, int, const int);
51159     void vec_dstt (const vector signed short *, int, const int);
51160     void vec_dstt (const vector bool short *, int, const int);
51161     void vec_dstt (const vector pixel *, int, const int);
51162     void vec_dstt (const vector unsigned int *, int, const int);
51163     void vec_dstt (const vector signed int *, int, const int);
51164     void vec_dstt (const vector bool int *, int, const int);
51165     void vec_dstt (const vector float *, int, const int);
51166     void vec_dstt (const unsigned char *, int, const int);
51167     void vec_dstt (const signed char *, int, const int);
51168     void vec_dstt (const unsigned short *, int, const int);
51169     void vec_dstt (const short *, int, const int);
51170     void vec_dstt (const unsigned int *, int, const int);
51171     void vec_dstt (const int *, int, const int);
51172     void vec_dstt (const float *, int, const int);
51173
51174     vector signed char vec_lvebx (int, char *);
51175     vector unsigned char vec_lvebx (int, unsigned char *);
51176
51177     vector signed short vec_lvehx (int, short *);
51178     vector unsigned short vec_lvehx (int, unsigned short *);
51179
51180     vector float vec_lvewx (int, float *);
51181     vector signed int vec_lvewx (int, int *);
51182     vector unsigned int vec_lvewx (int, unsigned int *);
51183
51184     vector unsigned char vec_lvsl (int, const unsigned char *);
51185     vector unsigned char vec_lvsl (int, const signed char *);
51186     vector unsigned char vec_lvsl (int, const unsigned short *);
51187     vector unsigned char vec_lvsl (int, const short *);
51188     vector unsigned char vec_lvsl (int, const unsigned int *);
51189     vector unsigned char vec_lvsl (int, const int *);
51190     vector unsigned char vec_lvsl (int, const float *);
51191
51192     vector unsigned char vec_lvsr (int, const unsigned char *);
51193     vector unsigned char vec_lvsr (int, const signed char *);
51194     vector unsigned char vec_lvsr (int, const unsigned short *);
51195     vector unsigned char vec_lvsr (int, const short *);
51196     vector unsigned char vec_lvsr (int, const unsigned int *);
51197     vector unsigned char vec_lvsr (int, const int *);
51198     vector unsigned char vec_lvsr (int, const float *);
51199
51200     void vec_stvebx (vector signed char, int, signed char *);
51201     void vec_stvebx (vector unsigned char, int, unsigned char *);
51202     void vec_stvebx (vector bool char, int, signed char *);
51203     void vec_stvebx (vector bool char, int, unsigned char *);
51204
51205     void vec_stvehx (vector signed short, int, short *);
51206     void vec_stvehx (vector unsigned short, int, unsigned short *);
51207     void vec_stvehx (vector bool short, int, short *);
51208     void vec_stvehx (vector bool short, int, unsigned short *);
51209
51210     void vec_stvewx (vector float, int, float *);
51211     void vec_stvewx (vector signed int, int, int *);
51212     void vec_stvewx (vector unsigned int, int, unsigned int *);
51213     void vec_stvewx (vector bool int, int, int *);
51214     void vec_stvewx (vector bool int, int, unsigned int *);
51215
51216     vector float vec_vaddfp (vector float, vector float);
51217
51218     vector signed char vec_vaddsbs (vector bool char, vector signed char);
51219     vector signed char vec_vaddsbs (vector signed char, vector bool char);
51220     vector signed char vec_vaddsbs (vector signed char, vector signed char);
51221
51222     vector signed short vec_vaddshs (vector bool short, vector signed short);
51223     vector signed short vec_vaddshs (vector signed short, vector bool short);
51224     vector signed short vec_vaddshs (vector signed short, vector signed short);
51225
51226     vector signed int vec_vaddsws (vector bool int, vector signed int);
51227     vector signed int vec_vaddsws (vector signed int, vector bool int);
51228     vector signed int vec_vaddsws (vector signed int, vector signed int);
51229
51230     vector signed char vec_vaddubm (vector bool char, vector signed char);
51231     vector signed char vec_vaddubm (vector signed char, vector bool char);
51232     vector signed char vec_vaddubm (vector signed char, vector signed char);
51233     vector unsigned char vec_vaddubm (vector bool char, vector unsigned char);
51234     vector unsigned char vec_vaddubm (vector unsigned char, vector bool char);
51235     vector unsigned char vec_vaddubm (vector unsigned char, vector unsigned char);
51236
51237     vector unsigned char vec_vaddubs (vector bool char, vector unsigned char);
51238     vector unsigned char vec_vaddubs (vector unsigned char, vector bool char);
51239     vector unsigned char vec_vaddubs (vector unsigned char, vector unsigned char);
51240
51241     vector signed short vec_vadduhm (vector bool short, vector signed short);
51242     vector signed short vec_vadduhm (vector signed short, vector bool short);
51243     vector signed short vec_vadduhm (vector signed short, vector signed short);
51244     vector unsigned short vec_vadduhm (vector bool short, vector unsigned short);
51245     vector unsigned short vec_vadduhm (vector unsigned short, vector bool short);
51246     vector unsigned short vec_vadduhm (vector unsigned short, vector unsigned short);
51247
51248     vector unsigned short vec_vadduhs (vector bool short, vector unsigned short);
51249     vector unsigned short vec_vadduhs (vector unsigned short, vector bool short);
51250     vector unsigned short vec_vadduhs (vector unsigned short, vector unsigned short);
51251
51252     vector signed int vec_vadduwm (vector bool int, vector signed int);
51253     vector signed int vec_vadduwm (vector signed int, vector bool int);
51254     vector signed int vec_vadduwm (vector signed int, vector signed int);
51255     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
51256     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
51257     vector unsigned int vec_vadduwm (vector unsigned int, vector unsigned int);
51258
51259     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
51260     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
51261     vector unsigned int vec_vadduws (vector unsigned int, vector unsigned int);
51262
51263     vector signed char vec_vavgsb (vector signed char, vector signed char);
51264
51265     vector signed short vec_vavgsh (vector signed short, vector signed short);
51266
51267     vector signed int vec_vavgsw (vector signed int, vector signed int);
51268
51269     vector unsigned char vec_vavgub (vector unsigned char, vector unsigned char);
51270
51271     vector unsigned short vec_vavguh (vector unsigned short, vector unsigned short);
51272
51273     vector unsigned int vec_vavguw (vector unsigned int, vector unsigned int);
51274
51275     vector float vec_vcfsx (vector signed int, const int);
51276
51277     vector float vec_vcfux (vector unsigned int, const int);
51278
51279     vector bool int vec_vcmpeqfp (vector float, vector float);
51280
51281     vector bool char vec_vcmpequb (vector signed char, vector signed char);
51282     vector bool char vec_vcmpequb (vector unsigned char, vector unsigned char);
51283
51284     vector bool short vec_vcmpequh (vector signed short, vector signed short);
51285     vector bool short vec_vcmpequh (vector unsigned short, vector unsigned short);
51286
51287     vector bool int vec_vcmpequw (vector signed int, vector signed int);
51288     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
51289
51290     vector bool int vec_vcmpgtfp (vector float, vector float);
51291
51292     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
51293
51294     vector bool short vec_vcmpgtsh (vector signed short, vector signed short);
51295
51296     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
51297
51298     vector bool char vec_vcmpgtub (vector unsigned char, vector unsigned char);
51299
51300     vector bool short vec_vcmpgtuh (vector unsigned short, vector unsigned short);
51301
51302     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
51303
51304     vector float vec_vmaxfp (vector float, vector float);
51305
51306     vector signed char vec_vmaxsb (vector bool char, vector signed char);
51307     vector signed char vec_vmaxsb (vector signed char, vector bool char);
51308     vector signed char vec_vmaxsb (vector signed char, vector signed char);
51309
51310     vector signed short vec_vmaxsh (vector bool short, vector signed short);
51311     vector signed short vec_vmaxsh (vector signed short, vector bool short);
51312     vector signed short vec_vmaxsh (vector signed short, vector signed short);
51313
51314     vector signed int vec_vmaxsw (vector bool int, vector signed int);
51315     vector signed int vec_vmaxsw (vector signed int, vector bool int);
51316     vector signed int vec_vmaxsw (vector signed int, vector signed int);
51317
51318     vector unsigned char vec_vmaxub (vector bool char, vector unsigned char);
51319     vector unsigned char vec_vmaxub (vector unsigned char, vector bool char);
51320     vector unsigned char vec_vmaxub (vector unsigned char, vector unsigned char);
51321
51322     vector unsigned short vec_vmaxuh (vector bool short, vector unsigned short);
51323     vector unsigned short vec_vmaxuh (vector unsigned short, vector bool short);
51324     vector unsigned short vec_vmaxuh (vector unsigned short, vector unsigned short);
51325
51326     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
51327     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
51328     vector unsigned int vec_vmaxuw (vector unsigned int, vector unsigned int);
51329
51330     vector float vec_vminfp (vector float, vector float);
51331
51332     vector signed char vec_vminsb (vector bool char, vector signed char);
51333     vector signed char vec_vminsb (vector signed char, vector bool char);
51334     vector signed char vec_vminsb (vector signed char, vector signed char);
51335
51336     vector signed short vec_vminsh (vector bool short, vector signed short);
51337     vector signed short vec_vminsh (vector signed short, vector bool short);
51338     vector signed short vec_vminsh (vector signed short, vector signed short);
51339
51340     vector signed int vec_vminsw (vector bool int, vector signed int);
51341     vector signed int vec_vminsw (vector signed int, vector bool int);
51342     vector signed int vec_vminsw (vector signed int, vector signed int);
51343
51344     vector unsigned char vec_vminub (vector bool char, vector unsigned char);
51345     vector unsigned char vec_vminub (vector unsigned char, vector bool char);
51346     vector unsigned char vec_vminub (vector unsigned char, vector unsigned char);
51347
51348     vector unsigned short vec_vminuh (vector bool short, vector unsigned short);
51349     vector unsigned short vec_vminuh (vector unsigned short, vector bool short);
51350     vector unsigned short vec_vminuh (vector unsigned short, vector unsigned short);
51351
51352     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
51353     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
51354     vector unsigned int vec_vminuw (vector unsigned int, vector unsigned int);
51355
51356     vector bool char vec_vmrghb (vector bool char, vector bool char);
51357     vector signed char vec_vmrghb (vector signed char, vector signed char);
51358     vector unsigned char vec_vmrghb (vector unsigned char, vector unsigned char);
51359
51360     vector bool short vec_vmrghh (vector bool short, vector bool short);
51361     vector signed short vec_vmrghh (vector signed short, vector signed short);
51362     vector unsigned short vec_vmrghh (vector unsigned short, vector unsigned short);
51363     vector pixel vec_vmrghh (vector pixel, vector pixel);
51364
51365     vector float vec_vmrghw (vector float, vector float);
51366     vector bool int vec_vmrghw (vector bool int, vector bool int);
51367     vector signed int vec_vmrghw (vector signed int, vector signed int);
51368     vector unsigned int vec_vmrghw (vector unsigned int, vector unsigned int);
51369
51370     vector bool char vec_vmrglb (vector bool char, vector bool char);
51371     vector signed char vec_vmrglb (vector signed char, vector signed char);
51372     vector unsigned char vec_vmrglb (vector unsigned char, vector unsigned char);
51373
51374     vector bool short vec_vmrglh (vector bool short, vector bool short);
51375     vector signed short vec_vmrglh (vector signed short, vector signed short);
51376     vector unsigned short vec_vmrglh (vector unsigned short, vector unsigned short);
51377     vector pixel vec_vmrglh (vector pixel, vector pixel);
51378
51379     vector float vec_vmrglw (vector float, vector float);
51380     vector signed int vec_vmrglw (vector signed int, vector signed int);
51381     vector unsigned int vec_vmrglw (vector unsigned int, vector unsigned int);
51382     vector bool int vec_vmrglw (vector bool int, vector bool int);
51383
51384     vector signed int vec_vmsummbm (vector signed char, vector unsigned char,
51385                                     vector signed int);
51386
51387     vector signed int vec_vmsumshm (vector signed short, vector signed short,
51388                                     vector signed int);
51389
51390     vector signed int vec_vmsumshs (vector signed short, vector signed short,
51391                                     vector signed int);
51392
51393     vector unsigned int vec_vmsumubm (vector unsigned char, vector unsigned char,
51394                                       vector unsigned int);
51395
51396     vector unsigned int vec_vmsumuhm (vector unsigned short, vector unsigned short,
51397                                       vector unsigned int);
51398
51399     vector unsigned int vec_vmsumuhs (vector unsigned short, vector unsigned short,
51400                                       vector unsigned int);
51401
51402     vector signed short vec_vmulesb (vector signed char, vector signed char);
51403
51404     vector signed int vec_vmulesh (vector signed short, vector signed short);
51405
51406     vector unsigned short vec_vmuleub (vector unsigned char, vector unsigned char);
51407
51408     vector unsigned int vec_vmuleuh (vector unsigned short, vector unsigned short);
51409
51410     vector signed short vec_vmulosb (vector signed char, vector signed char);
51411
51412     vector signed int vec_vmulosh (vector signed short, vector signed short);
51413
51414     vector unsigned short vec_vmuloub (vector unsigned char, vector unsigned char);
51415
51416     vector unsigned int vec_vmulouh (vector unsigned short, vector unsigned short);
51417
51418     vector signed char vec_vpkshss (vector signed short, vector signed short);
51419
51420     vector unsigned char vec_vpkshus (vector signed short, vector signed short);
51421
51422     vector signed short vec_vpkswss (vector signed int, vector signed int);
51423
51424     vector unsigned short vec_vpkswus (vector signed int, vector signed int);
51425
51426     vector bool char vec_vpkuhum (vector bool short, vector bool short);
51427     vector signed char vec_vpkuhum (vector signed short, vector signed short);
51428     vector unsigned char vec_vpkuhum (vector unsigned short, vector unsigned short);
51429
51430     vector unsigned char vec_vpkuhus (vector unsigned short, vector unsigned short);
51431
51432     vector bool short vec_vpkuwum (vector bool int, vector bool int);
51433     vector signed short vec_vpkuwum (vector signed int, vector signed int);
51434     vector unsigned short vec_vpkuwum (vector unsigned int, vector unsigned int);
51435
51436     vector unsigned short vec_vpkuwus (vector unsigned int, vector unsigned int);
51437
51438     vector signed char vec_vrlb (vector signed char, vector unsigned char);
51439     vector unsigned char vec_vrlb (vector unsigned char, vector unsigned char);
51440
51441     vector signed short vec_vrlh (vector signed short, vector unsigned short);
51442     vector unsigned short vec_vrlh (vector unsigned short, vector unsigned short);
51443
51444     vector signed int vec_vrlw (vector signed int, vector unsigned int);
51445     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
51446
51447     vector signed char vec_vslb (vector signed char, vector unsigned char);
51448     vector unsigned char vec_vslb (vector unsigned char, vector unsigned char);
51449
51450     vector signed short vec_vslh (vector signed short, vector unsigned short);
51451     vector unsigned short vec_vslh (vector unsigned short, vector unsigned short);
51452
51453     vector signed int vec_vslw (vector signed int, vector unsigned int);
51454     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
51455
51456     vector signed char vec_vspltb (vector signed char, const int);
51457     vector unsigned char vec_vspltb (vector unsigned char, const int);
51458     vector bool char vec_vspltb (vector bool char, const int);
51459
51460     vector bool short vec_vsplth (vector bool short, const int);
51461     vector signed short vec_vsplth (vector signed short, const int);
51462     vector unsigned short vec_vsplth (vector unsigned short, const int);
51463     vector pixel vec_vsplth (vector pixel, const int);
51464
51465     vector float vec_vspltw (vector float, const int);
51466     vector signed int vec_vspltw (vector signed int, const int);
51467     vector unsigned int vec_vspltw (vector unsigned int, const int);
51468     vector bool int vec_vspltw (vector bool int, const int);
51469
51470     vector signed char vec_vsrab (vector signed char, vector unsigned char);
51471     vector unsigned char vec_vsrab (vector unsigned char, vector unsigned char);
51472
51473     vector signed short vec_vsrah (vector signed short, vector unsigned short);
51474     vector unsigned short vec_vsrah (vector unsigned short, vector unsigned short);
51475
51476     vector signed int vec_vsraw (vector signed int, vector unsigned int);
51477     vector unsigned int vec_vsraw (vector unsigned int, vector unsigned int);
51478
51479     vector signed char vec_vsrb (vector signed char, vector unsigned char);
51480     vector unsigned char vec_vsrb (vector unsigned char, vector unsigned char);
51481
51482     vector signed short vec_vsrh (vector signed short, vector unsigned short);
51483     vector unsigned short vec_vsrh (vector unsigned short, vector unsigned short);
51484
51485     vector signed int vec_vsrw (vector signed int, vector unsigned int);
51486     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
51487
51488     vector float vec_vsubfp (vector float, vector float);
51489
51490     vector signed char vec_vsubsbs (vector bool char, vector signed char);
51491     vector signed char vec_vsubsbs (vector signed char, vector bool char);
51492     vector signed char vec_vsubsbs (vector signed char, vector signed char);
51493
51494     vector signed short vec_vsubshs (vector bool short, vector signed short);
51495     vector signed short vec_vsubshs (vector signed short, vector bool short);
51496     vector signed short vec_vsubshs (vector signed short, vector signed short);
51497
51498     vector signed int vec_vsubsws (vector bool int, vector signed int);
51499     vector signed int vec_vsubsws (vector signed int, vector bool int);
51500     vector signed int vec_vsubsws (vector signed int, vector signed int);
51501
51502     vector signed char vec_vsububm (vector bool char, vector signed char);
51503     vector signed char vec_vsububm (vector signed char, vector bool char);
51504     vector signed char vec_vsububm (vector signed char, vector signed char);
51505     vector unsigned char vec_vsububm (vector bool char, vector unsigned char);
51506     vector unsigned char vec_vsububm (vector unsigned char, vector bool char);
51507     vector unsigned char vec_vsububm (vector unsigned char, vector unsigned char);
51508
51509     vector unsigned char vec_vsububs (vector bool char, vector unsigned char);
51510     vector unsigned char vec_vsububs (vector unsigned char, vector bool char);
51511     vector unsigned char vec_vsububs (vector unsigned char, vector unsigned char);
51512
51513     vector signed short vec_vsubuhm (vector bool short, vector signed short);
51514     vector signed short vec_vsubuhm (vector signed short, vector bool short);
51515     vector signed short vec_vsubuhm (vector signed short, vector signed short);
51516     vector unsigned short vec_vsubuhm (vector bool short, vector unsigned short);
51517     vector unsigned short vec_vsubuhm (vector unsigned short, vector bool short);
51518     vector unsigned short vec_vsubuhm (vector unsigned short, vector unsigned short);
51519
51520     vector unsigned short vec_vsubuhs (vector bool short, vector unsigned short);
51521     vector unsigned short vec_vsubuhs (vector unsigned short, vector bool short);
51522     vector unsigned short vec_vsubuhs (vector unsigned short, vector unsigned short);
51523
51524     vector signed int vec_vsubuwm (vector bool int, vector signed int);
51525     vector signed int vec_vsubuwm (vector signed int, vector bool int);
51526     vector signed int vec_vsubuwm (vector signed int, vector signed int);
51527     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
51528     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
51529     vector unsigned int vec_vsubuwm (vector unsigned int, vector unsigned int);
51530
51531     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
51532     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
51533     vector unsigned int vec_vsubuws (vector unsigned int, vector unsigned int);
51534
51535     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
51536
51537     vector signed int vec_vsum4shs (vector signed short, vector signed int);
51538
51539     vector unsigned int vec_vsum4ubs (vector unsigned char, vector unsigned int);
51540
51541     vector unsigned int vec_vupkhpx (vector pixel);
51542
51543     vector bool short vec_vupkhsb (vector bool char);
51544     vector signed short vec_vupkhsb (vector signed char);
51545
51546     vector bool int vec_vupkhsh (vector bool short);
51547     vector signed int vec_vupkhsh (vector signed short);
51548
51549     vector unsigned int vec_vupklpx (vector pixel);
51550
51551     vector bool short vec_vupklsb (vector bool char);
51552     vector signed short vec_vupklsb (vector signed char);
51553
51554     vector bool int vec_vupklsh (vector bool short);
51555     vector signed int vec_vupklsh (vector signed short);
51556
51557
51558File: 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
51559
515606.60.23.2 PowerPC AltiVec Built-in Functions Available on ISA 2.06
51561..................................................................
51562
51563The AltiVec built-in functions described in this section are available
51564on the PowerPC family of processors starting with ISA 2.06 or later.
51565These are normally enabled by adding '-mvsx' to the command line.
51566
51567 When '-mvsx' is used, the following additional vector types are
51568implemented.
51569
51570     vector unsigned __int128
51571     vector signed __int128
51572     vector unsigned long long int
51573     vector signed long long int
51574     vector double
51575
51576 The long long types are only implemented for 64-bit code generation.
51577
51578 Only functions excluded from the PVIPR are listed here.
51579
51580     void vec_dst (const unsigned long *, int, const int);
51581     void vec_dst (const long *, int, const int);
51582
51583     void vec_dststt (const unsigned long *, int, const int);
51584     void vec_dststt (const long *, int, const int);
51585
51586     void vec_dstt (const unsigned long *, int, const int);
51587     void vec_dstt (const long *, int, const int);
51588
51589     vector unsigned char vec_lvsl (int, const unsigned long *);
51590     vector unsigned char vec_lvsl (int, const long *);
51591
51592     vector unsigned char vec_lvsr (int, const unsigned long *);
51593     vector unsigned char vec_lvsr (int, const long *);
51594
51595     vector unsigned char vec_lvsl (int, const double *);
51596     vector unsigned char vec_lvsr (int, const double *);
51597
51598     vector double vec_vsx_ld (int, const vector double *);
51599     vector double vec_vsx_ld (int, const double *);
51600     vector float vec_vsx_ld (int, const vector float *);
51601     vector float vec_vsx_ld (int, const float *);
51602     vector bool int vec_vsx_ld (int, const vector bool int *);
51603     vector signed int vec_vsx_ld (int, const vector signed int *);
51604     vector signed int vec_vsx_ld (int, const int *);
51605     vector signed int vec_vsx_ld (int, const long *);
51606     vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
51607     vector unsigned int vec_vsx_ld (int, const unsigned int *);
51608     vector unsigned int vec_vsx_ld (int, const unsigned long *);
51609     vector bool short vec_vsx_ld (int, const vector bool short *);
51610     vector pixel vec_vsx_ld (int, const vector pixel *);
51611     vector signed short vec_vsx_ld (int, const vector signed short *);
51612     vector signed short vec_vsx_ld (int, const short *);
51613     vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
51614     vector unsigned short vec_vsx_ld (int, const unsigned short *);
51615     vector bool char vec_vsx_ld (int, const vector bool char *);
51616     vector signed char vec_vsx_ld (int, const vector signed char *);
51617     vector signed char vec_vsx_ld (int, const signed char *);
51618     vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
51619     vector unsigned char vec_vsx_ld (int, const unsigned char *);
51620
51621     void vec_vsx_st (vector double, int, vector double *);
51622     void vec_vsx_st (vector double, int, double *);
51623     void vec_vsx_st (vector float, int, vector float *);
51624     void vec_vsx_st (vector float, int, float *);
51625     void vec_vsx_st (vector signed int, int, vector signed int *);
51626     void vec_vsx_st (vector signed int, int, int *);
51627     void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
51628     void vec_vsx_st (vector unsigned int, int, unsigned int *);
51629     void vec_vsx_st (vector bool int, int, vector bool int *);
51630     void vec_vsx_st (vector bool int, int, unsigned int *);
51631     void vec_vsx_st (vector bool int, int, int *);
51632     void vec_vsx_st (vector signed short, int, vector signed short *);
51633     void vec_vsx_st (vector signed short, int, short *);
51634     void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
51635     void vec_vsx_st (vector unsigned short, int, unsigned short *);
51636     void vec_vsx_st (vector bool short, int, vector bool short *);
51637     void vec_vsx_st (vector bool short, int, unsigned short *);
51638     void vec_vsx_st (vector pixel, int, vector pixel *);
51639     void vec_vsx_st (vector pixel, int, unsigned short *);
51640     void vec_vsx_st (vector pixel, int, short *);
51641     void vec_vsx_st (vector bool short, int, short *);
51642     void vec_vsx_st (vector signed char, int, vector signed char *);
51643     void vec_vsx_st (vector signed char, int, signed char *);
51644     void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
51645     void vec_vsx_st (vector unsigned char, int, unsigned char *);
51646     void vec_vsx_st (vector bool char, int, vector bool char *);
51647     void vec_vsx_st (vector bool char, int, unsigned char *);
51648     void vec_vsx_st (vector bool char, int, signed char *);
51649
51650     vector double vec_xxpermdi (vector double, vector double, const int);
51651     vector float vec_xxpermdi (vector float, vector float, const int);
51652     vector long long vec_xxpermdi (vector long long, vector long long, const int);
51653     vector unsigned long long vec_xxpermdi (vector unsigned long long,
51654                                             vector unsigned long long, const int);
51655     vector int vec_xxpermdi (vector int, vector int, const int);
51656     vector unsigned int vec_xxpermdi (vector unsigned int,
51657                                       vector unsigned int, const int);
51658     vector short vec_xxpermdi (vector short, vector short, const int);
51659     vector unsigned short vec_xxpermdi (vector unsigned short,
51660                                         vector unsigned short, const int);
51661     vector signed char vec_xxpermdi (vector signed char, vector signed char,
51662                                      const int);
51663     vector unsigned char vec_xxpermdi (vector unsigned char,
51664                                        vector unsigned char, const int);
51665
51666     vector double vec_xxsldi (vector double, vector double, int);
51667     vector float vec_xxsldi (vector float, vector float, int);
51668     vector long long vec_xxsldi (vector long long, vector long long, int);
51669     vector unsigned long long vec_xxsldi (vector unsigned long long,
51670                                           vector unsigned long long, int);
51671     vector int vec_xxsldi (vector int, vector int, int);
51672     vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
51673     vector short vec_xxsldi (vector short, vector short, int);
51674     vector unsigned short vec_xxsldi (vector unsigned short,
51675                                       vector unsigned short, int);
51676     vector signed char vec_xxsldi (vector signed char, vector signed char, int);
51677     vector unsigned char vec_xxsldi (vector unsigned char,
51678                                      vector unsigned char, int);
51679
51680 Note that the 'vec_ld' and 'vec_st' built-in functions always generate
51681the AltiVec 'LVX' and 'STVX' instructions even if the VSX instruction
51682set is available.  The 'vec_vsx_ld' and 'vec_vsx_st' built-in functions
51683always generate the VSX 'LXVD2X', 'LXVW4X', 'STXVD2X', and 'STXVW4X'
51684instructions.
51685
51686
51687File: 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
51688
516896.60.23.3 PowerPC AltiVec Built-in Functions Available on ISA 2.07
51690..................................................................
51691
51692If the ISA 2.07 additions to the vector/scalar (power8-vector)
51693instruction set are available, the following additional functions are
51694available for both 32-bit and 64-bit targets.  For 64-bit targets, you
51695can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG
51696instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of
51697VECTOR UNSIGNED LONG LONG.
51698
51699 Only functions excluded from the PVIPR are listed here.
51700
51701     vector long long vec_vaddudm (vector long long, vector long long);
51702     vector long long vec_vaddudm (vector bool long long, vector long long);
51703     vector long long vec_vaddudm (vector long long, vector bool long long);
51704     vector unsigned long long vec_vaddudm (vector unsigned long long,
51705                                            vector unsigned long long);
51706     vector unsigned long long vec_vaddudm (vector bool unsigned long long,
51707                                            vector unsigned long long);
51708     vector unsigned long long vec_vaddudm (vector unsigned long long,
51709                                            vector bool unsigned long long);
51710
51711     vector long long vec_vclz (vector long long);
51712     vector unsigned long long vec_vclz (vector unsigned long long);
51713     vector int vec_vclz (vector int);
51714     vector unsigned int vec_vclz (vector int);
51715     vector short vec_vclz (vector short);
51716     vector unsigned short vec_vclz (vector unsigned short);
51717     vector signed char vec_vclz (vector signed char);
51718     vector unsigned char vec_vclz (vector unsigned char);
51719
51720     vector signed char vec_vclzb (vector signed char);
51721     vector unsigned char vec_vclzb (vector unsigned char);
51722
51723     vector long long vec_vclzd (vector long long);
51724     vector unsigned long long vec_vclzd (vector unsigned long long);
51725
51726     vector short vec_vclzh (vector short);
51727     vector unsigned short vec_vclzh (vector unsigned short);
51728
51729     vector int vec_vclzw (vector int);
51730     vector unsigned int vec_vclzw (vector int);
51731
51732     vector signed char vec_vgbbd (vector signed char);
51733     vector unsigned char vec_vgbbd (vector unsigned char);
51734
51735     vector long long vec_vmaxsd (vector long long, vector long long);
51736
51737     vector unsigned long long vec_vmaxud (vector unsigned long long,
51738                                           unsigned vector long long);
51739
51740     vector long long vec_vminsd (vector long long, vector long long);
51741
51742     vector unsigned long long vec_vminud (vector long long, vector long long);
51743
51744     vector int vec_vpksdss (vector long long, vector long long);
51745     vector unsigned int vec_vpksdss (vector long long, vector long long);
51746
51747     vector unsigned int vec_vpkudus (vector unsigned long long,
51748                                      vector unsigned long long);
51749
51750     vector int vec_vpkudum (vector long long, vector long long);
51751     vector unsigned int vec_vpkudum (vector unsigned long long,
51752                                      vector unsigned long long);
51753     vector bool int vec_vpkudum (vector bool long long, vector bool long long);
51754
51755     vector long long vec_vpopcnt (vector long long);
51756     vector unsigned long long vec_vpopcnt (vector unsigned long long);
51757     vector int vec_vpopcnt (vector int);
51758     vector unsigned int vec_vpopcnt (vector int);
51759     vector short vec_vpopcnt (vector short);
51760     vector unsigned short vec_vpopcnt (vector unsigned short);
51761     vector signed char vec_vpopcnt (vector signed char);
51762     vector unsigned char vec_vpopcnt (vector unsigned char);
51763
51764     vector signed char vec_vpopcntb (vector signed char);
51765     vector unsigned char vec_vpopcntb (vector unsigned char);
51766
51767     vector long long vec_vpopcntd (vector long long);
51768     vector unsigned long long vec_vpopcntd (vector unsigned long long);
51769
51770     vector short vec_vpopcnth (vector short);
51771     vector unsigned short vec_vpopcnth (vector unsigned short);
51772
51773     vector int vec_vpopcntw (vector int);
51774     vector unsigned int vec_vpopcntw (vector int);
51775
51776     vector long long vec_vrld (vector long long, vector unsigned long long);
51777     vector unsigned long long vec_vrld (vector unsigned long long,
51778                                         vector unsigned long long);
51779
51780     vector long long vec_vsld (vector long long, vector unsigned long long);
51781     vector long long vec_vsld (vector unsigned long long,
51782                                vector unsigned long long);
51783
51784     vector long long vec_vsrad (vector long long, vector unsigned long long);
51785     vector unsigned long long vec_vsrad (vector unsigned long long,
51786                                          vector unsigned long long);
51787
51788     vector long long vec_vsrd (vector long long, vector unsigned long long);
51789     vector unsigned long long char vec_vsrd (vector unsigned long long,
51790                                              vector unsigned long long);
51791
51792     vector long long vec_vsubudm (vector long long, vector long long);
51793     vector long long vec_vsubudm (vector bool long long, vector long long);
51794     vector long long vec_vsubudm (vector long long, vector bool long long);
51795     vector unsigned long long vec_vsubudm (vector unsigned long long,
51796                                            vector unsigned long long);
51797     vector unsigned long long vec_vsubudm (vector bool long long,
51798                                            vector unsigned long long);
51799     vector unsigned long long vec_vsubudm (vector unsigned long long,
51800                                            vector bool long long);
51801
51802     vector long long vec_vupkhsw (vector int);
51803     vector unsigned long long vec_vupkhsw (vector unsigned int);
51804
51805     vector long long vec_vupklsw (vector int);
51806     vector unsigned long long vec_vupklsw (vector int);
51807
51808 If the ISA 2.07 additions to the vector/scalar (power8-vector)
51809instruction set are available, the following additional functions are
51810available for 64-bit targets.  New vector types (VECTOR __INT128 and
51811VECTOR __UINT128) are available to hold the __INT128 and __UINT128 types
51812to use these builtins.
51813
51814 The normal vector extract, and set operations work on VECTOR __INT128
51815and VECTOR __UINT128 types, but the index value must be 0.
51816
51817 Only functions excluded from the PVIPR are listed here.
51818
51819     vector __int128 vec_vaddcuq (vector __int128, vector __int128);
51820     vector __uint128 vec_vaddcuq (vector __uint128, vector __uint128);
51821
51822     vector __int128 vec_vadduqm (vector __int128, vector __int128);
51823     vector __uint128 vec_vadduqm (vector __uint128, vector __uint128);
51824
51825     vector __int128 vec_vaddecuq (vector __int128, vector __int128,
51826                                     vector __int128);
51827     vector __uint128 vec_vaddecuq (vector __uint128, vector __uint128,
51828                                      vector __uint128);
51829
51830     vector __int128 vec_vaddeuqm (vector __int128, vector __int128,
51831                                     vector __int128);
51832     vector __uint128 vec_vaddeuqm (vector __uint128, vector __uint128,
51833                                      vector __uint128);
51834
51835     vector __int128 vec_vsubecuq (vector __int128, vector __int128,
51836                                     vector __int128);
51837     vector __uint128 vec_vsubecuq (vector __uint128, vector __uint128,
51838                                      vector __uint128);
51839
51840     vector __int128 vec_vsubeuqm (vector __int128, vector __int128,
51841                                     vector __int128);
51842     vector __uint128 vec_vsubeuqm (vector __uint128, vector __uint128,
51843                                      vector __uint128);
51844
51845     vector __int128 vec_vsubcuq (vector __int128, vector __int128);
51846     vector __uint128 vec_vsubcuq (vector __uint128, vector __uint128);
51847
51848     __int128 vec_vsubuqm (__int128, __int128);
51849     __uint128 vec_vsubuqm (__uint128, __uint128);
51850
51851     vector __int128 __builtin_bcdadd (vector __int128, vector __int128, const int);
51852     vector unsigned char __builtin_bcdadd (vector unsigned char, vector unsigned char,
51853                                            const int);
51854     int __builtin_bcdadd_lt (vector __int128, vector __int128, const int);
51855     int __builtin_bcdadd_lt (vector unsigned char, vector unsigned char, const int);
51856     int __builtin_bcdadd_eq (vector __int128, vector __int128, const int);
51857     int __builtin_bcdadd_eq (vector unsigned char, vector unsigned char, const int);
51858     int __builtin_bcdadd_gt (vector __int128, vector __int128, const int);
51859     int __builtin_bcdadd_gt (vector unsigned char, vector unsigned char, const int);
51860     int __builtin_bcdadd_ov (vector __int128, vector __int128, const int);
51861     int __builtin_bcdadd_ov (vector unsigned char, vector unsigned char, const int);
51862
51863     vector __int128 __builtin_bcdsub (vector __int128, vector __int128, const int);
51864     vector unsigned char __builtin_bcdsub (vector unsigned char, vector unsigned char,
51865                                            const int);
51866     int __builtin_bcdsub_lt (vector __int128, vector __int128, const int);
51867     int __builtin_bcdsub_lt (vector unsigned char, vector unsigned char, const int);
51868     int __builtin_bcdsub_eq (vector __int128, vector __int128, const int);
51869     int __builtin_bcdsub_eq (vector unsigned char, vector unsigned char, const int);
51870     int __builtin_bcdsub_gt (vector __int128, vector __int128, const int);
51871     int __builtin_bcdsub_gt (vector unsigned char, vector unsigned char, const int);
51872     int __builtin_bcdsub_ov (vector __int128, vector __int128, const int);
51873     int __builtin_bcdsub_ov (vector unsigned char, vector unsigned char, const int);
51874
51875
51876File: gcc.info,  Node: PowerPC AltiVec Built-in Functions Available on ISA 3.0,  Next: PowerPC AltiVec Built-in Functions Available on ISA 3.1,  Prev: PowerPC AltiVec Built-in Functions Available on ISA 2.07,  Up: PowerPC AltiVec/VSX Built-in Functions
51877
518786.60.23.4 PowerPC AltiVec Built-in Functions Available on ISA 3.0
51879.................................................................
51880
51881The following additional built-in functions are also available for the
51882PowerPC family of processors, starting with ISA 3.0 ('-mcpu=power9') or
51883later.
51884
51885 Only instructions excluded from the PVIPR are listed here.
51886
51887     unsigned int scalar_extract_exp (double source);
51888     unsigned long long int scalar_extract_exp (__ieee128 source);
51889
51890     unsigned long long int scalar_extract_sig (double source);
51891     unsigned __int128 scalar_extract_sig (__ieee128 source);
51892
51893     double scalar_insert_exp (unsigned long long int significand,
51894                               unsigned long long int exponent);
51895     double scalar_insert_exp (double significand, unsigned long long int exponent);
51896
51897     ieee_128 scalar_insert_exp (unsigned __int128 significand,
51898                                 unsigned long long int exponent);
51899     ieee_128 scalar_insert_exp (ieee_128 significand, unsigned long long int exponent);
51900
51901     int scalar_cmp_exp_gt (double arg1, double arg2);
51902     int scalar_cmp_exp_lt (double arg1, double arg2);
51903     int scalar_cmp_exp_eq (double arg1, double arg2);
51904     int scalar_cmp_exp_unordered (double arg1, double arg2);
51905
51906     bool scalar_test_data_class (float source, const int condition);
51907     bool scalar_test_data_class (double source, const int condition);
51908     bool scalar_test_data_class (__ieee128 source, const int condition);
51909
51910     bool scalar_test_neg (float source);
51911     bool scalar_test_neg (double source);
51912     bool scalar_test_neg (__ieee128 source);
51913
51914 The 'scalar_extract_exp' and 'scalar_extract_sig' functions require a
5191564-bit environment supporting ISA 3.0 or later.  The
51916'scalar_extract_exp' and 'scalar_extract_sig' built-in functions return
51917the significand and the biased exponent value respectively of their
51918'source' arguments.  When supplied with a 64-bit 'source' argument, the
51919result returned by 'scalar_extract_sig' has the '0x0010000000000000' bit
51920set if the function's 'source' argument is in normalized form.
51921Otherwise, this bit is set to 0.  When supplied with a 128-bit 'source'
51922argument, the '0x00010000000000000000000000000000' bit of the result is
51923treated similarly.  Note that the sign of the significand is not
51924represented in the result returned from the 'scalar_extract_sig'
51925function.  Use the 'scalar_test_neg' function to test the sign of its
51926'double' argument.
51927
51928 The 'scalar_insert_exp' functions require a 64-bit environment
51929supporting ISA 3.0 or later.  When supplied with a 64-bit first
51930argument, the 'scalar_insert_exp' built-in function returns a
51931double-precision floating point value that is constructed by assembling
51932the values of its 'significand' and 'exponent' arguments.  The sign of
51933the result is copied from the most significant bit of the 'significand'
51934argument.  The significand and exponent components of the result are
51935composed of the least significant 11 bits of the 'exponent' argument and
51936the least significant 52 bits of the 'significand' argument
51937respectively.
51938
51939 When supplied with a 128-bit first argument, the 'scalar_insert_exp'
51940built-in function returns a quad-precision ieee floating point value.
51941The sign bit of the result is copied from the most significant bit of
51942the 'significand' argument.  The significand and exponent components of
51943the result are composed of the least significant 15 bits of the
51944'exponent' argument and the least significant 112 bits of the
51945'significand' argument respectively.
51946
51947 The 'scalar_cmp_exp_gt', 'scalar_cmp_exp_lt', 'scalar_cmp_exp_eq', and
51948'scalar_cmp_exp_unordered' built-in functions return a non-zero value if
51949'arg1' is greater than, less than, equal to, or not comparable to 'arg2'
51950respectively.  The arguments are not comparable if one or the other
51951equals NaN (not a number).
51952
51953 The 'scalar_test_data_class' built-in function returns 1 if any of the
51954condition tests enabled by the value of the 'condition' variable are
51955true, and 0 otherwise.  The 'condition' argument must be a compile-time
51956constant integer with value not exceeding 127.  The 'condition' argument
51957is encoded as a bitmask with each bit enabling the testing of a
51958different condition, as characterized by the following:
51959     0x40    Test for NaN
51960     0x20    Test for +Infinity
51961     0x10    Test for -Infinity
51962     0x08    Test for +Zero
51963     0x04    Test for -Zero
51964     0x02    Test for +Denormal
51965     0x01    Test for -Denormal
51966
51967 The 'scalar_test_neg' built-in function returns 1 if its 'source'
51968argument holds a negative value, 0 otherwise.
51969
51970 The following built-in functions are also available for the PowerPC
51971family of processors, starting with ISA 3.0 or later ('-mcpu=power9').
51972These string functions are described separately in order to group the
51973descriptions closer to the function prototypes.
51974
51975 Only functions excluded from the PVIPR are listed here.
51976
51977     int vec_all_nez (vector signed char, vector signed char);
51978     int vec_all_nez (vector unsigned char, vector unsigned char);
51979     int vec_all_nez (vector signed short, vector signed short);
51980     int vec_all_nez (vector unsigned short, vector unsigned short);
51981     int vec_all_nez (vector signed int, vector signed int);
51982     int vec_all_nez (vector unsigned int, vector unsigned int);
51983
51984     int vec_any_eqz (vector signed char, vector signed char);
51985     int vec_any_eqz (vector unsigned char, vector unsigned char);
51986     int vec_any_eqz (vector signed short, vector signed short);
51987     int vec_any_eqz (vector unsigned short, vector unsigned short);
51988     int vec_any_eqz (vector signed int, vector signed int);
51989     int vec_any_eqz (vector unsigned int, vector unsigned int);
51990
51991     signed char vec_xlx (unsigned int index, vector signed char data);
51992     unsigned char vec_xlx (unsigned int index, vector unsigned char data);
51993     signed short vec_xlx (unsigned int index, vector signed short data);
51994     unsigned short vec_xlx (unsigned int index, vector unsigned short data);
51995     signed int vec_xlx (unsigned int index, vector signed int data);
51996     unsigned int vec_xlx (unsigned int index, vector unsigned int data);
51997     float vec_xlx (unsigned int index, vector float data);
51998
51999     signed char vec_xrx (unsigned int index, vector signed char data);
52000     unsigned char vec_xrx (unsigned int index, vector unsigned char data);
52001     signed short vec_xrx (unsigned int index, vector signed short data);
52002     unsigned short vec_xrx (unsigned int index, vector unsigned short data);
52003     signed int vec_xrx (unsigned int index, vector signed int data);
52004     unsigned int vec_xrx (unsigned int index, vector unsigned int data);
52005     float vec_xrx (unsigned int index, vector float data);
52006
52007 The 'vec_all_nez', 'vec_any_eqz', and 'vec_cmpnez' perform pairwise
52008comparisons between the elements at the same positions within their two
52009vector arguments.  The 'vec_all_nez' function returns a non-zero value
52010if and only if all pairwise comparisons are not equal and no element of
52011either vector argument contains a zero.  The 'vec_any_eqz' function
52012returns a non-zero value if and only if at least one pairwise comparison
52013is equal or if at least one element of either vector argument contains a
52014zero.  The 'vec_cmpnez' function returns a vector of the same type as
52015its two arguments, within which each element consists of all ones to
52016denote that either the corresponding elements of the incoming arguments
52017are not equal or that at least one of the corresponding elements
52018contains zero.  Otherwise, the element of the returned vector contains
52019all zeros.
52020
52021 The 'vec_xlx' and 'vec_xrx' functions extract the single element
52022selected by the 'index' argument from the vector represented by the
52023'data' argument.  The 'index' argument always specifies a byte offset,
52024regardless of the size of the vector element.  With 'vec_xlx', 'index'
52025is the offset of the first byte of the element to be extracted.  With
52026'vec_xrx', 'index' represents the last byte of the element to be
52027extracted, measured from the right end of the vector.  In other words,
52028the last byte of the element to be extracted is found at position '(15 -
52029index)'.  There is no requirement that 'index' be a multiple of the
52030vector element size.  However, if the size of the vector element added
52031to 'index' is greater than 15, the content of the returned value is
52032undefined.
52033
52034 The following functions are also available if the ISA 3.0 instruction
52035set additions ('-mcpu=power9') are available.
52036
52037 Only functions excluded from the PVIPR are listed here.
52038
52039     vector long long vec_vctz (vector long long);
52040     vector unsigned long long vec_vctz (vector unsigned long long);
52041     vector int vec_vctz (vector int);
52042     vector unsigned int vec_vctz (vector int);
52043     vector short vec_vctz (vector short);
52044     vector unsigned short vec_vctz (vector unsigned short);
52045     vector signed char vec_vctz (vector signed char);
52046     vector unsigned char vec_vctz (vector unsigned char);
52047
52048     vector signed char vec_vctzb (vector signed char);
52049     vector unsigned char vec_vctzb (vector unsigned char);
52050
52051     vector long long vec_vctzd (vector long long);
52052     vector unsigned long long vec_vctzd (vector unsigned long long);
52053
52054     vector short vec_vctzh (vector short);
52055     vector unsigned short vec_vctzh (vector unsigned short);
52056
52057     vector int vec_vctzw (vector int);
52058     vector unsigned int vec_vctzw (vector int);
52059
52060     vector int vec_vprtyb (vector int);
52061     vector unsigned int vec_vprtyb (vector unsigned int);
52062     vector long long vec_vprtyb (vector long long);
52063     vector unsigned long long vec_vprtyb (vector unsigned long long);
52064
52065     vector int vec_vprtybw (vector int);
52066     vector unsigned int vec_vprtybw (vector unsigned int);
52067
52068     vector long long vec_vprtybd (vector long long);
52069     vector unsigned long long vec_vprtybd (vector unsigned long long);
52070
52071 On 64-bit targets, if the ISA 3.0 additions ('-mcpu=power9') are
52072available:
52073
52074     vector long vec_vprtyb (vector long);
52075     vector unsigned long vec_vprtyb (vector unsigned long);
52076     vector __int128 vec_vprtyb (vector __int128);
52077     vector __uint128 vec_vprtyb (vector __uint128);
52078
52079     vector long vec_vprtybd (vector long);
52080     vector unsigned long vec_vprtybd (vector unsigned long);
52081
52082     vector __int128 vec_vprtybq (vector __int128);
52083     vector __uint128 vec_vprtybd (vector __uint128);
52084
52085 The following built-in functions are available for the PowerPC family
52086of processors, starting with ISA 3.0 or later ('-mcpu=power9').
52087
52088 Only functions excluded from the PVIPR are listed here.
52089
52090     __vector unsigned char
52091     vec_absdb (__vector unsigned char arg1, __vector unsigned char arg2);
52092     __vector unsigned short
52093     vec_absdh (__vector unsigned short arg1, __vector unsigned short arg2);
52094     __vector unsigned int
52095     vec_absdw (__vector unsigned int arg1, __vector unsigned int arg2);
52096
52097 The 'vec_absd', 'vec_absdb', 'vec_absdh', and 'vec_absdw' built-in
52098functions each computes the absolute differences of the pairs of vector
52099elements supplied in its two vector arguments, placing the absolute
52100differences into the corresponding elements of the vector result.
52101
52102 The following built-in functions are available for the PowerPC family
52103of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
52104     vector unsigned int vec_vrlnm (vector unsigned int, vector unsigned int);
52105     vector unsigned long long vec_vrlnm (vector unsigned long long,
52106                                          vector unsigned long long);
52107
52108 The result of 'vec_vrlnm' is obtained by rotating each element of the
52109first argument vector left and ANDing it with a mask.  The second
52110argument vector contains the mask beginning in bits 11:15, the mask end
52111in bits 19:23, and the shift count in bits 27:31, of each element.
52112
52113 If the cryptographic instructions are enabled ('-mcrypto' or
52114'-mcpu=power8'), the following builtins are enabled.
52115
52116 Only functions excluded from the PVIPR are listed here.
52117
52118     vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
52119
52120     vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
52121                                                         vector unsigned long long);
52122
52123     vector unsigned long long __builtin_crypto_vcipherlast
52124                                          (vector unsigned long long,
52125                                           vector unsigned long long);
52126
52127     vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
52128                                                          vector unsigned long long);
52129
52130     vector unsigned long long __builtin_crypto_vncipherlast (vector unsigned long long,
52131                                                              vector unsigned long long);
52132
52133     vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
52134                                                     vector unsigned char,
52135                                                     vector unsigned char);
52136
52137     vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
52138                                                      vector unsigned short,
52139                                                      vector unsigned short);
52140
52141     vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
52142                                                    vector unsigned int,
52143                                                    vector unsigned int);
52144
52145     vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
52146                                                          vector unsigned long long,
52147                                                          vector unsigned long long);
52148
52149     vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
52150                                                    vector unsigned char);
52151
52152     vector unsigned short __builtin_crypto_vpmsumh (vector unsigned short,
52153                                                     vector unsigned short);
52154
52155     vector unsigned int __builtin_crypto_vpmsumw (vector unsigned int,
52156                                                   vector unsigned int);
52157
52158     vector unsigned long long __builtin_crypto_vpmsumd (vector unsigned long long,
52159                                                         vector unsigned long long);
52160
52161     vector unsigned long long __builtin_crypto_vshasigmad (vector unsigned long long,
52162                                                            int, int);
52163
52164     vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int, int, int);
52165
52166 The second argument to __BUILTIN_CRYPTO_VSHASIGMAD and
52167__BUILTIN_CRYPTO_VSHASIGMAW must be a constant integer that is 0 or 1.
52168The third argument to these built-in functions must be a constant
52169integer in the range of 0 to 15.
52170
52171 The following sign extension builtins are provided:
52172
52173     vector signed int vec_signexti (vector signed char a);
52174     vector signed long long vec_signextll (vector signed char a);
52175     vector signed int vec_signexti (vector signed short a);
52176     vector signed long long vec_signextll (vector signed short a);
52177     vector signed long long vec_signextll (vector signed int a);
52178     vector signed long long vec_signextq (vector signed long long a);
52179
52180 Each element of the result is produced by sign-extending the element of
52181the input vector that would fall in the least significant portion of the
52182result element.  For example, a sign-extension of a vector signed char
52183to a vector signed long long will sign extend the rightmost byte of each
52184doubleword.
52185
52186
52187File: gcc.info,  Node: PowerPC AltiVec Built-in Functions Available on ISA 3.1,  Prev: PowerPC AltiVec Built-in Functions Available on ISA 3.0,  Up: PowerPC AltiVec/VSX Built-in Functions
52188
521896.60.23.5 PowerPC AltiVec Built-in Functions Available on ISA 3.1
52190.................................................................
52191
52192The following additional built-in functions are also available for the
52193PowerPC family of processors, starting with ISA 3.1 ('-mcpu=power10'):
52194
52195vector unsigned long long int
52196vec_cfuge (vector unsigned long long int, vector unsigned long long int);
52197 Perform a vector centrifuge operation, as if implemented by the
52198'vcfuged' instruction.
52199
52200vector unsigned long long int
52201vec_cntlzm (vector unsigned long long int, vector unsigned long long int);
52202 Perform a vector count leading zeros under bit mask operation, as if
52203implemented by the 'vclzdm' instruction.
52204
52205vector unsigned long long int
52206vec_cnttzm (vector unsigned long long int, vector unsigned long long int);
52207 Perform a vector count trailing zeros under bit mask operation, as if
52208implemented by the 'vctzdm' instruction.
52209
52210vector signed char
52211vec_clrl (vector signed char a, unsigned int n);
52212vector unsigned char
52213vec_clrl (vector unsigned char a, unsigned int n);
52214 Clear the left-most '(16 - n)' bytes of vector argument 'a', as if
52215implemented by the 'vclrlb' instruction on a big-endian target and by
52216the 'vclrrb' instruction on a little-endian target.  A value of 'n' that
52217is greater than 16 is treated as if it equaled 16.
52218
52219vector signed char
52220vec_clrr (vector signed char a, unsigned int n);
52221vector unsigned char
52222vec_clrr (vector unsigned char a, unsigned int n);
52223 Clear the right-most '(16 - n)' bytes of vector argument 'a', as if
52224implemented by the 'vclrrb' instruction on a big-endian target and by
52225the 'vclrlb' instruction on a little-endian target.  A value of 'n' that
52226is greater than 16 is treated as if it equaled 16.
52227
52228vector unsigned long long int
52229vec_gnb (vector unsigned __int128, const unsigned char);
52230 Perform a 128-bit vector gather operation, as if implemented by the
52231'vgnb' instruction.  The second argument must be a literal integer value
52232between 2 and 7 inclusive.
52233
52234 Vector Extract
52235
52236vector unsigned long long int
52237vec_extractl (vector unsigned char, vector unsigned char, unsigned int);
52238vector unsigned long long int
52239vec_extractl (vector unsigned short, vector unsigned short, unsigned int);
52240vector unsigned long long int
52241vec_extractl (vector unsigned int, vector unsigned int, unsigned int);
52242vector unsigned long long int
52243vec_extractl (vector unsigned long long, vector unsigned long long, unsigned int);
52244 Extract an element from two concatenated vectors starting at the given
52245byte index in natural-endian order, and place it zero-extended in
52246doubleword 1 of the result according to natural element order.  If the
52247byte index is out of range for the data type, the intrinsic will be
52248rejected.  For little-endian, this output will match the placement by
52249the hardware instruction, i.e., dword[0] in RTL notation.  For
52250big-endian, an additional instruction is needed to move it from the
52251"left" doubleword to the "right" one.  For little-endian, semantics
52252matching the 'vextdubvrx', 'vextduhvrx', 'vextduwvrx' instruction will
52253be generated, while for big-endian, semantics matching the 'vextdubvlx',
52254'vextduhvlx', 'vextduwvlx' instructions will be generated.  Note that
52255some fairly anomalous results can be generated if the byte index is not
52256aligned on an element boundary for the element being extracted.  This is
52257a limitation of the bi-endian vector programming model is consistent
52258with the limitation on 'vec_perm'.
52259
52260vector unsigned long long int
52261vec_extracth (vector unsigned char, vector unsigned char, unsigned int);
52262vector unsigned long long int
52263vec_extracth (vector unsigned short, vector unsigned short,
52264     unsigned int);
52265vector unsigned long long int
52266vec_extracth (vector unsigned int, vector unsigned int, unsigned int);
52267vector unsigned long long int
52268vec_extracth (vector unsigned long long, vector unsigned long long,
52269     unsigned int);
52270 Extract an element from two concatenated vectors starting at the given
52271byte index.  The index is based on big endian order for a little endian
52272system.  Similarly, the index is based on little endian order for a big
52273endian system.  The extraced elements are zero-extended and put in
52274doubleword 1 according to natural element order.  If the byte index is
52275out of range for the data type, the intrinsic will be rejected.  For
52276little-endian, this output will match the placement by the hardware
52277instruction (vextdubvrx, vextduhvrx, vextduwvrx, vextddvrx) i.e.,
52278dword[0] in RTL notation.  For big-endian, an additional instruction is
52279needed to move it from the "left" doubleword to the "right" one.  For
52280little-endian, semantics matching the 'vextdubvlx', 'vextduhvlx',
52281'vextduwvlx' instructions will be generated, while for big-endian,
52282semantics matching the 'vextdubvrx', 'vextduhvrx', 'vextduwvrx'
52283instructions will be generated.  Note that some fairly anomalous results
52284can be generated if the byte index is not aligned on the element
52285boundary for the element being extracted.  This is a limitation of the
52286bi-endian vector programming model consistent with the limitation on
52287'vec_perm'.
52288vector unsigned long long int
52289vec_pdep (vector unsigned long long int, vector unsigned long long int);
52290 Perform a vector parallel bits deposit operation, as if implemented by
52291the 'vpdepd' instruction.
52292
52293 Vector Insert
52294
52295vector unsigned char
52296vec_insertl (unsigned char, vector unsigned char, unsigned int);
52297vector unsigned short
52298vec_insertl (unsigned short, vector unsigned short, unsigned int);
52299vector unsigned int
52300vec_insertl (unsigned int, vector unsigned int, unsigned int);
52301vector unsigned long long
52302vec_insertl (unsigned long long, vector unsigned long long,
52303     unsigned int);
52304vector unsigned char
52305vec_insertl (vector unsigned char, vector unsigned char, unsigned int;
52306vector unsigned short
52307vec_insertl (vector unsigned short, vector unsigned short,
52308     unsigned int);
52309vector unsigned int
52310vec_insertl (vector unsigned int, vector unsigned int, unsigned int);
52311
52312 Let src be the first argument, when the first argument is a scalar, or
52313the rightmost element of the left doubleword of the first argument, when
52314the first argument is a vector.  Insert the source into the destination
52315at the position given by the third argument, using natural element order
52316in the second argument.  The rest of the second argument is unchanged.
52317If the byte index is greater than 14 for halfwords, greater than 12 for
52318words, or greater than 8 for doublewords the result is undefined.  For
52319little-endian, the generated code will be semantically equivalent to
52320'vins[bhwd]rx' instructions.  Similarly for big-endian it will be
52321semantically equivalent to 'vins[bhwd]lx'.  Note that some fairly
52322anomalous results can be generated if the byte index is not aligned on
52323an element boundary for the type of element being inserted.
52324
52325vector unsigned char
52326vec_inserth (unsigned char, vector unsigned char, unsigned int);
52327vector unsigned short
52328vec_inserth (unsigned short, vector unsigned short, unsigned int);
52329vector unsigned int
52330vec_inserth (unsigned int, vector unsigned int, unsigned int);
52331vector unsigned long long
52332vec_inserth (unsigned long long, vector unsigned long long,
52333     unsigned int);
52334vector unsigned char
52335vec_inserth (vector unsigned char, vector unsigned char, unsigned int);
52336vector unsigned short
52337vec_inserth (vector unsigned short, vector unsigned short,
52338     unsigned int);
52339vector unsigned int
52340vec_inserth (vector unsigned int, vector unsigned int, unsigned int);
52341
52342 Let src be the first argument, when the first argument is a scalar, or
52343the rightmost element of the first argument, when the first argument is
52344a vector.  Insert src into the second argument at the position
52345identified by the third argument, using opposite element order in the
52346second argument, and leaving the rest of the second argument unchanged.
52347If the byte index is greater than 14 for halfwords, 12 for words, or 8
52348for doublewords, the intrinsic will be rejected.  Note that the
52349underlying hardware instruction uses the same register for the second
52350argument and the result.  For little-endian, the code generation will be
52351semantically equivalent to 'vins[bhwd]lx', while for big-endian it will
52352be semantically equivalent to 'vins[bhwd]rx'.  Note that some fairly
52353anomalous results can be generated if the byte index is not aligned on
52354an element boundary for the sort of element being inserted.
52355
52356 Vector Replace Element
52357vector signed int vec_replace_elt (vector signed int, signed int,
52358     const int);
52359vector unsigned int vec_replace_elt (vector unsigned int,
52360     unsigned int, const int);
52361vector float vec_replace_elt (vector float, float, const int);
52362vector signed long long vec_replace_elt (vector signed long long,
52363     signed long long, const int);
52364vector unsigned long long vec_replace_elt (vector unsigned long long,
52365     unsigned long long, const int);
52366vector double rec_replace_elt (vector double, double, const int);
52367 The third argument (constrained to [0,3]) identifies the natural-endian
52368element number of the first argument that will be replaced by the second
52369argument to produce the result.  The other elements of the first
52370argument will remain unchanged in the result.
52371
52372 If it's desirable to insert a word at an unaligned position, use
52373vec_replace_unaligned instead.
52374
52375 Vector Replace Unaligned
52376vector unsigned char vec_replace_unaligned (vector unsigned char,
52377     signed int, const int);
52378vector unsigned char vec_replace_unaligned (vector unsigned char,
52379     unsigned int, const int);
52380vector unsigned char vec_replace_unaligned (vector unsigned char,
52381     float, const int);
52382vector unsigned char vec_replace_unaligned (vector unsigned char,
52383     signed long long, const int);
52384vector unsigned char vec_replace_unaligned (vector unsigned char,
52385     unsigned long long, const int);
52386vector unsigned char vec_replace_unaligned (vector unsigned char,
52387     double, const int);
52388
52389 The second argument replaces a portion of the first argument to produce
52390the result, with the rest of the first argument unchanged in the result.
52391The third argument identifies the byte index (using left-to-right, or
52392big-endian order) where the high-order byte of the second argument will
52393be placed, with the remaining bytes of the second argument placed
52394naturally "to the right" of the high-order byte.
52395
52396 The programmer is responsible for understanding the endianness issues
52397involved with the first argument and the result.
52398
52399 Vector Shift Left Double Bit Immediate
52400vector signed char vec_sldb (vector signed char, vector signed char,
52401     const unsigned int);
52402vector unsigned char vec_sldb (vector unsigned char,
52403     vector unsigned char, const unsigned int);
52404vector signed short vec_sldb (vector signed short, vector signed short,
52405     const unsigned int);
52406vector unsigned short vec_sldb (vector unsigned short,
52407     vector unsigned short, const unsigned int);
52408vector signed int vec_sldb (vector signed int, vector signed int,
52409     const unsigned int);
52410vector unsigned int vec_sldb (vector unsigned int, vector unsigned int,
52411     const unsigned int);
52412vector signed long long vec_sldb (vector signed long long,
52413     vector signed long long, const unsigned int);
52414vector unsigned long long vec_sldb (vector unsigned long long,
52415     vector unsigned long long, const unsigned int);
52416
52417 Shift the combined input vectors left by the amount specified by the
52418low-order three bits of the third argument, and return the leftmost
52419remaining 128 bits.  Code using this instruction must be endian-aware.
52420
52421 Vector Shift Right Double Bit Immediate
52422
52423vector signed char vec_srdb (vector signed char, vector signed char,
52424     const unsigned int);
52425vector unsigned char vec_srdb (vector unsigned char, vector unsigned char,
52426     const unsigned int);
52427vector signed short vec_srdb (vector signed short, vector signed short,
52428     const unsigned int);
52429vector unsigned short vec_srdb (vector unsigned short, vector unsigned short,
52430     const unsigned int);
52431vector signed int vec_srdb (vector signed int, vector signed int,
52432     const unsigned int);
52433vector unsigned int vec_srdb (vector unsigned int, vector unsigned int,
52434     const unsigned int);
52435vector signed long long vec_srdb (vector signed long long,
52436     vector signed long long, const unsigned int);
52437vector unsigned long long vec_srdb (vector unsigned long long,
52438     vector unsigned long long, const unsigned int);
52439
52440 Shift the combined input vectors right by the amount specified by the
52441low-order three bits of the third argument, and return the remaining 128
52442bits.  Code using this built-in must be endian-aware.
52443
52444 Vector Splat
52445
52446vector signed int vec_splati (const signed int);
52447vector float vec_splati (const float);
52448
52449 Splat a 32-bit immediate into a vector of words.
52450
52451vector double vec_splatid (const float);
52452
52453 Convert a single precision floating-point value to double-precision and
52454splat the result to a vector of double-precision floats.
52455
52456vector signed int vec_splati_ins (vector signed int,
52457     const unsigned int, const signed int);
52458vector unsigned int vec_splati_ins (vector unsigned int,
52459     const unsigned int, const unsigned int);
52460vector float vec_splati_ins (vector float, const unsigned int,
52461     const float);
52462
52463 Argument 2 must be either 0 or 1.  Splat the value of argument 3 into
52464the word identified by argument 2 of each doubleword of argument 1 and
52465return the result.  The other words of argument 1 are unchanged.
52466
52467 Vector Blend Variable
52468
52469vector signed char vec_blendv (vector signed char, vector signed char,
52470     vector unsigned char);
52471vector unsigned char vec_blendv (vector unsigned char,
52472     vector unsigned char, vector unsigned char);
52473vector signed short vec_blendv (vector signed short,
52474     vector signed short, vector unsigned short);
52475vector unsigned short vec_blendv (vector unsigned short,
52476     vector unsigned short, vector unsigned short);
52477vector signed int vec_blendv (vector signed int, vector signed int,
52478     vector unsigned int);
52479vector unsigned int vec_blendv (vector unsigned int,
52480     vector unsigned int, vector unsigned int);
52481vector signed long long vec_blendv (vector signed long long,
52482     vector signed long long, vector unsigned long long);
52483vector unsigned long long vec_blendv (vector unsigned long long,
52484     vector unsigned long long, vector unsigned long long);
52485vector float vec_blendv (vector float, vector float,
52486     vector unsigned int);
52487vector double vec_blendv (vector double, vector double,
52488     vector unsigned long long);
52489
52490 Blend the first and second argument vectors according to the sign bits
52491of the corresponding elements of the third argument vector.  This is
52492similar to the 'vsel' and 'xxsel' instructions but for bigger elements.
52493
52494 Vector Permute Extended
52495
52496vector signed char vec_permx (vector signed char, vector signed char,
52497     vector unsigned char, const int);
52498vector unsigned char vec_permx (vector unsigned char,
52499     vector unsigned char, vector unsigned char, const int);
52500vector signed short vec_permx (vector signed short,
52501     vector signed short, vector unsigned char, const int);
52502vector unsigned short vec_permx (vector unsigned short,
52503     vector unsigned short, vector unsigned char, const int);
52504vector signed int vec_permx (vector signed int, vector signed int,
52505     vector unsigned char, const int);
52506vector unsigned int vec_permx (vector unsigned int,
52507     vector unsigned int, vector unsigned char, const int);
52508vector signed long long vec_permx (vector signed long long,
52509     vector signed long long, vector unsigned char, const int);
52510vector unsigned long long vec_permx (vector unsigned long long,
52511     vector unsigned long long, vector unsigned char, const int);
52512vector float (vector float, vector float, vector unsigned char,
52513     const int);
52514vector double (vector double, vector double, vector unsigned char,
52515     const int);
52516
52517 Perform a partial permute of the first two arguments, which form a
5251832-byte section of an emulated vector up to 256 bytes wide, using the
52519partial permute control vector in the third argument.  The fourth
52520argument (constrained to values of 0-7) identifies which 32-byte section
52521of the emulated vector is contained in the first two arguments.
52522
52523vector unsigned long long int
52524vec_pext (vector unsigned long long int, vector unsigned long long int);
52525 Perform a vector parallel bit extract operation, as if implemented by
52526the 'vpextd' instruction.
52527
52528vector unsigned char vec_stril (vector unsigned char);
52529vector signed char vec_stril (vector signed char);
52530vector unsigned short vec_stril (vector unsigned short);
52531vector signed short vec_stril (vector signed short);
52532 Isolate the left-most non-zero elements of the incoming vector
52533argument, replacing all elements to the right of the left-most zero
52534element found within the argument with zero.  The typical implementation
52535uses the 'vstribl' or 'vstrihl' instruction on big-endian targets and
52536uses the 'vstribr' or 'vstrihr' instruction on little-endian targets.
52537
52538int vec_stril_p (vector unsigned char);
52539int vec_stril_p (vector signed char);
52540int short vec_stril_p (vector unsigned short);
52541int vec_stril_p (vector signed short);
52542 Return a non-zero value if and only if the argument contains a zero
52543element.  The typical implementation uses the 'vstribl.' or 'vstrihl.'
52544instruction on big-endian targets and uses the 'vstribr.' or 'vstrihr.'
52545instruction on little-endian targets.  Choose this built-in to check for
52546presence of zero element if the same argument is also passed to
52547'vec_stril'.
52548
52549vector unsigned char vec_strir (vector unsigned char);
52550vector signed char vec_strir (vector signed char);
52551vector unsigned short vec_strir (vector unsigned short);
52552vector signed short vec_strir (vector signed short);
52553 Isolate the right-most non-zero elements of the incoming vector
52554argument, replacing all elements to the left of the right-most zero
52555element found within the argument with zero.  The typical implementation
52556uses the 'vstribr' or 'vstrihr' instruction on big-endian targets and
52557uses the 'vstribl' or 'vstrihl' instruction on little-endian targets.
52558
52559int vec_strir_p (vector unsigned char);
52560int vec_strir_p (vector signed char);
52561int short vec_strir_p (vector unsigned short);
52562int vec_strir_p (vector signed short);
52563 Return a non-zero value if and only if the argument contains a zero
52564element.  The typical implementation uses the 'vstribr.' or 'vstrihr.'
52565instruction on big-endian targets and uses the 'vstribl.' or 'vstrihl.'
52566instruction on little-endian targets.  Choose this built-in to check for
52567presence of zero element if the same argument is also passed to
52568'vec_strir'.
52569
52570vector unsigned char
52571vec_ternarylogic (vector unsigned char, vector unsigned char,
52572                 vector unsigned char, const unsigned int);
52573vector unsigned short
52574vec_ternarylogic (vector unsigned short, vector unsigned short,
52575                 vector unsigned short, const unsigned int);
52576vector unsigned int
52577vec_ternarylogic (vector unsigned int, vector unsigned int,
52578                 vector unsigned int, const unsigned int);
52579vector unsigned long long int
52580vec_ternarylogic (vector unsigned long long int, vector unsigned long long int,
52581                 vector unsigned long long int, const unsigned int);
52582vector unsigned __int128
52583vec_ternarylogic (vector unsigned __int128, vector unsigned __int128,
52584                 vector unsigned __int128, const unsigned int);
52585 Perform a 128-bit vector evaluate operation, as if implemented by the
52586'xxeval' instruction.  The fourth argument must be a literal integer
52587value between 0 and 255 inclusive.
52588
52589vector unsigned char vec_genpcvm (vector unsigned char, const int);
52590vector unsigned short vec_genpcvm (vector unsigned short, const int);
52591vector unsigned int vec_genpcvm (vector unsigned int, const int);
52592vector unsigned int vec_genpcvm (vector unsigned long long int,
52593                                              const int);
52594
52595 Vector Integer Multiply/Divide/Modulo
52596
52597vector signed int
52598vec_mulh (vector signed int a, vector signed int b);
52599vector unsigned int
52600vec_mulh (vector unsigned int a, vector unsigned int b);
52601
52602 For each integer value 'i' from 0 to 3, do the following.  The integer
52603value in word element 'i' of a is multiplied by the integer value in
52604word element 'i' of b.  The high-order 32 bits of the 64-bit product are
52605placed into word element 'i' of the vector returned.
52606
52607vector signed long long
52608vec_mulh (vector signed long long a, vector signed long long b);
52609vector unsigned long long
52610vec_mulh (vector unsigned long long a, vector unsigned long long b);
52611
52612 For each integer value 'i' from 0 to 1, do the following.  The integer
52613value in doubleword element 'i' of a is multiplied by the integer value
52614in doubleword element 'i' of b.  The high-order 64 bits of the 128-bit
52615product are placed into doubleword element 'i' of the vector returned.
52616
52617vector unsigned long long
52618vec_mul (vector unsigned long long a, vector unsigned long long b);
52619vector signed long long
52620vec_mul (vector signed long long a, vector signed long long b);
52621
52622 For each integer value 'i' from 0 to 1, do the following.  The integer
52623value in doubleword element 'i' of a is multiplied by the integer value
52624in doubleword element 'i' of b.  The low-order 64 bits of the 128-bit
52625product are placed into doubleword element 'i' of the vector returned.
52626
52627vector signed int
52628vec_div (vector signed int a, vector signed int b);
52629vector unsigned int
52630vec_div (vector unsigned int a, vector unsigned int b);
52631
52632 For each integer value 'i' from 0 to 3, do the following.  The integer
52633in word element 'i' of a is divided by the integer in word element 'i'
52634of b.  The unique integer quotient is placed into the word element 'i'
52635of the vector returned.  If an attempt is made to perform any of the
52636divisions <anything> �� 0 then the quotient is undefined.
52637
52638vector signed long long
52639vec_div (vector signed long long a, vector signed long long b);
52640vector unsigned long long
52641vec_div (vector unsigned long long a, vector unsigned long long b);
52642
52643 For each integer value 'i' from 0 to 1, do the following.  The integer
52644in doubleword element 'i' of a is divided by the integer in doubleword
52645element 'i' of b.  The unique integer quotient is placed into the
52646doubleword element 'i' of the vector returned.  If an attempt is made to
52647perform any of the divisions 0x8000_0000_0000_0000 �� -1 or <anything>
52648�� 0 then the quotient is undefined.
52649
52650vector signed int
52651vec_dive (vector signed int a, vector signed int b);
52652vector unsigned int
52653vec_dive (vector unsigned int a, vector unsigned int b);
52654
52655 For each integer value 'i' from 0 to 3, do the following.  The integer
52656in word element 'i' of a is shifted left by 32 bits, then divided by the
52657integer in word element 'i' of b.  The unique integer quotient is placed
52658into the word element 'i' of the vector returned.  If the quotient
52659cannot be represented in 32 bits, or if an attempt is made to perform
52660any of the divisions <anything> �� 0 then the quotient is undefined.
52661
52662vector signed long long
52663vec_dive (vector signed long long a, vector signed long long b);
52664vector unsigned long long
52665vec_dive (vector unsigned long long a, vector unsigned long long b);
52666
52667 For each integer value 'i' from 0 to 1, do the following.  The integer
52668in doubleword element 'i' of a is shifted left by 64 bits, then divided
52669by the integer in doubleword element 'i' of b.  The unique integer
52670quotient is placed into the doubleword element 'i' of the vector
52671returned.  If the quotient cannot be represented in 64 bits, or if an
52672attempt is made to perform <anything> �� 0 then the quotient is
52673undefined.
52674
52675vector signed int
52676vec_mod (vector signed int a, vector signed int b);
52677vector unsigned int
52678vec_mod (vector unsigned int a, vector unsigned int b);
52679
52680 For each integer value 'i' from 0 to 3, do the following.  The integer
52681in word element 'i' of a is divided by the integer in word element 'i'
52682of b.  The unique integer remainder is placed into the word element 'i'
52683of the vector returned.  If an attempt is made to perform any of the
52684divisions 0x8000_0000 �� -1 or <anything> �� 0 then the remainder is
52685undefined.
52686
52687vector signed long long
52688vec_mod (vector signed long long a, vector signed long long b);
52689vector unsigned long long
52690vec_mod (vector unsigned long long a, vector unsigned long long b);
52691
52692 For each integer value 'i' from 0 to 1, do the following.  The integer
52693in doubleword element 'i' of a is divided by the integer in doubleword
52694element 'i' of b.  The unique integer remainder is placed into the
52695doubleword element 'i' of the vector returned.  If an attempt is made to
52696perform <anything> �� 0 then the remainder is undefined.
52697
52698 Generate PCV from specified Mask size, as if implemented by the
52699'xxgenpcvbm', 'xxgenpcvhm', 'xxgenpcvwm' instructions, where immediate
52700value is either 0, 1, 2 or 3.
52701
52702vector unsigned __int128 vec_rl (vector unsigned __int128 A,
52703                                              vector unsigned __int128 B);
52704vector signed __int128 vec_rl (vector signed __int128 A,
52705                                            vector unsigned __int128 B);
52706
52707 Result value: Each element of R is obtained by rotating the
52708corresponding element of A left by the number of bits specified by the
52709corresponding element of B.
52710
52711vector unsigned __int128 vec_rlmi (vector unsigned __int128,
52712                                                vector unsigned __int128,
52713                                                vector unsigned __int128);
52714vector signed __int128 vec_rlmi (vector signed __int128,
52715                                              vector signed __int128,
52716                                              vector unsigned __int128);
52717
52718 Returns the result of rotating the first input and inserting it under
52719mask into the second input.  The first bit in the mask, the last bit in
52720the mask are obtained from the two 7-bit fields bits [108:115] and bits
52721[117:123] respectively of the second input.  The shift is obtained from
52722the third input in the 7-bit field [125:131] where all bits counted from
52723zero at the left.
52724
52725vector unsigned __int128 vec_rlnm (vector unsigned __int128,
52726                                                vector unsigned __int128,
52727                                                vector unsigned __int128);
52728vector signed __int128 vec_rlnm (vector signed __int128,
52729                                              vector unsigned __int128,
52730                                              vector unsigned __int128);
52731
52732 Returns the result of rotating the first input and ANDing it with a
52733mask.  The first bit in the mask and the last bit in the mask are
52734obtained from the two 7-bit fields bits [117:123] and bits [125:131]
52735respectively of the second input.  The shift is obtained from the third
52736input in the 7-bit field bits [125:131] where all bits counted from zero
52737at the left.
52738
52739vector unsigned __int128 vec_sl(vector unsigned __int128 A, vector unsigned __int128 B);
52740vector signed __int128 vec_sl(vector signed __int128 A, vector unsigned __int128 B);
52741
52742 Result value: Each element of R is obtained by shifting the
52743corresponding element of A left by the number of bits specified by the
52744corresponding element of B.
52745
52746vector unsigned __int128 vec_sr(vector unsigned __int128 A, vector unsigned __int128 B);
52747vector signed __int128 vec_sr(vector signed __int128 A, vector unsigned __int128 B);
52748
52749 Result value: Each element of R is obtained by shifting the
52750corresponding element of A right by the number of bits specified by the
52751corresponding element of B.
52752
52753vector unsigned __int128 vec_sra(vector unsigned __int128 A, vector unsigned __int128 B);
52754vector signed __int128 vec_sra(vector signed __int128 A, vector unsigned __int128 B);
52755
52756 Result value: Each element of R is obtained by arithmetic shifting the
52757corresponding element of A right by the number of bits specified by the
52758corresponding element of B.
52759
52760vector unsigned __int128 vec_mule (vector unsigned long long,
52761                                                vector unsigned long long);
52762vector signed __int128 vec_mule (vector signed long long,
52763                                              vector signed long long);
52764
52765 Returns a vector containing a 128-bit integer result of multiplying the
52766even doubleword elements of the two inputs.
52767
52768vector unsigned __int128 vec_mulo (vector unsigned long long,
52769                                                vector unsigned long long);
52770vector signed __int128 vec_mulo (vector signed long long,
52771                                              vector signed long long);
52772
52773 Returns a vector containing a 128-bit integer result of multiplying the
52774odd doubleword elements of the two inputs.
52775
52776vector unsigned __int128 vec_div (vector unsigned __int128,
52777                                               vector unsigned __int128);
52778vector signed __int128 vec_div (vector signed __int128,
52779                                             vector signed __int128);
52780
52781 Returns the result of dividing the first operand by the second operand.
52782An attempt to divide any value by zero or to divide the most negative
52783signed 128-bit integer by negative one results in an undefined value.
52784
52785vector unsigned __int128 vec_dive (vector unsigned __int128,
52786                                                vector unsigned __int128);
52787vector signed __int128 vec_dive (vector signed __int128,
52788                                              vector signed __int128);
52789
52790 The result is produced by shifting the first input left by 128 bits and
52791dividing by the second.  If an attempt is made to divide by zero or the
52792result is larger than 128 bits, the result is undefined.
52793
52794vector unsigned __int128 vec_mod (vector unsigned __int128,
52795                                               vector unsigned __int128);
52796vector signed __int128 vec_mod (vector signed __int128,
52797                                             vector signed __int128);
52798
52799 The result is the modulo result of dividing the first input by the
52800second input.
52801
52802 The following builtins perform 128-bit vector comparisons.  The
52803'vec_all_xx', 'vec_any_xx', and 'vec_cmpxx', where 'xx' is one of the
52804operations 'eq, ne, gt, lt, ge, le' perform pairwise comparisons between
52805the elements at the same positions within their two vector arguments.
52806The 'vec_all_xx'function returns a non-zero value if and only if all
52807pairwise comparisons are true.  The 'vec_any_xx' function returns a
52808non-zero value if and only if at least one pairwise comparison is true.
52809The 'vec_cmpxx'function returns a vector of the same type as its two
52810arguments, within which each element consists of all ones to denote that
52811specified logical comparison of the corresponding elements was true.
52812Otherwise, the element of the returned vector contains all zeros.
52813
52814     vector bool __int128 vec_cmpeq (vector signed __int128, vector signed __int128);
52815     vector bool __int128 vec_cmpeq (vector unsigned __int128, vector unsigned __int128);
52816     vector bool __int128 vec_cmpne (vector signed __int128, vector signed __int128);
52817     vector bool __int128 vec_cmpne (vector unsigned __int128, vector unsigned __int128);
52818     vector bool __int128 vec_cmpgt (vector signed __int128, vector signed __int128);
52819     vector bool __int128 vec_cmpgt (vector unsigned __int128, vector unsigned __int128);
52820     vector bool __int128 vec_cmplt (vector signed __int128, vector signed __int128);
52821     vector bool __int128 vec_cmplt (vector unsigned __int128, vector unsigned __int128);
52822     vector bool __int128 vec_cmpge (vector signed __int128, vector signed __int128);
52823     vector bool __int128 vec_cmpge (vector unsigned __int128, vector unsigned __int128);
52824     vector bool __int128 vec_cmple (vector signed __int128, vector signed __int128);
52825     vector bool __int128 vec_cmple (vector unsigned __int128, vector unsigned __int128);
52826
52827     int vec_all_eq (vector signed __int128, vector signed __int128);
52828     int vec_all_eq (vector unsigned __int128, vector unsigned __int128);
52829     int vec_all_ne (vector signed __int128, vector signed __int128);
52830     int vec_all_ne (vector unsigned __int128, vector unsigned __int128);
52831     int vec_all_gt (vector signed __int128, vector signed __int128);
52832     int vec_all_gt (vector unsigned __int128, vector unsigned __int128);
52833     int vec_all_lt (vector signed __int128, vector signed __int128);
52834     int vec_all_lt (vector unsigned __int128, vector unsigned __int128);
52835     int vec_all_ge (vector signed __int128, vector signed __int128);
52836     int vec_all_ge (vector unsigned __int128, vector unsigned __int128);
52837     int vec_all_le (vector signed __int128, vector signed __int128);
52838     int vec_all_le (vector unsigned __int128, vector unsigned __int128);
52839
52840     int vec_any_eq (vector signed __int128, vector signed __int128);
52841     int vec_any_eq (vector unsigned __int128, vector unsigned __int128);
52842     int vec_any_ne (vector signed __int128, vector signed __int128);
52843     int vec_any_ne (vector unsigned __int128, vector unsigned __int128);
52844     int vec_any_gt (vector signed __int128, vector signed __int128);
52845     int vec_any_gt (vector unsigned __int128, vector unsigned __int128);
52846     int vec_any_lt (vector signed __int128, vector signed __int128);
52847     int vec_any_lt (vector unsigned __int128, vector unsigned __int128);
52848     int vec_any_ge (vector signed __int128, vector signed __int128);
52849     int vec_any_ge (vector unsigned __int128, vector unsigned __int128);
52850     int vec_any_le (vector signed __int128, vector signed __int128);
52851     int vec_any_le (vector unsigned __int128, vector unsigned __int128);
52852
52853
52854File: 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
52855
528566.60.24 PowerPC Hardware Transactional Memory Built-in Functions
52857----------------------------------------------------------------
52858
52859GCC provides two interfaces for accessing the Hardware Transactional
52860Memory (HTM) instructions available on some of the PowerPC family of
52861processors (eg, POWER8).  The two interfaces come in a low level
52862interface, consisting of built-in functions specific to PowerPC and a
52863higher level interface consisting of inline functions that are common
52864between PowerPC and S/390.
52865
528666.60.24.1 PowerPC HTM Low Level Built-in Functions
52867..................................................
52868
52869The following low level built-in functions are available with '-mhtm' or
52870'-mcpu=CPU' where CPU is 'power8' or later.  They all generate the
52871machine instruction that is part of the name.
52872
52873 The HTM builtins (with the exception of '__builtin_tbegin') return the
52874full 4-bit condition register value set by their associated hardware
52875instruction.  The header file 'htmintrin.h' defines some macros that can
52876be used to decipher the return value.  The '__builtin_tbegin' builtin
52877returns a simple 'true' or 'false' value depending on whether a
52878transaction was successfully started or not.  The arguments of the
52879builtins match exactly the type and order of the associated hardware
52880instruction's operands, except for the '__builtin_tcheck' builtin, which
52881does not take any input arguments.  Refer to the ISA manual for a
52882description of each instruction's operands.
52883
52884     unsigned int __builtin_tbegin (unsigned int);
52885     unsigned int __builtin_tend (unsigned int);
52886
52887     unsigned int __builtin_tabort (unsigned int);
52888     unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int);
52889     unsigned int __builtin_tabortdci (unsigned int, unsigned int, int);
52890     unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int);
52891     unsigned int __builtin_tabortwci (unsigned int, unsigned int, int);
52892
52893     unsigned int __builtin_tcheck (void);
52894     unsigned int __builtin_treclaim (unsigned int);
52895     unsigned int __builtin_trechkpt (void);
52896     unsigned int __builtin_tsr (unsigned int);
52897
52898 In addition to the above HTM built-ins, we have added built-ins for
52899some common extended mnemonics of the HTM instructions:
52900
52901     unsigned int __builtin_tendall (void);
52902     unsigned int __builtin_tresume (void);
52903     unsigned int __builtin_tsuspend (void);
52904
52905 Note that the semantics of the above HTM builtins are required to mimic
52906the locking semantics used for critical sections.  Builtins that are
52907used to create a new transaction or restart a suspended transaction must
52908have lock acquisition like semantics while those builtins that end or
52909suspend a transaction must have lock release like semantics.
52910Specifically, this must mimic lock semantics as specified by C++11, for
52911example: Lock acquisition is as-if an execution of
52912__atomic_exchange_n(&globallock,1,__ATOMIC_ACQUIRE) that returns 0, and
52913lock release is as-if an execution of
52914__atomic_store(&globallock,0,__ATOMIC_RELEASE), with globallock being an
52915implicit implementation-defined lock used for all transactions.  The HTM
52916instructions associated with with the builtins inherently provide the
52917correct acquisition and release hardware barriers required.  However,
52918the compiler must also be prohibited from moving loads and stores across
52919the builtins in a way that would violate their semantics.  This has been
52920accomplished by adding memory barriers to the associated HTM
52921instructions (which is a conservative approach to provide acquire and
52922release semantics).  Earlier versions of the compiler did not treat the
52923HTM instructions as memory barriers.  A '__TM_FENCE__' macro has been
52924added, which can be used to determine whether the current compiler
52925treats HTM instructions as memory barriers or not.  This allows the user
52926to explicitly add memory barriers to their code when using an older
52927version of the compiler.
52928
52929 The following set of built-in functions are available to gain access to
52930the HTM specific special purpose registers.
52931
52932     unsigned long __builtin_get_texasr (void);
52933     unsigned long __builtin_get_texasru (void);
52934     unsigned long __builtin_get_tfhar (void);
52935     unsigned long __builtin_get_tfiar (void);
52936
52937     void __builtin_set_texasr (unsigned long);
52938     void __builtin_set_texasru (unsigned long);
52939     void __builtin_set_tfhar (unsigned long);
52940     void __builtin_set_tfiar (unsigned long);
52941
52942 Example usage of these low level built-in functions may look like:
52943
52944     #include <htmintrin.h>
52945
52946     int num_retries = 10;
52947
52948     while (1)
52949       {
52950         if (__builtin_tbegin (0))
52951           {
52952             /* Transaction State Initiated.  */
52953             if (is_locked (lock))
52954               __builtin_tabort (0);
52955             ... transaction code...
52956             __builtin_tend (0);
52957             break;
52958           }
52959         else
52960           {
52961             /* Transaction State Failed.  Use locks if the transaction
52962                failure is "persistent" or we've tried too many times.  */
52963             if (num_retries-- <= 0
52964                 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
52965               {
52966                 acquire_lock (lock);
52967                 ... non transactional fallback path...
52968                 release_lock (lock);
52969                 break;
52970               }
52971           }
52972       }
52973
52974 One final built-in function has been added that returns the value of
52975the 2-bit Transaction State field of the Machine Status Register (MSR)
52976as stored in 'CR0'.
52977
52978     unsigned long __builtin_ttest (void)
52979
52980 This built-in can be used to determine the current transaction state
52981using the following code example:
52982
52983     #include <htmintrin.h>
52984
52985     unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
52986
52987     if (tx_state == _HTM_TRANSACTIONAL)
52988       {
52989         /* Code to use in transactional state.  */
52990       }
52991     else if (tx_state == _HTM_NONTRANSACTIONAL)
52992       {
52993         /* Code to use in non-transactional state.  */
52994       }
52995     else if (tx_state == _HTM_SUSPENDED)
52996       {
52997         /* Code to use in transaction suspended state.  */
52998       }
52999
530006.60.24.2 PowerPC HTM High Level Inline Functions
53001.................................................
53002
53003The following high level HTM interface is made available by including
53004'<htmxlintrin.h>' and using '-mhtm' or '-mcpu=CPU' where CPU is 'power8'
53005or later.  This interface is common between PowerPC and S/390, allowing
53006users to write one HTM source implementation that can be compiled and
53007executed on either system.
53008
53009     long __TM_simple_begin (void);
53010     long __TM_begin (void* const TM_buff);
53011     long __TM_end (void);
53012     void __TM_abort (void);
53013     void __TM_named_abort (unsigned char const code);
53014     void __TM_resume (void);
53015     void __TM_suspend (void);
53016
53017     long __TM_is_user_abort (void* const TM_buff);
53018     long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code);
53019     long __TM_is_illegal (void* const TM_buff);
53020     long __TM_is_footprint_exceeded (void* const TM_buff);
53021     long __TM_nesting_depth (void* const TM_buff);
53022     long __TM_is_nested_too_deep(void* const TM_buff);
53023     long __TM_is_conflict(void* const TM_buff);
53024     long __TM_is_failure_persistent(void* const TM_buff);
53025     long __TM_failure_address(void* const TM_buff);
53026     long long __TM_failure_code(void* const TM_buff);
53027
53028 Using these common set of HTM inline functions, we can create a more
53029portable version of the HTM example in the previous section that will
53030work on either PowerPC or S/390:
53031
53032     #include <htmxlintrin.h>
53033
53034     int num_retries = 10;
53035     TM_buff_type TM_buff;
53036
53037     while (1)
53038       {
53039         if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED)
53040           {
53041             /* Transaction State Initiated.  */
53042             if (is_locked (lock))
53043               __TM_abort ();
53044             ... transaction code...
53045             __TM_end ();
53046             break;
53047           }
53048         else
53049           {
53050             /* Transaction State Failed.  Use locks if the transaction
53051                failure is "persistent" or we've tried too many times.  */
53052             if (num_retries-- <= 0
53053                 || __TM_is_failure_persistent (TM_buff))
53054               {
53055                 acquire_lock (lock);
53056                 ... non transactional fallback path...
53057                 release_lock (lock);
53058                 break;
53059               }
53060           }
53061       }
53062
53063
53064File: 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
53065
530666.60.25 PowerPC Atomic Memory Operation Functions
53067-------------------------------------------------
53068
53069ISA 3.0 of the PowerPC added new atomic memory operation (amo)
53070instructions.  GCC provides support for these instructions in 64-bit
53071environments.  All of the functions are declared in the include file
53072'amo.h'.
53073
53074 The functions supported are:
53075
53076     #include <amo.h>
53077
53078     uint32_t amo_lwat_add (uint32_t *, uint32_t);
53079     uint32_t amo_lwat_xor (uint32_t *, uint32_t);
53080     uint32_t amo_lwat_ior (uint32_t *, uint32_t);
53081     uint32_t amo_lwat_and (uint32_t *, uint32_t);
53082     uint32_t amo_lwat_umax (uint32_t *, uint32_t);
53083     uint32_t amo_lwat_umin (uint32_t *, uint32_t);
53084     uint32_t amo_lwat_swap (uint32_t *, uint32_t);
53085
53086     int32_t amo_lwat_sadd (int32_t *, int32_t);
53087     int32_t amo_lwat_smax (int32_t *, int32_t);
53088     int32_t amo_lwat_smin (int32_t *, int32_t);
53089     int32_t amo_lwat_sswap (int32_t *, int32_t);
53090
53091     uint64_t amo_ldat_add (uint64_t *, uint64_t);
53092     uint64_t amo_ldat_xor (uint64_t *, uint64_t);
53093     uint64_t amo_ldat_ior (uint64_t *, uint64_t);
53094     uint64_t amo_ldat_and (uint64_t *, uint64_t);
53095     uint64_t amo_ldat_umax (uint64_t *, uint64_t);
53096     uint64_t amo_ldat_umin (uint64_t *, uint64_t);
53097     uint64_t amo_ldat_swap (uint64_t *, uint64_t);
53098
53099     int64_t amo_ldat_sadd (int64_t *, int64_t);
53100     int64_t amo_ldat_smax (int64_t *, int64_t);
53101     int64_t amo_ldat_smin (int64_t *, int64_t);
53102     int64_t amo_ldat_sswap (int64_t *, int64_t);
53103
53104     void amo_stwat_add (uint32_t *, uint32_t);
53105     void amo_stwat_xor (uint32_t *, uint32_t);
53106     void amo_stwat_ior (uint32_t *, uint32_t);
53107     void amo_stwat_and (uint32_t *, uint32_t);
53108     void amo_stwat_umax (uint32_t *, uint32_t);
53109     void amo_stwat_umin (uint32_t *, uint32_t);
53110
53111     void amo_stwat_sadd (int32_t *, int32_t);
53112     void amo_stwat_smax (int32_t *, int32_t);
53113     void amo_stwat_smin (int32_t *, int32_t);
53114
53115     void amo_stdat_add (uint64_t *, uint64_t);
53116     void amo_stdat_xor (uint64_t *, uint64_t);
53117     void amo_stdat_ior (uint64_t *, uint64_t);
53118     void amo_stdat_and (uint64_t *, uint64_t);
53119     void amo_stdat_umax (uint64_t *, uint64_t);
53120     void amo_stdat_umin (uint64_t *, uint64_t);
53121
53122     void amo_stdat_sadd (int64_t *, int64_t);
53123     void amo_stdat_smax (int64_t *, int64_t);
53124     void amo_stdat_smin (int64_t *, int64_t);
53125
53126
53127File: gcc.info,  Node: PowerPC Matrix-Multiply Assist Built-in Functions,  Next: PRU Built-in Functions,  Prev: PowerPC Atomic Memory Operation Functions,  Up: Target Builtins
53128
531296.60.26 PowerPC Matrix-Multiply Assist Built-in Functions
53130---------------------------------------------------------
53131
53132ISA 3.1 of the PowerPC added new Matrix-Multiply Assist (MMA)
53133instructions.  GCC provides support for these instructions through the
53134following built-in functions which are enabled with the '-mmma' option.
53135The vec_t type below is defined to be a normal vector unsigned char
53136type.  The uint2, uint4 and uint8 parameters are 2-bit, 4-bit and 8-bit
53137unsigned integer constants respectively.  The compiler will verify that
53138they are constants and that their values are within range.
53139
53140 The built-in functions supported are:
53141
53142     void __builtin_mma_xvi4ger8 (__vector_quad *, vec_t, vec_t);
53143     void __builtin_mma_xvi8ger4 (__vector_quad *, vec_t, vec_t);
53144     void __builtin_mma_xvi16ger2 (__vector_quad *, vec_t, vec_t);
53145     void __builtin_mma_xvi16ger2s (__vector_quad *, vec_t, vec_t);
53146     void __builtin_mma_xvf16ger2 (__vector_quad *, vec_t, vec_t);
53147     void __builtin_mma_xvbf16ger2 (__vector_quad *, vec_t, vec_t);
53148     void __builtin_mma_xvf32ger (__vector_quad *, vec_t, vec_t);
53149
53150     void __builtin_mma_xvi4ger8pp (__vector_quad *, vec_t, vec_t);
53151     void __builtin_mma_xvi8ger4pp (__vector_quad *, vec_t, vec_t);
53152     void __builtin_mma_xvi8ger4spp(__vector_quad *, vec_t, vec_t);
53153     void __builtin_mma_xvi16ger2pp (__vector_quad *, vec_t, vec_t);
53154     void __builtin_mma_xvi16ger2spp (__vector_quad *, vec_t, vec_t);
53155     void __builtin_mma_xvf16ger2pp (__vector_quad *, vec_t, vec_t);
53156     void __builtin_mma_xvf16ger2pn (__vector_quad *, vec_t, vec_t);
53157     void __builtin_mma_xvf16ger2np (__vector_quad *, vec_t, vec_t);
53158     void __builtin_mma_xvf16ger2nn (__vector_quad *, vec_t, vec_t);
53159     void __builtin_mma_xvbf16ger2pp (__vector_quad *, vec_t, vec_t);
53160     void __builtin_mma_xvbf16ger2pn (__vector_quad *, vec_t, vec_t);
53161     void __builtin_mma_xvbf16ger2np (__vector_quad *, vec_t, vec_t);
53162     void __builtin_mma_xvbf16ger2nn (__vector_quad *, vec_t, vec_t);
53163     void __builtin_mma_xvf32gerpp (__vector_quad *, vec_t, vec_t);
53164     void __builtin_mma_xvf32gerpn (__vector_quad *, vec_t, vec_t);
53165     void __builtin_mma_xvf32gernp (__vector_quad *, vec_t, vec_t);
53166     void __builtin_mma_xvf32gernn (__vector_quad *, vec_t, vec_t);
53167
53168     void __builtin_mma_pmxvi4ger8 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint8);
53169     void __builtin_mma_pmxvi4ger8pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint8);
53170
53171     void __builtin_mma_pmxvi8ger4 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint4);
53172     void __builtin_mma_pmxvi8ger4pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint4);
53173     void __builtin_mma_pmxvi8ger4spp(__vector_quad *, vec_t, vec_t, uint4, uint4, uint4);
53174
53175     void __builtin_mma_pmxvi16ger2 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
53176     void __builtin_mma_pmxvi16ger2s (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
53177     void __builtin_mma_pmxvf16ger2 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
53178     void __builtin_mma_pmxvbf16ger2 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
53179
53180     void __builtin_mma_pmxvi16ger2pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
53181     void __builtin_mma_pmxvi16ger2spp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
53182     void __builtin_mma_pmxvf16ger2pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
53183     void __builtin_mma_pmxvf16ger2pn (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
53184     void __builtin_mma_pmxvf16ger2np (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
53185     void __builtin_mma_pmxvf16ger2nn (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
53186     void __builtin_mma_pmxvbf16ger2pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
53187     void __builtin_mma_pmxvbf16ger2pn (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
53188     void __builtin_mma_pmxvbf16ger2np (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
53189     void __builtin_mma_pmxvbf16ger2nn (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
53190
53191     void __builtin_mma_pmxvf32ger (__vector_quad *, vec_t, vec_t, uint4, uint4);
53192     void __builtin_mma_pmxvf32gerpp (__vector_quad *, vec_t, vec_t, uint4, uint4);
53193     void __builtin_mma_pmxvf32gerpn (__vector_quad *, vec_t, vec_t, uint4, uint4);
53194     void __builtin_mma_pmxvf32gernp (__vector_quad *, vec_t, vec_t, uint4, uint4);
53195     void __builtin_mma_pmxvf32gernn (__vector_quad *, vec_t, vec_t, uint4, uint4);
53196
53197     void __builtin_mma_xvf64ger (__vector_quad *, __vector_pair, vec_t);
53198     void __builtin_mma_xvf64gerpp (__vector_quad *, __vector_pair, vec_t);
53199     void __builtin_mma_xvf64gerpn (__vector_quad *, __vector_pair, vec_t);
53200     void __builtin_mma_xvf64gernp (__vector_quad *, __vector_pair, vec_t);
53201     void __builtin_mma_xvf64gernn (__vector_quad *, __vector_pair, vec_t);
53202
53203     void __builtin_mma_pmxvf64ger (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
53204     void __builtin_mma_pmxvf64gerpp (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
53205     void __builtin_mma_pmxvf64gerpn (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
53206     void __builtin_mma_pmxvf64gernp (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
53207     void __builtin_mma_pmxvf64gernn (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
53208
53209     void __builtin_mma_xxmtacc (__vector_quad *);
53210     void __builtin_mma_xxmfacc (__vector_quad *);
53211     void __builtin_mma_xxsetaccz (__vector_quad *);
53212
53213     void __builtin_mma_build_acc (__vector_quad *, vec_t, vec_t, vec_t, vec_t);
53214     void __builtin_mma_disassemble_acc (void *, __vector_quad *);
53215
53216     void __builtin_vsx_build_pair (__vector_pair *, vec_t, vec_t);
53217     void __builtin_vsx_disassemble_pair (void *, __vector_pair *);
53218
53219     vec_t __builtin_vsx_xvcvspbf16 (vec_t);
53220     vec_t __builtin_vsx_xvcvbf16spn (vec_t);
53221
53222     __vector_pair __builtin_vsx_lxvp (size_t, __vector_pair *);
53223     void __builtin_vsx_stxvp (__vector_pair, size_t, __vector_pair *);
53224
53225
53226File: gcc.info,  Node: PRU Built-in Functions,  Next: RISC-V Built-in Functions,  Prev: PowerPC Matrix-Multiply Assist Built-in Functions,  Up: Target Builtins
53227
532286.60.27 PRU Built-in Functions
53229------------------------------
53230
53231GCC provides a couple of special builtin functions to aid in utilizing
53232special PRU instructions.
53233
53234 The built-in functions supported are:
53235
53236'__delay_cycles (long long CYCLES)'
53237     This inserts an instruction sequence that takes exactly CYCLES
53238     cycles (between 0 and 0xffffffff) to complete.  The inserted
53239     sequence may use jumps, loops, or no-ops, and does not interfere
53240     with any other instructions.  Note that CYCLES must be a
53241     compile-time constant integer - that is, you must pass a number,
53242     not a variable that may be optimized to a constant later.  The
53243     number of cycles delayed by this builtin is exact.
53244
53245'__halt (void)'
53246     This inserts a HALT instruction to stop processor execution.
53247
53248'unsigned int __lmbd (unsigned int WORDVAL, unsigned int BITVAL)'
53249     This inserts LMBD instruction to calculate the left-most bit with
53250     value BITVAL in value WORDVAL.  Only the least significant bit of
53251     BITVAL is taken into account.
53252
53253
53254File: gcc.info,  Node: RISC-V Built-in Functions,  Next: RX Built-in Functions,  Prev: PRU Built-in Functions,  Up: Target Builtins
53255
532566.60.28 RISC-V Built-in Functions
53257---------------------------------
53258
53259These built-in functions are available for the RISC-V family of
53260processors.
53261
53262 -- Built-in Function: void * __builtin_thread_pointer (void)
53263     Returns the value that is currently set in the 'tp' register.
53264
53265
53266File: gcc.info,  Node: RX Built-in Functions,  Next: S/390 System z Built-in Functions,  Prev: RISC-V Built-in Functions,  Up: Target Builtins
53267
532686.60.29 RX Built-in Functions
53269-----------------------------
53270
53271GCC supports some of the RX instructions which cannot be expressed in
53272the C programming language via the use of built-in functions.  The
53273following functions are supported:
53274
53275 -- Built-in Function: void __builtin_rx_brk (void)
53276     Generates the 'brk' machine instruction.
53277
53278 -- Built-in Function: void __builtin_rx_clrpsw (int)
53279     Generates the 'clrpsw' machine instruction to clear the specified
53280     bit in the processor status word.
53281
53282 -- Built-in Function: void __builtin_rx_int (int)
53283     Generates the 'int' machine instruction to generate an interrupt
53284     with the specified value.
53285
53286 -- Built-in Function: void __builtin_rx_machi (int, int)
53287     Generates the 'machi' machine instruction to add the result of
53288     multiplying the top 16 bits of the two arguments into the
53289     accumulator.
53290
53291 -- Built-in Function: void __builtin_rx_maclo (int, int)
53292     Generates the 'maclo' machine instruction to add the result of
53293     multiplying the bottom 16 bits of the two arguments into the
53294     accumulator.
53295
53296 -- Built-in Function: void __builtin_rx_mulhi (int, int)
53297     Generates the 'mulhi' machine instruction to place the result of
53298     multiplying the top 16 bits of the two arguments into the
53299     accumulator.
53300
53301 -- Built-in Function: void __builtin_rx_mullo (int, int)
53302     Generates the 'mullo' machine instruction to place the result of
53303     multiplying the bottom 16 bits of the two arguments into the
53304     accumulator.
53305
53306 -- Built-in Function: int __builtin_rx_mvfachi (void)
53307     Generates the 'mvfachi' machine instruction to read the top 32 bits
53308     of the accumulator.
53309
53310 -- Built-in Function: int __builtin_rx_mvfacmi (void)
53311     Generates the 'mvfacmi' machine instruction to read the middle 32
53312     bits of the accumulator.
53313
53314 -- Built-in Function: int __builtin_rx_mvfc (int)
53315     Generates the 'mvfc' machine instruction which reads the control
53316     register specified in its argument and returns its value.
53317
53318 -- Built-in Function: void __builtin_rx_mvtachi (int)
53319     Generates the 'mvtachi' machine instruction to set the top 32 bits
53320     of the accumulator.
53321
53322 -- Built-in Function: void __builtin_rx_mvtaclo (int)
53323     Generates the 'mvtaclo' machine instruction to set the bottom 32
53324     bits of the accumulator.
53325
53326 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
53327     Generates the 'mvtc' machine instruction which sets control
53328     register number 'reg' to 'val'.
53329
53330 -- Built-in Function: void __builtin_rx_mvtipl (int)
53331     Generates the 'mvtipl' machine instruction set the interrupt
53332     priority level.
53333
53334 -- Built-in Function: void __builtin_rx_racw (int)
53335     Generates the 'racw' machine instruction to round the accumulator
53336     according to the specified mode.
53337
53338 -- Built-in Function: int __builtin_rx_revw (int)
53339     Generates the 'revw' machine instruction which swaps the bytes in
53340     the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
53341     and also bits 16-23 occupy bits 24-31 and vice versa.
53342
53343 -- Built-in Function: void __builtin_rx_rmpa (void)
53344     Generates the 'rmpa' machine instruction which initiates a repeated
53345     multiply and accumulate sequence.
53346
53347 -- Built-in Function: void __builtin_rx_round (float)
53348     Generates the 'round' machine instruction which returns the
53349     floating-point argument rounded according to the current rounding
53350     mode set in the floating-point status word register.
53351
53352 -- Built-in Function: int __builtin_rx_sat (int)
53353     Generates the 'sat' machine instruction which returns the saturated
53354     value of the argument.
53355
53356 -- Built-in Function: void __builtin_rx_setpsw (int)
53357     Generates the 'setpsw' machine instruction to set the specified bit
53358     in the processor status word.
53359
53360 -- Built-in Function: void __builtin_rx_wait (void)
53361     Generates the 'wait' machine instruction.
53362
53363
53364File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
53365
533666.60.30 S/390 System z Built-in Functions
53367-----------------------------------------
53368
53369 -- Built-in Function: int __builtin_tbegin (void*)
53370     Generates the 'tbegin' machine instruction starting a
53371     non-constrained hardware transaction.  If the parameter is non-NULL
53372     the memory area is used to store the transaction diagnostic buffer
53373     and will be passed as first operand to 'tbegin'.  This buffer can
53374     be defined using the 'struct __htm_tdb' C struct defined in
53375     'htmintrin.h' and must reside on a double-word boundary.  The
53376     second tbegin operand is set to '0xff0c'.  This enables
53377     save/restore of all GPRs and disables aborts for FPR and AR
53378     manipulations inside the transaction body.  The condition code set
53379     by the tbegin instruction is returned as integer value.  The tbegin
53380     instruction by definition overwrites the content of all FPRs.  The
53381     compiler will generate code which saves and restores the FPRs.  For
53382     soft-float code it is recommended to used the '*_nofloat' variant.
53383     In order to prevent a TDB from being written it is required to pass
53384     a constant zero value as parameter.  Passing a zero value through a
53385     variable is not sufficient.  Although modifications of access
53386     registers inside the transaction will not trigger an transaction
53387     abort it is not supported to actually modify them.  Access
53388     registers do not get saved when entering a transaction.  They will
53389     have undefined state when reaching the abort code.
53390
53391 Macros for the possible return codes of tbegin are defined in the
53392'htmintrin.h' header file:
53393
53394'_HTM_TBEGIN_STARTED'
53395     'tbegin' has been executed as part of normal processing.  The
53396     transaction body is supposed to be executed.
53397'_HTM_TBEGIN_INDETERMINATE'
53398     The transaction was aborted due to an indeterminate condition which
53399     might be persistent.
53400'_HTM_TBEGIN_TRANSIENT'
53401     The transaction aborted due to a transient failure.  The
53402     transaction should be re-executed in that case.
53403'_HTM_TBEGIN_PERSISTENT'
53404     The transaction aborted due to a persistent failure.  Re-execution
53405     under same circumstances will not be productive.
53406
53407 -- Macro: _HTM_FIRST_USER_ABORT_CODE
53408     The '_HTM_FIRST_USER_ABORT_CODE' defined in 'htmintrin.h' specifies
53409     the first abort code which can be used for '__builtin_tabort'.
53410     Values below this threshold are reserved for machine use.
53411
53412 -- Data type: struct __htm_tdb
53413     The 'struct __htm_tdb' defined in 'htmintrin.h' describes the
53414     structure of the transaction diagnostic block as specified in the
53415     Principles of Operation manual chapter 5-91.
53416
53417 -- Built-in Function: int __builtin_tbegin_nofloat (void*)
53418     Same as '__builtin_tbegin' but without FPR saves and restores.
53419     Using this variant in code making use of FPRs will leave the FPRs
53420     in undefined state when entering the transaction abort handler
53421     code.
53422
53423 -- Built-in Function: int __builtin_tbegin_retry (void*, int)
53424     In addition to '__builtin_tbegin' a loop for transient failures is
53425     generated.  If tbegin returns a condition code of 2 the transaction
53426     will be retried as often as specified in the second argument.  The
53427     perform processor assist instruction is used to tell the CPU about
53428     the number of fails so far.
53429
53430 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
53431     Same as '__builtin_tbegin_retry' but without FPR saves and
53432     restores.  Using this variant in code making use of FPRs will leave
53433     the FPRs in undefined state when entering the transaction abort
53434     handler code.
53435
53436 -- Built-in Function: void __builtin_tbeginc (void)
53437     Generates the 'tbeginc' machine instruction starting a constrained
53438     hardware transaction.  The second operand is set to '0xff08'.
53439
53440 -- Built-in Function: int __builtin_tend (void)
53441     Generates the 'tend' machine instruction finishing a transaction
53442     and making the changes visible to other threads.  The condition
53443     code generated by tend is returned as integer value.
53444
53445 -- Built-in Function: void __builtin_tabort (int)
53446     Generates the 'tabort' machine instruction with the specified abort
53447     code.  Abort codes from 0 through 255 are reserved and will result
53448     in an error message.
53449
53450 -- Built-in Function: void __builtin_tx_assist (int)
53451     Generates the 'ppa rX,rY,1' machine instruction.  Where the integer
53452     parameter is loaded into rX and a value of zero is loaded into rY.
53453     The integer parameter specifies the number of times the transaction
53454     repeatedly aborted.
53455
53456 -- Built-in Function: int __builtin_tx_nesting_depth (void)
53457     Generates the 'etnd' machine instruction.  The current nesting
53458     depth is returned as integer value.  For a nesting depth of 0 the
53459     code is not executed as part of an transaction.
53460
53461 -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
53462          uint64_t)
53463
53464     Generates the 'ntstg' machine instruction.  The second argument is
53465     written to the first arguments location.  The store operation will
53466     not be rolled-back in case of an transaction abort.
53467
53468
53469File: gcc.info,  Node: SH Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: S/390 System z Built-in Functions,  Up: Target Builtins
53470
534716.60.31 SH Built-in Functions
53472-----------------------------
53473
53474The following built-in functions are supported on the SH1, SH2, SH3 and
53475SH4 families of processors:
53476
53477 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
53478     Sets the 'GBR' register to the specified value PTR.  This is
53479     usually used by system code that manages threads and execution
53480     contexts.  The compiler normally does not generate code that
53481     modifies the contents of 'GBR' and thus the value is preserved
53482     across function calls.  Changing the 'GBR' value in user code must
53483     be done with caution, since the compiler might use 'GBR' in order
53484     to access thread local variables.
53485
53486 -- Built-in Function: void * __builtin_thread_pointer (void)
53487     Returns the value that is currently set in the 'GBR' register.
53488     Memory loads and stores that use the thread pointer as a base
53489     address are turned into 'GBR' based displacement loads and stores,
53490     if possible.  For example:
53491          struct my_tcb
53492          {
53493             int a, b, c, d, e;
53494          };
53495
53496          int get_tcb_value (void)
53497          {
53498            // Generate 'mov.l @(8,gbr),r0' instruction
53499            return ((my_tcb*)__builtin_thread_pointer ())->c;
53500          }
53501
53502
53503 -- Built-in Function: unsigned int __builtin_sh_get_fpscr (void)
53504     Returns the value that is currently set in the 'FPSCR' register.
53505
53506 -- Built-in Function: void __builtin_sh_set_fpscr (unsigned int VAL)
53507     Sets the 'FPSCR' register to the specified value VAL, while
53508     preserving the current values of the FR, SZ and PR bits.
53509
53510
53511File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: TI C6X Built-in Functions,  Prev: SH Built-in Functions,  Up: Target Builtins
53512
535136.60.32 SPARC VIS Built-in Functions
53514------------------------------------
53515
53516GCC supports SIMD operations on the SPARC using both the generic vector
53517extensions (*note Vector Extensions::) as well as built-in functions for
53518the SPARC Visual Instruction Set (VIS). When you use the '-mvis' switch,
53519the VIS extension is exposed as the following built-in functions:
53520
53521     typedef int v1si __attribute__ ((vector_size (4)));
53522     typedef int v2si __attribute__ ((vector_size (8)));
53523     typedef short v4hi __attribute__ ((vector_size (8)));
53524     typedef short v2hi __attribute__ ((vector_size (4)));
53525     typedef unsigned char v8qi __attribute__ ((vector_size (8)));
53526     typedef unsigned char v4qi __attribute__ ((vector_size (4)));
53527
53528     void __builtin_vis_write_gsr (int64_t);
53529     int64_t __builtin_vis_read_gsr (void);
53530
53531     void * __builtin_vis_alignaddr (void *, long);
53532     void * __builtin_vis_alignaddrl (void *, long);
53533     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
53534     v2si __builtin_vis_faligndatav2si (v2si, v2si);
53535     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
53536     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
53537
53538     v4hi __builtin_vis_fexpand (v4qi);
53539
53540     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
53541     v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
53542     v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
53543     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
53544     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
53545     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
53546     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
53547
53548     v4qi __builtin_vis_fpack16 (v4hi);
53549     v8qi __builtin_vis_fpack32 (v2si, v8qi);
53550     v2hi __builtin_vis_fpackfix (v2si);
53551     v8qi __builtin_vis_fpmerge (v4qi, v4qi);
53552
53553     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
53554
53555     long __builtin_vis_edge8 (void *, void *);
53556     long __builtin_vis_edge8l (void *, void *);
53557     long __builtin_vis_edge16 (void *, void *);
53558     long __builtin_vis_edge16l (void *, void *);
53559     long __builtin_vis_edge32 (void *, void *);
53560     long __builtin_vis_edge32l (void *, void *);
53561
53562     long __builtin_vis_fcmple16 (v4hi, v4hi);
53563     long __builtin_vis_fcmple32 (v2si, v2si);
53564     long __builtin_vis_fcmpne16 (v4hi, v4hi);
53565     long __builtin_vis_fcmpne32 (v2si, v2si);
53566     long __builtin_vis_fcmpgt16 (v4hi, v4hi);
53567     long __builtin_vis_fcmpgt32 (v2si, v2si);
53568     long __builtin_vis_fcmpeq16 (v4hi, v4hi);
53569     long __builtin_vis_fcmpeq32 (v2si, v2si);
53570
53571     v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
53572     v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
53573     v2si __builtin_vis_fpadd32 (v2si, v2si);
53574     v1si __builtin_vis_fpadd32s (v1si, v1si);
53575     v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
53576     v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
53577     v2si __builtin_vis_fpsub32 (v2si, v2si);
53578     v1si __builtin_vis_fpsub32s (v1si, v1si);
53579
53580     long __builtin_vis_array8 (long, long);
53581     long __builtin_vis_array16 (long, long);
53582     long __builtin_vis_array32 (long, long);
53583
53584 When you use the '-mvis2' switch, the VIS version 2.0 built-in
53585functions also become available:
53586
53587     long __builtin_vis_bmask (long, long);
53588     int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
53589     v2si __builtin_vis_bshufflev2si (v2si, v2si);
53590     v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
53591     v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
53592
53593     long __builtin_vis_edge8n (void *, void *);
53594     long __builtin_vis_edge8ln (void *, void *);
53595     long __builtin_vis_edge16n (void *, void *);
53596     long __builtin_vis_edge16ln (void *, void *);
53597     long __builtin_vis_edge32n (void *, void *);
53598     long __builtin_vis_edge32ln (void *, void *);
53599
53600 When you use the '-mvis3' switch, the VIS version 3.0 built-in
53601functions also become available:
53602
53603     void __builtin_vis_cmask8 (long);
53604     void __builtin_vis_cmask16 (long);
53605     void __builtin_vis_cmask32 (long);
53606
53607     v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
53608
53609     v4hi __builtin_vis_fsll16 (v4hi, v4hi);
53610     v4hi __builtin_vis_fslas16 (v4hi, v4hi);
53611     v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
53612     v4hi __builtin_vis_fsra16 (v4hi, v4hi);
53613     v2si __builtin_vis_fsll16 (v2si, v2si);
53614     v2si __builtin_vis_fslas16 (v2si, v2si);
53615     v2si __builtin_vis_fsrl16 (v2si, v2si);
53616     v2si __builtin_vis_fsra16 (v2si, v2si);
53617
53618     long __builtin_vis_pdistn (v8qi, v8qi);
53619
53620     v4hi __builtin_vis_fmean16 (v4hi, v4hi);
53621
53622     int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
53623     int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
53624
53625     v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
53626     v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
53627     v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
53628     v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
53629     v2si __builtin_vis_fpadds32 (v2si, v2si);
53630     v1si __builtin_vis_fpadds32s (v1si, v1si);
53631     v2si __builtin_vis_fpsubs32 (v2si, v2si);
53632     v1si __builtin_vis_fpsubs32s (v1si, v1si);
53633
53634     long __builtin_vis_fucmple8 (v8qi, v8qi);
53635     long __builtin_vis_fucmpne8 (v8qi, v8qi);
53636     long __builtin_vis_fucmpgt8 (v8qi, v8qi);
53637     long __builtin_vis_fucmpeq8 (v8qi, v8qi);
53638
53639     float __builtin_vis_fhadds (float, float);
53640     double __builtin_vis_fhaddd (double, double);
53641     float __builtin_vis_fhsubs (float, float);
53642     double __builtin_vis_fhsubd (double, double);
53643     float __builtin_vis_fnhadds (float, float);
53644     double __builtin_vis_fnhaddd (double, double);
53645
53646     int64_t __builtin_vis_umulxhi (int64_t, int64_t);
53647     int64_t __builtin_vis_xmulx (int64_t, int64_t);
53648     int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
53649
53650 When you use the '-mvis4' switch, the VIS version 4.0 built-in
53651functions also become available:
53652
53653     v8qi __builtin_vis_fpadd8 (v8qi, v8qi);
53654     v8qi __builtin_vis_fpadds8 (v8qi, v8qi);
53655     v8qi __builtin_vis_fpaddus8 (v8qi, v8qi);
53656     v4hi __builtin_vis_fpaddus16 (v4hi, v4hi);
53657
53658     v8qi __builtin_vis_fpsub8 (v8qi, v8qi);
53659     v8qi __builtin_vis_fpsubs8 (v8qi, v8qi);
53660     v8qi __builtin_vis_fpsubus8 (v8qi, v8qi);
53661     v4hi __builtin_vis_fpsubus16 (v4hi, v4hi);
53662
53663     long __builtin_vis_fpcmple8 (v8qi, v8qi);
53664     long __builtin_vis_fpcmpgt8 (v8qi, v8qi);
53665     long __builtin_vis_fpcmpule16 (v4hi, v4hi);
53666     long __builtin_vis_fpcmpugt16 (v4hi, v4hi);
53667     long __builtin_vis_fpcmpule32 (v2si, v2si);
53668     long __builtin_vis_fpcmpugt32 (v2si, v2si);
53669
53670     v8qi __builtin_vis_fpmax8 (v8qi, v8qi);
53671     v4hi __builtin_vis_fpmax16 (v4hi, v4hi);
53672     v2si __builtin_vis_fpmax32 (v2si, v2si);
53673
53674     v8qi __builtin_vis_fpmaxu8 (v8qi, v8qi);
53675     v4hi __builtin_vis_fpmaxu16 (v4hi, v4hi);
53676     v2si __builtin_vis_fpmaxu32 (v2si, v2si);
53677
53678     v8qi __builtin_vis_fpmin8 (v8qi, v8qi);
53679     v4hi __builtin_vis_fpmin16 (v4hi, v4hi);
53680     v2si __builtin_vis_fpmin32 (v2si, v2si);
53681
53682     v8qi __builtin_vis_fpminu8 (v8qi, v8qi);
53683     v4hi __builtin_vis_fpminu16 (v4hi, v4hi);
53684     v2si __builtin_vis_fpminu32 (v2si, v2si);
53685
53686 When you use the '-mvis4b' switch, the VIS version 4.0B built-in
53687functions also become available:
53688
53689     v8qi __builtin_vis_dictunpack8 (double, int);
53690     v4hi __builtin_vis_dictunpack16 (double, int);
53691     v2si __builtin_vis_dictunpack32 (double, int);
53692
53693     long __builtin_vis_fpcmple8shl (v8qi, v8qi, int);
53694     long __builtin_vis_fpcmpgt8shl (v8qi, v8qi, int);
53695     long __builtin_vis_fpcmpeq8shl (v8qi, v8qi, int);
53696     long __builtin_vis_fpcmpne8shl (v8qi, v8qi, int);
53697
53698     long __builtin_vis_fpcmple16shl (v4hi, v4hi, int);
53699     long __builtin_vis_fpcmpgt16shl (v4hi, v4hi, int);
53700     long __builtin_vis_fpcmpeq16shl (v4hi, v4hi, int);
53701     long __builtin_vis_fpcmpne16shl (v4hi, v4hi, int);
53702
53703     long __builtin_vis_fpcmple32shl (v2si, v2si, int);
53704     long __builtin_vis_fpcmpgt32shl (v2si, v2si, int);
53705     long __builtin_vis_fpcmpeq32shl (v2si, v2si, int);
53706     long __builtin_vis_fpcmpne32shl (v2si, v2si, int);
53707
53708     long __builtin_vis_fpcmpule8shl (v8qi, v8qi, int);
53709     long __builtin_vis_fpcmpugt8shl (v8qi, v8qi, int);
53710     long __builtin_vis_fpcmpule16shl (v4hi, v4hi, int);
53711     long __builtin_vis_fpcmpugt16shl (v4hi, v4hi, int);
53712     long __builtin_vis_fpcmpule32shl (v2si, v2si, int);
53713     long __builtin_vis_fpcmpugt32shl (v2si, v2si, int);
53714
53715     long __builtin_vis_fpcmpde8shl (v8qi, v8qi, int);
53716     long __builtin_vis_fpcmpde16shl (v4hi, v4hi, int);
53717     long __builtin_vis_fpcmpde32shl (v2si, v2si, int);
53718
53719     long __builtin_vis_fpcmpur8shl (v8qi, v8qi, int);
53720     long __builtin_vis_fpcmpur16shl (v4hi, v4hi, int);
53721     long __builtin_vis_fpcmpur32shl (v2si, v2si, int);
53722
53723
53724File: gcc.info,  Node: TI C6X Built-in Functions,  Next: TILE-Gx Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
53725
537266.60.33 TI C6X Built-in Functions
53727---------------------------------
53728
53729GCC provides intrinsics to access certain instructions of the TI C6X
53730processors.  These intrinsics, listed below, are available after
53731inclusion of the 'c6x_intrinsics.h' header file.  They map directly to
53732C6X instructions.
53733
53734     int _sadd (int, int);
53735     int _ssub (int, int);
53736     int _sadd2 (int, int);
53737     int _ssub2 (int, int);
53738     long long _mpy2 (int, int);
53739     long long _smpy2 (int, int);
53740     int _add4 (int, int);
53741     int _sub4 (int, int);
53742     int _saddu4 (int, int);
53743
53744     int _smpy (int, int);
53745     int _smpyh (int, int);
53746     int _smpyhl (int, int);
53747     int _smpylh (int, int);
53748
53749     int _sshl (int, int);
53750     int _subc (int, int);
53751
53752     int _avg2 (int, int);
53753     int _avgu4 (int, int);
53754
53755     int _clrr (int, int);
53756     int _extr (int, int);
53757     int _extru (int, int);
53758     int _abs (int);
53759     int _abs2 (int);
53760
53761
53762File: gcc.info,  Node: TILE-Gx Built-in Functions,  Next: TILEPro Built-in Functions,  Prev: TI C6X Built-in Functions,  Up: Target Builtins
53763
537646.60.34 TILE-Gx Built-in Functions
53765----------------------------------
53766
53767GCC provides intrinsics to access every instruction of the TILE-Gx
53768processor.  The intrinsics are of the form:
53769
53770
53771     unsigned long long __insn_OP (...)
53772
53773
53774 Where OP is the name of the instruction.  Refer to the ISA manual for
53775the complete list of instructions.
53776
53777 GCC also provides intrinsics to directly access the network registers.
53778The intrinsics are:
53779
53780     unsigned long long __tile_idn0_receive (void);
53781     unsigned long long __tile_idn1_receive (void);
53782     unsigned long long __tile_udn0_receive (void);
53783     unsigned long long __tile_udn1_receive (void);
53784     unsigned long long __tile_udn2_receive (void);
53785     unsigned long long __tile_udn3_receive (void);
53786     void __tile_idn_send (unsigned long long);
53787     void __tile_udn_send (unsigned long long);
53788
53789 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
53790that no network operations before it are reordered with those after it.
53791
53792
53793File: gcc.info,  Node: TILEPro Built-in Functions,  Next: x86 Built-in Functions,  Prev: TILE-Gx Built-in Functions,  Up: Target Builtins
53794
537956.60.35 TILEPro Built-in Functions
53796----------------------------------
53797
53798GCC provides intrinsics to access every instruction of the TILEPro
53799processor.  The intrinsics are of the form:
53800
53801
53802     unsigned __insn_OP (...)
53803
53804
53805where OP is the name of the instruction.  Refer to the ISA manual for
53806the complete list of instructions.
53807
53808 GCC also provides intrinsics to directly access the network registers.
53809The intrinsics are:
53810
53811     unsigned __tile_idn0_receive (void);
53812     unsigned __tile_idn1_receive (void);
53813     unsigned __tile_sn_receive (void);
53814     unsigned __tile_udn0_receive (void);
53815     unsigned __tile_udn1_receive (void);
53816     unsigned __tile_udn2_receive (void);
53817     unsigned __tile_udn3_receive (void);
53818     void __tile_idn_send (unsigned);
53819     void __tile_sn_send (unsigned);
53820     void __tile_udn_send (unsigned);
53821
53822 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
53823that no network operations before it are reordered with those after it.
53824
53825
53826File: gcc.info,  Node: x86 Built-in Functions,  Next: x86 transactional memory intrinsics,  Prev: TILEPro Built-in Functions,  Up: Target Builtins
53827
538286.60.36 x86 Built-in Functions
53829------------------------------
53830
53831These built-in functions are available for the x86-32 and x86-64 family
53832of computers, depending on the command-line switches used.
53833
53834 If you specify command-line switches such as '-msse', the compiler
53835could use the extended instruction sets even if the built-ins are not
53836used explicitly in the program.  For this reason, applications that
53837perform run-time CPU detection must compile separate files for each
53838supported architecture, using the appropriate flags.  In particular, the
53839file containing the CPU detection code should be compiled without these
53840options.
53841
53842 The following machine modes are available for use with MMX built-in
53843functions (*note Vector Extensions::): 'V2SI' for a vector of two 32-bit
53844integers, 'V4HI' for a vector of four 16-bit integers, and 'V8QI' for a
53845vector of eight 8-bit integers.  Some of the built-in functions operate
53846on MMX registers as a whole 64-bit entity, these use 'V1DI' as their
53847mode.
53848
53849 If 3DNow! extensions are enabled, 'V2SF' is used as a mode for a vector
53850of two 32-bit floating-point values.
53851
53852 If SSE extensions are enabled, 'V4SF' is used for a vector of four
5385332-bit floating-point values.  Some instructions use a vector of four
5385432-bit integers, these use 'V4SI'.  Finally, some instructions operate
53855on an entire vector register, interpreting it as a 128-bit integer,
53856these use mode 'TI'.
53857
53858 The x86-32 and x86-64 family of processors use additional built-in
53859functions for efficient use of 'TF' ('__float128') 128-bit floating
53860point and 'TC' 128-bit complex floating-point values.
53861
53862 The following floating-point built-in functions are always available.
53863All of them implement the function that is part of the name.
53864
53865     __float128 __builtin_fabsq (__float128)
53866     __float128 __builtin_copysignq (__float128, __float128)
53867
53868 The following built-in functions are always available.
53869
53870'__float128 __builtin_infq (void)'
53871     Similar to '__builtin_inf', except the return type is '__float128'.
53872
53873'__float128 __builtin_huge_valq (void)'
53874     Similar to '__builtin_huge_val', except the return type is
53875     '__float128'.
53876
53877'__float128 __builtin_nanq (void)'
53878     Similar to '__builtin_nan', except the return type is '__float128'.
53879
53880'__float128 __builtin_nansq (void)'
53881     Similar to '__builtin_nans', except the return type is
53882     '__float128'.
53883
53884 The following built-in function is always available.
53885
53886'void __builtin_ia32_pause (void)'
53887     Generates the 'pause' machine instruction with a compiler memory
53888     barrier.
53889
53890 The following built-in functions are always available and can be used
53891to check the target platform type.
53892
53893 -- Built-in Function: void __builtin_cpu_init (void)
53894     This function runs the CPU detection code to check the type of CPU
53895     and the features supported.  This built-in function needs to be
53896     invoked along with the built-in functions to check CPU type and
53897     features, '__builtin_cpu_is' and '__builtin_cpu_supports', only
53898     when used in a function that is executed before any constructors
53899     are called.  The CPU detection code is automatically executed in a
53900     very high priority constructor.
53901
53902     For example, this function has to be used in 'ifunc' resolvers that
53903     check for CPU type using the built-in functions '__builtin_cpu_is'
53904     and '__builtin_cpu_supports', or in constructors on targets that
53905     don't support constructor priority.
53906
53907          static void (*resolve_memcpy (void)) (void)
53908          {
53909            // ifunc resolvers fire before constructors, explicitly call the init
53910            // function.
53911            __builtin_cpu_init ();
53912            if (__builtin_cpu_supports ("ssse3"))
53913              return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
53914            else
53915              return default_memcpy;
53916          }
53917
53918          void *memcpy (void *, const void *, size_t)
53919               __attribute__ ((ifunc ("resolve_memcpy")));
53920
53921 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
53922     This function returns a positive integer if the run-time CPU is of
53923     type CPUNAME and returns '0' otherwise.  The following CPU names
53924     can be detected:
53925
53926     'amd'
53927          AMD CPU.
53928
53929     'intel'
53930          Intel CPU.
53931
53932     'atom'
53933          Intel Atom CPU.
53934
53935     'slm'
53936          Intel Silvermont CPU.
53937
53938     'core2'
53939          Intel Core 2 CPU.
53940
53941     'corei7'
53942          Intel Core i7 CPU.
53943
53944     'nehalem'
53945          Intel Core i7 Nehalem CPU.
53946
53947     'westmere'
53948          Intel Core i7 Westmere CPU.
53949
53950     'sandybridge'
53951          Intel Core i7 Sandy Bridge CPU.
53952
53953     'ivybridge'
53954          Intel Core i7 Ivy Bridge CPU.
53955
53956     'haswell'
53957          Intel Core i7 Haswell CPU.
53958
53959     'broadwell'
53960          Intel Core i7 Broadwell CPU.
53961
53962     'skylake'
53963          Intel Core i7 Skylake CPU.
53964
53965     'skylake-avx512'
53966          Intel Core i7 Skylake AVX512 CPU.
53967
53968     'cannonlake'
53969          Intel Core i7 Cannon Lake CPU.
53970
53971     'icelake-client'
53972          Intel Core i7 Ice Lake Client CPU.
53973
53974     'icelake-server'
53975          Intel Core i7 Ice Lake Server CPU.
53976
53977     'cascadelake'
53978          Intel Core i7 Cascadelake CPU.
53979
53980     'tigerlake'
53981          Intel Core i7 Tigerlake CPU.
53982
53983     'cooperlake'
53984          Intel Core i7 Cooperlake CPU.
53985
53986     'sapphirerapids'
53987          Intel Core i7 sapphirerapids CPU.
53988
53989     'alderlake'
53990          Intel Core i7 Alderlake CPU.
53991
53992     'rocketlake'
53993          Intel Core i7 Rocketlake CPU.
53994
53995     'bonnell'
53996          Intel Atom Bonnell CPU.
53997
53998     'silvermont'
53999          Intel Atom Silvermont CPU.
54000
54001     'goldmont'
54002          Intel Atom Goldmont CPU.
54003
54004     'goldmont-plus'
54005          Intel Atom Goldmont Plus CPU.
54006
54007     'tremont'
54008          Intel Atom Tremont CPU.
54009
54010     'knl'
54011          Intel Knights Landing CPU.
54012
54013     'knm'
54014          Intel Knights Mill CPU.
54015
54016     'amdfam10h'
54017          AMD Family 10h CPU.
54018
54019     'barcelona'
54020          AMD Family 10h Barcelona CPU.
54021
54022     'shanghai'
54023          AMD Family 10h Shanghai CPU.
54024
54025     'istanbul'
54026          AMD Family 10h Istanbul CPU.
54027
54028     'btver1'
54029          AMD Family 14h CPU.
54030
54031     'amdfam15h'
54032          AMD Family 15h CPU.
54033
54034     'bdver1'
54035          AMD Family 15h Bulldozer version 1.
54036
54037     'bdver2'
54038          AMD Family 15h Bulldozer version 2.
54039
54040     'bdver3'
54041          AMD Family 15h Bulldozer version 3.
54042
54043     'bdver4'
54044          AMD Family 15h Bulldozer version 4.
54045
54046     'btver2'
54047          AMD Family 16h CPU.
54048
54049     'amdfam17h'
54050          AMD Family 17h CPU.
54051
54052     'znver1'
54053          AMD Family 17h Zen version 1.
54054
54055     'znver2'
54056          AMD Family 17h Zen version 2.
54057
54058     'amdfam19h'
54059          AMD Family 19h CPU.
54060
54061     'znver3'
54062          AMD Family 19h Zen version 3.
54063
54064     'znver4'
54065          AMD Family 19h Zen version 4.
54066
54067     Here is an example:
54068          if (__builtin_cpu_is ("corei7"))
54069            {
54070               do_corei7 (); // Core i7 specific implementation.
54071            }
54072          else
54073            {
54074               do_generic (); // Generic implementation.
54075            }
54076
54077 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
54078     This function returns a positive integer if the run-time CPU
54079     supports FEATURE and returns '0' otherwise.  The following features
54080     can be detected:
54081
54082     'cmov'
54083          CMOV instruction.
54084     'mmx'
54085          MMX instructions.
54086     'popcnt'
54087          POPCNT instruction.
54088     'sse'
54089          SSE instructions.
54090     'sse2'
54091          SSE2 instructions.
54092     'sse3'
54093          SSE3 instructions.
54094     'ssse3'
54095          SSSE3 instructions.
54096     'sse4.1'
54097          SSE4.1 instructions.
54098     'sse4.2'
54099          SSE4.2 instructions.
54100     'avx'
54101          AVX instructions.
54102     'avx2'
54103          AVX2 instructions.
54104     'sse4a'
54105          SSE4A instructions.
54106     'fma4'
54107          FMA4 instructions.
54108     'xop'
54109          XOP instructions.
54110     'fma'
54111          FMA instructions.
54112     'avx512f'
54113          AVX512F instructions.
54114     'bmi'
54115          BMI instructions.
54116     'bmi2'
54117          BMI2 instructions.
54118     'aes'
54119          AES instructions.
54120     'pclmul'
54121          PCLMUL instructions.
54122     'avx512vl'
54123          AVX512VL instructions.
54124     'avx512bw'
54125          AVX512BW instructions.
54126     'avx512dq'
54127          AVX512DQ instructions.
54128     'avx512cd'
54129          AVX512CD instructions.
54130     'avx512er'
54131          AVX512ER instructions.
54132     'avx512pf'
54133          AVX512PF instructions.
54134     'avx512vbmi'
54135          AVX512VBMI instructions.
54136     'avx512ifma'
54137          AVX512IFMA instructions.
54138     'avx5124vnniw'
54139          AVX5124VNNIW instructions.
54140     'avx5124fmaps'
54141          AVX5124FMAPS instructions.
54142     'avx512vpopcntdq'
54143          AVX512VPOPCNTDQ instructions.
54144     'avx512vbmi2'
54145          AVX512VBMI2 instructions.
54146     'gfni'
54147          GFNI instructions.
54148     'vpclmulqdq'
54149          VPCLMULQDQ instructions.
54150     'avx512vnni'
54151          AVX512VNNI instructions.
54152     'avx512bitalg'
54153          AVX512BITALG instructions.
54154     'x86-64'
54155          Baseline x86-64 microarchitecture level (as defined in x86-64
54156          psABI).
54157     'x86-64-v2'
54158          x86-64-v2 microarchitecture level.
54159     'x86-64-v3'
54160          x86-64-v3 microarchitecture level.
54161     'x86-64-v4'
54162          x86-64-v4 microarchitecture level.
54163
54164     Here is an example:
54165          if (__builtin_cpu_supports ("popcnt"))
54166            {
54167               asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
54168            }
54169          else
54170            {
54171               count = generic_countbits (n); //generic implementation.
54172            }
54173
54174 The following built-in functions are made available by '-mmmx'.  All of
54175them generate the machine instruction that is part of the name.
54176
54177     v8qi __builtin_ia32_paddb (v8qi, v8qi);
54178     v4hi __builtin_ia32_paddw (v4hi, v4hi);
54179     v2si __builtin_ia32_paddd (v2si, v2si);
54180     v8qi __builtin_ia32_psubb (v8qi, v8qi);
54181     v4hi __builtin_ia32_psubw (v4hi, v4hi);
54182     v2si __builtin_ia32_psubd (v2si, v2si);
54183     v8qi __builtin_ia32_paddsb (v8qi, v8qi);
54184     v4hi __builtin_ia32_paddsw (v4hi, v4hi);
54185     v8qi __builtin_ia32_psubsb (v8qi, v8qi);
54186     v4hi __builtin_ia32_psubsw (v4hi, v4hi);
54187     v8qi __builtin_ia32_paddusb (v8qi, v8qi);
54188     v4hi __builtin_ia32_paddusw (v4hi, v4hi);
54189     v8qi __builtin_ia32_psubusb (v8qi, v8qi);
54190     v4hi __builtin_ia32_psubusw (v4hi, v4hi);
54191     v4hi __builtin_ia32_pmullw (v4hi, v4hi);
54192     v4hi __builtin_ia32_pmulhw (v4hi, v4hi);
54193     di __builtin_ia32_pand (di, di);
54194     di __builtin_ia32_pandn (di,di);
54195     di __builtin_ia32_por (di, di);
54196     di __builtin_ia32_pxor (di, di);
54197     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi);
54198     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi);
54199     v2si __builtin_ia32_pcmpeqd (v2si, v2si);
54200     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi);
54201     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi);
54202     v2si __builtin_ia32_pcmpgtd (v2si, v2si);
54203     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi);
54204     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi);
54205     v2si __builtin_ia32_punpckhdq (v2si, v2si);
54206     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi);
54207     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi);
54208     v2si __builtin_ia32_punpckldq (v2si, v2si);
54209     v8qi __builtin_ia32_packsswb (v4hi, v4hi);
54210     v4hi __builtin_ia32_packssdw (v2si, v2si);
54211     v8qi __builtin_ia32_packuswb (v4hi, v4hi);
54212
54213     v4hi __builtin_ia32_psllw (v4hi, v4hi);
54214     v2si __builtin_ia32_pslld (v2si, v2si);
54215     v1di __builtin_ia32_psllq (v1di, v1di);
54216     v4hi __builtin_ia32_psrlw (v4hi, v4hi);
54217     v2si __builtin_ia32_psrld (v2si, v2si);
54218     v1di __builtin_ia32_psrlq (v1di, v1di);
54219     v4hi __builtin_ia32_psraw (v4hi, v4hi);
54220     v2si __builtin_ia32_psrad (v2si, v2si);
54221     v4hi __builtin_ia32_psllwi (v4hi, int);
54222     v2si __builtin_ia32_pslldi (v2si, int);
54223     v1di __builtin_ia32_psllqi (v1di, int);
54224     v4hi __builtin_ia32_psrlwi (v4hi, int);
54225     v2si __builtin_ia32_psrldi (v2si, int);
54226     v1di __builtin_ia32_psrlqi (v1di, int);
54227     v4hi __builtin_ia32_psrawi (v4hi, int);
54228     v2si __builtin_ia32_psradi (v2si, int);
54229
54230 The following built-in functions are made available either with
54231'-msse', or with '-m3dnowa'.  All of them generate the machine
54232instruction that is part of the name.
54233
54234     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi);
54235     v8qi __builtin_ia32_pavgb (v8qi, v8qi);
54236     v4hi __builtin_ia32_pavgw (v4hi, v4hi);
54237     v1di __builtin_ia32_psadbw (v8qi, v8qi);
54238     v8qi __builtin_ia32_pmaxub (v8qi, v8qi);
54239     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi);
54240     v8qi __builtin_ia32_pminub (v8qi, v8qi);
54241     v4hi __builtin_ia32_pminsw (v4hi, v4hi);
54242     int __builtin_ia32_pmovmskb (v8qi);
54243     void __builtin_ia32_maskmovq (v8qi, v8qi, char *);
54244     void __builtin_ia32_movntq (di *, di);
54245     void __builtin_ia32_sfence (void);
54246
54247 The following built-in functions are available when '-msse' is used.
54248All of them generate the machine instruction that is part of the name.
54249
54250     int __builtin_ia32_comieq (v4sf, v4sf);
54251     int __builtin_ia32_comineq (v4sf, v4sf);
54252     int __builtin_ia32_comilt (v4sf, v4sf);
54253     int __builtin_ia32_comile (v4sf, v4sf);
54254     int __builtin_ia32_comigt (v4sf, v4sf);
54255     int __builtin_ia32_comige (v4sf, v4sf);
54256     int __builtin_ia32_ucomieq (v4sf, v4sf);
54257     int __builtin_ia32_ucomineq (v4sf, v4sf);
54258     int __builtin_ia32_ucomilt (v4sf, v4sf);
54259     int __builtin_ia32_ucomile (v4sf, v4sf);
54260     int __builtin_ia32_ucomigt (v4sf, v4sf);
54261     int __builtin_ia32_ucomige (v4sf, v4sf);
54262     v4sf __builtin_ia32_addps (v4sf, v4sf);
54263     v4sf __builtin_ia32_subps (v4sf, v4sf);
54264     v4sf __builtin_ia32_mulps (v4sf, v4sf);
54265     v4sf __builtin_ia32_divps (v4sf, v4sf);
54266     v4sf __builtin_ia32_addss (v4sf, v4sf);
54267     v4sf __builtin_ia32_subss (v4sf, v4sf);
54268     v4sf __builtin_ia32_mulss (v4sf, v4sf);
54269     v4sf __builtin_ia32_divss (v4sf, v4sf);
54270     v4sf __builtin_ia32_cmpeqps (v4sf, v4sf);
54271     v4sf __builtin_ia32_cmpltps (v4sf, v4sf);
54272     v4sf __builtin_ia32_cmpleps (v4sf, v4sf);
54273     v4sf __builtin_ia32_cmpgtps (v4sf, v4sf);
54274     v4sf __builtin_ia32_cmpgeps (v4sf, v4sf);
54275     v4sf __builtin_ia32_cmpunordps (v4sf, v4sf);
54276     v4sf __builtin_ia32_cmpneqps (v4sf, v4sf);
54277     v4sf __builtin_ia32_cmpnltps (v4sf, v4sf);
54278     v4sf __builtin_ia32_cmpnleps (v4sf, v4sf);
54279     v4sf __builtin_ia32_cmpngtps (v4sf, v4sf);
54280     v4sf __builtin_ia32_cmpngeps (v4sf, v4sf);
54281     v4sf __builtin_ia32_cmpordps (v4sf, v4sf);
54282     v4sf __builtin_ia32_cmpeqss (v4sf, v4sf);
54283     v4sf __builtin_ia32_cmpltss (v4sf, v4sf);
54284     v4sf __builtin_ia32_cmpless (v4sf, v4sf);
54285     v4sf __builtin_ia32_cmpunordss (v4sf, v4sf);
54286     v4sf __builtin_ia32_cmpneqss (v4sf, v4sf);
54287     v4sf __builtin_ia32_cmpnltss (v4sf, v4sf);
54288     v4sf __builtin_ia32_cmpnless (v4sf, v4sf);
54289     v4sf __builtin_ia32_cmpordss (v4sf, v4sf);
54290     v4sf __builtin_ia32_maxps (v4sf, v4sf);
54291     v4sf __builtin_ia32_maxss (v4sf, v4sf);
54292     v4sf __builtin_ia32_minps (v4sf, v4sf);
54293     v4sf __builtin_ia32_minss (v4sf, v4sf);
54294     v4sf __builtin_ia32_andps (v4sf, v4sf);
54295     v4sf __builtin_ia32_andnps (v4sf, v4sf);
54296     v4sf __builtin_ia32_orps (v4sf, v4sf);
54297     v4sf __builtin_ia32_xorps (v4sf, v4sf);
54298     v4sf __builtin_ia32_movss (v4sf, v4sf);
54299     v4sf __builtin_ia32_movhlps (v4sf, v4sf);
54300     v4sf __builtin_ia32_movlhps (v4sf, v4sf);
54301     v4sf __builtin_ia32_unpckhps (v4sf, v4sf);
54302     v4sf __builtin_ia32_unpcklps (v4sf, v4sf);
54303     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si);
54304     v4sf __builtin_ia32_cvtsi2ss (v4sf, int);
54305     v2si __builtin_ia32_cvtps2pi (v4sf);
54306     int __builtin_ia32_cvtss2si (v4sf);
54307     v2si __builtin_ia32_cvttps2pi (v4sf);
54308     int __builtin_ia32_cvttss2si (v4sf);
54309     v4sf __builtin_ia32_rcpps (v4sf);
54310     v4sf __builtin_ia32_rsqrtps (v4sf);
54311     v4sf __builtin_ia32_sqrtps (v4sf);
54312     v4sf __builtin_ia32_rcpss (v4sf);
54313     v4sf __builtin_ia32_rsqrtss (v4sf);
54314     v4sf __builtin_ia32_sqrtss (v4sf);
54315     v4sf __builtin_ia32_shufps (v4sf, v4sf, int);
54316     void __builtin_ia32_movntps (float *, v4sf);
54317     int __builtin_ia32_movmskps (v4sf);
54318
54319 The following built-in functions are available when '-msse' is used.
54320
54321'v4sf __builtin_ia32_loadups (float *)'
54322     Generates the 'movups' machine instruction as a load from memory.
54323'void __builtin_ia32_storeups (float *, v4sf)'
54324     Generates the 'movups' machine instruction as a store to memory.
54325'v4sf __builtin_ia32_loadss (float *)'
54326     Generates the 'movss' machine instruction as a load from memory.
54327'v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
54328     Generates the 'movhps' machine instruction as a load from memory.
54329'v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
54330     Generates the 'movlps' machine instruction as a load from memory
54331'void __builtin_ia32_storehps (v2sf *, v4sf)'
54332     Generates the 'movhps' machine instruction as a store to memory.
54333'void __builtin_ia32_storelps (v2sf *, v4sf)'
54334     Generates the 'movlps' machine instruction as a store to memory.
54335
54336 The following built-in functions are available when '-msse2' is used.
54337All of them generate the machine instruction that is part of the name.
54338
54339     int __builtin_ia32_comisdeq (v2df, v2df);
54340     int __builtin_ia32_comisdlt (v2df, v2df);
54341     int __builtin_ia32_comisdle (v2df, v2df);
54342     int __builtin_ia32_comisdgt (v2df, v2df);
54343     int __builtin_ia32_comisdge (v2df, v2df);
54344     int __builtin_ia32_comisdneq (v2df, v2df);
54345     int __builtin_ia32_ucomisdeq (v2df, v2df);
54346     int __builtin_ia32_ucomisdlt (v2df, v2df);
54347     int __builtin_ia32_ucomisdle (v2df, v2df);
54348     int __builtin_ia32_ucomisdgt (v2df, v2df);
54349     int __builtin_ia32_ucomisdge (v2df, v2df);
54350     int __builtin_ia32_ucomisdneq (v2df, v2df);
54351     v2df __builtin_ia32_cmpeqpd (v2df, v2df);
54352     v2df __builtin_ia32_cmpltpd (v2df, v2df);
54353     v2df __builtin_ia32_cmplepd (v2df, v2df);
54354     v2df __builtin_ia32_cmpgtpd (v2df, v2df);
54355     v2df __builtin_ia32_cmpgepd (v2df, v2df);
54356     v2df __builtin_ia32_cmpunordpd (v2df, v2df);
54357     v2df __builtin_ia32_cmpneqpd (v2df, v2df);
54358     v2df __builtin_ia32_cmpnltpd (v2df, v2df);
54359     v2df __builtin_ia32_cmpnlepd (v2df, v2df);
54360     v2df __builtin_ia32_cmpngtpd (v2df, v2df);
54361     v2df __builtin_ia32_cmpngepd (v2df, v2df);
54362     v2df __builtin_ia32_cmpordpd (v2df, v2df);
54363     v2df __builtin_ia32_cmpeqsd (v2df, v2df);
54364     v2df __builtin_ia32_cmpltsd (v2df, v2df);
54365     v2df __builtin_ia32_cmplesd (v2df, v2df);
54366     v2df __builtin_ia32_cmpunordsd (v2df, v2df);
54367     v2df __builtin_ia32_cmpneqsd (v2df, v2df);
54368     v2df __builtin_ia32_cmpnltsd (v2df, v2df);
54369     v2df __builtin_ia32_cmpnlesd (v2df, v2df);
54370     v2df __builtin_ia32_cmpordsd (v2df, v2df);
54371     v2di __builtin_ia32_paddq (v2di, v2di);
54372     v2di __builtin_ia32_psubq (v2di, v2di);
54373     v2df __builtin_ia32_addpd (v2df, v2df);
54374     v2df __builtin_ia32_subpd (v2df, v2df);
54375     v2df __builtin_ia32_mulpd (v2df, v2df);
54376     v2df __builtin_ia32_divpd (v2df, v2df);
54377     v2df __builtin_ia32_addsd (v2df, v2df);
54378     v2df __builtin_ia32_subsd (v2df, v2df);
54379     v2df __builtin_ia32_mulsd (v2df, v2df);
54380     v2df __builtin_ia32_divsd (v2df, v2df);
54381     v2df __builtin_ia32_minpd (v2df, v2df);
54382     v2df __builtin_ia32_maxpd (v2df, v2df);
54383     v2df __builtin_ia32_minsd (v2df, v2df);
54384     v2df __builtin_ia32_maxsd (v2df, v2df);
54385     v2df __builtin_ia32_andpd (v2df, v2df);
54386     v2df __builtin_ia32_andnpd (v2df, v2df);
54387     v2df __builtin_ia32_orpd (v2df, v2df);
54388     v2df __builtin_ia32_xorpd (v2df, v2df);
54389     v2df __builtin_ia32_movsd (v2df, v2df);
54390     v2df __builtin_ia32_unpckhpd (v2df, v2df);
54391     v2df __builtin_ia32_unpcklpd (v2df, v2df);
54392     v16qi __builtin_ia32_paddb128 (v16qi, v16qi);
54393     v8hi __builtin_ia32_paddw128 (v8hi, v8hi);
54394     v4si __builtin_ia32_paddd128 (v4si, v4si);
54395     v2di __builtin_ia32_paddq128 (v2di, v2di);
54396     v16qi __builtin_ia32_psubb128 (v16qi, v16qi);
54397     v8hi __builtin_ia32_psubw128 (v8hi, v8hi);
54398     v4si __builtin_ia32_psubd128 (v4si, v4si);
54399     v2di __builtin_ia32_psubq128 (v2di, v2di);
54400     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi);
54401     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi);
54402     v2di __builtin_ia32_pand128 (v2di, v2di);
54403     v2di __builtin_ia32_pandn128 (v2di, v2di);
54404     v2di __builtin_ia32_por128 (v2di, v2di);
54405     v2di __builtin_ia32_pxor128 (v2di, v2di);
54406     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi);
54407     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi);
54408     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi);
54409     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi);
54410     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si);
54411     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi);
54412     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi);
54413     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si);
54414     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi);
54415     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi);
54416     v16qi __builtin_ia32_pminub128 (v16qi, v16qi);
54417     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi);
54418     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi);
54419     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi);
54420     v4si __builtin_ia32_punpckhdq128 (v4si, v4si);
54421     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di);
54422     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi);
54423     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi);
54424     v4si __builtin_ia32_punpckldq128 (v4si, v4si);
54425     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di);
54426     v16qi __builtin_ia32_packsswb128 (v8hi, v8hi);
54427     v8hi __builtin_ia32_packssdw128 (v4si, v4si);
54428     v16qi __builtin_ia32_packuswb128 (v8hi, v8hi);
54429     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi);
54430     void __builtin_ia32_maskmovdqu (v16qi, v16qi);
54431     v2df __builtin_ia32_loadupd (double *);
54432     void __builtin_ia32_storeupd (double *, v2df);
54433     v2df __builtin_ia32_loadhpd (v2df, double const *);
54434     v2df __builtin_ia32_loadlpd (v2df, double const *);
54435     int __builtin_ia32_movmskpd (v2df);
54436     int __builtin_ia32_pmovmskb128 (v16qi);
54437     void __builtin_ia32_movnti (int *, int);
54438     void __builtin_ia32_movnti64 (long long int *, long long int);
54439     void __builtin_ia32_movntpd (double *, v2df);
54440     void __builtin_ia32_movntdq (v2df *, v2df);
54441     v4si __builtin_ia32_pshufd (v4si, int);
54442     v8hi __builtin_ia32_pshuflw (v8hi, int);
54443     v8hi __builtin_ia32_pshufhw (v8hi, int);
54444     v2di __builtin_ia32_psadbw128 (v16qi, v16qi);
54445     v2df __builtin_ia32_sqrtpd (v2df);
54446     v2df __builtin_ia32_sqrtsd (v2df);
54447     v2df __builtin_ia32_shufpd (v2df, v2df, int);
54448     v2df __builtin_ia32_cvtdq2pd (v4si);
54449     v4sf __builtin_ia32_cvtdq2ps (v4si);
54450     v4si __builtin_ia32_cvtpd2dq (v2df);
54451     v2si __builtin_ia32_cvtpd2pi (v2df);
54452     v4sf __builtin_ia32_cvtpd2ps (v2df);
54453     v4si __builtin_ia32_cvttpd2dq (v2df);
54454     v2si __builtin_ia32_cvttpd2pi (v2df);
54455     v2df __builtin_ia32_cvtpi2pd (v2si);
54456     int __builtin_ia32_cvtsd2si (v2df);
54457     int __builtin_ia32_cvttsd2si (v2df);
54458     long long __builtin_ia32_cvtsd2si64 (v2df);
54459     long long __builtin_ia32_cvttsd2si64 (v2df);
54460     v4si __builtin_ia32_cvtps2dq (v4sf);
54461     v2df __builtin_ia32_cvtps2pd (v4sf);
54462     v4si __builtin_ia32_cvttps2dq (v4sf);
54463     v2df __builtin_ia32_cvtsi2sd (v2df, int);
54464     v2df __builtin_ia32_cvtsi642sd (v2df, long long);
54465     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df);
54466     v2df __builtin_ia32_cvtss2sd (v2df, v4sf);
54467     void __builtin_ia32_clflush (const void *);
54468     void __builtin_ia32_lfence (void);
54469     void __builtin_ia32_mfence (void);
54470     v16qi __builtin_ia32_loaddqu (const char *);
54471     void __builtin_ia32_storedqu (char *, v16qi);
54472     v1di __builtin_ia32_pmuludq (v2si, v2si);
54473     v2di __builtin_ia32_pmuludq128 (v4si, v4si);
54474     v8hi __builtin_ia32_psllw128 (v8hi, v8hi);
54475     v4si __builtin_ia32_pslld128 (v4si, v4si);
54476     v2di __builtin_ia32_psllq128 (v2di, v2di);
54477     v8hi __builtin_ia32_psrlw128 (v8hi, v8hi);
54478     v4si __builtin_ia32_psrld128 (v4si, v4si);
54479     v2di __builtin_ia32_psrlq128 (v2di, v2di);
54480     v8hi __builtin_ia32_psraw128 (v8hi, v8hi);
54481     v4si __builtin_ia32_psrad128 (v4si, v4si);
54482     v2di __builtin_ia32_pslldqi128 (v2di, int);
54483     v8hi __builtin_ia32_psllwi128 (v8hi, int);
54484     v4si __builtin_ia32_pslldi128 (v4si, int);
54485     v2di __builtin_ia32_psllqi128 (v2di, int);
54486     v2di __builtin_ia32_psrldqi128 (v2di, int);
54487     v8hi __builtin_ia32_psrlwi128 (v8hi, int);
54488     v4si __builtin_ia32_psrldi128 (v4si, int);
54489     v2di __builtin_ia32_psrlqi128 (v2di, int);
54490     v8hi __builtin_ia32_psrawi128 (v8hi, int);
54491     v4si __builtin_ia32_psradi128 (v4si, int);
54492     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi);
54493     v2di __builtin_ia32_movq128 (v2di);
54494
54495 The following built-in functions are available when '-msse3' is used.
54496All of them generate the machine instruction that is part of the name.
54497
54498     v2df __builtin_ia32_addsubpd (v2df, v2df);
54499     v4sf __builtin_ia32_addsubps (v4sf, v4sf);
54500     v2df __builtin_ia32_haddpd (v2df, v2df);
54501     v4sf __builtin_ia32_haddps (v4sf, v4sf);
54502     v2df __builtin_ia32_hsubpd (v2df, v2df);
54503     v4sf __builtin_ia32_hsubps (v4sf, v4sf);
54504     v16qi __builtin_ia32_lddqu (char const *);
54505     void __builtin_ia32_monitor (void *, unsigned int, unsigned int);
54506     v4sf __builtin_ia32_movshdup (v4sf);
54507     v4sf __builtin_ia32_movsldup (v4sf);
54508     void __builtin_ia32_mwait (unsigned int, unsigned int);
54509
54510 The following built-in functions are available when '-mssse3' is used.
54511All of them generate the machine instruction that is part of the name.
54512
54513     v2si __builtin_ia32_phaddd (v2si, v2si);
54514     v4hi __builtin_ia32_phaddw (v4hi, v4hi);
54515     v4hi __builtin_ia32_phaddsw (v4hi, v4hi);
54516     v2si __builtin_ia32_phsubd (v2si, v2si);
54517     v4hi __builtin_ia32_phsubw (v4hi, v4hi);
54518     v4hi __builtin_ia32_phsubsw (v4hi, v4hi);
54519     v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi);
54520     v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi);
54521     v8qi __builtin_ia32_pshufb (v8qi, v8qi);
54522     v8qi __builtin_ia32_psignb (v8qi, v8qi);
54523     v2si __builtin_ia32_psignd (v2si, v2si);
54524     v4hi __builtin_ia32_psignw (v4hi, v4hi);
54525     v1di __builtin_ia32_palignr (v1di, v1di, int);
54526     v8qi __builtin_ia32_pabsb (v8qi);
54527     v2si __builtin_ia32_pabsd (v2si);
54528     v4hi __builtin_ia32_pabsw (v4hi);
54529
54530 The following built-in functions are available when '-mssse3' is used.
54531All of them generate the machine instruction that is part of the name.
54532
54533     v4si __builtin_ia32_phaddd128 (v4si, v4si);
54534     v8hi __builtin_ia32_phaddw128 (v8hi, v8hi);
54535     v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi);
54536     v4si __builtin_ia32_phsubd128 (v4si, v4si);
54537     v8hi __builtin_ia32_phsubw128 (v8hi, v8hi);
54538     v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi);
54539     v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi);
54540     v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi);
54541     v16qi __builtin_ia32_pshufb128 (v16qi, v16qi);
54542     v16qi __builtin_ia32_psignb128 (v16qi, v16qi);
54543     v4si __builtin_ia32_psignd128 (v4si, v4si);
54544     v8hi __builtin_ia32_psignw128 (v8hi, v8hi);
54545     v2di __builtin_ia32_palignr128 (v2di, v2di, int);
54546     v16qi __builtin_ia32_pabsb128 (v16qi);
54547     v4si __builtin_ia32_pabsd128 (v4si);
54548     v8hi __builtin_ia32_pabsw128 (v8hi);
54549
54550 The following built-in functions are available when '-msse4.1' is used.
54551All of them generate the machine instruction that is part of the name.
54552
54553     v2df __builtin_ia32_blendpd (v2df, v2df, const int);
54554     v4sf __builtin_ia32_blendps (v4sf, v4sf, const int);
54555     v2df __builtin_ia32_blendvpd (v2df, v2df, v2df);
54556     v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf);
54557     v2df __builtin_ia32_dppd (v2df, v2df, const int);
54558     v4sf __builtin_ia32_dpps (v4sf, v4sf, const int);
54559     v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int);
54560     v2di __builtin_ia32_movntdqa (v2di *);
54561     v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int);
54562     v8hi __builtin_ia32_packusdw128 (v4si, v4si);
54563     v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi);
54564     v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int);
54565     v2di __builtin_ia32_pcmpeqq (v2di, v2di);
54566     v8hi __builtin_ia32_phminposuw128 (v8hi);
54567     v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi);
54568     v4si __builtin_ia32_pmaxsd128 (v4si, v4si);
54569     v4si __builtin_ia32_pmaxud128 (v4si, v4si);
54570     v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi);
54571     v16qi __builtin_ia32_pminsb128 (v16qi, v16qi);
54572     v4si __builtin_ia32_pminsd128 (v4si, v4si);
54573     v4si __builtin_ia32_pminud128 (v4si, v4si);
54574     v8hi __builtin_ia32_pminuw128 (v8hi, v8hi);
54575     v4si __builtin_ia32_pmovsxbd128 (v16qi);
54576     v2di __builtin_ia32_pmovsxbq128 (v16qi);
54577     v8hi __builtin_ia32_pmovsxbw128 (v16qi);
54578     v2di __builtin_ia32_pmovsxdq128 (v4si);
54579     v4si __builtin_ia32_pmovsxwd128 (v8hi);
54580     v2di __builtin_ia32_pmovsxwq128 (v8hi);
54581     v4si __builtin_ia32_pmovzxbd128 (v16qi);
54582     v2di __builtin_ia32_pmovzxbq128 (v16qi);
54583     v8hi __builtin_ia32_pmovzxbw128 (v16qi);
54584     v2di __builtin_ia32_pmovzxdq128 (v4si);
54585     v4si __builtin_ia32_pmovzxwd128 (v8hi);
54586     v2di __builtin_ia32_pmovzxwq128 (v8hi);
54587     v2di __builtin_ia32_pmuldq128 (v4si, v4si);
54588     v4si __builtin_ia32_pmulld128 (v4si, v4si);
54589     int __builtin_ia32_ptestc128 (v2di, v2di);
54590     int __builtin_ia32_ptestnzc128 (v2di, v2di);
54591     int __builtin_ia32_ptestz128 (v2di, v2di);
54592     v2df __builtin_ia32_roundpd (v2df, const int);
54593     v4sf __builtin_ia32_roundps (v4sf, const int);
54594     v2df __builtin_ia32_roundsd (v2df, v2df, const int);
54595     v4sf __builtin_ia32_roundss (v4sf, v4sf, const int);
54596
54597 The following built-in functions are available when '-msse4.1' is used.
54598
54599'v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
54600     Generates the 'insertps' machine instruction.
54601'int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
54602     Generates the 'pextrb' machine instruction.
54603'v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
54604     Generates the 'pinsrb' machine instruction.
54605'v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
54606     Generates the 'pinsrd' machine instruction.
54607'v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
54608     Generates the 'pinsrq' machine instruction in 64bit mode.
54609
54610 The following built-in functions are changed to generate new SSE4.1
54611instructions when '-msse4.1' is used.
54612
54613'float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
54614     Generates the 'extractps' machine instruction.
54615'int __builtin_ia32_vec_ext_v4si (v4si, const int)'
54616     Generates the 'pextrd' machine instruction.
54617'long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
54618     Generates the 'pextrq' machine instruction in 64bit mode.
54619
54620 The following built-in functions are available when '-msse4.2' is used.
54621All of them generate the machine instruction that is part of the name.
54622
54623     v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int);
54624     int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int);
54625     int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int);
54626     int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int);
54627     int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int);
54628     int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int);
54629     int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int);
54630     v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int);
54631     int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int);
54632     int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int);
54633     int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int);
54634     int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int);
54635     int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int);
54636     int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int);
54637     v2di __builtin_ia32_pcmpgtq (v2di, v2di);
54638
54639 The following built-in functions are available when '-msse4.2' is used.
54640
54641'unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
54642     Generates the 'crc32b' machine instruction.
54643'unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
54644     Generates the 'crc32w' machine instruction.
54645'unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
54646     Generates the 'crc32l' machine instruction.
54647'unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
54648     Generates the 'crc32q' machine instruction.
54649
54650 The following built-in functions are changed to generate new SSE4.2
54651instructions when '-msse4.2' is used.
54652
54653'int __builtin_popcount (unsigned int)'
54654     Generates the 'popcntl' machine instruction.
54655'int __builtin_popcountl (unsigned long)'
54656     Generates the 'popcntl' or 'popcntq' machine instruction, depending
54657     on the size of 'unsigned long'.
54658'int __builtin_popcountll (unsigned long long)'
54659     Generates the 'popcntq' machine instruction.
54660
54661 The following built-in functions are available when '-mavx' is used.
54662All of them generate the machine instruction that is part of the name.
54663
54664     v4df __builtin_ia32_addpd256 (v4df,v4df);
54665     v8sf __builtin_ia32_addps256 (v8sf,v8sf);
54666     v4df __builtin_ia32_addsubpd256 (v4df,v4df);
54667     v8sf __builtin_ia32_addsubps256 (v8sf,v8sf);
54668     v4df __builtin_ia32_andnpd256 (v4df,v4df);
54669     v8sf __builtin_ia32_andnps256 (v8sf,v8sf);
54670     v4df __builtin_ia32_andpd256 (v4df,v4df);
54671     v8sf __builtin_ia32_andps256 (v8sf,v8sf);
54672     v4df __builtin_ia32_blendpd256 (v4df,v4df,int);
54673     v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int);
54674     v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df);
54675     v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf);
54676     v2df __builtin_ia32_cmppd (v2df,v2df,int);
54677     v4df __builtin_ia32_cmppd256 (v4df,v4df,int);
54678     v4sf __builtin_ia32_cmpps (v4sf,v4sf,int);
54679     v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int);
54680     v2df __builtin_ia32_cmpsd (v2df,v2df,int);
54681     v4sf __builtin_ia32_cmpss (v4sf,v4sf,int);
54682     v4df __builtin_ia32_cvtdq2pd256 (v4si);
54683     v8sf __builtin_ia32_cvtdq2ps256 (v8si);
54684     v4si __builtin_ia32_cvtpd2dq256 (v4df);
54685     v4sf __builtin_ia32_cvtpd2ps256 (v4df);
54686     v8si __builtin_ia32_cvtps2dq256 (v8sf);
54687     v4df __builtin_ia32_cvtps2pd256 (v4sf);
54688     v4si __builtin_ia32_cvttpd2dq256 (v4df);
54689     v8si __builtin_ia32_cvttps2dq256 (v8sf);
54690     v4df __builtin_ia32_divpd256 (v4df,v4df);
54691     v8sf __builtin_ia32_divps256 (v8sf,v8sf);
54692     v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int);
54693     v4df __builtin_ia32_haddpd256 (v4df,v4df);
54694     v8sf __builtin_ia32_haddps256 (v8sf,v8sf);
54695     v4df __builtin_ia32_hsubpd256 (v4df,v4df);
54696     v8sf __builtin_ia32_hsubps256 (v8sf,v8sf);
54697     v32qi __builtin_ia32_lddqu256 (pcchar);
54698     v32qi __builtin_ia32_loaddqu256 (pcchar);
54699     v4df __builtin_ia32_loadupd256 (pcdouble);
54700     v8sf __builtin_ia32_loadups256 (pcfloat);
54701     v2df __builtin_ia32_maskloadpd (pcv2df,v2df);
54702     v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df);
54703     v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf);
54704     v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf);
54705     void __builtin_ia32_maskstorepd (pv2df,v2df,v2df);
54706     void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df);
54707     void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf);
54708     void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf);
54709     v4df __builtin_ia32_maxpd256 (v4df,v4df);
54710     v8sf __builtin_ia32_maxps256 (v8sf,v8sf);
54711     v4df __builtin_ia32_minpd256 (v4df,v4df);
54712     v8sf __builtin_ia32_minps256 (v8sf,v8sf);
54713     v4df __builtin_ia32_movddup256 (v4df);
54714     int __builtin_ia32_movmskpd256 (v4df);
54715     int __builtin_ia32_movmskps256 (v8sf);
54716     v8sf __builtin_ia32_movshdup256 (v8sf);
54717     v8sf __builtin_ia32_movsldup256 (v8sf);
54718     v4df __builtin_ia32_mulpd256 (v4df,v4df);
54719     v8sf __builtin_ia32_mulps256 (v8sf,v8sf);
54720     v4df __builtin_ia32_orpd256 (v4df,v4df);
54721     v8sf __builtin_ia32_orps256 (v8sf,v8sf);
54722     v2df __builtin_ia32_pd_pd256 (v4df);
54723     v4df __builtin_ia32_pd256_pd (v2df);
54724     v4sf __builtin_ia32_ps_ps256 (v8sf);
54725     v8sf __builtin_ia32_ps256_ps (v4sf);
54726     int __builtin_ia32_ptestc256 (v4di,v4di,ptest);
54727     int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest);
54728     int __builtin_ia32_ptestz256 (v4di,v4di,ptest);
54729     v8sf __builtin_ia32_rcpps256 (v8sf);
54730     v4df __builtin_ia32_roundpd256 (v4df,int);
54731     v8sf __builtin_ia32_roundps256 (v8sf,int);
54732     v8sf __builtin_ia32_rsqrtps_nr256 (v8sf);
54733     v8sf __builtin_ia32_rsqrtps256 (v8sf);
54734     v4df __builtin_ia32_shufpd256 (v4df,v4df,int);
54735     v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int);
54736     v4si __builtin_ia32_si_si256 (v8si);
54737     v8si __builtin_ia32_si256_si (v4si);
54738     v4df __builtin_ia32_sqrtpd256 (v4df);
54739     v8sf __builtin_ia32_sqrtps_nr256 (v8sf);
54740     v8sf __builtin_ia32_sqrtps256 (v8sf);
54741     void __builtin_ia32_storedqu256 (pchar,v32qi);
54742     void __builtin_ia32_storeupd256 (pdouble,v4df);
54743     void __builtin_ia32_storeups256 (pfloat,v8sf);
54744     v4df __builtin_ia32_subpd256 (v4df,v4df);
54745     v8sf __builtin_ia32_subps256 (v8sf,v8sf);
54746     v4df __builtin_ia32_unpckhpd256 (v4df,v4df);
54747     v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf);
54748     v4df __builtin_ia32_unpcklpd256 (v4df,v4df);
54749     v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf);
54750     v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df);
54751     v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf);
54752     v4df __builtin_ia32_vbroadcastsd256 (pcdouble);
54753     v4sf __builtin_ia32_vbroadcastss (pcfloat);
54754     v8sf __builtin_ia32_vbroadcastss256 (pcfloat);
54755     v2df __builtin_ia32_vextractf128_pd256 (v4df,int);
54756     v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int);
54757     v4si __builtin_ia32_vextractf128_si256 (v8si,int);
54758     v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int);
54759     v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int);
54760     v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int);
54761     v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int);
54762     v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int);
54763     v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int);
54764     v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int);
54765     v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int);
54766     v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int);
54767     v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int);
54768     v2df __builtin_ia32_vpermilpd (v2df,int);
54769     v4df __builtin_ia32_vpermilpd256 (v4df,int);
54770     v4sf __builtin_ia32_vpermilps (v4sf,int);
54771     v8sf __builtin_ia32_vpermilps256 (v8sf,int);
54772     v2df __builtin_ia32_vpermilvarpd (v2df,v2di);
54773     v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di);
54774     v4sf __builtin_ia32_vpermilvarps (v4sf,v4si);
54775     v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si);
54776     int __builtin_ia32_vtestcpd (v2df,v2df,ptest);
54777     int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest);
54778     int __builtin_ia32_vtestcps (v4sf,v4sf,ptest);
54779     int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest);
54780     int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest);
54781     int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest);
54782     int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest);
54783     int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest);
54784     int __builtin_ia32_vtestzpd (v2df,v2df,ptest);
54785     int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest);
54786     int __builtin_ia32_vtestzps (v4sf,v4sf,ptest);
54787     int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest);
54788     void __builtin_ia32_vzeroall (void);
54789     void __builtin_ia32_vzeroupper (void);
54790     v4df __builtin_ia32_xorpd256 (v4df,v4df);
54791     v8sf __builtin_ia32_xorps256 (v8sf,v8sf);
54792
54793 The following built-in functions are available when '-mavx2' is used.
54794All of them generate the machine instruction that is part of the name.
54795
54796     v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int);
54797     v32qi __builtin_ia32_pabsb256 (v32qi);
54798     v16hi __builtin_ia32_pabsw256 (v16hi);
54799     v8si __builtin_ia32_pabsd256 (v8si);
54800     v16hi __builtin_ia32_packssdw256 (v8si,v8si);
54801     v32qi __builtin_ia32_packsswb256 (v16hi,v16hi);
54802     v16hi __builtin_ia32_packusdw256 (v8si,v8si);
54803     v32qi __builtin_ia32_packuswb256 (v16hi,v16hi);
54804     v32qi __builtin_ia32_paddb256 (v32qi,v32qi);
54805     v16hi __builtin_ia32_paddw256 (v16hi,v16hi);
54806     v8si __builtin_ia32_paddd256 (v8si,v8si);
54807     v4di __builtin_ia32_paddq256 (v4di,v4di);
54808     v32qi __builtin_ia32_paddsb256 (v32qi,v32qi);
54809     v16hi __builtin_ia32_paddsw256 (v16hi,v16hi);
54810     v32qi __builtin_ia32_paddusb256 (v32qi,v32qi);
54811     v16hi __builtin_ia32_paddusw256 (v16hi,v16hi);
54812     v4di __builtin_ia32_palignr256 (v4di,v4di,int);
54813     v4di __builtin_ia32_andsi256 (v4di,v4di);
54814     v4di __builtin_ia32_andnotsi256 (v4di,v4di);
54815     v32qi __builtin_ia32_pavgb256 (v32qi,v32qi);
54816     v16hi __builtin_ia32_pavgw256 (v16hi,v16hi);
54817     v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi);
54818     v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int);
54819     v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi);
54820     v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi);
54821     v8si __builtin_ia32_pcmpeqd256 (c8si,v8si);
54822     v4di __builtin_ia32_pcmpeqq256 (v4di,v4di);
54823     v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi);
54824     v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi);
54825     v8si __builtin_ia32_pcmpgtd256 (v8si,v8si);
54826     v4di __builtin_ia32_pcmpgtq256 (v4di,v4di);
54827     v16hi __builtin_ia32_phaddw256 (v16hi,v16hi);
54828     v8si __builtin_ia32_phaddd256 (v8si,v8si);
54829     v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi);
54830     v16hi __builtin_ia32_phsubw256 (v16hi,v16hi);
54831     v8si __builtin_ia32_phsubd256 (v8si,v8si);
54832     v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi);
54833     v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi);
54834     v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi);
54835     v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi);
54836     v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi);
54837     v8si __builtin_ia32_pmaxsd256 (v8si,v8si);
54838     v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi);
54839     v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi);
54840     v8si __builtin_ia32_pmaxud256 (v8si,v8si);
54841     v32qi __builtin_ia32_pminsb256 (v32qi,v32qi);
54842     v16hi __builtin_ia32_pminsw256 (v16hi,v16hi);
54843     v8si __builtin_ia32_pminsd256 (v8si,v8si);
54844     v32qi __builtin_ia32_pminub256 (v32qi,v32qi);
54845     v16hi __builtin_ia32_pminuw256 (v16hi,v16hi);
54846     v8si __builtin_ia32_pminud256 (v8si,v8si);
54847     int __builtin_ia32_pmovmskb256 (v32qi);
54848     v16hi __builtin_ia32_pmovsxbw256 (v16qi);
54849     v8si __builtin_ia32_pmovsxbd256 (v16qi);
54850     v4di __builtin_ia32_pmovsxbq256 (v16qi);
54851     v8si __builtin_ia32_pmovsxwd256 (v8hi);
54852     v4di __builtin_ia32_pmovsxwq256 (v8hi);
54853     v4di __builtin_ia32_pmovsxdq256 (v4si);
54854     v16hi __builtin_ia32_pmovzxbw256 (v16qi);
54855     v8si __builtin_ia32_pmovzxbd256 (v16qi);
54856     v4di __builtin_ia32_pmovzxbq256 (v16qi);
54857     v8si __builtin_ia32_pmovzxwd256 (v8hi);
54858     v4di __builtin_ia32_pmovzxwq256 (v8hi);
54859     v4di __builtin_ia32_pmovzxdq256 (v4si);
54860     v4di __builtin_ia32_pmuldq256 (v8si,v8si);
54861     v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi);
54862     v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi);
54863     v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi);
54864     v16hi __builtin_ia32_pmullw256 (v16hi,v16hi);
54865     v8si __builtin_ia32_pmulld256 (v8si,v8si);
54866     v4di __builtin_ia32_pmuludq256 (v8si,v8si);
54867     v4di __builtin_ia32_por256 (v4di,v4di);
54868     v16hi __builtin_ia32_psadbw256 (v32qi,v32qi);
54869     v32qi __builtin_ia32_pshufb256 (v32qi,v32qi);
54870     v8si __builtin_ia32_pshufd256 (v8si,int);
54871     v16hi __builtin_ia32_pshufhw256 (v16hi,int);
54872     v16hi __builtin_ia32_pshuflw256 (v16hi,int);
54873     v32qi __builtin_ia32_psignb256 (v32qi,v32qi);
54874     v16hi __builtin_ia32_psignw256 (v16hi,v16hi);
54875     v8si __builtin_ia32_psignd256 (v8si,v8si);
54876     v4di __builtin_ia32_pslldqi256 (v4di,int);
54877     v16hi __builtin_ia32_psllwi256 (16hi,int);
54878     v16hi __builtin_ia32_psllw256(v16hi,v8hi);
54879     v8si __builtin_ia32_pslldi256 (v8si,int);
54880     v8si __builtin_ia32_pslld256(v8si,v4si);
54881     v4di __builtin_ia32_psllqi256 (v4di,int);
54882     v4di __builtin_ia32_psllq256(v4di,v2di);
54883     v16hi __builtin_ia32_psrawi256 (v16hi,int);
54884     v16hi __builtin_ia32_psraw256 (v16hi,v8hi);
54885     v8si __builtin_ia32_psradi256 (v8si,int);
54886     v8si __builtin_ia32_psrad256 (v8si,v4si);
54887     v4di __builtin_ia32_psrldqi256 (v4di, int);
54888     v16hi __builtin_ia32_psrlwi256 (v16hi,int);
54889     v16hi __builtin_ia32_psrlw256 (v16hi,v8hi);
54890     v8si __builtin_ia32_psrldi256 (v8si,int);
54891     v8si __builtin_ia32_psrld256 (v8si,v4si);
54892     v4di __builtin_ia32_psrlqi256 (v4di,int);
54893     v4di __builtin_ia32_psrlq256(v4di,v2di);
54894     v32qi __builtin_ia32_psubb256 (v32qi,v32qi);
54895     v32hi __builtin_ia32_psubw256 (v16hi,v16hi);
54896     v8si __builtin_ia32_psubd256 (v8si,v8si);
54897     v4di __builtin_ia32_psubq256 (v4di,v4di);
54898     v32qi __builtin_ia32_psubsb256 (v32qi,v32qi);
54899     v16hi __builtin_ia32_psubsw256 (v16hi,v16hi);
54900     v32qi __builtin_ia32_psubusb256 (v32qi,v32qi);
54901     v16hi __builtin_ia32_psubusw256 (v16hi,v16hi);
54902     v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi);
54903     v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi);
54904     v8si __builtin_ia32_punpckhdq256 (v8si,v8si);
54905     v4di __builtin_ia32_punpckhqdq256 (v4di,v4di);
54906     v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi);
54907     v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi);
54908     v8si __builtin_ia32_punpckldq256 (v8si,v8si);
54909     v4di __builtin_ia32_punpcklqdq256 (v4di,v4di);
54910     v4di __builtin_ia32_pxor256 (v4di,v4di);
54911     v4di __builtin_ia32_movntdqa256 (pv4di);
54912     v4sf __builtin_ia32_vbroadcastss_ps (v4sf);
54913     v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf);
54914     v4df __builtin_ia32_vbroadcastsd_pd256 (v2df);
54915     v4di __builtin_ia32_vbroadcastsi256 (v2di);
54916     v4si __builtin_ia32_pblendd128 (v4si,v4si);
54917     v8si __builtin_ia32_pblendd256 (v8si,v8si);
54918     v32qi __builtin_ia32_pbroadcastb256 (v16qi);
54919     v16hi __builtin_ia32_pbroadcastw256 (v8hi);
54920     v8si __builtin_ia32_pbroadcastd256 (v4si);
54921     v4di __builtin_ia32_pbroadcastq256 (v2di);
54922     v16qi __builtin_ia32_pbroadcastb128 (v16qi);
54923     v8hi __builtin_ia32_pbroadcastw128 (v8hi);
54924     v4si __builtin_ia32_pbroadcastd128 (v4si);
54925     v2di __builtin_ia32_pbroadcastq128 (v2di);
54926     v8si __builtin_ia32_permvarsi256 (v8si,v8si);
54927     v4df __builtin_ia32_permdf256 (v4df,int);
54928     v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf);
54929     v4di __builtin_ia32_permdi256 (v4di,int);
54930     v4di __builtin_ia32_permti256 (v4di,v4di,int);
54931     v4di __builtin_ia32_extract128i256 (v4di,int);
54932     v4di __builtin_ia32_insert128i256 (v4di,v2di,int);
54933     v8si __builtin_ia32_maskloadd256 (pcv8si,v8si);
54934     v4di __builtin_ia32_maskloadq256 (pcv4di,v4di);
54935     v4si __builtin_ia32_maskloadd (pcv4si,v4si);
54936     v2di __builtin_ia32_maskloadq (pcv2di,v2di);
54937     void __builtin_ia32_maskstored256 (pv8si,v8si,v8si);
54938     void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di);
54939     void __builtin_ia32_maskstored (pv4si,v4si,v4si);
54940     void __builtin_ia32_maskstoreq (pv2di,v2di,v2di);
54941     v8si __builtin_ia32_psllv8si (v8si,v8si);
54942     v4si __builtin_ia32_psllv4si (v4si,v4si);
54943     v4di __builtin_ia32_psllv4di (v4di,v4di);
54944     v2di __builtin_ia32_psllv2di (v2di,v2di);
54945     v8si __builtin_ia32_psrav8si (v8si,v8si);
54946     v4si __builtin_ia32_psrav4si (v4si,v4si);
54947     v8si __builtin_ia32_psrlv8si (v8si,v8si);
54948     v4si __builtin_ia32_psrlv4si (v4si,v4si);
54949     v4di __builtin_ia32_psrlv4di (v4di,v4di);
54950     v2di __builtin_ia32_psrlv2di (v2di,v2di);
54951     v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int);
54952     v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int);
54953     v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int);
54954     v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int);
54955     v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int);
54956     v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int);
54957     v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int);
54958     v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int);
54959     v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int);
54960     v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int);
54961     v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int);
54962     v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int);
54963     v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int);
54964     v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int);
54965     v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int);
54966     v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int);
54967
54968 The following built-in functions are available when '-maes' is used.
54969All of them generate the machine instruction that is part of the name.
54970
54971     v2di __builtin_ia32_aesenc128 (v2di, v2di);
54972     v2di __builtin_ia32_aesenclast128 (v2di, v2di);
54973     v2di __builtin_ia32_aesdec128 (v2di, v2di);
54974     v2di __builtin_ia32_aesdeclast128 (v2di, v2di);
54975     v2di __builtin_ia32_aeskeygenassist128 (v2di, const int);
54976     v2di __builtin_ia32_aesimc128 (v2di);
54977
54978 The following built-in function is available when '-mpclmul' is used.
54979
54980'v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
54981     Generates the 'pclmulqdq' machine instruction.
54982
54983 The following built-in function is available when '-mfsgsbase' is used.
54984All of them generate the machine instruction that is part of the name.
54985
54986     unsigned int __builtin_ia32_rdfsbase32 (void);
54987     unsigned long long __builtin_ia32_rdfsbase64 (void);
54988     unsigned int __builtin_ia32_rdgsbase32 (void);
54989     unsigned long long __builtin_ia32_rdgsbase64 (void);
54990     void _writefsbase_u32 (unsigned int);
54991     void _writefsbase_u64 (unsigned long long);
54992     void _writegsbase_u32 (unsigned int);
54993     void _writegsbase_u64 (unsigned long long);
54994
54995 The following built-in function is available when '-mrdrnd' is used.
54996All of them generate the machine instruction that is part of the name.
54997
54998     unsigned int __builtin_ia32_rdrand16_step (unsigned short *);
54999     unsigned int __builtin_ia32_rdrand32_step (unsigned int *);
55000     unsigned int __builtin_ia32_rdrand64_step (unsigned long long *);
55001
55002 The following built-in function is available when '-mptwrite' is used.
55003All of them generate the machine instruction that is part of the name.
55004
55005     void __builtin_ia32_ptwrite32 (unsigned);
55006     void __builtin_ia32_ptwrite64 (unsigned long long);
55007
55008 The following built-in functions are available when '-msse4a' is used.
55009All of them generate the machine instruction that is part of the name.
55010
55011     void __builtin_ia32_movntsd (double *, v2df);
55012     void __builtin_ia32_movntss (float *, v4sf);
55013     v2di __builtin_ia32_extrq  (v2di, v16qi);
55014     v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int);
55015     v2di __builtin_ia32_insertq (v2di, v2di);
55016     v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int);
55017
55018 The following built-in functions are available when '-mxop' is used.
55019     v2df __builtin_ia32_vfrczpd (v2df);
55020     v4sf __builtin_ia32_vfrczps (v4sf);
55021     v2df __builtin_ia32_vfrczsd (v2df);
55022     v4sf __builtin_ia32_vfrczss (v4sf);
55023     v4df __builtin_ia32_vfrczpd256 (v4df);
55024     v8sf __builtin_ia32_vfrczps256 (v8sf);
55025     v2di __builtin_ia32_vpcmov (v2di, v2di, v2di);
55026     v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di);
55027     v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si);
55028     v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi);
55029     v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi);
55030     v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df);
55031     v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf);
55032     v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di);
55033     v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si);
55034     v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi);
55035     v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi);
55036     v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df);
55037     v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf);
55038     v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi);
55039     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi);
55040     v4si __builtin_ia32_vpcomeqd (v4si, v4si);
55041     v2di __builtin_ia32_vpcomeqq (v2di, v2di);
55042     v16qi __builtin_ia32_vpcomequb (v16qi, v16qi);
55043     v4si __builtin_ia32_vpcomequd (v4si, v4si);
55044     v2di __builtin_ia32_vpcomequq (v2di, v2di);
55045     v8hi __builtin_ia32_vpcomequw (v8hi, v8hi);
55046     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi);
55047     v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi);
55048     v4si __builtin_ia32_vpcomfalsed (v4si, v4si);
55049     v2di __builtin_ia32_vpcomfalseq (v2di, v2di);
55050     v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi);
55051     v4si __builtin_ia32_vpcomfalseud (v4si, v4si);
55052     v2di __builtin_ia32_vpcomfalseuq (v2di, v2di);
55053     v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi);
55054     v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi);
55055     v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi);
55056     v4si __builtin_ia32_vpcomged (v4si, v4si);
55057     v2di __builtin_ia32_vpcomgeq (v2di, v2di);
55058     v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi);
55059     v4si __builtin_ia32_vpcomgeud (v4si, v4si);
55060     v2di __builtin_ia32_vpcomgeuq (v2di, v2di);
55061     v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi);
55062     v8hi __builtin_ia32_vpcomgew (v8hi, v8hi);
55063     v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi);
55064     v4si __builtin_ia32_vpcomgtd (v4si, v4si);
55065     v2di __builtin_ia32_vpcomgtq (v2di, v2di);
55066     v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi);
55067     v4si __builtin_ia32_vpcomgtud (v4si, v4si);
55068     v2di __builtin_ia32_vpcomgtuq (v2di, v2di);
55069     v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi);
55070     v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi);
55071     v16qi __builtin_ia32_vpcomleb (v16qi, v16qi);
55072     v4si __builtin_ia32_vpcomled (v4si, v4si);
55073     v2di __builtin_ia32_vpcomleq (v2di, v2di);
55074     v16qi __builtin_ia32_vpcomleub (v16qi, v16qi);
55075     v4si __builtin_ia32_vpcomleud (v4si, v4si);
55076     v2di __builtin_ia32_vpcomleuq (v2di, v2di);
55077     v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi);
55078     v8hi __builtin_ia32_vpcomlew (v8hi, v8hi);
55079     v16qi __builtin_ia32_vpcomltb (v16qi, v16qi);
55080     v4si __builtin_ia32_vpcomltd (v4si, v4si);
55081     v2di __builtin_ia32_vpcomltq (v2di, v2di);
55082     v16qi __builtin_ia32_vpcomltub (v16qi, v16qi);
55083     v4si __builtin_ia32_vpcomltud (v4si, v4si);
55084     v2di __builtin_ia32_vpcomltuq (v2di, v2di);
55085     v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi);
55086     v8hi __builtin_ia32_vpcomltw (v8hi, v8hi);
55087     v16qi __builtin_ia32_vpcomneb (v16qi, v16qi);
55088     v4si __builtin_ia32_vpcomned (v4si, v4si);
55089     v2di __builtin_ia32_vpcomneq (v2di, v2di);
55090     v16qi __builtin_ia32_vpcomneub (v16qi, v16qi);
55091     v4si __builtin_ia32_vpcomneud (v4si, v4si);
55092     v2di __builtin_ia32_vpcomneuq (v2di, v2di);
55093     v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi);
55094     v8hi __builtin_ia32_vpcomnew (v8hi, v8hi);
55095     v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi);
55096     v4si __builtin_ia32_vpcomtrued (v4si, v4si);
55097     v2di __builtin_ia32_vpcomtrueq (v2di, v2di);
55098     v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi);
55099     v4si __builtin_ia32_vpcomtrueud (v4si, v4si);
55100     v2di __builtin_ia32_vpcomtrueuq (v2di, v2di);
55101     v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi);
55102     v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi);
55103     v4si __builtin_ia32_vphaddbd (v16qi);
55104     v2di __builtin_ia32_vphaddbq (v16qi);
55105     v8hi __builtin_ia32_vphaddbw (v16qi);
55106     v2di __builtin_ia32_vphadddq (v4si);
55107     v4si __builtin_ia32_vphaddubd (v16qi);
55108     v2di __builtin_ia32_vphaddubq (v16qi);
55109     v8hi __builtin_ia32_vphaddubw (v16qi);
55110     v2di __builtin_ia32_vphaddudq (v4si);
55111     v4si __builtin_ia32_vphadduwd (v8hi);
55112     v2di __builtin_ia32_vphadduwq (v8hi);
55113     v4si __builtin_ia32_vphaddwd (v8hi);
55114     v2di __builtin_ia32_vphaddwq (v8hi);
55115     v8hi __builtin_ia32_vphsubbw (v16qi);
55116     v2di __builtin_ia32_vphsubdq (v4si);
55117     v4si __builtin_ia32_vphsubwd (v8hi);
55118     v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si);
55119     v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di);
55120     v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di);
55121     v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si);
55122     v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di);
55123     v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di);
55124     v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si);
55125     v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi);
55126     v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si);
55127     v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi);
55128     v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si);
55129     v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si);
55130     v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi);
55131     v16qi __builtin_ia32_vprotb (v16qi, v16qi);
55132     v4si __builtin_ia32_vprotd (v4si, v4si);
55133     v2di __builtin_ia32_vprotq (v2di, v2di);
55134     v8hi __builtin_ia32_vprotw (v8hi, v8hi);
55135     v16qi __builtin_ia32_vpshab (v16qi, v16qi);
55136     v4si __builtin_ia32_vpshad (v4si, v4si);
55137     v2di __builtin_ia32_vpshaq (v2di, v2di);
55138     v8hi __builtin_ia32_vpshaw (v8hi, v8hi);
55139     v16qi __builtin_ia32_vpshlb (v16qi, v16qi);
55140     v4si __builtin_ia32_vpshld (v4si, v4si);
55141     v2di __builtin_ia32_vpshlq (v2di, v2di);
55142     v8hi __builtin_ia32_vpshlw (v8hi, v8hi);
55143
55144 The following built-in functions are available when '-mfma4' is used.
55145All of them generate the machine instruction that is part of the name.
55146
55147     v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df);
55148     v4sf __builtin_ia32_vfmaddps (v4sf, v4sf, v4sf);
55149     v2df __builtin_ia32_vfmaddsd (v2df, v2df, v2df);
55150     v4sf __builtin_ia32_vfmaddss (v4sf, v4sf, v4sf);
55151     v2df __builtin_ia32_vfmsubpd (v2df, v2df, v2df);
55152     v4sf __builtin_ia32_vfmsubps (v4sf, v4sf, v4sf);
55153     v2df __builtin_ia32_vfmsubsd (v2df, v2df, v2df);
55154     v4sf __builtin_ia32_vfmsubss (v4sf, v4sf, v4sf);
55155     v2df __builtin_ia32_vfnmaddpd (v2df, v2df, v2df);
55156     v4sf __builtin_ia32_vfnmaddps (v4sf, v4sf, v4sf);
55157     v2df __builtin_ia32_vfnmaddsd (v2df, v2df, v2df);
55158     v4sf __builtin_ia32_vfnmaddss (v4sf, v4sf, v4sf);
55159     v2df __builtin_ia32_vfnmsubpd (v2df, v2df, v2df);
55160     v4sf __builtin_ia32_vfnmsubps (v4sf, v4sf, v4sf);
55161     v2df __builtin_ia32_vfnmsubsd (v2df, v2df, v2df);
55162     v4sf __builtin_ia32_vfnmsubss (v4sf, v4sf, v4sf);
55163     v2df __builtin_ia32_vfmaddsubpd  (v2df, v2df, v2df);
55164     v4sf __builtin_ia32_vfmaddsubps  (v4sf, v4sf, v4sf);
55165     v2df __builtin_ia32_vfmsubaddpd  (v2df, v2df, v2df);
55166     v4sf __builtin_ia32_vfmsubaddps  (v4sf, v4sf, v4sf);
55167     v4df __builtin_ia32_vfmaddpd256 (v4df, v4df, v4df);
55168     v8sf __builtin_ia32_vfmaddps256 (v8sf, v8sf, v8sf);
55169     v4df __builtin_ia32_vfmsubpd256 (v4df, v4df, v4df);
55170     v8sf __builtin_ia32_vfmsubps256 (v8sf, v8sf, v8sf);
55171     v4df __builtin_ia32_vfnmaddpd256 (v4df, v4df, v4df);
55172     v8sf __builtin_ia32_vfnmaddps256 (v8sf, v8sf, v8sf);
55173     v4df __builtin_ia32_vfnmsubpd256 (v4df, v4df, v4df);
55174     v8sf __builtin_ia32_vfnmsubps256 (v8sf, v8sf, v8sf);
55175     v4df __builtin_ia32_vfmaddsubpd256 (v4df, v4df, v4df);
55176     v8sf __builtin_ia32_vfmaddsubps256 (v8sf, v8sf, v8sf);
55177     v4df __builtin_ia32_vfmsubaddpd256 (v4df, v4df, v4df);
55178     v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf);
55179
55180
55181 The following built-in functions are available when '-mlwp' is used.
55182
55183     void __builtin_ia32_llwpcb16 (void *);
55184     void __builtin_ia32_llwpcb32 (void *);
55185     void __builtin_ia32_llwpcb64 (void *);
55186     void * __builtin_ia32_llwpcb16 (void);
55187     void * __builtin_ia32_llwpcb32 (void);
55188     void * __builtin_ia32_llwpcb64 (void);
55189     void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short);
55190     void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int);
55191     void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int);
55192     unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short);
55193     unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int);
55194     unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int);
55195
55196 The following built-in functions are available when '-mbmi' is used.
55197All of them generate the machine instruction that is part of the name.
55198     unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
55199     unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
55200
55201 The following built-in functions are available when '-mbmi2' is used.
55202All of them generate the machine instruction that is part of the name.
55203     unsigned int _bzhi_u32 (unsigned int, unsigned int);
55204     unsigned int _pdep_u32 (unsigned int, unsigned int);
55205     unsigned int _pext_u32 (unsigned int, unsigned int);
55206     unsigned long long _bzhi_u64 (unsigned long long, unsigned long long);
55207     unsigned long long _pdep_u64 (unsigned long long, unsigned long long);
55208     unsigned long long _pext_u64 (unsigned long long, unsigned long long);
55209
55210 The following built-in functions are available when '-mlzcnt' is used.
55211All of them generate the machine instruction that is part of the name.
55212     unsigned short __builtin_ia32_lzcnt_u16(unsigned short);
55213     unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
55214     unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
55215
55216 The following built-in functions are available when '-mfxsr' is used.
55217All of them generate the machine instruction that is part of the name.
55218     void __builtin_ia32_fxsave (void *);
55219     void __builtin_ia32_fxrstor (void *);
55220     void __builtin_ia32_fxsave64 (void *);
55221     void __builtin_ia32_fxrstor64 (void *);
55222
55223 The following built-in functions are available when '-mxsave' is used.
55224All of them generate the machine instruction that is part of the name.
55225     void __builtin_ia32_xsave (void *, long long);
55226     void __builtin_ia32_xrstor (void *, long long);
55227     void __builtin_ia32_xsave64 (void *, long long);
55228     void __builtin_ia32_xrstor64 (void *, long long);
55229
55230 The following built-in functions are available when '-mxsaveopt' is
55231used.  All of them generate the machine instruction that is part of the
55232name.
55233     void __builtin_ia32_xsaveopt (void *, long long);
55234     void __builtin_ia32_xsaveopt64 (void *, long long);
55235
55236 The following built-in functions are available when '-mtbm' is used.
55237Both of them generate the immediate form of the bextr machine
55238instruction.
55239     unsigned int __builtin_ia32_bextri_u32 (unsigned int,
55240                                             const unsigned int);
55241     unsigned long long __builtin_ia32_bextri_u64 (unsigned long long,
55242                                                   const unsigned long long);
55243
55244 The following built-in functions are available when '-m3dnow' is used.
55245All of them generate the machine instruction that is part of the name.
55246
55247     void __builtin_ia32_femms (void);
55248     v8qi __builtin_ia32_pavgusb (v8qi, v8qi);
55249     v2si __builtin_ia32_pf2id (v2sf);
55250     v2sf __builtin_ia32_pfacc (v2sf, v2sf);
55251     v2sf __builtin_ia32_pfadd (v2sf, v2sf);
55252     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf);
55253     v2si __builtin_ia32_pfcmpge (v2sf, v2sf);
55254     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf);
55255     v2sf __builtin_ia32_pfmax (v2sf, v2sf);
55256     v2sf __builtin_ia32_pfmin (v2sf, v2sf);
55257     v2sf __builtin_ia32_pfmul (v2sf, v2sf);
55258     v2sf __builtin_ia32_pfrcp (v2sf);
55259     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf);
55260     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf);
55261     v2sf __builtin_ia32_pfrsqrt (v2sf);
55262     v2sf __builtin_ia32_pfsub (v2sf, v2sf);
55263     v2sf __builtin_ia32_pfsubr (v2sf, v2sf);
55264     v2sf __builtin_ia32_pi2fd (v2si);
55265     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi);
55266
55267 The following built-in functions are available when '-m3dnowa' is used.
55268All of them generate the machine instruction that is part of the name.
55269
55270     v2si __builtin_ia32_pf2iw (v2sf);
55271     v2sf __builtin_ia32_pfnacc (v2sf, v2sf);
55272     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf);
55273     v2sf __builtin_ia32_pi2fw (v2si);
55274     v2sf __builtin_ia32_pswapdsf (v2sf);
55275     v2si __builtin_ia32_pswapdsi (v2si);
55276
55277 The following built-in functions are available when '-mrtm' is used
55278They are used for restricted transactional memory.  These are the
55279internal low level functions.  Normally the functions in *note x86
55280transactional memory intrinsics:: should be used instead.
55281
55282     int __builtin_ia32_xbegin ();
55283     void __builtin_ia32_xend ();
55284     void __builtin_ia32_xabort (status);
55285     int __builtin_ia32_xtest ();
55286
55287 The following built-in functions are available when '-mmwaitx' is used.
55288All of them generate the machine instruction that is part of the name.
55289     void __builtin_ia32_monitorx (void *, unsigned int, unsigned int);
55290     void __builtin_ia32_mwaitx (unsigned int, unsigned int, unsigned int);
55291
55292 The following built-in functions are available when '-mclzero' is used.
55293All of them generate the machine instruction that is part of the name.
55294     void __builtin_i32_clzero (void *);
55295
55296 The following built-in functions are available when '-mpku' is used.
55297They generate reads and writes to PKRU.
55298     void __builtin_ia32_wrpkru (unsigned int);
55299     unsigned int __builtin_ia32_rdpkru ();
55300
55301 The following built-in functions are available when '-mshstk' option is
55302used.  They support shadow stack machine instructions from Intel
55303Control-flow Enforcement Technology (CET). Each built-in function
55304generates the machine instruction that is part of the function's name.
55305These are the internal low-level functions.  Normally the functions in
55306*note x86 control-flow protection intrinsics:: should be used instead.
55307
55308     unsigned int __builtin_ia32_rdsspd (void);
55309     unsigned long long __builtin_ia32_rdsspq (void);
55310     void __builtin_ia32_incsspd (unsigned int);
55311     void __builtin_ia32_incsspq (unsigned long long);
55312     void __builtin_ia32_saveprevssp(void);
55313     void __builtin_ia32_rstorssp(void *);
55314     void __builtin_ia32_wrssd(unsigned int, void *);
55315     void __builtin_ia32_wrssq(unsigned long long, void *);
55316     void __builtin_ia32_wrussd(unsigned int, void *);
55317     void __builtin_ia32_wrussq(unsigned long long, void *);
55318     void __builtin_ia32_setssbsy(void);
55319     void __builtin_ia32_clrssbsy(void *);
55320
55321
55322File: gcc.info,  Node: x86 transactional memory intrinsics,  Next: x86 control-flow protection intrinsics,  Prev: x86 Built-in Functions,  Up: Target Builtins
55323
553246.60.37 x86 Transactional Memory Intrinsics
55325-------------------------------------------
55326
55327These hardware transactional memory intrinsics for x86 allow you to use
55328memory transactions with RTM (Restricted Transactional Memory).  This
55329support is enabled with the '-mrtm' option.  For using HLE (Hardware
55330Lock Elision) see *note x86 specific memory model extensions for
55331transactional memory:: instead.
55332
55333 A memory transaction commits all changes to memory in an atomic way, as
55334visible to other threads.  If the transaction fails it is rolled back
55335and all side effects discarded.
55336
55337 Generally there is no guarantee that a memory transaction ever succeeds
55338and suitable fallback code always needs to be supplied.
55339
55340 -- RTM Function: unsigned _xbegin ()
55341     Start a RTM (Restricted Transactional Memory) transaction.  Returns
55342     '_XBEGIN_STARTED' when the transaction started successfully (note
55343     this is not 0, so the constant has to be explicitly tested).
55344
55345     If the transaction aborts, all side effects are undone and an abort
55346     code encoded as a bit mask is returned.  The following macros are
55347     defined:
55348
55349     '_XABORT_EXPLICIT'
55350          Transaction was explicitly aborted with '_xabort'.  The
55351          parameter passed to '_xabort' is available with
55352          '_XABORT_CODE(status)'.
55353     '_XABORT_RETRY'
55354          Transaction retry is possible.
55355     '_XABORT_CONFLICT'
55356          Transaction abort due to a memory conflict with another
55357          thread.
55358     '_XABORT_CAPACITY'
55359          Transaction abort due to the transaction using too much
55360          memory.
55361     '_XABORT_DEBUG'
55362          Transaction abort due to a debug trap.
55363     '_XABORT_NESTED'
55364          Transaction abort in an inner nested transaction.
55365
55366     There is no guarantee any transaction ever succeeds, so there
55367     always needs to be a valid fallback path.
55368
55369 -- RTM Function: void _xend ()
55370     Commit the current transaction.  When no transaction is active this
55371     faults.  All memory side effects of the transaction become visible
55372     to other threads in an atomic manner.
55373
55374 -- RTM Function: int _xtest ()
55375     Return a nonzero value if a transaction is currently active,
55376     otherwise 0.
55377
55378 -- RTM Function: void _xabort (status)
55379     Abort the current transaction.  When no transaction is active this
55380     is a no-op.  The STATUS is an 8-bit constant; its value is encoded
55381     in the return value from '_xbegin'.
55382
55383 Here is an example showing handling for '_XABORT_RETRY' and a fallback
55384path for other failures:
55385
55386     #include <immintrin.h>
55387
55388     int n_tries, max_tries;
55389     unsigned status = _XABORT_EXPLICIT;
55390     ...
55391
55392     for (n_tries = 0; n_tries < max_tries; n_tries++)
55393       {
55394         status = _xbegin ();
55395         if (status == _XBEGIN_STARTED || !(status & _XABORT_RETRY))
55396           break;
55397       }
55398     if (status == _XBEGIN_STARTED)
55399       {
55400         ... transaction code...
55401         _xend ();
55402       }
55403     else
55404       {
55405         ... non-transactional fallback path...
55406       }
55407
55408Note that, in most cases, the transactional and non-transactional code
55409must synchronize together to ensure consistency.
55410
55411
55412File: gcc.info,  Node: x86 control-flow protection intrinsics,  Prev: x86 transactional memory intrinsics,  Up: Target Builtins
55413
554146.60.38 x86 Control-Flow Protection Intrinsics
55415----------------------------------------------
55416
55417 -- CET Function: ret_type _get_ssp (void)
55418     Get the current value of shadow stack pointer if shadow stack
55419     support from Intel CET is enabled in the hardware or '0' otherwise.
55420     The 'ret_type' is 'unsigned long long' for 64-bit targets and
55421     'unsigned int' for 32-bit targets.
55422
55423 -- CET Function: void _inc_ssp (unsigned int)
55424     Increment the current shadow stack pointer by the size specified by
55425     the function argument.  The argument is masked to a byte value for
55426     security reasons, so to increment by more than 255 bytes you must
55427     call the function multiple times.
55428
55429 The shadow stack unwind code looks like:
55430
55431     #include <immintrin.h>
55432
55433     /* Unwind the shadow stack for EH.  */
55434     #define _Unwind_Frames_Extra(x)       \
55435       do                                  \
55436         {                                \
55437           _Unwind_Word ssp = _get_ssp (); \
55438           if (ssp != 0)                   \
55439             {                            \
55440               _Unwind_Word tmp = (x);     \
55441               while (tmp > 255)           \
55442                 {                        \
55443                   _inc_ssp (tmp);         \
55444                   tmp -= 255;             \
55445                 }                        \
55446               _inc_ssp (tmp);             \
55447             }                            \
55448         }                                \
55449         while (0)
55450
55451This code runs unconditionally on all 64-bit processors.  For 32-bit
55452processors the code runs on those that support multi-byte NOP
55453instructions.
55454
55455
55456File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
55457
554586.61 Format Checks Specific to Particular Target Machines
55459=========================================================
55460
55461For some target machines, GCC supports additional options to the format
55462attribute (*note Declaring Attributes of Functions: Function
55463Attributes.).
55464
55465* Menu:
55466
55467* Solaris Format Checks::
55468* Darwin Format Checks::
55469
55470
55471File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
55472
554736.61.1 Solaris Format Checks
55474----------------------------
55475
55476Solaris targets support the 'cmn_err' (or '__cmn_err__') format check.
55477'cmn_err' accepts a subset of the standard 'printf' conversions, and the
55478two-argument '%b' conversion for displaying bit-fields.  See the Solaris
55479man page for 'cmn_err' for more information.
55480
55481
55482File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
55483
554846.61.2 Darwin Format Checks
55485---------------------------
55486
55487In addition to the full set of format archetypes (attribute format style
55488arguments such as 'printf', 'scanf', 'strftime', and 'strfmon'), Darwin
55489targets also support the 'CFString' (or '__CFString__') archetype in the
55490'format' attribute.  Declarations with this archetype are parsed for
55491correct syntax and argument types.  However, parsing of the format
55492string itself and validating arguments against it in calls to such
55493functions is currently not performed.
55494
55495 Additionally, 'CFStringRefs' (defined by the 'CoreFoundation' headers)
55496may also be used as format arguments.  Note that the relevant headers
55497are only likely to be available on Darwin (OSX) installations.  On such
55498installations, the XCode and system documentation provide descriptions
55499of 'CFString', 'CFStringRefs' and associated functions.
55500
55501
55502File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
55503
555046.62 Pragmas Accepted by GCC
55505============================
55506
55507GCC supports several types of pragmas, primarily in order to compile
55508code originally written for other compilers.  Note that in general we do
55509not recommend the use of pragmas; *Note Function Attributes::, for
55510further explanation.
55511
55512 The GNU C preprocessor recognizes several pragmas in addition to the
55513compiler pragmas documented here.  Refer to the CPP manual for more
55514information.
55515
55516* Menu:
55517
55518* AArch64 Pragmas::
55519* ARM Pragmas::
55520* M32C Pragmas::
55521* MeP Pragmas::
55522* PRU Pragmas::
55523* RS/6000 and PowerPC Pragmas::
55524* S/390 Pragmas::
55525* Darwin Pragmas::
55526* Solaris Pragmas::
55527* Symbol-Renaming Pragmas::
55528* Structure-Layout Pragmas::
55529* Weak Pragmas::
55530* Diagnostic Pragmas::
55531* Visibility Pragmas::
55532* Push/Pop Macro Pragmas::
55533* Function Specific Option Pragmas::
55534* Loop-Specific Pragmas::
55535
55536
55537File: gcc.info,  Node: AArch64 Pragmas,  Next: ARM Pragmas,  Up: Pragmas
55538
555396.62.1 AArch64 Pragmas
55540----------------------
55541
55542The pragmas defined by the AArch64 target correspond to the AArch64
55543target function attributes.  They can be specified as below:
55544     #pragma GCC target("string")
55545
55546 where 'STRING' can be any string accepted as an AArch64 target
55547attribute.  *Note AArch64 Function Attributes::, for more details on the
55548permissible values of 'string'.
55549
55550
55551File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Prev: AArch64 Pragmas,  Up: Pragmas
55552
555536.62.2 ARM Pragmas
55554------------------
55555
55556The ARM target defines pragmas for controlling the default addition of
55557'long_call' and 'short_call' attributes to functions.  *Note Function
55558Attributes::, for information about the effects of these attributes.
55559
55560'long_calls'
55561     Set all subsequent functions to have the 'long_call' attribute.
55562
55563'no_long_calls'
55564     Set all subsequent functions to have the 'short_call' attribute.
55565
55566'long_calls_off'
55567     Do not affect the 'long_call' or 'short_call' attributes of
55568     subsequent functions.
55569
55570
55571File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
55572
555736.62.3 M32C Pragmas
55574-------------------
55575
55576'GCC memregs NUMBER'
55577     Overrides the command-line option '-memregs=' for the current file.
55578     Use with care!  This pragma must be before any function in the
55579     file, and mixing different memregs values in different objects may
55580     make them incompatible.  This pragma is useful when a
55581     performance-critical function uses a memreg for temporary values,
55582     as it may allow you to reduce the number of memregs used.
55583
55584'ADDRESS NAME ADDRESS'
55585     For any declared symbols matching NAME, this does three things to
55586     that symbol: it forces the symbol to be located at the given
55587     address (a number), it forces the symbol to be volatile, and it
55588     changes the symbol's scope to be static.  This pragma exists for
55589     compatibility with other compilers, but note that the common
55590     '1234H' numeric syntax is not supported (use '0x1234' instead).
55591     Example:
55592
55593          #pragma ADDRESS port3 0x103
55594          char port3;
55595
55596
55597File: gcc.info,  Node: MeP Pragmas,  Next: PRU Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
55598
555996.62.4 MeP Pragmas
55600------------------
55601
55602'custom io_volatile (on|off)'
55603     Overrides the command-line option '-mio-volatile' for the current
55604     file.  Note that for compatibility with future GCC releases, this
55605     option should only be used once before any 'io' variables in each
55606     file.
55607
55608'GCC coprocessor available REGISTERS'
55609     Specifies which coprocessor registers are available to the register
55610     allocator.  REGISTERS may be a single register, register range
55611     separated by ellipses, or comma-separated list of those.  Example:
55612
55613          #pragma GCC coprocessor available $c0...$c10, $c28
55614
55615'GCC coprocessor call_saved REGISTERS'
55616     Specifies which coprocessor registers are to be saved and restored
55617     by any function using them.  REGISTERS may be a single register,
55618     register range separated by ellipses, or comma-separated list of
55619     those.  Example:
55620
55621          #pragma GCC coprocessor call_saved $c4...$c6, $c31
55622
55623'GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
55624     Creates and defines a register class.  These register classes can
55625     be used by inline 'asm' constructs.  REGISTERS may be a single
55626     register, register range separated by ellipses, or comma-separated
55627     list of those.  Example:
55628
55629          #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
55630
55631          asm ("cpfoo %0" : "=B" (x));
55632
55633'GCC disinterrupt NAME , NAME ...'
55634     For the named functions, the compiler adds code to disable
55635     interrupts for the duration of those functions.  If any functions
55636     so named are not encountered in the source, a warning is emitted
55637     that the pragma is not used.  Examples:
55638
55639          #pragma disinterrupt foo
55640          #pragma disinterrupt bar, grill
55641          int foo () { ... }
55642
55643'GCC call NAME , NAME ...'
55644     For the named functions, the compiler always uses a
55645     register-indirect call model when calling the named functions.
55646     Examples:
55647
55648          extern int foo ();
55649          #pragma call foo
55650
55651
55652File: gcc.info,  Node: PRU Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
55653
556546.62.5 PRU Pragmas
55655------------------
55656
55657'ctable_entry INDEX CONSTANT_ADDRESS'
55658     Specifies that the PRU CTABLE entry given by INDEX has the value
55659     CONSTANT_ADDRESS.  This enables GCC to emit LBCO/SBCO instructions
55660     when the load/store address is known and can be addressed with some
55661     CTABLE entry.  For example:
55662
55663          /* will compile to "sbco Rx, 2, 0x10, 4" */
55664          #pragma ctable_entry 2 0x4802a000
55665          *(unsigned int *)0x4802a010 = val;
55666
55667
55668File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: S/390 Pragmas,  Prev: PRU Pragmas,  Up: Pragmas
55669
556706.62.6 RS/6000 and PowerPC Pragmas
55671----------------------------------
55672
55673The RS/6000 and PowerPC targets define one pragma for controlling
55674whether or not the 'longcall' attribute is added to function
55675declarations by default.  This pragma overrides the '-mlongcall' option,
55676but not the 'longcall' and 'shortcall' attributes.  *Note RS/6000 and
55677PowerPC Options::, for more information about when long calls are and
55678are not necessary.
55679
55680'longcall (1)'
55681     Apply the 'longcall' attribute to all subsequent function
55682     declarations.
55683
55684'longcall (0)'
55685     Do not apply the 'longcall' attribute to subsequent function
55686     declarations.
55687
55688
55689File: gcc.info,  Node: S/390 Pragmas,  Next: Darwin Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
55690
556916.62.7 S/390 Pragmas
55692--------------------
55693
55694The pragmas defined by the S/390 target correspond to the S/390 target
55695function attributes and some the additional options:
55696
55697'zvector'
55698'no-zvector'
55699
55700 Note that options of the pragma, unlike options of the target
55701attribute, do change the value of preprocessor macros like '__VEC__'.
55702They can be specified as below:
55703
55704     #pragma GCC target("string[,string]...")
55705     #pragma GCC target("string"[,"string"]...)
55706
55707
55708File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: S/390 Pragmas,  Up: Pragmas
55709
557106.62.8 Darwin Pragmas
55711---------------------
55712
55713The following pragmas are available for all architectures running the
55714Darwin operating system.  These are useful for compatibility with other
55715Mac OS compilers.
55716
55717'mark TOKENS...'
55718     This pragma is accepted, but has no effect.
55719
55720'options align=ALIGNMENT'
55721     This pragma sets the alignment of fields in structures.  The values
55722     of ALIGNMENT may be 'mac68k', to emulate m68k alignment, or
55723     'power', to emulate PowerPC alignment.  Uses of this pragma nest
55724     properly; to restore the previous setting, use 'reset' for the
55725     ALIGNMENT.
55726
55727'segment TOKENS...'
55728     This pragma is accepted, but has no effect.
55729
55730'unused (VAR [, VAR]...)'
55731     This pragma declares variables to be possibly unused.  GCC does not
55732     produce warnings for the listed variables.  The effect is similar
55733     to that of the 'unused' attribute, except that this pragma may
55734     appear anywhere within the variables' scopes.
55735
55736
55737File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
55738
557396.62.9 Solaris Pragmas
55740----------------------
55741
55742The Solaris target supports '#pragma redefine_extname' (*note
55743Symbol-Renaming Pragmas::).  It also supports additional '#pragma'
55744directives for compatibility with the system compiler.
55745
55746'align ALIGNMENT (VARIABLE [, VARIABLE]...)'
55747
55748     Increase the minimum alignment of each VARIABLE to ALIGNMENT.  This
55749     is the same as GCC's 'aligned' attribute *note Variable
55750     Attributes::).  Macro expansion occurs on the arguments to this
55751     pragma when compiling C and Objective-C.  It does not currently
55752     occur when compiling C++, but this is a bug which may be fixed in a
55753     future release.
55754
55755'fini (FUNCTION [, FUNCTION]...)'
55756
55757     This pragma causes each listed FUNCTION to be called after main, or
55758     during shared module unloading, by adding a call to the '.fini'
55759     section.
55760
55761'init (FUNCTION [, FUNCTION]...)'
55762
55763     This pragma causes each listed FUNCTION to be called during
55764     initialization (before 'main') or during shared module loading, by
55765     adding a call to the '.init' section.
55766
55767
55768File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Layout Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
55769
557706.62.10 Symbol-Renaming Pragmas
55771-------------------------------
55772
55773GCC supports a '#pragma' directive that changes the name used in
55774assembly for a given declaration.  While this pragma is supported on all
55775platforms, it is intended primarily to provide compatibility with the
55776Solaris system headers.  This effect can also be achieved using the asm
55777labels extension (*note Asm Labels::).
55778
55779'redefine_extname OLDNAME NEWNAME'
55780
55781     This pragma gives the C function OLDNAME the assembly symbol
55782     NEWNAME.  The preprocessor macro '__PRAGMA_REDEFINE_EXTNAME' is
55783     defined if this pragma is available (currently on all platforms).
55784
55785 This pragma and the 'asm' labels extension interact in a complicated
55786manner.  Here are some corner cases you may want to be aware of:
55787
55788  1. This pragma silently applies only to declarations with external
55789     linkage.  The 'asm' label feature does not have this restriction.
55790
55791  2. In C++, this pragma silently applies only to declarations with "C"
55792     linkage.  Again, 'asm' labels do not have this restriction.
55793
55794  3. If either of the ways of changing the assembly name of a
55795     declaration are applied to a declaration whose assembly name has
55796     already been determined (either by a previous use of one of these
55797     features, or because the compiler needed the assembly name in order
55798     to generate code), and the new name is different, a warning issues
55799     and the name does not change.
55800
55801  4. The OLDNAME used by '#pragma redefine_extname' is always the
55802     C-language name.
55803
55804
55805File: gcc.info,  Node: Structure-Layout Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
55806
558076.62.11 Structure-Layout Pragmas
55808--------------------------------
55809
55810For compatibility with Microsoft Windows compilers, GCC supports a set
55811of '#pragma' directives that change the maximum alignment of members of
55812structures (other than zero-width bit-fields), unions, and classes
55813subsequently defined.  The N value below always is required to be a
55814small power of two and specifies the new alignment in bytes.
55815
55816  1. '#pragma pack(N)' simply sets the new alignment.
55817  2. '#pragma pack()' sets the alignment to the one that was in effect
55818     when compilation started (see also command-line option
55819     '-fpack-struct[=N]' *note Code Gen Options::).
55820  3. '#pragma pack(push[,N])' pushes the current alignment setting on an
55821     internal stack and then optionally sets the new alignment.
55822  4. '#pragma pack(pop)' restores the alignment setting to the one saved
55823     at the top of the internal stack (and removes that stack entry).
55824     Note that '#pragma pack([N])' does not influence this internal
55825     stack; thus it is possible to have '#pragma pack(push)' followed by
55826     multiple '#pragma pack(N)' instances and finalized by a single
55827     '#pragma pack(pop)'.
55828
55829 Some targets, e.g. x86 and PowerPC, support the '#pragma ms_struct'
55830directive which lays out structures and unions subsequently defined as
55831the documented '__attribute__ ((ms_struct))'.
55832
55833  1. '#pragma ms_struct on' turns on the Microsoft layout.
55834  2. '#pragma ms_struct off' turns off the Microsoft layout.
55835  3. '#pragma ms_struct reset' goes back to the default layout.
55836
55837 Most targets also support the '#pragma scalar_storage_order' directive
55838which lays out structures and unions subsequently defined as the
55839documented '__attribute__ ((scalar_storage_order))'.
55840
55841  1. '#pragma scalar_storage_order big-endian' sets the storage order of
55842     the scalar fields to big-endian.
55843  2. '#pragma scalar_storage_order little-endian' sets the storage order
55844     of the scalar fields to little-endian.
55845  3. '#pragma scalar_storage_order default' goes back to the endianness
55846     that was in effect when compilation started (see also command-line
55847     option '-fsso-struct=ENDIANNESS' *note C Dialect Options::).
55848
55849
55850File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Layout Pragmas,  Up: Pragmas
55851
558526.62.12 Weak Pragmas
55853--------------------
55854
55855For compatibility with SVR4, GCC supports a set of '#pragma' directives
55856for declaring symbols to be weak, and defining weak aliases.
55857
55858'#pragma weak SYMBOL'
55859     This pragma declares SYMBOL to be weak, as if the declaration had
55860     the attribute of the same name.  The pragma may appear before or
55861     after the declaration of SYMBOL.  It is not an error for SYMBOL to
55862     never be defined at all.
55863
55864'#pragma weak SYMBOL1 = SYMBOL2'
55865     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
55866     an error if SYMBOL2 is not defined in the current translation unit.
55867
55868
55869File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
55870
558716.62.13 Diagnostic Pragmas
55872--------------------------
55873
55874GCC allows the user to selectively enable or disable certain types of
55875diagnostics, and change the kind of the diagnostic.  For example, a
55876project's policy might require that all sources compile with '-Werror'
55877but certain files might have exceptions allowing specific types of
55878warnings.  Or, a project might selectively enable diagnostics and treat
55879them as errors depending on which preprocessor macros are defined.
55880
55881'#pragma GCC diagnostic KIND OPTION'
55882
55883     Modifies the disposition of a diagnostic.  Note that not all
55884     diagnostics are modifiable; at the moment only warnings (normally
55885     controlled by '-W...') can be controlled, and not all of them.  Use
55886     '-fdiagnostics-show-option' to determine which diagnostics are
55887     controllable and which option controls them.
55888
55889     KIND is 'error' to treat this diagnostic as an error, 'warning' to
55890     treat it like a warning (even if '-Werror' is in effect), or
55891     'ignored' if the diagnostic is to be ignored.  OPTION is a double
55892     quoted string that matches the command-line option.
55893
55894          #pragma GCC diagnostic warning "-Wformat"
55895          #pragma GCC diagnostic error "-Wformat"
55896          #pragma GCC diagnostic ignored "-Wformat"
55897
55898     Note that these pragmas override any command-line options.  GCC
55899     keeps track of the location of each pragma, and issues diagnostics
55900     according to the state as of that point in the source file.  Thus,
55901     pragmas occurring after a line do not affect diagnostics caused by
55902     that line.
55903
55904'#pragma GCC diagnostic push'
55905'#pragma GCC diagnostic pop'
55906
55907     Causes GCC to remember the state of the diagnostics as of each
55908     'push', and restore to that point at each 'pop'.  If a 'pop' has no
55909     matching 'push', the command-line options are restored.
55910
55911          #pragma GCC diagnostic error "-Wuninitialized"
55912            foo(a);                       /* error is given for this one */
55913          #pragma GCC diagnostic push
55914          #pragma GCC diagnostic ignored "-Wuninitialized"
55915            foo(b);                       /* no diagnostic for this one */
55916          #pragma GCC diagnostic pop
55917            foo(c);                       /* error is given for this one */
55918          #pragma GCC diagnostic pop
55919            foo(d);                       /* depends on command-line options */
55920
55921'#pragma GCC diagnostic ignored_attributes'
55922
55923     Similarly to '-Wno-attributes=', this pragma allows users to
55924     suppress warnings about unknown scoped attributes (in C++11 and
55925     C2X). For example, '#pragma GCC diagnostic ignored_attributes
55926     "vendor::attr"' disables warning about the following declaration:
55927
55928          [[vendor::attr]] void f();
55929
55930     whereas '#pragma GCC diagnostic ignored_attributes "vendor::"'
55931     prevents warning about both of these declarations:
55932
55933          [[vendor::safe]] void f();
55934          [[vendor::unsafe]] void f2();
55935
55936 GCC also offers a simple mechanism for printing messages during
55937compilation.
55938
55939'#pragma message STRING'
55940
55941     Prints STRING as a compiler message on compilation.  The message is
55942     informational only, and is neither a compilation warning nor an
55943     error.  Newlines can be included in the string by using the '\n'
55944     escape sequence.
55945
55946          #pragma message "Compiling " __FILE__ "..."
55947
55948     STRING may be parenthesized, and is printed with location
55949     information.  For example,
55950
55951          #define DO_PRAGMA(x) _Pragma (#x)
55952          #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
55953
55954          TODO(Remember to fix this)
55955
55956     prints '/tmp/file.c:4: note: #pragma message: TODO - Remember to
55957     fix this'.
55958
55959'#pragma GCC error MESSAGE'
55960     Generates an error message.  This pragma _is_ considered to
55961     indicate an error in the compilation, and it will be treated as
55962     such.
55963
55964     Newlines can be included in the string by using the '\n' escape
55965     sequence.  They will be displayed as newlines even if the
55966     '-fmessage-length' option is set to zero.
55967
55968     The error is only generated if the pragma is present in the code
55969     after pre-processing has been completed.  It does not matter
55970     however if the code containing the pragma is unreachable:
55971
55972          #if 0
55973          #pragma GCC error "this error is not seen"
55974          #endif
55975          void foo (void)
55976          {
55977            return;
55978          #pragma GCC error "this error is seen"
55979          }
55980
55981'#pragma GCC warning MESSAGE'
55982     This is just like 'pragma GCC error' except that a warning message
55983     is issued instead of an error message.  Unless '-Werror' is in
55984     effect, in which case this pragma will generate an error as well.
55985
55986
55987File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
55988
559896.62.14 Visibility Pragmas
55990--------------------------
55991
55992'#pragma GCC visibility push(VISIBILITY)'
55993'#pragma GCC visibility pop'
55994
55995     This pragma allows the user to set the visibility for multiple
55996     declarations without having to give each a visibility attribute
55997     (*note Function Attributes::).
55998
55999     In C++, '#pragma GCC visibility' affects only namespace-scope
56000     declarations.  Class members and template specializations are not
56001     affected; if you want to override the visibility for a particular
56002     member or instantiation, you must use an attribute.
56003
56004
56005File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
56006
560076.62.15 Push/Pop Macro Pragmas
56008------------------------------
56009
56010For compatibility with Microsoft Windows compilers, GCC supports
56011'#pragma push_macro("MACRO_NAME")' and '#pragma
56012pop_macro("MACRO_NAME")'.
56013
56014'#pragma push_macro("MACRO_NAME")'
56015     This pragma saves the value of the macro named as MACRO_NAME to the
56016     top of the stack for this macro.
56017
56018'#pragma pop_macro("MACRO_NAME")'
56019     This pragma sets the value of the macro named as MACRO_NAME to the
56020     value on top of the stack for this macro.  If the stack for
56021     MACRO_NAME is empty, the value of the macro remains unchanged.
56022
56023 For example:
56024
56025     #define X  1
56026     #pragma push_macro("X")
56027     #undef X
56028     #define X -1
56029     #pragma pop_macro("X")
56030     int x [X];
56031
56032In this example, the definition of X as 1 is saved by '#pragma
56033push_macro' and restored by '#pragma pop_macro'.
56034
56035
56036File: gcc.info,  Node: Function Specific Option Pragmas,  Next: Loop-Specific Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
56037
560386.62.16 Function Specific Option Pragmas
56039----------------------------------------
56040
56041'#pragma GCC target (STRING, ...)'
56042
56043     This pragma allows you to set target-specific options for functions
56044     defined later in the source file.  One or more strings can be
56045     specified.  Each function that is defined after this point is
56046     treated as if it had been declared with one 'target('STRING')'
56047     attribute for each STRING argument.  The parentheses around the
56048     strings in the pragma are optional.  *Note Function Attributes::,
56049     for more information about the 'target' attribute and the attribute
56050     syntax.
56051
56052     The '#pragma GCC target' pragma is presently implemented for x86,
56053     ARM, AArch64, PowerPC, S/390, and Nios II targets only.
56054
56055'#pragma GCC optimize (STRING, ...)'
56056
56057     This pragma allows you to set global optimization options for
56058     functions defined later in the source file.  One or more strings
56059     can be specified.  Each function that is defined after this point
56060     is treated as if it had been declared with one 'optimize('STRING')'
56061     attribute for each STRING argument.  The parentheses around the
56062     strings in the pragma are optional.  *Note Function Attributes::,
56063     for more information about the 'optimize' attribute and the
56064     attribute syntax.
56065
56066'#pragma GCC push_options'
56067'#pragma GCC pop_options'
56068
56069     These pragmas maintain a stack of the current target and
56070     optimization options.  It is intended for include files where you
56071     temporarily want to switch to using a different '#pragma GCC
56072     target' or '#pragma GCC optimize' and then to pop back to the
56073     previous options.
56074
56075'#pragma GCC reset_options'
56076
56077     This pragma clears the current '#pragma GCC target' and '#pragma
56078     GCC optimize' to use the default switches as specified on the
56079     command line.
56080
56081
56082File: gcc.info,  Node: Loop-Specific Pragmas,  Prev: Function Specific Option Pragmas,  Up: Pragmas
56083
560846.62.17 Loop-Specific Pragmas
56085-----------------------------
56086
56087'#pragma GCC ivdep'
56088
56089     With this pragma, the programmer asserts that there are no
56090     loop-carried dependencies which would prevent consecutive
56091     iterations of the following loop from executing concurrently with
56092     SIMD (single instruction multiple data) instructions.
56093
56094     For example, the compiler can only unconditionally vectorize the
56095     following loop with the pragma:
56096
56097          void foo (int n, int *a, int *b, int *c)
56098          {
56099            int i, j;
56100          #pragma GCC ivdep
56101            for (i = 0; i < n; ++i)
56102              a[i] = b[i] + c[i];
56103          }
56104
56105     In this example, using the 'restrict' qualifier had the same
56106     effect.  In the following example, that would not be possible.
56107     Assume k < -m or k >= m.  Only with the pragma, the compiler knows
56108     that it can unconditionally vectorize the following loop:
56109
56110          void ignore_vec_dep (int *a, int k, int c, int m)
56111          {
56112          #pragma GCC ivdep
56113            for (int i = 0; i < m; i++)
56114              a[i] = a[i + k] * c;
56115          }
56116
56117'#pragma GCC unroll N'
56118
56119     You can use this pragma to control how many times a loop should be
56120     unrolled.  It must be placed immediately before a 'for', 'while' or
56121     'do' loop or a '#pragma GCC ivdep', and applies only to the loop
56122     that follows.  N is an integer constant expression specifying the
56123     unrolling factor.  The values of 0 and 1 block any unrolling of the
56124     loop.
56125
56126
56127File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
56128
561296.63 Unnamed Structure and Union Fields
56130=======================================
56131
56132As permitted by ISO C11 and for compatibility with other compilers, GCC
56133allows you to define a structure or union that contains, as fields,
56134structures and unions without names.  For example:
56135
56136     struct {
56137       int a;
56138       union {
56139         int b;
56140         float c;
56141       };
56142       int d;
56143     } foo;
56144
56145In this example, you are able to access members of the unnamed union
56146with code like 'foo.b'.  Note that only unnamed structs and unions are
56147allowed, you may not have, for example, an unnamed 'int'.
56148
56149 You must never create such structures that cause ambiguous field
56150definitions.  For example, in this structure:
56151
56152     struct {
56153       int a;
56154       struct {
56155         int a;
56156       };
56157     } foo;
56158
56159it is ambiguous which 'a' is being referred to with 'foo.a'.  The
56160compiler gives errors for such constructs.
56161
56162 Unless '-fms-extensions' is used, the unnamed field must be a structure
56163or union definition without a tag (for example, 'struct { int a; };').
56164If '-fms-extensions' is used, the field may also be a definition with a
56165tag such as 'struct foo { int a; };', a reference to a previously
56166defined structure or union such as 'struct foo;', or a reference to a
56167'typedef' name for a previously defined structure or union type.
56168
56169 The option '-fplan9-extensions' enables '-fms-extensions' as well as
56170two other extensions.  First, a pointer to a structure is automatically
56171converted to a pointer to an anonymous field for assignments and
56172function calls.  For example:
56173
56174     struct s1 { int a; };
56175     struct s2 { struct s1; };
56176     extern void f1 (struct s1 *);
56177     void f2 (struct s2 *p) { f1 (p); }
56178
56179In the call to 'f1' inside 'f2', the pointer 'p' is converted into a
56180pointer to the anonymous field.
56181
56182 Second, when the type of an anonymous field is a 'typedef' for a
56183'struct' or 'union', code may refer to the field using the name of the
56184'typedef'.
56185
56186     typedef struct { int a; } s1;
56187     struct s2 { s1; };
56188     s1 f1 (struct s2 *p) { return p->s1; }
56189
56190 These usages are only permitted when they are not ambiguous.
56191
56192
56193File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
56194
561956.64 Thread-Local Storage
56196=========================
56197
56198Thread-local storage (TLS) is a mechanism by which variables are
56199allocated such that there is one instance of the variable per extant
56200thread.  The runtime model GCC uses to implement this originates in the
56201IA-64 processor-specific ABI, but has since been migrated to other
56202processors as well.  It requires significant support from the linker
56203('ld'), dynamic linker ('ld.so'), and system libraries ('libc.so' and
56204'libpthread.so'), so it is not available everywhere.
56205
56206 At the user level, the extension is visible with a new storage class
56207keyword: '__thread'.  For example:
56208
56209     __thread int i;
56210     extern __thread struct state s;
56211     static __thread char *p;
56212
56213 The '__thread' specifier may be used alone, with the 'extern' or
56214'static' specifiers, but with no other storage class specifier.  When
56215used with 'extern' or 'static', '__thread' must appear immediately after
56216the other storage class specifier.
56217
56218 The '__thread' specifier may be applied to any global, file-scoped
56219static, function-scoped static, or static data member of a class.  It
56220may not be applied to block-scoped automatic or non-static data member.
56221
56222 When the address-of operator is applied to a thread-local variable, it
56223is evaluated at run time and returns the address of the current thread's
56224instance of that variable.  An address so obtained may be used by any
56225thread.  When a thread terminates, any pointers to thread-local
56226variables in that thread become invalid.
56227
56228 No static initialization may refer to the address of a thread-local
56229variable.
56230
56231 In C++, if an initializer is present for a thread-local variable, it
56232must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
56233standard.
56234
56235 See ELF Handling For Thread-Local Storage
56236(https://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
56237the four thread-local storage addressing models, and how the runtime is
56238expected to function.
56239
56240* Menu:
56241
56242* C99 Thread-Local Edits::
56243* C++98 Thread-Local Edits::
56244
56245
56246File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
56247
562486.64.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
56249-------------------------------------------------------
56250
56251The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
56252document the exact semantics of the language extension.
56253
56254   * '5.1.2 Execution environments'
56255
56256     Add new text after paragraph 1
56257
56258          Within either execution environment, a "thread" is a flow of
56259          control within a program.  It is implementation defined
56260          whether or not there may be more than one thread associated
56261          with a program.  It is implementation defined how threads
56262          beyond the first are created, the name and type of the
56263          function called at thread startup, and how threads may be
56264          terminated.  However, objects with thread storage duration
56265          shall be initialized before thread startup.
56266
56267   * '6.2.4 Storage durations of objects'
56268
56269     Add new text before paragraph 3
56270
56271          An object whose identifier is declared with the storage-class
56272          specifier '__thread' has "thread storage duration".  Its
56273          lifetime is the entire execution of the thread, and its stored
56274          value is initialized only once, prior to thread startup.
56275
56276   * '6.4.1 Keywords'
56277
56278     Add '__thread'.
56279
56280   * '6.7.1 Storage-class specifiers'
56281
56282     Add '__thread' to the list of storage class specifiers in paragraph
56283     1.
56284
56285     Change paragraph 2 to
56286
56287          With the exception of '__thread', at most one storage-class
56288          specifier may be given [...].  The '__thread' specifier may be
56289          used alone, or immediately following 'extern' or 'static'.
56290
56291     Add new text after paragraph 6
56292
56293          The declaration of an identifier for a variable that has block
56294          scope that specifies '__thread' shall also specify either
56295          'extern' or 'static'.
56296
56297          The '__thread' specifier shall be used only with variables.
56298
56299
56300File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
56301
563026.64.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
56303--------------------------------------------------------
56304
56305The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
56306that document the exact semantics of the language extension.
56307
56308   * [intro.execution]
56309
56310     New text after paragraph 4
56311
56312          A "thread" is a flow of control within the abstract machine.
56313          It is implementation defined whether or not there may be more
56314          than one thread.
56315
56316     New text after paragraph 7
56317
56318          It is unspecified whether additional action must be taken to
56319          ensure when and whether side effects are visible to other
56320          threads.
56321
56322   * [lex.key]
56323
56324     Add '__thread'.
56325
56326   * [basic.start.main]
56327
56328     Add after paragraph 5
56329
56330          The thread that begins execution at the 'main' function is
56331          called the "main thread".  It is implementation defined how
56332          functions beginning threads other than the main thread are
56333          designated or typed.  A function so designated, as well as the
56334          'main' function, is called a "thread startup function".  It is
56335          implementation defined what happens if a thread startup
56336          function returns.  It is implementation defined what happens
56337          to other threads when any thread calls 'exit'.
56338
56339   * [basic.start.init]
56340
56341     Add after paragraph 4
56342
56343          The storage for an object of thread storage duration shall be
56344          statically initialized before the first statement of the
56345          thread startup function.  An object of thread storage duration
56346          shall not require dynamic initialization.
56347
56348   * [basic.start.term]
56349
56350     Add after paragraph 3
56351
56352          The type of an object with thread storage duration shall not
56353          have a non-trivial destructor, nor shall it be an array type
56354          whose elements (directly or indirectly) have non-trivial
56355          destructors.
56356
56357   * [basic.stc]
56358
56359     Add "thread storage duration" to the list in paragraph 1.
56360
56361     Change paragraph 2
56362
56363          Thread, static, and automatic storage durations are associated
56364          with objects introduced by declarations [...].
56365
56366     Add '__thread' to the list of specifiers in paragraph 3.
56367
56368   * [basic.stc.thread]
56369
56370     New section before [basic.stc.static]
56371
56372          The keyword '__thread' applied to a non-local object gives the
56373          object thread storage duration.
56374
56375          A local variable or class data member declared both 'static'
56376          and '__thread' gives the variable or member thread storage
56377          duration.
56378
56379   * [basic.stc.static]
56380
56381     Change paragraph 1
56382
56383          All objects that have neither thread storage duration, dynamic
56384          storage duration nor are local [...].
56385
56386   * [dcl.stc]
56387
56388     Add '__thread' to the list in paragraph 1.
56389
56390     Change paragraph 1
56391
56392          With the exception of '__thread', at most one
56393          STORAGE-CLASS-SPECIFIER shall appear in a given
56394          DECL-SPECIFIER-SEQ.  The '__thread' specifier may be used
56395          alone, or immediately following the 'extern' or 'static'
56396          specifiers.  [...]
56397
56398     Add after paragraph 5
56399
56400          The '__thread' specifier can be applied only to the names of
56401          objects and to anonymous unions.
56402
56403   * [class.mem]
56404
56405     Add after paragraph 6
56406
56407          Non-'static' members shall not be '__thread'.
56408
56409
56410File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
56411
564126.65 Binary Constants using the '0b' Prefix
56413===========================================
56414
56415Integer constants can be written as binary constants, consisting of a
56416sequence of '0' and '1' digits, prefixed by '0b' or '0B'.  This is
56417particularly useful in environments that operate a lot on the bit level
56418(like microcontrollers).
56419
56420 The following statements are identical:
56421
56422     i =       42;
56423     i =     0x2a;
56424     i =      052;
56425     i = 0b101010;
56426
56427 The type of these constants follows the same rules as for octal or
56428hexadecimal integer constants, so suffixes like 'L' or 'UL' can be
56429applied.
56430
56431
56432File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
56433
564347 Extensions to the C++ Language
56435********************************
56436
56437The GNU compiler provides these extensions to the C++ language (and you
56438can also use most of the C language extensions in your C++ programs).
56439If you want to write code that checks whether these features are
56440available, you can test for the GNU compiler the same way as for C
56441programs: check for a predefined macro '__GNUC__'.  You can also use
56442'__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
56443(cpp)Common Predefined Macros.).
56444
56445* Menu:
56446
56447* C++ Volatiles::       What constitutes an access to a volatile object.
56448* Restricted Pointers:: C99 restricted pointers and references.
56449* Vague Linkage::       Where G++ puts inlines, vtables and such.
56450* C++ Interface::       You can use a single C++ header file for both
56451                        declarations and definitions.
56452* Template Instantiation:: Methods for ensuring that exactly one copy of
56453                        each needed template instantiation is emitted.
56454* Bound member functions:: You can extract a function pointer to the
56455                        method denoted by a '->*' or '.*' expression.
56456* C++ Attributes::      Variable, function, and type attributes for C++ only.
56457* Function Multiversioning::   Declaring multiple function versions.
56458* Type Traits::         Compiler support for type traits.
56459* C++ Concepts::        Improved support for generic programming.
56460* Deprecated Features:: Things will disappear from G++.
56461* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
56462
56463
56464File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
56465
564667.1 When is a Volatile C++ Object Accessed?
56467===========================================
56468
56469The C++ standard differs from the C standard in its treatment of
56470volatile objects.  It fails to specify what constitutes a volatile
56471access, except to say that C++ should behave in a similar manner to C
56472with respect to volatiles, where possible.  However, the different
56473lvalueness of expressions between C and C++ complicate the behavior.
56474G++ behaves the same as GCC for volatile access, *Note Volatiles: C
56475Extensions, for a description of GCC's behavior.
56476
56477 The C and C++ language specifications differ when an object is accessed
56478in a void context:
56479
56480     volatile int *src = SOMEVALUE;
56481     *src;
56482
56483 The C++ standard specifies that such expressions do not undergo lvalue
56484to rvalue conversion, and that the type of the dereferenced object may
56485be incomplete.  The C++ standard does not specify explicitly that it is
56486lvalue to rvalue conversion that is responsible for causing an access.
56487There is reason to believe that it is, because otherwise certain simple
56488expressions become undefined.  However, because it would surprise most
56489programmers, G++ treats dereferencing a pointer to volatile object of
56490complete type as GCC would do for an equivalent type in C.  When the
56491object has incomplete type, G++ issues a warning; if you wish to force
56492an error, you must force a conversion to rvalue with, for instance, a
56493static cast.
56494
56495 When using a reference to volatile, G++ does not treat equivalent
56496expressions as accesses to volatiles, but instead issues a warning that
56497no volatile is accessed.  The rationale for this is that otherwise it
56498becomes difficult to determine where volatile access occur, and not
56499possible to ignore the return value from functions returning volatile
56500references.  Again, if you wish to force a read, cast the reference to
56501an rvalue.
56502
56503 G++ implements the same behavior as GCC does when assigning to a
56504volatile object--there is no reread of the assigned-to object, the
56505assigned rvalue is reused.  Note that in C++ assignment expressions are
56506lvalues, and if used as an lvalue, the volatile object is referred to.
56507For instance, VREF refers to VOBJ, as expected, in the following
56508example:
56509
56510     volatile int vobj;
56511     volatile int &vref = vobj = SOMETHING;
56512
56513
56514File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
56515
565167.2 Restricting Pointer Aliasing
56517================================
56518
56519As with the C front end, G++ understands the C99 feature of restricted
56520pointers, specified with the '__restrict__', or '__restrict' type
56521qualifier.  Because you cannot compile C++ by specifying the '-std=c99'
56522language flag, 'restrict' is not a keyword in C++.
56523
56524 In addition to allowing restricted pointers, you can specify restricted
56525references, which indicate that the reference is not aliased in the
56526local context.
56527
56528     void fn (int *__restrict__ rptr, int &__restrict__ rref)
56529     {
56530       /* ... */
56531     }
56532
56533In the body of 'fn', RPTR points to an unaliased integer and RREF refers
56534to a (different) unaliased integer.
56535
56536 You may also specify whether a member function's THIS pointer is
56537unaliased by using '__restrict__' as a member function qualifier.
56538
56539     void T::fn () __restrict__
56540     {
56541       /* ... */
56542     }
56543
56544Within the body of 'T::fn', THIS has the effective definition 'T
56545*__restrict__ const this'.  Notice that the interpretation of a
56546'__restrict__' member function qualifier is different to that of 'const'
56547or 'volatile' qualifier, in that it is applied to the pointer rather
56548than the object.  This is consistent with other compilers that implement
56549restricted pointers.
56550
56551 As with all outermost parameter qualifiers, '__restrict__' is ignored
56552in function definition matching.  This means you only need to specify
56553'__restrict__' in a function definition, rather than in a function
56554prototype as well.
56555
56556
56557File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
56558
565597.3 Vague Linkage
56560=================
56561
56562There are several constructs in C++ that require space in the object
56563file but are not clearly tied to a single translation unit.  We say that
56564these constructs have "vague linkage".  Typically such constructs are
56565emitted wherever they are needed, though sometimes we can be more
56566clever.
56567
56568Inline Functions
56569     Inline functions are typically defined in a header file which can
56570     be included in many different compilations.  Hopefully they can
56571     usually be inlined, but sometimes an out-of-line copy is necessary,
56572     if the address of the function is taken or if inlining fails.  In
56573     general, we emit an out-of-line copy in all translation units where
56574     one is needed.  As an exception, we only emit inline virtual
56575     functions with the vtable, since it always requires a copy.
56576
56577     Local static variables and string constants used in an inline
56578     function are also considered to have vague linkage, since they must
56579     be shared between all inlined and out-of-line instances of the
56580     function.
56581
56582VTables
56583     C++ virtual functions are implemented in most compilers using a
56584     lookup table, known as a vtable.  The vtable contains pointers to
56585     the virtual functions provided by a class, and each object of the
56586     class contains a pointer to its vtable (or vtables, in some
56587     multiple-inheritance situations).  If the class declares any
56588     non-inline, non-pure virtual functions, the first one is chosen as
56589     the "key method" for the class, and the vtable is only emitted in
56590     the translation unit where the key method is defined.
56591
56592     _Note:_ If the chosen key method is later defined as inline, the
56593     vtable is still emitted in every translation unit that defines it.
56594     Make sure that any inline virtuals are declared inline in the class
56595     body, even if they are not defined there.
56596
56597'type_info' objects
56598     C++ requires information about types to be written out in order to
56599     implement 'dynamic_cast', 'typeid' and exception handling.  For
56600     polymorphic classes (classes with virtual functions), the
56601     'type_info' object is written out along with the vtable so that
56602     'dynamic_cast' can determine the dynamic type of a class object at
56603     run time.  For all other types, we write out the 'type_info' object
56604     when it is used: when applying 'typeid' to an expression, throwing
56605     an object, or referring to a type in a catch clause or exception
56606     specification.
56607
56608Template Instantiations
56609     Most everything in this section also applies to template
56610     instantiations, but there are other options as well.  *Note Where's
56611     the Template?: Template Instantiation.
56612
56613 When used with GNU ld version 2.8 or later on an ELF system such as
56614GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
56615these constructs will be discarded at link time.  This is known as
56616COMDAT support.
56617
56618 On targets that don't support COMDAT, but do support weak symbols, GCC
56619uses them.  This way one copy overrides all the others, but the unused
56620copies still take up space in the executable.
56621
56622 For targets that do not support either COMDAT or weak symbols, most
56623entities with vague linkage are emitted as local symbols to avoid
56624duplicate definition errors from the linker.  This does not happen for
56625local statics in inlines, however, as having multiple copies almost
56626certainly breaks things.
56627
56628 *Note Declarations and Definitions in One Header: C++ Interface, for
56629another way to control placement of these constructs.
56630
56631
56632File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
56633
566347.4 C++ Interface and Implementation Pragmas
56635============================================
56636
56637'#pragma interface' and '#pragma implementation' provide the user with a
56638way of explicitly directing the compiler to emit entities with vague
56639linkage (and debugging information) in a particular translation unit.
56640
56641 _Note:_ These '#pragma's have been superceded as of GCC 2.7.2 by COMDAT
56642support and the "key method" heuristic mentioned in *note Vague
56643Linkage::.  Using them can actually cause your program to grow due to
56644unnecessary out-of-line copies of inline functions.
56645
56646'#pragma interface'
56647'#pragma interface "SUBDIR/OBJECTS.h"'
56648     Use this directive in _header files_ that define object classes, to
56649     save space in most of the object files that use those classes.
56650     Normally, local copies of certain information (backup copies of
56651     inline member functions, debugging information, and the internal
56652     tables that implement virtual functions) must be kept in each
56653     object file that includes class definitions.  You can use this
56654     pragma to avoid such duplication.  When a header file containing
56655     '#pragma interface' is included in a compilation, this auxiliary
56656     information is not generated (unless the main input source file
56657     itself uses '#pragma implementation').  Instead, the object files
56658     contain references to be resolved at link time.
56659
56660     The second form of this directive is useful for the case where you
56661     have multiple headers with the same name in different directories.
56662     If you use this form, you must specify the same string to '#pragma
56663     implementation'.
56664
56665'#pragma implementation'
56666'#pragma implementation "OBJECTS.h"'
56667     Use this pragma in a _main input file_, when you want full output
56668     from included header files to be generated (and made globally
56669     visible).  The included header file, in turn, should use '#pragma
56670     interface'.  Backup copies of inline member functions, debugging
56671     information, and the internal tables used to implement virtual
56672     functions are all generated in implementation files.
56673
56674     If you use '#pragma implementation' with no argument, it applies to
56675     an include file with the same basename(1) as your source file.  For
56676     example, in 'allclass.cc', giving just '#pragma implementation' by
56677     itself is equivalent to '#pragma implementation "allclass.h"'.
56678
56679     Use the string argument if you want a single implementation file to
56680     include code from multiple header files.  (You must also use
56681     '#include' to include the header file; '#pragma implementation'
56682     only specifies how to use the file--it doesn't actually include
56683     it.)
56684
56685     There is no way to split up the contents of a single header file
56686     into multiple implementation files.
56687
56688 '#pragma implementation' and '#pragma interface' also have an effect on
56689function inlining.
56690
56691 If you define a class in a header file marked with '#pragma interface',
56692the effect on an inline function defined in that class is similar to an
56693explicit 'extern' declaration--the compiler emits no code at all to
56694define an independent version of the function.  Its definition is used
56695only for inlining with its callers.
56696
56697 Conversely, when you include the same header file in a main source file
56698that declares it as '#pragma implementation', the compiler emits code
56699for the function itself; this defines a version of the function that can
56700be found via pointers (or by callers compiled without inlining).  If all
56701calls to the function can be inlined, you can avoid emitting the
56702function by compiling with '-fno-implement-inlines'.  If any calls are
56703not inlined, you will get linker errors.
56704
56705   ---------- Footnotes ----------
56706
56707   (1) A file's "basename" is the name stripped of all leading path
56708information and of trailing suffixes, such as '.h' or '.C' or '.cc'.
56709
56710
56711File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
56712
567137.5 Where's the Template?
56714=========================
56715
56716C++ templates were the first language feature to require more
56717intelligence from the environment than was traditionally found on a UNIX
56718system.  Somehow the compiler and linker have to make sure that each
56719template instance occurs exactly once in the executable if it is needed,
56720and not at all otherwise.  There are two basic approaches to this
56721problem, which are referred to as the Borland model and the Cfront
56722model.
56723
56724Borland model
56725     Borland C++ solved the template instantiation problem by adding the
56726     code equivalent of common blocks to their linker; the compiler
56727     emits template instances in each translation unit that uses them,
56728     and the linker collapses them together.  The advantage of this
56729     model is that the linker only has to consider the object files
56730     themselves; there is no external complexity to worry about.  The
56731     disadvantage is that compilation time is increased because the
56732     template code is being compiled repeatedly.  Code written for this
56733     model tends to include definitions of all templates in the header
56734     file, since they must be seen to be instantiated.
56735
56736Cfront model
56737     The AT&T C++ translator, Cfront, solved the template instantiation
56738     problem by creating the notion of a template repository, an
56739     automatically maintained place where template instances are stored.
56740     A more modern version of the repository works as follows: As
56741     individual object files are built, the compiler places any template
56742     definitions and instantiations encountered in the repository.  At
56743     link time, the link wrapper adds in the objects in the repository
56744     and compiles any needed instances that were not previously emitted.
56745     The advantages of this model are more optimal compilation speed and
56746     the ability to use the system linker; to implement the Borland
56747     model a compiler vendor also needs to replace the linker.  The
56748     disadvantages are vastly increased complexity, and thus potential
56749     for error; for some code this can be just as transparent, but in
56750     practice it can been very difficult to build multiple programs in
56751     one directory and one program in multiple directories.  Code
56752     written for this model tends to separate definitions of non-inline
56753     member templates into a separate file, which should be compiled
56754     separately.
56755
56756 G++ implements the Borland model on targets where the linker supports
56757it, including ELF targets (such as GNU/Linux), Mac OS X and Microsoft
56758Windows.  Otherwise G++ implements neither automatic model.
56759
56760 You have the following options for dealing with template
56761instantiations:
56762
56763  1. Do nothing.  Code written for the Borland model works fine, but
56764     each translation unit contains instances of each of the templates
56765     it uses.  The duplicate instances will be discarded by the linker,
56766     but in a large program, this can lead to an unacceptable amount of
56767     code duplication in object files or shared libraries.
56768
56769     Duplicate instances of a template can be avoided by defining an
56770     explicit instantiation in one object file, and preventing the
56771     compiler from doing implicit instantiations in any other object
56772     files by using an explicit instantiation declaration, using the
56773     'extern template' syntax:
56774
56775          extern template int max (int, int);
56776
56777     This syntax is defined in the C++ 2011 standard, but has been
56778     supported by G++ and other compilers since well before 2011.
56779
56780     Explicit instantiations can be used for the largest or most
56781     frequently duplicated instances, without having to know exactly
56782     which other instances are used in the rest of the program.  You can
56783     scatter the explicit instantiations throughout your program,
56784     perhaps putting them in the translation units where the instances
56785     are used or the translation units that define the templates
56786     themselves; you can put all of the explicit instantiations you need
56787     into one big file; or you can create small files like
56788
56789          #include "Foo.h"
56790          #include "Foo.cc"
56791
56792          template class Foo<int>;
56793          template ostream& operator <<
56794                          (ostream&, const Foo<int>&);
56795
56796     for each of the instances you need, and create a template
56797     instantiation library from those.
56798
56799     This is the simplest option, but also offers flexibility and
56800     fine-grained control when necessary.  It is also the most portable
56801     alternative and programs using this approach will work with most
56802     modern compilers.
56803
56804  2. Compile your code with '-fno-implicit-templates' to disable the
56805     implicit generation of template instances, and explicitly
56806     instantiate all the ones you use.  This approach requires more
56807     knowledge of exactly which instances you need than do the others,
56808     but it's less mysterious and allows greater control if you want to
56809     ensure that only the intended instances are used.
56810
56811     If you are using Cfront-model code, you can probably get away with
56812     not using '-fno-implicit-templates' when compiling files that don't
56813     '#include' the member template definitions.
56814
56815     If you use one big file to do the instantiations, you may want to
56816     compile it without '-fno-implicit-templates' so you get all of the
56817     instances required by your explicit instantiations (but not by any
56818     other files) without having to specify them as well.
56819
56820     In addition to forward declaration of explicit instantiations (with
56821     'extern'), G++ has extended the template instantiation syntax to
56822     support instantiation of the compiler support data for a template
56823     class (i.e. the vtable) without instantiating any of its members
56824     (with 'inline'), and instantiation of only the static data members
56825     of a template class, without the support data or member functions
56826     (with 'static'):
56827
56828          inline template class Foo<int>;
56829          static template class Foo<int>;
56830
56831
56832File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
56833
568347.6 Extracting the Function Pointer from a Bound Pointer to Member Function
56835===========================================================================
56836
56837In C++, pointer to member functions (PMFs) are implemented using a wide
56838pointer of sorts to handle all the possible call mechanisms; the PMF
56839needs to store information about how to adjust the 'this' pointer, and
56840if the function pointed to is virtual, where to find the vtable, and
56841where in the vtable to look for the member function.  If you are using
56842PMFs in an inner loop, you should really reconsider that decision.  If
56843that is not an option, you can extract the pointer to the function that
56844would be called for a given object/PMF pair and call it directly inside
56845the inner loop, to save a bit of time.
56846
56847 Note that you still pay the penalty for the call through a function
56848pointer; on most modern architectures, such a call defeats the branch
56849prediction features of the CPU.  This is also true of normal virtual
56850function calls.
56851
56852 The syntax for this extension is
56853
56854     extern A a;
56855     extern int (A::*fp)();
56856     typedef int (*fptr)(A *);
56857
56858     fptr p = (fptr)(a.*fp);
56859
56860 For PMF constants (i.e. expressions of the form '&Klasse::Member'), no
56861object is needed to obtain the address of the function.  They can be
56862converted to function pointers directly:
56863
56864     fptr p1 = (fptr)(&A::foo);
56865
56866 You must specify '-Wno-pmf-conversions' to use this extension.
56867
56868
56869File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
56870
568717.7 C++-Specific Variable, Function, and Type Attributes
56872========================================================
56873
56874Some attributes only make sense for C++ programs.
56875
56876'abi_tag ("TAG", ...)'
56877     The 'abi_tag' attribute can be applied to a function, variable, or
56878     class declaration.  It modifies the mangled name of the entity to
56879     incorporate the tag name, in order to distinguish the function or
56880     class from an earlier version with a different ABI; perhaps the
56881     class has changed size, or the function has a different return type
56882     that is not encoded in the mangled name.
56883
56884     The attribute can also be applied to an inline namespace, but does
56885     not affect the mangled name of the namespace; in this case it is
56886     only used for '-Wabi-tag' warnings and automatic tagging of
56887     functions and variables.  Tagging inline namespaces is generally
56888     preferable to tagging individual declarations, but the latter is
56889     sometimes necessary, such as when only certain members of a class
56890     need to be tagged.
56891
56892     The argument can be a list of strings of arbitrary length.  The
56893     strings are sorted on output, so the order of the list is
56894     unimportant.
56895
56896     A redeclaration of an entity must not add new ABI tags, since doing
56897     so would change the mangled name.
56898
56899     The ABI tags apply to a name, so all instantiations and
56900     specializations of a template have the same tags.  The attribute
56901     will be ignored if applied to an explicit specialization or
56902     instantiation.
56903
56904     The '-Wabi-tag' flag enables a warning about a class which does not
56905     have all the ABI tags used by its subobjects and virtual functions;
56906     for users with code that needs to coexist with an earlier ABI,
56907     using this option can help to find all affected types that need to
56908     be tagged.
56909
56910     When a type involving an ABI tag is used as the type of a variable
56911     or return type of a function where that tag is not already present
56912     in the signature of the function, the tag is automatically applied
56913     to the variable or function.  '-Wabi-tag' also warns about this
56914     situation; this warning can be avoided by explicitly tagging the
56915     variable or function or moving it into a tagged inline namespace.
56916
56917'init_priority (PRIORITY)'
56918
56919     In Standard C++, objects defined at namespace scope are guaranteed
56920     to be initialized in an order in strict accordance with that of
56921     their definitions _in a given translation unit_.  No guarantee is
56922     made for initializations across translation units.  However, GNU
56923     C++ allows users to control the order of initialization of objects
56924     defined at namespace scope with the 'init_priority' attribute by
56925     specifying a relative PRIORITY, a constant integral expression
56926     currently bounded between 101 and 65535 inclusive.  Lower numbers
56927     indicate a higher priority.
56928
56929     In the following example, 'A' would normally be created before 'B',
56930     but the 'init_priority' attribute reverses that order:
56931
56932          Some_Class  A  __attribute__ ((init_priority (2000)));
56933          Some_Class  B  __attribute__ ((init_priority (543)));
56934
56935     Note that the particular values of PRIORITY do not matter; only
56936     their relative ordering.
56937
56938'warn_unused'
56939
56940     For C++ types with non-trivial constructors and/or destructors it
56941     is impossible for the compiler to determine whether a variable of
56942     this type is truly unused if it is not referenced.  This type
56943     attribute informs the compiler that variables of this type should
56944     be warned about if they appear to be unused, just like variables of
56945     fundamental types.
56946
56947     This attribute is appropriate for types which just represent a
56948     value, such as 'std::string'; it is not appropriate for types which
56949     control a resource, such as 'std::lock_guard'.
56950
56951     This attribute is also accepted in C, but it is unnecessary because
56952     C does not have constructors or destructors.
56953
56954
56955File: gcc.info,  Node: Function Multiversioning,  Next: Type Traits,  Prev: C++ Attributes,  Up: C++ Extensions
56956
569577.8 Function Multiversioning
56958============================
56959
56960With the GNU C++ front end, for x86 targets, you may specify multiple
56961versions of a function, where each function is specialized for a
56962specific target feature.  At runtime, the appropriate version of the
56963function is automatically executed depending on the characteristics of
56964the execution platform.  Here is an example.
56965
56966     __attribute__ ((target ("default")))
56967     int foo ()
56968     {
56969       // The default version of foo.
56970       return 0;
56971     }
56972
56973     __attribute__ ((target ("sse4.2")))
56974     int foo ()
56975     {
56976       // foo version for SSE4.2
56977       return 1;
56978     }
56979
56980     __attribute__ ((target ("arch=atom")))
56981     int foo ()
56982     {
56983       // foo version for the Intel ATOM processor
56984       return 2;
56985     }
56986
56987     __attribute__ ((target ("arch=amdfam10")))
56988     int foo ()
56989     {
56990       // foo version for the AMD Family 0x10 processors.
56991       return 3;
56992     }
56993
56994     int main ()
56995     {
56996       int (*p)() = &foo;
56997       assert ((*p) () == foo ());
56998       return 0;
56999     }
57000
57001 In the above example, four versions of function foo are created.  The
57002first version of foo with the target attribute "default" is the default
57003version.  This version gets executed when no other target specific
57004version qualifies for execution on a particular platform.  A new version
57005of foo is created by using the same function signature but with a
57006different target string.  Function foo is called or a pointer to it is
57007taken just like a regular function.  GCC takes care of doing the
57008dispatching to call the right version at runtime.  Refer to the GCC wiki
57009on Function Multiversioning
57010(https://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details.
57011
57012
57013File: gcc.info,  Node: Type Traits,  Next: C++ Concepts,  Prev: Function Multiversioning,  Up: C++ Extensions
57014
570157.9 Type Traits
57016===============
57017
57018The C++ front end implements syntactic extensions that allow
57019compile-time determination of various characteristics of a type (or of a
57020pair of types).
57021
57022'__has_nothrow_assign (type)'
57023     If 'type' is 'const'-qualified or is a reference type then the
57024     trait is 'false'.  Otherwise if '__has_trivial_assign (type)' is
57025     'true' then the trait is 'true', else if 'type' is a cv-qualified
57026     class or union type with copy assignment operators that are known
57027     not to throw an exception then the trait is 'true', else it is
57028     'false'.  Requires: 'type' shall be a complete type, (possibly
57029     cv-qualified) 'void', or an array of unknown bound.
57030
57031'__has_nothrow_copy (type)'
57032     If '__has_trivial_copy (type)' is 'true' then the trait is 'true',
57033     else if 'type' is a cv-qualified class or union type with copy
57034     constructors that are known not to throw an exception then the
57035     trait is 'true', else it is 'false'.  Requires: 'type' shall be a
57036     complete type, (possibly cv-qualified) 'void', or an array of
57037     unknown bound.
57038
57039'__has_nothrow_constructor (type)'
57040     If '__has_trivial_constructor (type)' is 'true' then the trait is
57041     'true', else if 'type' is a cv class or union type (or array
57042     thereof) with a default constructor that is known not to throw an
57043     exception then the trait is 'true', else it is 'false'.  Requires:
57044     'type' shall be a complete type, (possibly cv-qualified) 'void', or
57045     an array of unknown bound.
57046
57047'__has_trivial_assign (type)'
57048     If 'type' is 'const'- qualified or is a reference type then the
57049     trait is 'false'.  Otherwise if '__is_trivial (type)' is 'true'
57050     then the trait is 'true', else if 'type' is a cv-qualified class or
57051     union type with a trivial copy assignment ([class.copy]) then the
57052     trait is 'true', else it is 'false'.  Requires: 'type' shall be a
57053     complete type, (possibly cv-qualified) 'void', or an array of
57054     unknown bound.
57055
57056'__has_trivial_copy (type)'
57057     If '__is_trivial (type)' is 'true' or 'type' is a reference type
57058     then the trait is 'true', else if 'type' is a cv class or union
57059     type with a trivial copy constructor ([class.copy]) then the trait
57060     is 'true', else it is 'false'.  Requires: 'type' shall be a
57061     complete type, (possibly cv-qualified) 'void', or an array of
57062     unknown bound.
57063
57064'__has_trivial_constructor (type)'
57065     If '__is_trivial (type)' is 'true' then the trait is 'true', else
57066     if 'type' is a cv-qualified class or union type (or array thereof)
57067     with a trivial default constructor ([class.ctor]) then the trait is
57068     'true', else it is 'false'.  Requires: 'type' shall be a complete
57069     type, (possibly cv-qualified) 'void', or an array of unknown bound.
57070
57071'__has_trivial_destructor (type)'
57072     If '__is_trivial (type)' is 'true' or 'type' is a reference type
57073     then the trait is 'true', else if 'type' is a cv class or union
57074     type (or array thereof) with a trivial destructor ([class.dtor])
57075     then the trait is 'true', else it is 'false'.  Requires: 'type'
57076     shall be a complete type, (possibly cv-qualified) 'void', or an
57077     array of unknown bound.
57078
57079'__has_virtual_destructor (type)'
57080     If 'type' is a class type with a virtual destructor ([class.dtor])
57081     then the trait is 'true', else it is 'false'.  Requires: 'type'
57082     shall be a complete type, (possibly cv-qualified) 'void', or an
57083     array of unknown bound.
57084
57085'__is_abstract (type)'
57086     If 'type' is an abstract class ([class.abstract]) then the trait is
57087     'true', else it is 'false'.  Requires: 'type' shall be a complete
57088     type, (possibly cv-qualified) 'void', or an array of unknown bound.
57089
57090'__is_base_of (base_type, derived_type)'
57091     If 'base_type' is a base class of 'derived_type' ([class.derived])
57092     then the trait is 'true', otherwise it is 'false'.  Top-level
57093     cv-qualifications of 'base_type' and 'derived_type' are ignored.
57094     For the purposes of this trait, a class type is considered is own
57095     base.  Requires: if '__is_class (base_type)' and '__is_class
57096     (derived_type)' are 'true' and 'base_type' and 'derived_type' are
57097     not the same type (disregarding cv-qualifiers), 'derived_type'
57098     shall be a complete type.  A diagnostic is produced if this
57099     requirement is not met.
57100
57101'__is_class (type)'
57102     If 'type' is a cv-qualified class type, and not a union type
57103     ([basic.compound]) the trait is 'true', else it is 'false'.
57104
57105'__is_empty (type)'
57106     If '__is_class (type)' is 'false' then the trait is 'false'.
57107     Otherwise 'type' is considered empty if and only if: 'type' has no
57108     non-static data members, or all non-static data members, if any,
57109     are bit-fields of length 0, and 'type' has no virtual members, and
57110     'type' has no virtual base classes, and 'type' has no base classes
57111     'base_type' for which '__is_empty (base_type)' is 'false'.
57112     Requires: 'type' shall be a complete type, (possibly cv-qualified)
57113     'void', or an array of unknown bound.
57114
57115'__is_enum (type)'
57116     If 'type' is a cv enumeration type ([basic.compound]) the trait is
57117     'true', else it is 'false'.
57118
57119'__is_literal_type (type)'
57120     If 'type' is a literal type ([basic.types]) the trait is 'true',
57121     else it is 'false'.  Requires: 'type' shall be a complete type,
57122     (possibly cv-qualified) 'void', or an array of unknown bound.
57123
57124'__is_pod (type)'
57125     If 'type' is a cv POD type ([basic.types]) then the trait is
57126     'true', else it is 'false'.  Requires: 'type' shall be a complete
57127     type, (possibly cv-qualified) 'void', or an array of unknown bound.
57128
57129'__is_polymorphic (type)'
57130     If 'type' is a polymorphic class ([class.virtual]) then the trait
57131     is 'true', else it is 'false'.  Requires: 'type' shall be a
57132     complete type, (possibly cv-qualified) 'void', or an array of
57133     unknown bound.
57134
57135'__is_standard_layout (type)'
57136     If 'type' is a standard-layout type ([basic.types]) the trait is
57137     'true', else it is 'false'.  Requires: 'type' shall be a complete
57138     type, (possibly cv-qualified) 'void', or an array of unknown bound.
57139
57140'__is_trivial (type)'
57141     If 'type' is a trivial type ([basic.types]) the trait is 'true',
57142     else it is 'false'.  Requires: 'type' shall be a complete type,
57143     (possibly cv-qualified) 'void', or an array of unknown bound.
57144
57145'__is_union (type)'
57146     If 'type' is a cv union type ([basic.compound]) the trait is
57147     'true', else it is 'false'.
57148
57149'__underlying_type (type)'
57150     The underlying type of 'type'.  Requires: 'type' shall be an
57151     enumeration type ([dcl.enum]).
57152
57153'__integer_pack (length)'
57154     When used as the pattern of a pack expansion within a template
57155     definition, expands to a template argument pack containing integers
57156     from '0' to 'length-1'.  This is provided for efficient
57157     implementation of 'std::make_integer_sequence'.
57158
57159
57160File: gcc.info,  Node: C++ Concepts,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
57161
571627.10 C++ Concepts
57163=================
57164
57165C++ concepts provide much-improved support for generic programming.  In
57166particular, they allow the specification of constraints on template
57167arguments.  The constraints are used to extend the usual overloading and
57168partial specialization capabilities of the language, allowing generic
57169data structures and algorithms to be "refined" based on their properties
57170rather than their type names.
57171
57172 The following keywords are reserved for concepts.
57173
57174'assumes'
57175     States an expression as an assumption, and if possible, verifies
57176     that the assumption is valid.  For example, 'assume(n > 0)'.
57177
57178'axiom'
57179     Introduces an axiom definition.  Axioms introduce requirements on
57180     values.
57181
57182'forall'
57183     Introduces a universally quantified object in an axiom.  For
57184     example, 'forall (int n) n + 0 == n').
57185
57186'concept'
57187     Introduces a concept definition.  Concepts are sets of syntactic
57188     and semantic requirements on types and their values.
57189
57190'requires'
57191     Introduces constraints on template arguments or requirements for a
57192     member function of a class template.
57193
57194 The front end also exposes a number of internal mechanism that can be
57195used to simplify the writing of type traits.  Note that some of these
57196traits are likely to be removed in the future.
57197
57198'__is_same (type1, type2)'
57199     A binary type trait: 'true' whenever the type arguments are the
57200     same.
57201
57202
57203File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: C++ Concepts,  Up: C++ Extensions
57204
572057.11 Deprecated Features
57206========================
57207
57208In the past, the GNU C++ compiler was extended to experiment with new
57209features, at a time when the C++ language was still evolving.  Now that
57210the C++ standard is complete, some of those features are superseded by
57211superior alternatives.  Using the old features might cause a warning in
57212some cases that the feature will be dropped in the future.  In other
57213cases, the feature might be gone already.
57214
57215 G++ allows a virtual function returning 'void *' to be overridden by
57216one returning a different pointer type.  This extension to the covariant
57217return type rules is now deprecated and will be removed from a future
57218version.
57219
57220 The use of default arguments in function pointers, function typedefs
57221and other places where they are not permitted by the standard is
57222deprecated and will be removed from a future version of G++.
57223
57224 G++ allows floating-point literals to appear in integral constant
57225expressions, e.g. ' enum E { e = int(2.2 * 3.7) } ' This extension is
57226deprecated and will be removed from a future version.
57227
57228 G++ allows static data members of const floating-point type to be
57229declared with an initializer in a class definition.  The standard only
57230allows initializers for static members of const integral types and const
57231enumeration types so this extension has been deprecated and will be
57232removed from a future version.
57233
57234 G++ allows attributes to follow a parenthesized direct initializer,
57235e.g. ' int f (0) __attribute__ ((something)); ' This extension has been
57236ignored since G++ 3.3 and is deprecated.
57237
57238 G++ allows anonymous structs and unions to have members that are not
57239public non-static data members (i.e. fields).  These extensions are
57240deprecated.
57241
57242
57243File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
57244
572457.12 Backwards Compatibility
57246============================
57247
57248Now that there is a definitive ISO standard C++, G++ has a specification
57249to adhere to.  The C++ language evolved over time, and features that
57250used to be acceptable in previous drafts of the standard, such as the
57251ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
57252to allow compilation of C++ written to such drafts, G++ contains some
57253backwards compatibilities.  _All such backwards compatibility features
57254are liable to disappear in future versions of G++._  They should be
57255considered deprecated.  *Note Deprecated Features::.
57256
57257'Implicit C language'
57258     Old C system header files did not contain an 'extern "C" {...}'
57259     scope to set the language.  On such systems, all system header
57260     files are implicitly scoped inside a C language scope.  Such
57261     headers must correctly prototype function argument types, there is
57262     no leeway for '()' to indicate an unspecified set of arguments.
57263
57264
57265File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
57266
572678 GNU Objective-C Features
57268**************************
57269
57270This document is meant to describe some of the GNU Objective-C features.
57271It is not intended to teach you Objective-C. There are several resources
57272on the Internet that present the language.
57273
57274* Menu:
57275
57276* GNU Objective-C runtime API::
57277* Executing code before main::
57278* Type encoding::
57279* Garbage Collection::
57280* Constant string objects::
57281* compatibility_alias::
57282* Exceptions::
57283* Synchronization::
57284* Fast enumeration::
57285* Messaging with the GNU Objective-C runtime::
57286
57287
57288File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
57289
572908.1 GNU Objective-C Runtime API
57291===============================
57292
57293This section is specific for the GNU Objective-C runtime.  If you are
57294using a different runtime, you can skip it.
57295
57296 The GNU Objective-C runtime provides an API that allows you to interact
57297with the Objective-C runtime system, querying the live runtime
57298structures and even manipulating them.  This allows you for example to
57299inspect and navigate classes, methods and protocols; to define new
57300classes or new methods, and even to modify existing classes or
57301protocols.
57302
57303 If you are using a "Foundation" library such as GNUstep-Base, this
57304library will provide you with a rich set of functionality to do most of
57305the inspection tasks, and you probably will only need direct access to
57306the GNU Objective-C runtime API to define new classes or methods.
57307
57308* Menu:
57309
57310* Modern GNU Objective-C runtime API::
57311* Traditional GNU Objective-C runtime API::
57312
57313
57314File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
57315
573168.1.1 Modern GNU Objective-C Runtime API
57317----------------------------------------
57318
57319The GNU Objective-C runtime provides an API which is similar to the one
57320provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
57321API is documented in the public header files of the GNU Objective-C
57322runtime:
57323
57324   * 'objc/objc.h': this is the basic Objective-C header file, defining
57325     the basic Objective-C types such as 'id', 'Class' and 'BOOL'.  You
57326     have to include this header to do almost anything with Objective-C.
57327
57328   * 'objc/runtime.h': this header declares most of the public runtime
57329     API functions allowing you to inspect and manipulate the
57330     Objective-C runtime data structures.  These functions are fairly
57331     standardized across Objective-C runtimes and are almost identical
57332     to the Apple/NeXT Objective-C runtime ones.  It does not declare
57333     functions in some specialized areas (constructing and forwarding
57334     message invocations, threading) which are in the other headers
57335     below.  You have to include 'objc/objc.h' and 'objc/runtime.h' to
57336     use any of the functions, such as 'class_getName()', declared in
57337     'objc/runtime.h'.
57338
57339   * 'objc/message.h': this header declares public functions used to
57340     construct, deconstruct and forward message invocations.  Because
57341     messaging is done in quite a different way on different runtimes,
57342     functions in this header are specific to the GNU Objective-C
57343     runtime implementation.
57344
57345   * 'objc/objc-exception.h': this header declares some public functions
57346     related to Objective-C exceptions.  For example functions in this
57347     header allow you to throw an Objective-C exception from plain C/C++
57348     code.
57349
57350   * 'objc/objc-sync.h': this header declares some public functions
57351     related to the Objective-C '@synchronized()' syntax, allowing you
57352     to emulate an Objective-C '@synchronized()' block in plain C/C++
57353     code.
57354
57355   * 'objc/thr.h': this header declares a public runtime API threading
57356     layer that is only provided by the GNU Objective-C runtime.  It
57357     declares functions such as 'objc_mutex_lock()', which provide a
57358     platform-independent set of threading functions.
57359
57360 The header files contain detailed documentation for each function in
57361the GNU Objective-C runtime API.
57362
57363
57364File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
57365
573668.1.2 Traditional GNU Objective-C Runtime API
57367---------------------------------------------
57368
57369The GNU Objective-C runtime used to provide a different API, which we
57370call the "traditional" GNU Objective-C runtime API. Functions belonging
57371to this API are easy to recognize because they use a different naming
57372convention, such as 'class_get_super_class()' (traditional API) instead
57373of 'class_getSuperclass()' (modern API). Software using this API
57374includes the file 'objc/objc-api.h' where it is declared.
57375
57376 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
57377available.
57378
57379
57380File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
57381
573828.2 '+load': Executing Code before 'main'
57383=========================================
57384
57385This section is specific for the GNU Objective-C runtime.  If you are
57386using a different runtime, you can skip it.
57387
57388 The GNU Objective-C runtime provides a way that allows you to execute
57389code before the execution of the program enters the 'main' function.
57390The code is executed on a per-class and a per-category basis, through a
57391special class method '+load'.
57392
57393 This facility is very useful if you want to initialize global variables
57394which can be accessed by the program directly, without sending a message
57395to the class first.  The usual way to initialize global variables, in
57396the '+initialize' method, might not be useful because '+initialize' is
57397only called when the first message is sent to a class object, which in
57398some cases could be too late.
57399
57400 Suppose for example you have a 'FileStream' class that declares
57401'Stdin', 'Stdout' and 'Stderr' as global variables, like below:
57402
57403
57404     FileStream *Stdin = nil;
57405     FileStream *Stdout = nil;
57406     FileStream *Stderr = nil;
57407
57408     @implementation FileStream
57409
57410     + (void)initialize
57411     {
57412         Stdin = [[FileStream new] initWithFd:0];
57413         Stdout = [[FileStream new] initWithFd:1];
57414         Stderr = [[FileStream new] initWithFd:2];
57415     }
57416
57417     /* Other methods here */
57418     @end
57419
57420
57421 In this example, the initialization of 'Stdin', 'Stdout' and 'Stderr'
57422in '+initialize' occurs too late.  The programmer can send a message to
57423one of these objects before the variables are actually initialized, thus
57424sending messages to the 'nil' object.  The '+initialize' method which
57425actually initializes the global variables is not invoked until the first
57426message is sent to the class object.  The solution would require these
57427variables to be initialized just before entering 'main'.
57428
57429 The correct solution of the above problem is to use the '+load' method
57430instead of '+initialize':
57431
57432
57433     @implementation FileStream
57434
57435     + (void)load
57436     {
57437         Stdin = [[FileStream new] initWithFd:0];
57438         Stdout = [[FileStream new] initWithFd:1];
57439         Stderr = [[FileStream new] initWithFd:2];
57440     }
57441
57442     /* Other methods here */
57443     @end
57444
57445
57446 The '+load' is a method that is not overridden by categories.  If a
57447class and a category of it both implement '+load', both methods are
57448invoked.  This allows some additional initializations to be performed in
57449a category.
57450
57451 This mechanism is not intended to be a replacement for '+initialize'.
57452You should be aware of its limitations when you decide to use it instead
57453of '+initialize'.
57454
57455* Menu:
57456
57457* What you can and what you cannot do in +load::
57458
57459
57460File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
57461
574628.2.1 What You Can and Cannot Do in '+load'
57463-------------------------------------------
57464
57465'+load' is to be used only as a last resort.  Because it is executed
57466very early, most of the Objective-C runtime machinery will not be ready
57467when '+load' is executed; hence '+load' works best for executing C code
57468that is independent on the Objective-C runtime.
57469
57470 The '+load' implementation in the GNU runtime guarantees you the
57471following things:
57472
57473   * you can write whatever C code you like;
57474
57475   * you can allocate and send messages to objects whose class is
57476     implemented in the same file;
57477
57478   * the '+load' implementation of all super classes of a class are
57479     executed before the '+load' of that class is executed;
57480
57481   * the '+load' implementation of a class is executed before the
57482     '+load' implementation of any category.
57483
57484 In particular, the following things, even if they can work in a
57485particular case, are not guaranteed:
57486
57487   * allocation of or sending messages to arbitrary objects;
57488
57489   * allocation of or sending messages to objects whose classes have a
57490     category implemented in the same file;
57491
57492   * sending messages to Objective-C constant strings ('@"this is a
57493     constant string"');
57494
57495 You should make no assumptions about receiving '+load' in sibling
57496classes when you write '+load' of a class.  The order in which sibling
57497classes receive '+load' is not guaranteed.
57498
57499 The order in which '+load' and '+initialize' are called could be
57500problematic if this matters.  If you don't allocate objects inside
57501'+load', it is guaranteed that '+load' is called before '+initialize'.
57502If you create an object inside '+load' the '+initialize' method of
57503object's class is invoked even if '+load' was not invoked.  Note if you
57504explicitly call '+load' on a class, '+initialize' will be called first.
57505To avoid possible problems try to implement only one of these methods.
57506
57507 The '+load' method is also invoked when a bundle is dynamically loaded
57508into your running program.  This happens automatically without any
57509intervening operation from you.  When you write bundles and you need to
57510write '+load' you can safely create and send messages to objects whose
57511classes already exist in the running program.  The same restrictions as
57512above apply to classes defined in bundle.
57513
57514
57515File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
57516
575178.3 Type Encoding
57518=================
57519
57520This is an advanced section.  Type encodings are used extensively by the
57521compiler and by the runtime, but you generally do not need to know about
57522them to use Objective-C.
57523
57524 The Objective-C compiler generates type encodings for all the types.
57525These type encodings are used at runtime to find out information about
57526selectors and methods and about objects and classes.
57527
57528 The types are encoded in the following way:
57529
57530'_Bool'            'B'
57531'char'             'c'
57532'unsigned char'    'C'
57533'short'            's'
57534'unsigned short'   'S'
57535'int'              'i'
57536'unsigned int'     'I'
57537'long'             'l'
57538'unsigned long'    'L'
57539'long long'        'q'
57540'unsigned long     'Q'
57541long'
57542'float'            'f'
57543'double'           'd'
57544'long double'      'D'
57545'void'             'v'
57546'id'               '@'
57547'Class'            '#'
57548'SEL'              ':'
57549'char*'            '*'
57550'enum'             an 'enum' is encoded exactly as the integer type
57551                   that the compiler uses for it, which depends on the
57552                   enumeration values.  Often the compiler users
57553                   'unsigned int', which is then encoded as 'I'.
57554unknown type       '?'
57555Complex types      'j' followed by the inner type.  For example
57556                   '_Complex double' is encoded as "jd".
57557bit-fields         'b' followed by the starting position of the
57558                   bit-field, the type of the bit-field and the size of
57559                   the bit-field (the bit-fields encoding was changed
57560                   from the NeXT's compiler encoding, see below)
57561
57562 The encoding of bit-fields has changed to allow bit-fields to be
57563properly handled by the runtime functions that compute sizes and
57564alignments of types that contain bit-fields.  The previous encoding
57565contained only the size of the bit-field.  Using only this information
57566it is not possible to reliably compute the size occupied by the
57567bit-field.  This is very important in the presence of the Boehm's
57568garbage collector because the objects are allocated using the typed
57569memory facility available in this collector.  The typed memory
57570allocation requires information about where the pointers are located
57571inside the object.
57572
57573 The position in the bit-field is the position, counting in bits, of the
57574bit closest to the beginning of the structure.
57575
57576 The non-atomic types are encoded as follows:
57577
57578pointers       '^' followed by the pointed type.
57579arrays         '[' followed by the number of elements in the array
57580               followed by the type of the elements followed by ']'
57581structures     '{' followed by the name of the structure (or '?' if the
57582               structure is unnamed), the '=' sign, the type of the
57583               members and by '}'
57584unions         '(' followed by the name of the structure (or '?' if the
57585               union is unnamed), the '=' sign, the type of the members
57586               followed by ')'
57587vectors        '![' followed by the vector_size (the number of bytes
57588               composing the vector) followed by a comma, followed by
57589               the alignment (in bytes) of the vector, followed by the
57590               type of the elements followed by ']'
57591
57592 Here are some types and their encodings, as they are generated by the
57593compiler on an i386 machine:
57594
57595
57596Objective-C type                            Compiler encoding
57597--------------------------------------------------------------------------
57598     int a[10];                             '[10i]'
57599     struct {                               '{?=i[3f]b128i3b131i2c}'
57600       int i;
57601       float f[3];
57602       int a:3;
57603       int b:2;
57604       char c;
57605     }
57606     int a __attribute__ ((vector_size (16)));'![16,16i]' (alignment
57607                                            depends on the machine)
57608
57609
57610 In addition to the types the compiler also encodes the type specifiers.
57611The table below describes the encoding of the current Objective-C type
57612specifiers:
57613
57614
57615Specifier          Encoding
57616--------------------------------------------------------------------------
57617'const'            'r'
57618'in'               'n'
57619'inout'            'N'
57620'out'              'o'
57621'bycopy'           'O'
57622'byref'            'R'
57623'oneway'           'V'
57624
57625
57626 The type specifiers are encoded just before the type.  Unlike types
57627however, the type specifiers are only encoded when they appear in method
57628argument types.
57629
57630 Note how 'const' interacts with pointers:
57631
57632
57633Objective-C type   Compiler encoding
57634--------------------------------------------------------------------------
57635     const int     'ri'
57636     const int*    '^ri'
57637     int *const    'r^i'
57638
57639
57640 'const int*' is a pointer to a 'const int', and so is encoded as '^ri'.
57641'int* const', instead, is a 'const' pointer to an 'int', and so is
57642encoded as 'r^i'.
57643
57644 Finally, there is a complication when encoding 'const char *' versus
57645'char * const'.  Because 'char *' is encoded as '*' and not as '^c',
57646there is no way to express the fact that 'r' applies to the pointer or
57647to the pointee.
57648
57649 Hence, it is assumed as a convention that 'r*' means 'const char *'
57650(since it is what is most often meant), and there is no way to encode
57651'char *const'.  'char *const' would simply be encoded as '*', and the
57652'const' is lost.
57653
57654* Menu:
57655
57656* Legacy type encoding::
57657* @encode::
57658* Method signatures::
57659
57660
57661File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
57662
576638.3.1 Legacy Type Encoding
57664--------------------------
57665
57666Unfortunately, historically GCC used to have a number of bugs in its
57667encoding code.  The NeXT runtime expects GCC to emit type encodings in
57668this historical format (compatible with GCC-3.3), so when using the NeXT
57669runtime, GCC will introduce on purpose a number of incorrect encodings:
57670
57671   * the read-only qualifier of the pointee gets emitted before the '^'.
57672     The read-only qualifier of the pointer itself gets ignored, unless
57673     it is a typedef.  Also, the 'r' is only emitted for the outermost
57674     type.
57675
57676   * 32-bit longs are encoded as 'l' or 'L', but not always.  For
57677     typedefs, the compiler uses 'i' or 'I' instead if encoding a struct
57678     field or a pointer.
57679
57680   * 'enum's are always encoded as 'i' (int) even if they are actually
57681     unsigned or long.
57682
57683 In addition to that, the NeXT runtime uses a different encoding for
57684bitfields.  It encodes them as 'b' followed by the size, without a bit
57685offset or the underlying field type.
57686
57687
57688File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
57689
576908.3.2 '@encode'
57691---------------
57692
57693GNU Objective-C supports the '@encode' syntax that allows you to create
57694a type encoding from a C/Objective-C type.  For example, '@encode(int)'
57695is compiled by the compiler into '"i"'.
57696
57697 '@encode' does not support type qualifiers other than 'const'.  For
57698example, '@encode(const char*)' is valid and is compiled into '"r*"',
57699while '@encode(bycopy char *)' is invalid and will cause a compilation
57700error.
57701
57702
57703File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
57704
577058.3.3 Method Signatures
57706-----------------------
57707
57708This section documents the encoding of method types, which is rarely
57709needed to use Objective-C. You should skip it at a first reading; the
57710runtime provides functions that will work on methods and can walk
57711through the list of parameters and interpret them for you.  These
57712functions are part of the public "API" and are the preferred way to
57713interact with method signatures from user code.
57714
57715 But if you need to debug a problem with method signatures and need to
57716know how they are implemented (i.e., the "ABI"), read on.
57717
57718 Methods have their "signature" encoded and made available to the
57719runtime.  The "signature" encodes all the information required to
57720dynamically build invocations of the method at runtime: return type and
57721arguments.
57722
57723 The "signature" is a null-terminated string, composed of the following:
57724
57725   * The return type, including type qualifiers.  For example, a method
57726     returning 'int' would have 'i' here.
57727
57728   * The total size (in bytes) required to pass all the parameters.
57729     This includes the two hidden parameters (the object 'self' and the
57730     method selector '_cmd').
57731
57732   * Each argument, with the type encoding, followed by the offset (in
57733     bytes) of the argument in the list of parameters.
57734
57735 For example, a method with no arguments and returning 'int' would have
57736the signature 'i8@0:4' if the size of a pointer is 4.  The signature is
57737interpreted as follows: the 'i' is the return type (an 'int'), the '8'
57738is the total size of the parameters in bytes (two pointers each of size
577394), the '@0' is the first parameter (an object at byte offset '0') and
57740':4' is the second parameter (a 'SEL' at byte offset '4').
57741
57742 You can easily find more examples by running the "strings" program on
57743an Objective-C object file compiled by GCC. You'll see a lot of strings
57744that look very much like 'i8@0:4'.  They are signatures of Objective-C
57745methods.
57746
57747
57748File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
57749
577508.4 Garbage Collection
57751======================
57752
57753This section is specific for the GNU Objective-C runtime.  If you are
57754using a different runtime, you can skip it.
57755
57756 Support for garbage collection with the GNU runtime has been added by
57757using a powerful conservative garbage collector, known as the
57758Boehm-Demers-Weiser conservative garbage collector.
57759
57760 To enable the support for it you have to configure the compiler using
57761an additional argument, '--enable-objc-gc'.  This will build the
57762boehm-gc library, and build an additional runtime library which has
57763several enhancements to support the garbage collector.  The new library
57764has a new name, 'libobjc_gc.a' to not conflict with the
57765non-garbage-collected library.
57766
57767 When the garbage collector is used, the objects are allocated using the
57768so-called typed memory allocation mechanism available in the
57769Boehm-Demers-Weiser collector.  This mode requires precise information
57770on where pointers are located inside objects.  This information is
57771computed once per class, immediately after the class has been
57772initialized.
57773
57774 There is a new runtime function 'class_ivar_set_gcinvisible()' which
57775can be used to declare a so-called "weak pointer" reference.  Such a
57776pointer is basically hidden for the garbage collector; this can be
57777useful in certain situations, especially when you want to keep track of
57778the allocated objects, yet allow them to be collected.  This kind of
57779pointers can only be members of objects, you cannot declare a global
57780pointer as a weak reference.  Every type which is a pointer type can be
57781declared a weak pointer, including 'id', 'Class' and 'SEL'.
57782
57783 Here is an example of how to use this feature.  Suppose you want to
57784implement a class whose instances hold a weak pointer reference; the
57785following class does this:
57786
57787
57788     @interface WeakPointer : Object
57789     {
57790         const void* weakPointer;
57791     }
57792
57793     - initWithPointer:(const void*)p;
57794     - (const void*)weakPointer;
57795     @end
57796
57797
57798     @implementation WeakPointer
57799
57800     + (void)initialize
57801     {
57802       if (self == objc_lookUpClass ("WeakPointer"))
57803         class_ivar_set_gcinvisible (self, "weakPointer", YES);
57804     }
57805
57806     - initWithPointer:(const void*)p
57807     {
57808       weakPointer = p;
57809       return self;
57810     }
57811
57812     - (const void*)weakPointer
57813     {
57814       return weakPointer;
57815     }
57816
57817     @end
57818
57819
57820 Weak pointers are supported through a new type character specifier
57821represented by the '!' character.  The 'class_ivar_set_gcinvisible()'
57822function adds or removes this specifier to the string type description
57823of the instance variable named as argument.
57824
57825
57826File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
57827
578288.5 Constant String Objects
57829===========================
57830
57831GNU Objective-C provides constant string objects that are generated
57832directly by the compiler.  You declare a constant string object by
57833prefixing a C constant string with the character '@':
57834
57835       id myString = @"this is a constant string object";
57836
57837 The constant string objects are by default instances of the
57838'NXConstantString' class which is provided by the GNU Objective-C
57839runtime.  To get the definition of this class you must include the
57840'objc/NXConstStr.h' header file.
57841
57842 User defined libraries may want to implement their own constant string
57843class.  To be able to support them, the GNU Objective-C compiler
57844provides a new command line options
57845'-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
57846to a strict structure, the same as 'NXConstantString''s structure:
57847
57848
57849     @interface MyConstantStringClass
57850     {
57851       Class isa;
57852       char *c_string;
57853       unsigned int len;
57854     }
57855     @end
57856
57857
57858 'NXConstantString' inherits from 'Object'; user class libraries may
57859choose to inherit the customized constant string class from a different
57860class than 'Object'.  There is no requirement in the methods the
57861constant string class has to implement, but the final ivar layout of the
57862class must be the compatible with the given structure.
57863
57864 When the compiler creates the statically allocated constant string
57865object, the 'c_string' field will be filled by the compiler with the
57866string; the 'length' field will be filled by the compiler with the
57867string length; the 'isa' pointer will be filled with 'NULL' by the
57868compiler, and it will later be fixed up automatically at runtime by the
57869GNU Objective-C runtime library to point to the class which was set by
57870the '-fconstant-string-class' option when the object file is loaded (if
57871you wonder how it works behind the scenes, the name of the class to use,
57872and the list of static objects to fixup, are stored by the compiler in
57873the object file in a place where the GNU runtime library will find them
57874at runtime).
57875
57876 As a result, when a file is compiled with the '-fconstant-string-class'
57877option, all the constant string objects will be instances of the class
57878specified as argument to this option.  It is possible to have multiple
57879compilation units referring to different constant string classes,
57880neither the compiler nor the linker impose any restrictions in doing
57881this.
57882
57883
57884File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
57885
578868.6 'compatibility_alias'
57887=========================
57888
57889The keyword '@compatibility_alias' allows you to define a class name as
57890equivalent to another class name.  For example:
57891
57892     @compatibility_alias WOApplication GSWApplication;
57893
57894 tells the compiler that each time it encounters 'WOApplication' as a
57895class name, it should replace it with 'GSWApplication' (that is,
57896'WOApplication' is just an alias for 'GSWApplication').
57897
57898 There are some constraints on how this can be used--
57899
57900   * 'WOApplication' (the alias) must not be an existing class;
57901
57902   * 'GSWApplication' (the real class) must be an existing class.
57903
57904
57905File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
57906
579078.7 Exceptions
57908==============
57909
57910GNU Objective-C provides exception support built into the language, as
57911in the following example:
57912
57913       @try {
57914         ...
57915            @throw expr;
57916         ...
57917       }
57918       @catch (AnObjCClass *exc) {
57919         ...
57920           @throw expr;
57921         ...
57922           @throw;
57923         ...
57924       }
57925       @catch (AnotherClass *exc) {
57926         ...
57927       }
57928       @catch (id allOthers) {
57929         ...
57930       }
57931       @finally {
57932         ...
57933           @throw expr;
57934         ...
57935       }
57936
57937 The '@throw' statement may appear anywhere in an Objective-C or
57938Objective-C++ program; when used inside of a '@catch' block, the
57939'@throw' may appear without an argument (as shown above), in which case
57940the object caught by the '@catch' will be rethrown.
57941
57942 Note that only (pointers to) Objective-C objects may be thrown and
57943caught using this scheme.  When an object is thrown, it will be caught
57944by the nearest '@catch' clause capable of handling objects of that type,
57945analogously to how 'catch' blocks work in C++ and Java.  A '@catch(id
57946...)' clause (as shown above) may also be provided to catch any and all
57947Objective-C exceptions not caught by previous '@catch' clauses (if any).
57948
57949 The '@finally' clause, if present, will be executed upon exit from the
57950immediately preceding '@try ... @catch' section.  This will happen
57951regardless of whether any exceptions are thrown, caught or rethrown
57952inside the '@try ... @catch' section, analogously to the behavior of the
57953'finally' clause in Java.
57954
57955 There are several caveats to using the new exception mechanism:
57956
57957   * The '-fobjc-exceptions' command line option must be used when
57958     compiling Objective-C files that use exceptions.
57959
57960   * With the GNU runtime, exceptions are always implemented as "native"
57961     exceptions and it is recommended that the '-fexceptions' and
57962     '-shared-libgcc' options are used when linking.
57963
57964   * With the NeXT runtime, although currently designed to be binary
57965     compatible with 'NS_HANDLER'-style idioms provided by the
57966     'NSException' class, the new exceptions can only be used on Mac OS
57967     X 10.3 (Panther) and later systems, due to additional functionality
57968     needed in the NeXT Objective-C runtime.
57969
57970   * As mentioned above, the new exceptions do not support handling
57971     types other than Objective-C objects.  Furthermore, when used from
57972     Objective-C++, the Objective-C exception model does not
57973     interoperate with C++ exceptions at this time.  This means you
57974     cannot '@throw' an exception from Objective-C and 'catch' it in
57975     C++, or vice versa (i.e., 'throw ... @catch').
57976
57977
57978File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
57979
579808.8 Synchronization
57981===================
57982
57983GNU Objective-C provides support for synchronized blocks:
57984
57985       @synchronized (ObjCClass *guard) {
57986         ...
57987       }
57988
57989 Upon entering the '@synchronized' block, a thread of execution shall
57990first check whether a lock has been placed on the corresponding 'guard'
57991object by another thread.  If it has, the current thread shall wait
57992until the other thread relinquishes its lock.  Once 'guard' becomes
57993available, the current thread will place its own lock on it, execute the
57994code contained in the '@synchronized' block, and finally relinquish the
57995lock (thereby making 'guard' available to other threads).
57996
57997 Unlike Java, Objective-C does not allow for entire methods to be marked
57998'@synchronized'.  Note that throwing exceptions out of '@synchronized'
57999blocks is allowed, and will cause the guarding object to be unlocked
58000properly.
58001
58002 Because of the interactions between synchronization and exception
58003handling, you can only use '@synchronized' when compiling with
58004exceptions enabled, that is with the command line option
58005'-fobjc-exceptions'.
58006
58007
58008File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
58009
580108.9 Fast Enumeration
58011====================
58012
58013* Menu:
58014
58015* Using fast enumeration::
58016* c99-like fast enumeration syntax::
58017* Fast enumeration details::
58018* Fast enumeration protocol::
58019
58020
58021File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
58022
580238.9.1 Using Fast Enumeration
58024----------------------------
58025
58026GNU Objective-C provides support for the fast enumeration syntax:
58027
58028       id array = ...;
58029       id object;
58030
58031       for (object in array)
58032       {
58033         /* Do something with 'object' */
58034       }
58035
58036 'array' needs to be an Objective-C object (usually a collection object,
58037for example an array, a dictionary or a set) which implements the "Fast
58038Enumeration Protocol" (see below).  If you are using a Foundation
58039library such as GNUstep Base or Apple Cocoa Foundation, all collection
58040objects in the library implement this protocol and can be used in this
58041way.
58042
58043 The code above would iterate over all objects in 'array'.  For each of
58044them, it assigns it to 'object', then executes the 'Do something with
58045'object'' statements.
58046
58047 Here is a fully worked-out example using a Foundation library (which
58048provides the implementation of 'NSArray', 'NSString' and 'NSLog'):
58049
58050       NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
58051       NSString *object;
58052
58053       for (object in array)
58054         NSLog (@"Iterating over %@", object);
58055
58056
58057File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
58058
580598.9.2 C99-Like Fast Enumeration Syntax
58060--------------------------------------
58061
58062A c99-like declaration syntax is also allowed:
58063
58064       id array = ...;
58065
58066       for (id object in array)
58067       {
58068         /* Do something with 'object'  */
58069       }
58070
58071 this is completely equivalent to:
58072
58073       id array = ...;
58074
58075       {
58076         id object;
58077         for (object in array)
58078         {
58079           /* Do something with 'object'  */
58080         }
58081       }
58082
58083 but can save some typing.
58084
58085 Note that the option '-std=c99' is not required to allow this syntax in
58086Objective-C.
58087
58088
58089File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
58090
580918.9.3 Fast Enumeration Details
58092------------------------------
58093
58094Here is a more technical description with the gory details.  Consider
58095the code
58096
58097       for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
58098       {
58099         STATEMENTS
58100       }
58101
58102 here is what happens when you run it:
58103
58104   * 'COLLECTION EXPRESSION' is evaluated exactly once and the result is
58105     used as the collection object to iterate over.  This means it is
58106     safe to write code such as 'for (object in [NSDictionary
58107     keyEnumerator]) ...'.
58108
58109   * the iteration is implemented by the compiler by repeatedly getting
58110     batches of objects from the collection object using the fast
58111     enumeration protocol (see below), then iterating over all objects
58112     in the batch.  This is faster than a normal enumeration where
58113     objects are retrieved one by one (hence the name "fast
58114     enumeration").
58115
58116   * if there are no objects in the collection, then 'OBJECT EXPRESSION'
58117     is set to 'nil' and the loop immediately terminates.
58118
58119   * if there are objects in the collection, then for each object in the
58120     collection (in the order they are returned) 'OBJECT EXPRESSION' is
58121     set to the object, then 'STATEMENTS' are executed.
58122
58123   * 'STATEMENTS' can contain 'break' and 'continue' commands, which
58124     will abort the iteration or skip to the next loop iteration as
58125     expected.
58126
58127   * when the iteration ends because there are no more objects to
58128     iterate over, 'OBJECT EXPRESSION' is set to 'nil'.  This allows you
58129     to determine whether the iteration finished because a 'break'
58130     command was used (in which case 'OBJECT EXPRESSION' will remain set
58131     to the last object that was iterated over) or because it iterated
58132     over all the objects (in which case 'OBJECT EXPRESSION' will be set
58133     to 'nil').
58134
58135   * 'STATEMENTS' must not make any changes to the collection object; if
58136     they do, it is a hard error and the fast enumeration terminates by
58137     invoking 'objc_enumerationMutation', a runtime function that
58138     normally aborts the program but which can be customized by
58139     Foundation libraries via 'objc_set_mutation_handler' to do
58140     something different, such as raising an exception.
58141
58142
58143File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
58144
581458.9.4 Fast Enumeration Protocol
58146-------------------------------
58147
58148If you want your own collection object to be usable with fast
58149enumeration, you need to have it implement the method
58150
58151     - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
58152                                           objects: (id *)objects
58153                                             count: (unsigned long)len;
58154
58155 where 'NSFastEnumerationState' must be defined in your code as follows:
58156
58157     typedef struct
58158     {
58159       unsigned long state;
58160       id            *itemsPtr;
58161       unsigned long *mutationsPtr;
58162       unsigned long extra[5];
58163     } NSFastEnumerationState;
58164
58165 If no 'NSFastEnumerationState' is defined in your code, the compiler
58166will automatically replace 'NSFastEnumerationState *' with 'struct
58167__objcFastEnumerationState *', where that type is silently defined by
58168the compiler in an identical way.  This can be confusing and we
58169recommend that you define 'NSFastEnumerationState' (as shown above)
58170instead.
58171
58172 The method is called repeatedly during a fast enumeration to retrieve
58173batches of objects.  Each invocation of the method should retrieve the
58174next batch of objects.
58175
58176 The return value of the method is the number of objects in the current
58177batch; this should not exceed 'len', which is the maximum size of a
58178batch as requested by the caller.  The batch itself is returned in the
58179'itemsPtr' field of the 'NSFastEnumerationState' struct.
58180
58181 To help with returning the objects, the 'objects' array is a C array
58182preallocated by the caller (on the stack) of size 'len'.  In many cases
58183you can put the objects you want to return in that 'objects' array, then
58184do 'itemsPtr = objects'.  But you don't have to; if your collection
58185already has the objects to return in some form of C array, it could
58186return them from there instead.
58187
58188 The 'state' and 'extra' fields of the 'NSFastEnumerationState'
58189structure allows your collection object to keep track of the state of
58190the enumeration.  In a simple array implementation, 'state' may keep
58191track of the index of the last object that was returned, and 'extra' may
58192be unused.
58193
58194 The 'mutationsPtr' field of the 'NSFastEnumerationState' is used to
58195keep track of mutations.  It should point to a number; before working on
58196each object, the fast enumeration loop will check that this number has
58197not changed.  If it has, a mutation has happened and the fast
58198enumeration will abort.  So, 'mutationsPtr' could be set to point to
58199some sort of version number of your collection, which is increased by
58200one every time there is a change (for example when an object is added or
58201removed).  Or, if you are content with less strict mutation checks, it
58202could point to the number of objects in your collection or some other
58203value that can be checked to perform an approximate check that the
58204collection has not been mutated.
58205
58206 Finally, note how we declared the 'len' argument and the return value
58207to be of type 'unsigned long'.  They could also be declared to be of
58208type 'unsigned int' and everything would still work.
58209
58210
58211File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
58212
582138.10 Messaging with the GNU Objective-C Runtime
58214===============================================
58215
58216This section is specific for the GNU Objective-C runtime.  If you are
58217using a different runtime, you can skip it.
58218
58219 The implementation of messaging in the GNU Objective-C runtime is
58220designed to be portable, and so is based on standard C.
58221
58222 Sending a message in the GNU Objective-C runtime is composed of two
58223separate steps.  First, there is a call to the lookup function,
58224'objc_msg_lookup ()' (or, in the case of messages to super,
58225'objc_msg_lookup_super ()').  This runtime function takes as argument
58226the receiver and the selector of the method to be called; it returns the
58227'IMP', that is a pointer to the function implementing the method.  The
58228second step of method invocation consists of casting this pointer
58229function to the appropriate function pointer type, and calling the
58230function pointed to it with the right arguments.
58231
58232 For example, when the compiler encounters a method invocation such as
58233'[object init]', it compiles it into a call to 'objc_msg_lookup (object,
58234@selector(init))' followed by a cast of the returned value to the
58235appropriate function pointer type, and then it calls it.
58236
58237* Menu:
58238
58239* Dynamically registering methods::
58240* Forwarding hook::
58241
58242
58243File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
58244
582458.10.1 Dynamically Registering Methods
58246--------------------------------------
58247
58248If 'objc_msg_lookup()' does not find a suitable method implementation,
58249because the receiver does not implement the required method, it tries to
58250see if the class can dynamically register the method.
58251
58252 To do so, the runtime checks if the class of the receiver implements
58253the method
58254
58255     + (BOOL) resolveInstanceMethod: (SEL)selector;
58256
58257 in the case of an instance method, or
58258
58259     + (BOOL) resolveClassMethod: (SEL)selector;
58260
58261 in the case of a class method.  If the class implements it, the runtime
58262invokes it, passing as argument the selector of the original method, and
58263if it returns 'YES', the runtime tries the lookup again, which could now
58264succeed if a matching method was added dynamically by
58265'+resolveInstanceMethod:' or '+resolveClassMethod:'.
58266
58267 This allows classes to dynamically register methods (by adding them to
58268the class using 'class_addMethod') when they are first called.  To do
58269so, a class should implement '+resolveInstanceMethod:' (or, depending on
58270the case, '+resolveClassMethod:') and have it recognize the selectors of
58271methods that can be registered dynamically at runtime, register them,
58272and return 'YES'.  It should return 'NO' for methods that it does not
58273dynamically registered at runtime.
58274
58275 If '+resolveInstanceMethod:' (or '+resolveClassMethod:') is not
58276implemented or returns 'NO', the runtime then tries the forwarding hook.
58277
58278 Support for '+resolveInstanceMethod:' and 'resolveClassMethod:' was
58279added to the GNU Objective-C runtime in GCC version 4.6.
58280
58281
58282File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
58283
582848.10.2 Forwarding Hook
58285----------------------
58286
58287The GNU Objective-C runtime provides a hook, called
58288'__objc_msg_forward2', which is called by 'objc_msg_lookup()' when it
58289cannot find a method implementation in the runtime tables and after
58290calling '+resolveInstanceMethod:' and '+resolveClassMethod:' has been
58291attempted and did not succeed in dynamically registering the method.
58292
58293 To configure the hook, you set the global variable
58294'__objc_msg_forward2' to a function with the same argument and return
58295types of 'objc_msg_lookup()'.  When 'objc_msg_lookup()' cannot find a
58296method implementation, it invokes the hook function you provided to get
58297a method implementation to return.  So, in practice
58298'__objc_msg_forward2' allows you to extend 'objc_msg_lookup()' by adding
58299some custom code that is called to do a further lookup when no standard
58300method implementation can be found using the normal lookup.
58301
58302 This hook is generally reserved for "Foundation" libraries such as
58303GNUstep Base, which use it to implement their high-level method
58304forwarding API, typically based around the 'forwardInvocation:' method.
58305So, unless you are implementing your own "Foundation" library, you
58306should not set this hook.
58307
58308 In a typical forwarding implementation, the '__objc_msg_forward2' hook
58309function determines the argument and return type of the method that is
58310being looked up, and then creates a function that takes these arguments
58311and has that return type, and returns it to the caller.  Creating this
58312function is non-trivial and is typically performed using a dedicated
58313library such as 'libffi'.
58314
58315 The forwarding method implementation thus created is returned by
58316'objc_msg_lookup()' and is executed as if it was a normal method
58317implementation.  When the forwarding method implementation is called, it
58318is usually expected to pack all arguments into some sort of object
58319(typically, an 'NSInvocation' in a "Foundation" library), and hand it
58320over to the programmer ('forwardInvocation:') who is then allowed to
58321manipulate the method invocation using a high-level API provided by the
58322"Foundation" library.  For example, the programmer may want to examine
58323the method invocation arguments and name and potentially change them
58324before forwarding the method invocation to one or more local objects
58325('performInvocation:') or even to remote objects (by using Distributed
58326Objects or some other mechanism).  When all this completes, the return
58327value is passed back and must be returned correctly to the original
58328caller.
58329
58330 Note that the GNU Objective-C runtime currently provides no support for
58331method forwarding or method invocations other than the
58332'__objc_msg_forward2' hook.
58333
58334 If the forwarding hook does not exist or returns 'NULL', the runtime
58335currently attempts forwarding using an older, deprecated API, and if
58336that fails, it aborts the program.  In future versions of the GNU
58337Objective-C runtime, the runtime will immediately abort.
58338
58339
58340File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
58341
583429 Binary Compatibility
58343**********************
58344
58345Binary compatibility encompasses several related concepts:
58346
58347"application binary interface (ABI)"
58348     The set of runtime conventions followed by all of the tools that
58349     deal with binary representations of a program, including compilers,
58350     assemblers, linkers, and language runtime support.  Some ABIs are
58351     formal with a written specification, possibly designed by multiple
58352     interested parties.  Others are simply the way things are actually
58353     done by a particular set of tools.
58354
58355"ABI conformance"
58356     A compiler conforms to an ABI if it generates code that follows all
58357     of the specifications enumerated by that ABI.  A library conforms
58358     to an ABI if it is implemented according to that ABI.  An
58359     application conforms to an ABI if it is built using tools that
58360     conform to that ABI and does not contain source code that
58361     specifically changes behavior specified by the ABI.
58362
58363"calling conventions"
58364     Calling conventions are a subset of an ABI that specify of how
58365     arguments are passed and function results are returned.
58366
58367"interoperability"
58368     Different sets of tools are interoperable if they generate files
58369     that can be used in the same program.  The set of tools includes
58370     compilers, assemblers, linkers, libraries, header files, startup
58371     files, and debuggers.  Binaries produced by different sets of tools
58372     are not interoperable unless they implement the same ABI.  This
58373     applies to different versions of the same tools as well as tools
58374     from different vendors.
58375
58376"intercallability"
58377     Whether a function in a binary built by one set of tools can call a
58378     function in a binary built by a different set of tools is a subset
58379     of interoperability.
58380
58381"implementation-defined features"
58382     Language standards include lists of implementation-defined features
58383     whose behavior can vary from one implementation to another.  Some
58384     of these features are normally covered by a platform's ABI and
58385     others are not.  The features that are not covered by an ABI
58386     generally affect how a program behaves, but not intercallability.
58387
58388"compatibility"
58389     Conformance to the same ABI and the same behavior of
58390     implementation-defined features are both relevant for
58391     compatibility.
58392
58393 The application binary interface implemented by a C or C++ compiler
58394affects code generation and runtime support for:
58395
58396   * size and alignment of data types
58397   * layout of structured types
58398   * calling conventions
58399   * register usage conventions
58400   * interfaces for runtime arithmetic support
58401   * object file formats
58402
58403 In addition, the application binary interface implemented by a C++
58404compiler affects code generation and runtime support for:
58405   * name mangling
58406   * exception handling
58407   * invoking constructors and destructors
58408   * layout, alignment, and padding of classes
58409   * layout and alignment of virtual tables
58410
58411 Some GCC compilation options cause the compiler to generate code that
58412does not conform to the platform's default ABI.  Other options cause
58413different program behavior for implementation-defined features that are
58414not covered by an ABI.  These options are provided for consistency with
58415other compilers that do not follow the platform's default ABI or the
58416usual behavior of implementation-defined features for the platform.  Be
58417very careful about using such options.
58418
58419 Most platforms have a well-defined ABI that covers C code, but ABIs
58420that cover C++ functionality are not yet common.
58421
58422 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
58423written, vendor-neutral C++ ABI that was designed to be specific to
5842464-bit Itanium but also includes generic specifications that apply to
58425any platform.  This C++ ABI is also implemented by other compiler
58426vendors on some platforms, notably GNU/Linux and BSD systems.  We have
58427tried hard to provide a stable ABI that will be compatible with future
58428GCC releases, but it is possible that we will encounter problems that
58429make this difficult.  Such problems could include different
58430interpretations of the C++ ABI by different vendors, bugs in the ABI, or
58431bugs in the implementation of the ABI in different compilers.  GCC's
58432'-Wabi' switch warns when G++ generates code that is probably not
58433compatible with the C++ ABI.
58434
58435 The C++ library used with a C++ compiler includes the Standard C++
58436Library, with functionality defined in the C++ Standard, plus language
58437runtime support.  The runtime support is included in a C++ ABI, but
58438there is no formal ABI for the Standard C++ Library.  Two
58439implementations of that library are interoperable if one follows the
58440de-facto ABI of the other and if they are both built with the same
58441compiler, or with compilers that conform to the same ABI for C++
58442compiler and runtime support.
58443
58444 When G++ and another C++ compiler conform to the same C++ ABI, but the
58445implementations of the Standard C++ Library that they normally use do
58446not follow the same ABI for the Standard C++ Library, object files built
58447with those compilers can be used in the same program only if they use
58448the same C++ library.  This requires specifying the location of the C++
58449library header files when invoking the compiler whose usual library is
58450not being used.  The location of GCC's C++ header files depends on how
58451the GCC build was configured, but can be seen by using the G++ '-v'
58452option.  With default configuration options for G++ 3.3 the compile line
58453for a different C++ compiler needs to include
58454
58455         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
58456
58457 Similarly, compiling code with G++ that must use a C++ library other
58458than the GNU C++ library requires specifying the location of the header
58459files for that other library.
58460
58461 The most straightforward way to link a program to use a particular C++
58462library is to use a C++ driver that specifies that C++ library by
58463default.  The 'g++' driver, for example, tells the linker where to find
58464GCC's C++ library ('libstdc++') plus the other libraries and startup
58465files it needs, in the proper order.
58466
58467 If a program must use a different C++ library and it's not possible to
58468do the final link using a C++ driver that uses that library by default,
58469it is necessary to tell 'g++' the location and name of that library.  It
58470might also be necessary to specify different startup files and other
58471runtime support libraries, and to suppress the use of GCC's support
58472libraries with one or more of the options '-nostdlib', '-nostartfiles',
58473and '-nodefaultlibs'.
58474
58475
58476File: gcc.info,  Node: Gcov,  Next: Gcov-tool,  Prev: Compatibility,  Up: Top
58477
5847810 'gcov'--a Test Coverage Program
58479**********************************
58480
58481'gcov' is a tool you can use in conjunction with GCC to test code
58482coverage in your programs.
58483
58484* Menu:
58485
58486* Gcov Intro::                  Introduction to gcov.
58487* Invoking Gcov::               How to use gcov.
58488* Gcov and Optimization::       Using gcov with GCC optimization.
58489* Gcov Data Files::             The files used by gcov.
58490* Cross-profiling::             Data file relocation.
58491
58492
58493File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
58494
5849510.1 Introduction to 'gcov'
58496===========================
58497
58498'gcov' is a test coverage program.  Use it in concert with GCC to
58499analyze your programs to help create more efficient, faster running code
58500and to discover untested parts of your program.  You can use 'gcov' as a
58501profiling tool to help discover where your optimization efforts will
58502best affect your code.  You can also use 'gcov' along with the other
58503profiling tool, 'gprof', to assess which parts of your code use the
58504greatest amount of computing time.
58505
58506 Profiling tools help you analyze your code's performance.  Using a
58507profiler such as 'gcov' or 'gprof', you can find out some basic
58508performance statistics, such as:
58509
58510   * how often each line of code executes
58511
58512   * what lines of code are actually executed
58513
58514   * how much computing time each section of code uses
58515
58516 Once you know these things about how your code works when compiled, you
58517can look at each module to see which modules should be optimized.
58518'gcov' helps you determine where to work on optimization.
58519
58520 Software developers also use coverage testing in concert with
58521testsuites, to make sure software is actually good enough for a release.
58522Testsuites can verify that a program works as expected; a coverage
58523program tests to see how much of the program is exercised by the
58524testsuite.  Developers can then determine what kinds of test cases need
58525to be added to the testsuites to create both better testing and a better
58526final product.
58527
58528 You should compile your code without optimization if you plan to use
58529'gcov' because the optimization, by combining some lines of code into
58530one function, may not give you as much information as you need to look
58531for 'hot spots' where the code is using a great deal of computer time.
58532Likewise, because 'gcov' accumulates statistics by line (at the lowest
58533resolution), it works best with a programming style that places only one
58534statement on each line.  If you use complicated macros that expand to
58535loops or to other control structures, the statistics are less
58536helpful--they only report on the line where the macro call appears.  If
58537your complex macros behave like functions, you can replace them with
58538inline functions to solve this problem.
58539
58540 'gcov' creates a logfile called 'SOURCEFILE.gcov' which indicates how
58541many times each line of a source file 'SOURCEFILE.c' has executed.  You
58542can use these logfiles along with 'gprof' to aid in fine-tuning the
58543performance of your programs.  'gprof' gives timing information you can
58544use along with the information you get from 'gcov'.
58545
58546 'gcov' works only on code compiled with GCC.  It is not compatible with
58547any other profiling or test coverage mechanism.
58548
58549
58550File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
58551
5855210.2 Invoking 'gcov'
58553====================
58554
58555     gcov [OPTIONS] FILES
58556
58557 'gcov' accepts the following options:
58558
58559'-a'
58560'--all-blocks'
58561     Write individual execution counts for every basic block.  Normally
58562     gcov outputs execution counts only for the main blocks of a line.
58563     With this option you can determine if blocks within a single line
58564     are not being executed.
58565
58566'-b'
58567'--branch-probabilities'
58568     Write branch frequencies to the output file, and write branch
58569     summary info to the standard output.  This option allows you to see
58570     how often each branch in your program was taken.  Unconditional
58571     branches will not be shown, unless the '-u' option is given.
58572
58573'-c'
58574'--branch-counts'
58575     Write branch frequencies as the number of branches taken, rather
58576     than the percentage of branches taken.
58577
58578'-d'
58579'--display-progress'
58580     Display the progress on the standard output.
58581
58582'-f'
58583'--function-summaries'
58584     Output summaries for each function in addition to the file level
58585     summary.
58586
58587'-h'
58588'--help'
58589     Display help about using 'gcov' (on the standard output), and exit
58590     without doing any further processing.
58591
58592'-j'
58593'--json-format'
58594     Output gcov file in an easy-to-parse JSON intermediate format which
58595     does not require source code for generation.  The JSON file is
58596     compressed with gzip compression algorithm and the files have
58597     '.gcov.json.gz' extension.
58598
58599     Structure of the JSON is following:
58600
58601          {
58602            "current_working_directory": "foo/bar",
58603            "data_file": "a.out",
58604            "format_version": "1",
58605            "gcc_version": "11.1.1 20210510"
58606            "files": ["$file"]
58607          }
58608
58609     Fields of the root element have following semantics:
58610
58611        * CURRENT_WORKING_DIRECTORY: working directory where a
58612          compilation unit was compiled
58613
58614        * DATA_FILE: name of the data file (GCDA)
58615
58616        * FORMAT_VERSION: semantic version of the format
58617
58618        * GCC_VERSION: version of the GCC compiler
58619
58620     Each FILE has the following form:
58621
58622          {
58623            "file": "a.c",
58624            "functions": ["$function"],
58625            "lines": ["$line"]
58626          }
58627
58628     Fields of the FILE element have following semantics:
58629
58630        * FILE_NAME: name of the source file
58631
58632     Each FUNCTION has the following form:
58633
58634          {
58635            "blocks": 2,
58636            "blocks_executed": 2,
58637            "demangled_name": "foo",
58638            "end_column": 1,
58639            "end_line": 4,
58640            "execution_count": 1,
58641            "name": "foo",
58642            "start_column": 5,
58643            "start_line": 1
58644          }
58645
58646     Fields of the FUNCTION element have following semantics:
58647
58648        * BLOCKS: number of blocks that are in the function
58649
58650        * BLOCKS_EXECUTED: number of executed blocks of the function
58651
58652        * DEMANGLED_NAME: demangled name of the function
58653
58654        * END_COLUMN: column in the source file where the function ends
58655
58656        * END_LINE: line in the source file where the function ends
58657
58658        * EXECUTION_COUNT: number of executions of the function
58659
58660        * NAME: name of the function
58661
58662        * START_COLUMN: column in the source file where the function
58663          begins
58664
58665        * START_LINE: line in the source file where the function begins
58666
58667     Note that line numbers and column numbers number from 1.  In the
58668     current implementation, START_LINE and START_COLUMN do not include
58669     any template parameters and the leading return type but that this
58670     is likely to be fixed in the future.
58671
58672     Each LINE has the following form:
58673
58674          {
58675            "branches": ["$branch"],
58676            "count": 2,
58677            "line_number": 15,
58678            "unexecuted_block": false,
58679            "function_name": "foo",
58680          }
58681
58682     Branches are present only with -B option.  Fields of the LINE
58683     element have following semantics:
58684
58685        * COUNT: number of executions of the line
58686
58687        * LINE_NUMBER: line number
58688
58689        * UNEXECUTED_BLOCK: flag whether the line contains an unexecuted
58690          block (not all statements on the line are executed)
58691
58692        * FUNCTION_NAME: a name of a function this LINE belongs to (for
58693          a line with an inlined statements can be not set)
58694
58695     Each BRANCH has the following form:
58696
58697          {
58698            "count": 11,
58699            "fallthrough": true,
58700            "throw": false
58701          }
58702
58703     Fields of the BRANCH element have following semantics:
58704
58705        * COUNT: number of executions of the branch
58706
58707        * FALLTHROUGH: true when the branch is a fall through branch
58708
58709        * THROW: true when the branch is an exceptional branch
58710
58711'-H'
58712'--human-readable'
58713     Write counts in human readable format (like 24.6k).
58714
58715'-k'
58716'--use-colors'
58717
58718     Use colors for lines of code that have zero coverage.  We use red
58719     color for non-exceptional lines and cyan for exceptional.  Same
58720     colors are used for basic blocks with '-a' option.
58721
58722'-l'
58723'--long-file-names'
58724     Create long file names for included source files.  For example, if
58725     the header file 'x.h' contains code, and was included in the file
58726     'a.c', then running 'gcov' on the file 'a.c' will produce an output
58727     file called 'a.c##x.h.gcov' instead of 'x.h.gcov'.  This can be
58728     useful if 'x.h' is included in multiple source files and you want
58729     to see the individual contributions.  If you use the '-p' option,
58730     both the including and included file names will be complete path
58731     names.
58732
58733'-m'
58734'--demangled-names'
58735     Display demangled function names in output.  The default is to show
58736     mangled function names.
58737
58738'-n'
58739'--no-output'
58740     Do not create the 'gcov' output file.
58741
58742'-o DIRECTORY|FILE'
58743'--object-directory DIRECTORY'
58744'--object-file FILE'
58745     Specify either the directory containing the gcov data files, or the
58746     object path name.  The '.gcno', and '.gcda' data files are searched
58747     for using this option.  If a directory is specified, the data files
58748     are in that directory and named after the input file name, without
58749     its extension.  If a file is specified here, the data files are
58750     named after that file, without its extension.
58751
58752'-p'
58753'--preserve-paths'
58754     Preserve complete path information in the names of generated
58755     '.gcov' files.  Without this option, just the filename component is
58756     used.  With this option, all directories are used, with '/'
58757     characters translated to '#' characters, '.' directory components
58758     removed and unremoveable '..' components renamed to '^'.  This is
58759     useful if sourcefiles are in several different directories.
58760
58761'-q'
58762'--use-hotness-colors'
58763
58764     Emit perf-like colored output for hot lines.  Legend of the color
58765     scale is printed at the very beginning of the output file.
58766
58767'-r'
58768'--relative-only'
58769     Only output information about source files with a relative pathname
58770     (after source prefix elision).  Absolute paths are usually system
58771     header files and coverage of any inline functions therein is
58772     normally uninteresting.
58773
58774'-s DIRECTORY'
58775'--source-prefix DIRECTORY'
58776     A prefix for source file names to remove when generating the output
58777     coverage files.  This option is useful when building in a separate
58778     directory, and the pathname to the source directory is not wanted
58779     when determining the output file names.  Note that this prefix
58780     detection is applied before determining whether the source file is
58781     absolute.
58782
58783'-t'
58784'--stdout'
58785     Output to standard output instead of output files.
58786
58787'-u'
58788'--unconditional-branches'
58789     When branch probabilities are given, include those of unconditional
58790     branches.  Unconditional branches are normally not interesting.
58791
58792'-v'
58793'--version'
58794     Display the 'gcov' version number (on the standard output), and
58795     exit without doing any further processing.
58796
58797'-w'
58798'--verbose'
58799     Print verbose informations related to basic blocks and arcs.
58800
58801'-x'
58802'--hash-filenames'
58803     When using -PRESERVE-PATHS, gcov uses the full pathname of the
58804     source files to create an output filename.  This can lead to long
58805     filenames that can overflow filesystem limits.  This option creates
58806     names of the form 'SOURCE-FILE##MD5.gcov', where the SOURCE-FILE
58807     component is the final filename part and the MD5 component is
58808     calculated from the full mangled name that would have been used
58809     otherwise.  The option is an alternative to the -PRESERVE-PATHS on
58810     systems which have a filesystem limit.
58811
58812 'gcov' should be run with the current directory the same as that when
58813you invoked the compiler.  Otherwise it will not be able to locate the
58814source files.  'gcov' produces files called 'MANGLEDNAME.gcov' in the
58815current directory.  These contain the coverage information of the source
58816file they correspond to.  One '.gcov' file is produced for each source
58817(or header) file containing code, which was compiled to produce the data
58818files.  The MANGLEDNAME part of the output file name is usually simply
58819the source file name, but can be something more complicated if the '-l'
58820or '-p' options are given.  Refer to those options for details.
58821
58822 If you invoke 'gcov' with multiple input files, the contributions from
58823each input file are summed.  Typically you would invoke it with the same
58824list of files as the final link of your executable.
58825
58826 The '.gcov' files contain the ':' separated fields along with program
58827source code.  The format is
58828
58829     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
58830
58831 Additional block information may succeed each line, when requested by
58832command line option.  The EXECUTION_COUNT is '-' for lines containing no
58833code.  Unexecuted lines are marked '#####' or '=====', depending on
58834whether they are reachable by non-exceptional paths or only exceptional
58835paths such as C++ exception handlers, respectively.  Given the '-a'
58836option, unexecuted blocks are marked '$$$$$' or '%%%%%', depending on
58837whether a basic block is reachable via non-exceptional or exceptional
58838paths.  Executed basic blocks having a statement with zero
58839EXECUTION_COUNT end with '*' character and are colored with magenta
58840color with the '-k' option.  This functionality is not supported in Ada.
58841
58842 Note that GCC can completely remove the bodies of functions that are
58843not needed - for instance if they are inlined everywhere.  Such
58844functions are marked with '-', which can be confusing.  Use the
58845'-fkeep-inline-functions' and '-fkeep-static-functions' options to
58846retain these functions and allow gcov to properly show their
58847EXECUTION_COUNT.
58848
58849 Some lines of information at the start have LINE_NUMBER of zero.  These
58850preamble lines are of the form
58851
58852     -:0:TAG:VALUE
58853
58854 The ordering and number of these preamble lines will be augmented as
58855'gcov' development progresses -- do not rely on them remaining
58856unchanged.  Use TAG to locate a particular preamble line.
58857
58858 The additional block information is of the form
58859
58860     TAG INFORMATION
58861
58862 The INFORMATION is human readable, but designed to be simple enough for
58863machine parsing too.
58864
58865 When printing percentages, 0% and 100% are only printed when the values
58866are _exactly_ 0% and 100% respectively.  Other values which would
58867conventionally be rounded to 0% or 100% are instead printed as the
58868nearest non-boundary value.
58869
58870 When using 'gcov', you must first compile your program with a special
58871GCC option '--coverage'.  This tells the compiler to generate additional
58872information needed by gcov (basically a flow graph of the program) and
58873also includes additional code in the object files for generating the
58874extra profiling information needed by gcov.  These additional files are
58875placed in the directory where the object file is located.
58876
58877 Running the program will cause profile output to be generated.  For
58878each source file compiled with '-fprofile-arcs', an accompanying '.gcda'
58879file will be placed in the object file directory.
58880
58881 Running 'gcov' with your program's source file names as arguments will
58882now produce a listing of the code along with frequency of execution for
58883each line.  For example, if your program is called 'tmp.cpp', this is
58884what you see when you use the basic 'gcov' facility:
58885
58886     $ g++ --coverage tmp.cpp -c
58887     $ g++ --coverage tmp.o
58888     $ a.out
58889     $ gcov tmp.cpp -m
58890     File 'tmp.cpp'
58891     Lines executed:92.86% of 14
58892     Creating 'tmp.cpp.gcov'
58893
58894 The file 'tmp.cpp.gcov' contains output from 'gcov'.  Here is a sample:
58895
58896             -:    0:Source:tmp.cpp
58897             -:    0:Working directory:/home/gcc/testcase
58898             -:    0:Graph:tmp.gcno
58899             -:    0:Data:tmp.gcda
58900             -:    0:Runs:1
58901             -:    0:Programs:1
58902             -:    1:#include <stdio.h>
58903             -:    2:
58904             -:    3:template<class T>
58905             -:    4:class Foo
58906             -:    5:{
58907             -:    6:  public:
58908            1*:    7:  Foo(): b (1000) {}
58909     ------------------
58910     Foo<char>::Foo():
58911         #####:    7:  Foo(): b (1000) {}
58912     ------------------
58913     Foo<int>::Foo():
58914             1:    7:  Foo(): b (1000) {}
58915     ------------------
58916            2*:    8:  void inc () { b++; }
58917     ------------------
58918     Foo<char>::inc():
58919         #####:    8:  void inc () { b++; }
58920     ------------------
58921     Foo<int>::inc():
58922             2:    8:  void inc () { b++; }
58923     ------------------
58924             -:    9:
58925             -:   10:  private:
58926             -:   11:  int b;
58927             -:   12:};
58928             -:   13:
58929             -:   14:template class Foo<int>;
58930             -:   15:template class Foo<char>;
58931             -:   16:
58932             -:   17:int
58933             1:   18:main (void)
58934             -:   19:{
58935             -:   20:  int i, total;
58936             1:   21:  Foo<int> counter;
58937             -:   22:
58938             1:   23:  counter.inc();
58939             1:   24:  counter.inc();
58940             1:   25:  total = 0;
58941             -:   26:
58942            11:   27:  for (i = 0; i < 10; i++)
58943            10:   28:    total += i;
58944             -:   29:
58945            1*:   30:  int v = total > 100 ? 1 : 2;
58946             -:   31:
58947             1:   32:  if (total != 45)
58948         #####:   33:    printf ("Failure\n");
58949             -:   34:  else
58950             1:   35:    printf ("Success\n");
58951             1:   36:  return 0;
58952             -:   37:}
58953
58954 Note that line 7 is shown in the report multiple times.  First
58955occurrence presents total number of execution of the line and the next
58956two belong to instances of class Foo constructors.  As you can also see,
58957line 30 contains some unexecuted basic blocks and thus execution count
58958has asterisk symbol.
58959
58960 When you use the '-a' option, you will get individual block counts, and
58961the output looks like this:
58962
58963             -:    0:Source:tmp.cpp
58964             -:    0:Working directory:/home/gcc/testcase
58965             -:    0:Graph:tmp.gcno
58966             -:    0:Data:tmp.gcda
58967             -:    0:Runs:1
58968             -:    0:Programs:1
58969             -:    1:#include <stdio.h>
58970             -:    2:
58971             -:    3:template<class T>
58972             -:    4:class Foo
58973             -:    5:{
58974             -:    6:  public:
58975            1*:    7:  Foo(): b (1000) {}
58976     ------------------
58977     Foo<char>::Foo():
58978         #####:    7:  Foo(): b (1000) {}
58979     ------------------
58980     Foo<int>::Foo():
58981             1:    7:  Foo(): b (1000) {}
58982     ------------------
58983            2*:    8:  void inc () { b++; }
58984     ------------------
58985     Foo<char>::inc():
58986         #####:    8:  void inc () { b++; }
58987     ------------------
58988     Foo<int>::inc():
58989             2:    8:  void inc () { b++; }
58990     ------------------
58991             -:    9:
58992             -:   10:  private:
58993             -:   11:  int b;
58994             -:   12:};
58995             -:   13:
58996             -:   14:template class Foo<int>;
58997             -:   15:template class Foo<char>;
58998             -:   16:
58999             -:   17:int
59000             1:   18:main (void)
59001             -:   19:{
59002             -:   20:  int i, total;
59003             1:   21:  Foo<int> counter;
59004             1:   21-block  0
59005             -:   22:
59006             1:   23:  counter.inc();
59007             1:   23-block  0
59008             1:   24:  counter.inc();
59009             1:   24-block  0
59010             1:   25:  total = 0;
59011             -:   26:
59012            11:   27:  for (i = 0; i < 10; i++)
59013             1:   27-block  0
59014            11:   27-block  1
59015            10:   28:    total += i;
59016            10:   28-block  0
59017             -:   29:
59018            1*:   30:  int v = total > 100 ? 1 : 2;
59019             1:   30-block  0
59020         %%%%%:   30-block  1
59021             1:   30-block  2
59022             -:   31:
59023             1:   32:  if (total != 45)
59024             1:   32-block  0
59025         #####:   33:    printf ("Failure\n");
59026         %%%%%:   33-block  0
59027             -:   34:  else
59028             1:   35:    printf ("Success\n");
59029             1:   35-block  0
59030             1:   36:  return 0;
59031             1:   36-block  0
59032             -:   37:}
59033
59034 In this mode, each basic block is only shown on one line - the last
59035line of the block.  A multi-line block will only contribute to the
59036execution count of that last line, and other lines will not be shown to
59037contain code, unless previous blocks end on those lines.  The total
59038execution count of a line is shown and subsequent lines show the
59039execution counts for individual blocks that end on that line.  After
59040each block, the branch and call counts of the block will be shown, if
59041the '-b' option is given.
59042
59043 Because of the way GCC instruments calls, a call count can be shown
59044after a line with no individual blocks.  As you can see, line 33
59045contains a basic block that was not executed.
59046
59047 When you use the '-b' option, your output looks like this:
59048
59049             -:    0:Source:tmp.cpp
59050             -:    0:Working directory:/home/gcc/testcase
59051             -:    0:Graph:tmp.gcno
59052             -:    0:Data:tmp.gcda
59053             -:    0:Runs:1
59054             -:    0:Programs:1
59055             -:    1:#include <stdio.h>
59056             -:    2:
59057             -:    3:template<class T>
59058             -:    4:class Foo
59059             -:    5:{
59060             -:    6:  public:
59061            1*:    7:  Foo(): b (1000) {}
59062     ------------------
59063     Foo<char>::Foo():
59064     function Foo<char>::Foo() called 0 returned 0% blocks executed 0%
59065         #####:    7:  Foo(): b (1000) {}
59066     ------------------
59067     Foo<int>::Foo():
59068     function Foo<int>::Foo() called 1 returned 100% blocks executed 100%
59069             1:    7:  Foo(): b (1000) {}
59070     ------------------
59071            2*:    8:  void inc () { b++; }
59072     ------------------
59073     Foo<char>::inc():
59074     function Foo<char>::inc() called 0 returned 0% blocks executed 0%
59075         #####:    8:  void inc () { b++; }
59076     ------------------
59077     Foo<int>::inc():
59078     function Foo<int>::inc() called 2 returned 100% blocks executed 100%
59079             2:    8:  void inc () { b++; }
59080     ------------------
59081             -:    9:
59082             -:   10:  private:
59083             -:   11:  int b;
59084             -:   12:};
59085             -:   13:
59086             -:   14:template class Foo<int>;
59087             -:   15:template class Foo<char>;
59088             -:   16:
59089             -:   17:int
59090     function main called 1 returned 100% blocks executed 81%
59091             1:   18:main (void)
59092             -:   19:{
59093             -:   20:  int i, total;
59094             1:   21:  Foo<int> counter;
59095     call    0 returned 100%
59096     branch  1 taken 100% (fallthrough)
59097     branch  2 taken 0% (throw)
59098             -:   22:
59099             1:   23:  counter.inc();
59100     call    0 returned 100%
59101     branch  1 taken 100% (fallthrough)
59102     branch  2 taken 0% (throw)
59103             1:   24:  counter.inc();
59104     call    0 returned 100%
59105     branch  1 taken 100% (fallthrough)
59106     branch  2 taken 0% (throw)
59107             1:   25:  total = 0;
59108             -:   26:
59109            11:   27:  for (i = 0; i < 10; i++)
59110     branch  0 taken 91% (fallthrough)
59111     branch  1 taken 9%
59112            10:   28:    total += i;
59113             -:   29:
59114            1*:   30:  int v = total > 100 ? 1 : 2;
59115     branch  0 taken 0% (fallthrough)
59116     branch  1 taken 100%
59117             -:   31:
59118             1:   32:  if (total != 45)
59119     branch  0 taken 0% (fallthrough)
59120     branch  1 taken 100%
59121         #####:   33:    printf ("Failure\n");
59122     call    0 never executed
59123     branch  1 never executed
59124     branch  2 never executed
59125             -:   34:  else
59126             1:   35:    printf ("Success\n");
59127     call    0 returned 100%
59128     branch  1 taken 100% (fallthrough)
59129     branch  2 taken 0% (throw)
59130             1:   36:  return 0;
59131             -:   37:}
59132
59133 For each function, a line is printed showing how many times the
59134function is called, how many times it returns and what percentage of the
59135function's blocks were executed.
59136
59137 For each basic block, a line is printed after the last line of the
59138basic block describing the branch or call that ends the basic block.
59139There can be multiple branches and calls listed for a single source line
59140if there are multiple basic blocks that end on that line.  In this case,
59141the branches and calls are each given a number.  There is no simple way
59142to map these branches and calls back to source constructs.  In general,
59143though, the lowest numbered branch or call will correspond to the
59144leftmost construct on the source line.
59145
59146 For a branch, if it was executed at least once, then a percentage
59147indicating the number of times the branch was taken divided by the
59148number of times the branch was executed will be printed.  Otherwise, the
59149message "never executed" is printed.
59150
59151 For a call, if it was executed at least once, then a percentage
59152indicating the number of times the call returned divided by the number
59153of times the call was executed will be printed.  This will usually be
59154100%, but may be less for functions that call 'exit' or 'longjmp', and
59155thus may not return every time they are called.
59156
59157 The execution counts are cumulative.  If the example program were
59158executed again without removing the '.gcda' file, the count for the
59159number of times each line in the source was executed would be added to
59160the results of the previous run(s).  This is potentially useful in
59161several ways.  For example, it could be used to accumulate data over a
59162number of program runs as part of a test verification suite, or to
59163provide more accurate long-term information over a large number of
59164program runs.
59165
59166 The data in the '.gcda' files is saved immediately before the program
59167exits.  For each source file compiled with '-fprofile-arcs', the
59168profiling code first attempts to read in an existing '.gcda' file; if
59169the file doesn't match the executable (differing number of basic block
59170counts) it will ignore the contents of the file.  It then adds in the
59171new execution counts and finally writes the data to the file.
59172
59173
59174File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
59175
5917610.3 Using 'gcov' with GCC Optimization
59177=======================================
59178
59179If you plan to use 'gcov' to help optimize your code, you must first
59180compile your program with a special GCC option '--coverage'.  Aside from
59181that, you can use any other GCC options; but if you want to prove that
59182every single line in your program was executed, you should not compile
59183with optimization at the same time.  On some machines the optimizer can
59184eliminate some simple code lines by combining them with other lines.
59185For example, code like this:
59186
59187     if (a != b)
59188       c = 1;
59189     else
59190       c = 0;
59191
59192can be compiled into one instruction on some machines.  In this case,
59193there is no way for 'gcov' to calculate separate execution counts for
59194each line because there isn't separate code for each line.  Hence the
59195'gcov' output looks like this if you compiled the program with
59196optimization:
59197
59198           100:   12:if (a != b)
59199           100:   13:  c = 1;
59200           100:   14:else
59201           100:   15:  c = 0;
59202
59203 The output shows that this block of code, combined by optimization,
59204executed 100 times.  In one sense this result is correct, because there
59205was only one instruction representing all four of these lines.  However,
59206the output does not indicate how many times the result was 0 and how
59207many times the result was 1.
59208
59209 Inlineable functions can create unexpected line counts.  Line counts
59210are shown for the source code of the inlineable function, but what is
59211shown depends on where the function is inlined, or if it is not inlined
59212at all.
59213
59214 If the function is not inlined, the compiler must emit an out of line
59215copy of the function, in any object file that needs it.  If 'fileA.o'
59216and 'fileB.o' both contain out of line bodies of a particular inlineable
59217function, they will also both contain coverage counts for that function.
59218When 'fileA.o' and 'fileB.o' are linked together, the linker will, on
59219many systems, select one of those out of line bodies for all calls to
59220that function, and remove or ignore the other.  Unfortunately, it will
59221not remove the coverage counters for the unused function body.  Hence
59222when instrumented, all but one use of that function will show zero
59223counts.
59224
59225 If the function is inlined in several places, the block structure in
59226each location might not be the same.  For instance, a condition might
59227now be calculable at compile time in some instances.  Because the
59228coverage of all the uses of the inline function will be shown for the
59229same source lines, the line counts themselves might seem inconsistent.
59230
59231 Long-running applications can use the '__gcov_reset' and '__gcov_dump'
59232facilities to restrict profile collection to the program region of
59233interest.  Calling '__gcov_reset(void)' will clear all run-time profile
59234counters to zero, and calling '__gcov_dump(void)' will cause the profile
59235information collected at that point to be dumped to '.gcda' output
59236files.  Instrumented applications use a static destructor with priority
5923799 to invoke the '__gcov_dump' function.  Thus '__gcov_dump' is executed
59238after all user defined static destructors, as well as handlers
59239registered with 'atexit'.
59240
59241 If an executable loads a dynamic shared object via dlopen
59242functionality, '-Wl,--dynamic-list-data' is needed to dump all profile
59243data.
59244
59245 Profiling run-time library reports various errors related to profile
59246manipulation and profile saving.  Errors are printed into standard error
59247output or 'GCOV_ERROR_FILE' file, if environment variable is used.  In
59248order to terminate immediately after an errors occurs set
59249'GCOV_EXIT_AT_ERROR' environment variable.  That can help users to find
59250profile clashing which leads to a misleading profile.
59251
59252
59253File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
59254
5925510.4 Brief Description of 'gcov' Data Files
59256===========================================
59257
59258'gcov' uses two files for profiling.  The names of these files are
59259derived from the original _object_ file by substituting the file suffix
59260with either '.gcno', or '.gcda'.  The files contain coverage and profile
59261data stored in a platform-independent format.  The '.gcno' files are
59262placed in the same directory as the object file.  By default, the
59263'.gcda' files are also stored in the same directory as the object file,
59264but the GCC '-fprofile-dir' option may be used to store the '.gcda'
59265files in a separate directory.
59266
59267 The '.gcno' notes file is generated when the source file is compiled
59268with the GCC '-ftest-coverage' option.  It contains information to
59269reconstruct the basic block graphs and assign source line numbers to
59270blocks.
59271
59272 The '.gcda' count data file is generated when a program containing
59273object files built with the GCC '-fprofile-arcs' option is executed.  A
59274separate '.gcda' file is created for each object file compiled with this
59275option.  It contains arc transition counts, value profile counts, and
59276some summary information.
59277
59278 It is not recommended to access the coverage files directly.  Consumers
59279should use the intermediate format that is provided by 'gcov' tool via
59280'--json-format' option.
59281
59282
59283File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
59284
5928510.5 Data File Relocation to Support Cross-Profiling
59286====================================================
59287
59288Running the program will cause profile output to be generated.  For each
59289source file compiled with '-fprofile-arcs', an accompanying '.gcda' file
59290will be placed in the object file directory.  That implicitly requires
59291running the program on the same system as it was built or having the
59292same absolute directory structure on the target system.  The program
59293will try to create the needed directory structure, if it is not already
59294present.
59295
59296 To support cross-profiling, a program compiled with '-fprofile-arcs'
59297can relocate the data files based on two environment variables:
59298
59299   * GCOV_PREFIX contains the prefix to add to the absolute paths in the
59300     object file.  Prefix can be absolute, or relative.  The default is
59301     no prefix.
59302
59303   * GCOV_PREFIX_STRIP indicates the how many initial directory names to
59304     strip off the hardwired absolute paths.  Default value is 0.
59305
59306     _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
59307     undefined, then a relative path is made out of the hardwired
59308     absolute paths.
59309
59310 For example, if the object file '/user/build/foo.o' was built with
59311'-fprofile-arcs', the final executable will try to create the data file
59312'/user/build/foo.gcda' when running on the target system.  This will
59313fail if the corresponding directory does not exist and it is unable to
59314create it.  This can be overcome by, for example, setting the
59315environment as 'GCOV_PREFIX=/target/run' and 'GCOV_PREFIX_STRIP=1'.
59316Such a setting will name the data file '/target/run/build/foo.gcda'.
59317
59318 You must move the data files to the expected directory tree in order to
59319use them for profile directed optimizations ('-fprofile-use'), or to use
59320the 'gcov' tool.
59321
59322
59323File: gcc.info,  Node: Gcov-tool,  Next: Gcov-dump,  Prev: Gcov,  Up: Top
59324
5932511 'gcov-tool'--an Offline Gcda Profile Processing Tool
59326*******************************************************
59327
59328'gcov-tool' is a tool you can use in conjunction with GCC to manipulate
59329or process gcda profile files offline.
59330
59331* Menu:
59332
59333* Gcov-tool Intro::             Introduction to gcov-tool.
59334* Invoking Gcov-tool::          How to use gcov-tool.
59335
59336
59337File: gcc.info,  Node: Gcov-tool Intro,  Next: Invoking Gcov-tool,  Up: Gcov-tool
59338
5933911.1 Introduction to 'gcov-tool'
59340================================
59341
59342'gcov-tool' is an offline tool to process gcc's gcda profile files.
59343
59344 Current gcov-tool supports the following functionalities:
59345
59346   * merge two sets of profiles with weights.
59347
59348   * read one set of profile and rewrite profile contents.  One can
59349     scale or normalize the count values.
59350
59351 Examples of the use cases for this tool are:
59352   * Collect the profiles for different set of inputs, and use this tool
59353     to merge them.  One can specify the weight to factor in the
59354     relative importance of each input.
59355
59356   * Rewrite the profile after removing a subset of the gcda files,
59357     while maintaining the consistency of the summary and the histogram.
59358
59359   * It can also be used to debug or libgcov code as the tools shares
59360     the majority code as the runtime library.
59361
59362 Note that for the merging operation, this profile generated offline may
59363contain slight different values from the online merged profile.  Here
59364are a list of typical differences:
59365
59366   * histogram difference: This offline tool recomputes the histogram
59367     after merging the counters.  The resulting histogram, therefore, is
59368     precise.  The online merging does not have this capability - the
59369     histogram is merged from two histograms and the result is an
59370     approximation.
59371
59372   * summary checksum difference: Summary checksum uses a CRC32
59373     operation.  The value depends on the link list order of gcov-info
59374     objects.  This order is different in gcov-tool from that in the
59375     online merge.  It's expected to have different summary checksums.
59376     It does not really matter as the compiler does not use this
59377     checksum anywhere.
59378
59379   * value profile counter values difference: Some counter values for
59380     value profile are runtime dependent, like heap addresses.  It's
59381     normal to see some difference in these kind of counters.
59382
59383
59384File: gcc.info,  Node: Invoking Gcov-tool,  Prev: Gcov-tool Intro,  Up: Gcov-tool
59385
5938611.2 Invoking 'gcov-tool'
59387=========================
59388
59389     gcov-tool [GLOBAL-OPTIONS] SUB_COMMAND [SUB_COMMAND-OPTIONS] PROFILE_DIR
59390
59391 'gcov-tool' accepts the following options:
59392
59393'-h'
59394'--help'
59395     Display help about using 'gcov-tool' (on the standard output), and
59396     exit without doing any further processing.
59397
59398'-v'
59399'--version'
59400     Display the 'gcov-tool' version number (on the standard output),
59401     and exit without doing any further processing.
59402
59403'merge'
59404     Merge two profile directories.
59405
59406     '-o DIRECTORY'
59407     '--output DIRECTORY'
59408          Set the output profile directory.  Default output directory
59409          name is MERGED_PROFILE.
59410
59411     '-v'
59412     '--verbose'
59413          Set the verbose mode.
59414
59415     '-w W1,W2'
59416     '--weight W1,W2'
59417          Set the merge weights of the DIRECTORY1 and DIRECTORY2,
59418          respectively.  The default weights are 1 for both.
59419
59420'rewrite'
59421     Read the specified profile directory and rewrite to a new
59422     directory.
59423
59424     '-n LONG_LONG_VALUE'
59425     '--normalize <long_long_value>'
59426          Normalize the profile.  The specified value is the max counter
59427          value in the new profile.
59428
59429     '-o DIRECTORY'
59430     '--output DIRECTORY'
59431          Set the output profile directory.  Default output name is
59432          REWRITE_PROFILE.
59433
59434     '-s FLOAT_OR_SIMPLE-FRAC_VALUE'
59435     '--scale FLOAT_OR_SIMPLE-FRAC_VALUE'
59436          Scale the profile counters.  The specified value can be in
59437          floating point value, or simple fraction value form, such 1,
59438          2, 2/3, and 5/3.
59439
59440     '-v'
59441     '--verbose'
59442          Set the verbose mode.
59443
59444'overlap'
59445     Compute the overlap score between the two specified profile
59446     directories.  The overlap score is computed based on the arc
59447     profiles.  It is defined as the sum of min (p1_counter[i] /
59448     p1_sum_all, p2_counter[i] / p2_sum_all), for all arc counter i,
59449     where p1_counter[i] and p2_counter[i] are two matched counters and
59450     p1_sum_all and p2_sum_all are the sum of counter values in profile
59451     1 and profile 2, respectively.
59452
59453     '-f'
59454     '--function'
59455          Print function level overlap score.
59456
59457     '-F'
59458     '--fullname'
59459          Print full gcda filename.
59460
59461     '-h'
59462     '--hotonly'
59463          Only print info for hot objects/functions.
59464
59465     '-o'
59466     '--object'
59467          Print object level overlap score.
59468
59469     '-t FLOAT'
59470     '--hot_threshold <float>'
59471          Set the threshold for hot counter value.
59472
59473     '-v'
59474     '--verbose'
59475          Set the verbose mode.
59476
59477
59478File: gcc.info,  Node: Gcov-dump,  Next: lto-dump,  Prev: Gcov-tool,  Up: Top
59479
5948012 'gcov-dump'--an Offline Gcda and Gcno Profile Dump Tool
59481**********************************************************
59482
59483* Menu:
59484
59485* Gcov-dump Intro::             Introduction to gcov-dump.
59486* Invoking Gcov-dump::          How to use gcov-dump.
59487
59488
59489File: gcc.info,  Node: Gcov-dump Intro,  Next: Invoking Gcov-dump,  Up: Gcov-dump
59490
5949112.1 Introduction to 'gcov-dump'
59492================================
59493
59494'gcov-dump' is a tool you can use in conjunction with GCC to dump
59495content of gcda and gcno profile files offline.
59496
59497
59498File: gcc.info,  Node: Invoking Gcov-dump,  Prev: Gcov-dump Intro,  Up: Gcov-dump
59499
5950012.2 Invoking 'gcov-dump'
59501=========================
59502
59503     Usage: gcov-dump [OPTION] ... GCOVFILES
59504
59505 'gcov-dump' accepts the following options:
59506
59507'-h'
59508'--help'
59509     Display help about using 'gcov-dump' (on the standard output), and
59510     exit without doing any further processing.
59511
59512'-l'
59513'--long'
59514     Dump content of records.
59515
59516'-p'
59517'--positions'
59518     Dump positions of records.
59519
59520'-r'
59521'--raw'
59522     Print content records in raw format.
59523
59524'-v'
59525'--version'
59526     Display the 'gcov-dump' version number (on the standard output),
59527     and exit without doing any further processing.
59528
59529
59530File: gcc.info,  Node: lto-dump,  Next: Trouble,  Prev: Gcov-dump,  Up: Top
59531
5953213 'lto-dump'--Tool for dumping LTO object files.
59533*************************************************
59534
59535* Menu:
59536
59537* lto-dump Intro::             Introduction to lto-dump.
59538* Invoking lto-dump::          How to use lto-dump.
59539
59540
59541File: gcc.info,  Node: lto-dump Intro,  Next: Invoking lto-dump,  Up: lto-dump
59542
5954313.1 Introduction to 'lto-dump'
59544===============================
59545
59546'lto-dump' is a tool you can use in conjunction with GCC to dump link
59547time optimization object files.
59548
59549
59550File: gcc.info,  Node: Invoking lto-dump,  Prev: lto-dump Intro,  Up: lto-dump
59551
5955213.2 Invoking 'lto-dump'
59553========================
59554
59555     Usage: lto-dump [OPTION] ... OBJFILES
59556
59557 'lto-dump' accepts the following options:
59558
59559'-list'
59560     Dumps list of details of functions and variables.
59561
59562'-demangle'
59563     Dump the demangled output.
59564
59565'-defined-only'
59566     Dump only the defined symbols.
59567
59568'-print-value'
59569     Dump initial values of the variables.
59570
59571'-name-sort'
59572     Sort the symbols alphabetically.
59573
59574'-size-sort'
59575     Sort the symbols according to size.
59576
59577'-reverse-sort'
59578     Dump the symbols in reverse order.
59579
59580'-no-sort'
59581     Dump the symbols in order of occurrence.
59582
59583'-symbol='
59584     Dump the details of specific symbol.
59585
59586'-objects'
59587     Dump the details of LTO objects.
59588
59589'-type-stats'
59590     Dump the statistics of tree types.
59591
59592'-tree-stats'
59593     Dump the statistics of trees.
59594
59595'-gimple-stats'
59596     Dump the statistics of gimple statements.
59597
59598'-dump-level='
59599     For deciding the optimization level of body.
59600
59601'-dump-body='
59602     Dump the specific gimple body.
59603
59604'-help'
59605     Display the dump tool help.
59606
59607
59608File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: lto-dump,  Up: Top
59609
5961014 Known Causes of Trouble with GCC
59611***********************************
59612
59613This section describes known problems that affect users of GCC.  Most of
59614these are not GCC bugs per se--if they were, we would fix them.  But the
59615result for a user may be like the result of a bug.
59616
59617 Some of these problems are due to bugs in other software, some are
59618missing features that are too much work to add, and some are places
59619where people's opinions differ as to what is best.
59620
59621* Menu:
59622
59623* Actual Bugs::         Bugs we will fix later.
59624* Interoperation::      Problems using GCC with other compilers,
59625                        and with certain linkers, assemblers and debuggers.
59626* Incompatibilities::   GCC is incompatible with traditional C.
59627* Fixed Headers::       GCC uses corrected versions of system header files.
59628                        This is necessary, but doesn't always work smoothly.
59629* Standard Libraries::  GCC uses the system C library, which might not be
59630                        compliant with the ISO C standard.
59631* Disappointments::     Regrettable things we cannot change, but not quite bugs.
59632* C++ Misunderstandings:: Common misunderstandings with GNU C++.
59633* Non-bugs::            Things we think are right, but some others disagree.
59634* Warnings and Errors:: Which problems in your code get warnings,
59635                        and which get errors.
59636
59637
59638File: gcc.info,  Node: Actual Bugs,  Next: Interoperation,  Up: Trouble
59639
5964014.1 Actual Bugs We Haven't Fixed Yet
59641=====================================
59642
59643   * The 'fixincludes' script interacts badly with automounters; if the
59644     directory of system header files is automounted, it tends to be
59645     unmounted while 'fixincludes' is running.  This would seem to be a
59646     bug in the automounter.  We don't know any good way to work around
59647     it.
59648
59649
59650File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Actual Bugs,  Up: Trouble
59651
5965214.2 Interoperation
59653===================
59654
59655This section lists various difficulties encountered in using GCC
59656together with other compilers or with the assemblers, linkers, libraries
59657and debuggers on certain systems.
59658
59659   * On many platforms, GCC supports a different ABI for C++ than do
59660     other compilers, so the object files compiled by GCC cannot be used
59661     with object files generated by another C++ compiler.
59662
59663     An area where the difference is most apparent is name mangling.
59664     The use of different name mangling is intentional, to protect you
59665     from more subtle problems.  Compilers differ as to many internal
59666     details of C++ implementation, including: how class instances are
59667     laid out, how multiple inheritance is implemented, and how virtual
59668     function calls are handled.  If the name encoding were made the
59669     same, your programs would link against libraries provided from
59670     other compilers--but the programs would then crash when run.
59671     Incompatible libraries are then detected at link time, rather than
59672     at run time.
59673
59674   * On some BSD systems, including some versions of Ultrix, use of
59675     profiling causes static variable destructors (currently used only
59676     in C++) not to be run.
59677
59678   * On a SPARC, GCC aligns all values of type 'double' on an 8-byte
59679     boundary, and it expects every 'double' to be so aligned.  The Sun
59680     compiler usually gives 'double' values 8-byte alignment, with one
59681     exception: function arguments of type 'double' may not be aligned.
59682
59683     As a result, if a function compiled with Sun CC takes the address
59684     of an argument of type 'double' and passes this pointer of type
59685     'double *' to a function compiled with GCC, dereferencing the
59686     pointer may cause a fatal signal.
59687
59688     One way to solve this problem is to compile your entire program
59689     with GCC.  Another solution is to modify the function that is
59690     compiled with Sun CC to copy the argument into a local variable;
59691     local variables are always properly aligned.  A third solution is
59692     to modify the function that uses the pointer to dereference it via
59693     the following function 'access_double' instead of directly with
59694     '*':
59695
59696          inline double
59697          access_double (double *unaligned_ptr)
59698          {
59699            union d2i { double d; int i[2]; };
59700
59701            union d2i *p = (union d2i *) unaligned_ptr;
59702            union d2i u;
59703
59704            u.i[0] = p->i[0];
59705            u.i[1] = p->i[1];
59706
59707            return u.d;
59708          }
59709
59710     Storing into the pointer can be done likewise with the same union.
59711
59712   * On Solaris, the 'malloc' function in the 'libmalloc.a' library may
59713     allocate memory that is only 4 byte aligned.  Since GCC on the
59714     SPARC assumes that doubles are 8 byte aligned, this may result in a
59715     fatal signal if doubles are stored in memory allocated by the
59716     'libmalloc.a' library.
59717
59718     The solution is to not use the 'libmalloc.a' library.  Use instead
59719     'malloc' and related functions from 'libc.a'; they do not have this
59720     problem.
59721
59722   * On the HP PA machine, ADB sometimes fails to work on functions
59723     compiled with GCC.  Specifically, it fails to work on functions
59724     that use 'alloca' or variable-size arrays.  This is because GCC
59725     doesn't generate HP-UX unwind descriptors for such functions.  It
59726     may even be impossible to generate them.
59727
59728   * Debugging ('-g') is not supported on the HP PA machine, unless you
59729     use the preliminary GNU tools.
59730
59731   * Taking the address of a label may generate errors from the HP-UX PA
59732     assembler.  GAS for the PA does not have this problem.
59733
59734   * Using floating point parameters for indirect calls to static
59735     functions will not work when using the HP assembler.  There simply
59736     is no way for GCC to specify what registers hold arguments for
59737     static functions when using the HP assembler.  GAS for the PA does
59738     not have this problem.
59739
59740   * In extremely rare cases involving some very large functions you may
59741     receive errors from the HP linker complaining about an out of
59742     bounds unconditional branch offset.  This used to occur more often
59743     in previous versions of GCC, but is now exceptionally rare.  If you
59744     should run into it, you can work around by making your function
59745     smaller.
59746
59747   * GCC compiled code sometimes emits warnings from the HP-UX assembler
59748     of the form:
59749
59750          (warning) Use of GR3 when
59751            frame >= 8192 may cause conflict.
59752
59753     These warnings are harmless and can be safely ignored.
59754
59755   * In extremely rare cases involving some very large functions you may
59756     receive errors from the AIX Assembler complaining about a
59757     displacement that is too large.  If you should run into it, you can
59758     work around by making your function smaller.
59759
59760   * The 'libstdc++.a' library in GCC relies on the SVR4 dynamic linker
59761     semantics which merges global symbols between libraries and
59762     applications, especially necessary for C++ streams functionality.
59763     This is not the default behavior of AIX shared libraries and
59764     dynamic linking.  'libstdc++.a' is built on AIX with
59765     "runtime-linking" enabled so that symbol merging can occur.  To
59766     utilize this feature, the application linked with 'libstdc++.a'
59767     must include the '-Wl,-brtl' flag on the link line.  G++ cannot
59768     impose this because this option may interfere with the semantics of
59769     the user program and users may not always use 'g++' to link his or
59770     her application.  Applications are not required to use the
59771     '-Wl,-brtl' flag on the link line--the rest of the 'libstdc++.a'
59772     library which is not dependent on the symbol merging semantics will
59773     continue to function correctly.
59774
59775   * An application can interpose its own definition of functions for
59776     functions invoked by 'libstdc++.a' with "runtime-linking" enabled
59777     on AIX.  To accomplish this the application must be linked with
59778     "runtime-linking" option and the functions explicitly must be
59779     exported by the application ('-Wl,-brtl,-bE:exportfile').
59780
59781   * AIX on the RS/6000 provides support (NLS) for environments outside
59782     of the United States.  Compilers and assemblers use NLS to support
59783     locale-specific representations of various objects including
59784     floating-point numbers ('.' vs ',' for separating decimal
59785     fractions).  There have been problems reported where the library
59786     linked with GCC does not produce the same floating-point formats
59787     that the assembler accepts.  If you have this problem, set the
59788     'LANG' environment variable to 'C' or 'En_US'.
59789
59790   * Even if you specify '-fdollars-in-identifiers', you cannot
59791     successfully use '$' in identifiers on the RS/6000 due to a
59792     restriction in the IBM assembler.  GAS supports these identifiers.
59793
59794
59795File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
59796
5979714.3 Incompatibilities of GCC
59798=============================
59799
59800There are several noteworthy incompatibilities between GNU C and K&R
59801(non-ISO) versions of C.
59802
59803   * GCC normally makes string constants read-only.  If several
59804     identical-looking string constants are used, GCC stores only one
59805     copy of the string.
59806
59807     One consequence is that you cannot call 'mktemp' with a string
59808     constant argument.  The function 'mktemp' always alters the string
59809     its argument points to.
59810
59811     Another consequence is that 'sscanf' does not work on some very old
59812     systems when passed a string constant as its format control string
59813     or input.  This is because 'sscanf' incorrectly tries to write into
59814     the string constant.  Likewise 'fscanf' and 'scanf'.
59815
59816     The solution to these problems is to change the program to use
59817     'char'-array variables with initialization strings for these
59818     purposes instead of string constants.
59819
59820   * '-2147483648' is positive.
59821
59822     This is because 2147483648 cannot fit in the type 'int', so
59823     (following the ISO C rules) its data type is 'unsigned long int'.
59824     Negating this value yields 2147483648 again.
59825
59826   * GCC does not substitute macro arguments when they appear inside of
59827     string constants.  For example, the following macro in GCC
59828
59829          #define foo(a) "a"
59830
59831     will produce output '"a"' regardless of what the argument A is.
59832
59833   * When you use 'setjmp' and 'longjmp', the only automatic variables
59834     guaranteed to remain valid are those declared 'volatile'.  This is
59835     a consequence of automatic register allocation.  Consider this
59836     function:
59837
59838          jmp_buf j;
59839
59840          foo ()
59841          {
59842            int a, b;
59843
59844            a = fun1 ();
59845            if (setjmp (j))
59846              return a;
59847
59848            a = fun2 ();
59849            /* 'longjmp (j)' may occur in 'fun3'. */
59850            return a + fun3 ();
59851          }
59852
59853     Here 'a' may or may not be restored to its first value when the
59854     'longjmp' occurs.  If 'a' is allocated in a register, then its
59855     first value is restored; otherwise, it keeps the last value stored
59856     in it.
59857
59858     If you use the '-W' option with the '-O' option, you will get a
59859     warning when GCC thinks such a problem might be possible.
59860
59861   * Programs that use preprocessing directives in the middle of macro
59862     arguments do not work with GCC.  For example, a program like this
59863     will not work:
59864
59865          foobar (
59866          #define luser
59867                  hack)
59868
59869     ISO C does not permit such a construct.
59870
59871   * K&R compilers allow comments to cross over an inclusion boundary
59872     (i.e. started in an include file and ended in the including file).
59873
59874   * Declarations of external variables and functions within a block
59875     apply only to the block containing the declaration.  In other
59876     words, they have the same scope as any other declaration in the
59877     same place.
59878
59879     In some other C compilers, an 'extern' declaration affects all the
59880     rest of the file even if it happens within a block.
59881
59882   * In traditional C, you can combine 'long', etc., with a typedef
59883     name, as shown here:
59884
59885          typedef int foo;
59886          typedef long foo bar;
59887
59888     In ISO C, this is not allowed: 'long' and other type modifiers
59889     require an explicit 'int'.
59890
59891   * PCC allows typedef names to be used as function parameters.
59892
59893   * Traditional C allows the following erroneous pair of declarations
59894     to appear together in a given scope:
59895
59896          typedef int foo;
59897          typedef foo foo;
59898
59899   * GCC treats all characters of identifiers as significant.  According
59900     to K&R-1 (2.2), "No more than the first eight characters are
59901     significant, although more may be used.".  Also according to K&R-1
59902     (2.2), "An identifier is a sequence of letters and digits; the
59903     first character must be a letter.  The underscore _ counts as a
59904     letter.", but GCC also allows dollar signs in identifiers.
59905
59906   * PCC allows whitespace in the middle of compound assignment
59907     operators such as '+='.  GCC, following the ISO standard, does not
59908     allow this.
59909
59910   * GCC complains about unterminated character constants inside of
59911     preprocessing conditionals that fail.  Some programs have English
59912     comments enclosed in conditionals that are guaranteed to fail; if
59913     these comments contain apostrophes, GCC will probably report an
59914     error.  For example, this code would produce an error:
59915
59916          #if 0
59917          You can't expect this to work.
59918          #endif
59919
59920     The best solution to such a problem is to put the text into an
59921     actual C comment delimited by '/*...*/'.
59922
59923   * Many user programs contain the declaration 'long time ();'.  In the
59924     past, the system header files on many systems did not actually
59925     declare 'time', so it did not matter what type your program
59926     declared it to return.  But in systems with ISO C headers, 'time'
59927     is declared to return 'time_t', and if that is not the same as
59928     'long', then 'long time ();' is erroneous.
59929
59930     The solution is to change your program to use appropriate system
59931     headers ('<time.h>' on systems with ISO C headers) and not to
59932     declare 'time' if the system header files declare it, or failing
59933     that to use 'time_t' as the return type of 'time'.
59934
59935   * When compiling functions that return 'float', PCC converts it to a
59936     double.  GCC actually returns a 'float'.  If you are concerned with
59937     PCC compatibility, you should declare your functions to return
59938     'double'; you might as well say what you mean.
59939
59940   * When compiling functions that return structures or unions, GCC
59941     output code normally uses a method different from that used on most
59942     versions of Unix.  As a result, code compiled with GCC cannot call
59943     a structure-returning function compiled with PCC, and vice versa.
59944
59945     The method used by GCC is as follows: a structure or union which is
59946     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
59947     union with any other size is stored into an address supplied by the
59948     caller (usually in a special, fixed register, but on some machines
59949     it is passed on the stack).  The target hook
59950     'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
59951
59952     By contrast, PCC on most target machines returns structures and
59953     unions of any size by copying the data into an area of static
59954     storage, and then returning the address of that storage as if it
59955     were a pointer value.  The caller must copy the data from that
59956     memory area to the place where the value is wanted.  GCC does not
59957     use this method because it is slower and nonreentrant.
59958
59959     On some newer machines, PCC uses a reentrant convention for all
59960     structure and union returning.  GCC on most of these machines uses
59961     a compatible convention when returning structures and unions in
59962     memory, but still returns small structures and unions in registers.
59963
59964     You can tell GCC to use a compatible convention for all structure
59965     and union returning with the option '-fpcc-struct-return'.
59966
59967   * GCC complains about program fragments such as '0x74ae-0x4000' which
59968     appear to be two hexadecimal constants separated by the minus
59969     operator.  Actually, this string is a single "preprocessing token".
59970     Each such token must correspond to one token in C.  Since this does
59971     not, GCC prints an error message.  Although it may appear obvious
59972     that what is meant is an operator and two values, the ISO C
59973     standard specifically requires that this be treated as erroneous.
59974
59975     A "preprocessing token" is a "preprocessing number" if it begins
59976     with a digit and is followed by letters, underscores, digits,
59977     periods and 'e+', 'e-', 'E+', 'E-', 'p+', 'p-', 'P+', or 'P-'
59978     character sequences.  (In strict C90 mode, the sequences 'p+',
59979     'p-', 'P+' and 'P-' cannot appear in preprocessing numbers.)
59980
59981     To make the above program fragment valid, place whitespace in front
59982     of the minus sign.  This whitespace will end the preprocessing
59983     number.
59984
59985
59986File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
59987
5998814.4 Fixed Header Files
59989=======================
59990
59991GCC needs to install corrected versions of some system header files.
59992This is because most target systems have some header files that won't
59993work with GCC unless they are changed.  Some have bugs, some are
59994incompatible with ISO C, and some depend on special features of other
59995compilers.
59996
59997 Installing GCC automatically creates and installs the fixed header
59998files, by running a program called 'fixincludes'.  Normally, you don't
59999need to pay attention to this.  But there are cases where it doesn't do
60000the right thing automatically.
60001
60002   * If you update the system's header files, such as by installing a
60003     new system version, the fixed header files of GCC are not
60004     automatically updated.  They can be updated using the 'mkheaders'
60005     script installed in 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
60006
60007   * On some systems, header file directories contain machine-specific
60008     symbolic links in certain places.  This makes it possible to share
60009     most of the header files among hosts running the same version of
60010     the system on different machine models.
60011
60012     The programs that fix the header files do not understand this
60013     special way of using symbolic links; therefore, the directory of
60014     fixed header files is good only for the machine model used to build
60015     it.
60016
60017     It is possible to make separate sets of fixed header files for the
60018     different machine models, and arrange a structure of symbolic links
60019     so as to use the proper set, but you'll have to do this by hand.
60020
60021
60022File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
60023
6002414.5 Standard Libraries
60025=======================
60026
60027GCC by itself attempts to be a conforming freestanding implementation.
60028*Note Language Standards Supported by GCC: Standards, for details of
60029what this means.  Beyond the library facilities required of such an
60030implementation, the rest of the C library is supplied by the vendor of
60031the operating system.  If that C library doesn't conform to the C
60032standards, then your programs might get warnings (especially when using
60033'-Wall') that you don't expect.
60034
60035 For example, the 'sprintf' function on SunOS 4.1.3 returns 'char *'
60036while the C standard says that 'sprintf' returns an 'int'.  The
60037'fixincludes' program could make the prototype for this function match
60038the Standard, but that would be wrong, since the function will still
60039return 'char *'.
60040
60041 If you need a Standard compliant library, then you need to find one, as
60042GCC does not provide one.  The GNU C library (called 'glibc') provides
60043ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
60044HURD-based GNU systems; no recent version of it supports other systems,
60045though some very old versions did.  Version 2.2 of the GNU C library
60046includes nearly complete C99 support.  You could also ask your operating
60047system vendor if newer libraries are available.
60048
60049
60050File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
60051
6005214.6 Disappointments and Misunderstandings
60053==========================================
60054
60055These problems are perhaps regrettable, but we don't know any practical
60056way around them.
60057
60058   * Certain local variables aren't recognized by debuggers when you
60059     compile with optimization.
60060
60061     This occurs because sometimes GCC optimizes the variable out of
60062     existence.  There is no way to tell the debugger how to compute the
60063     value such a variable "would have had", and it is not clear that
60064     would be desirable anyway.  So GCC simply does not mention the
60065     eliminated variable when it writes debugging information.
60066
60067     You have to expect a certain amount of disagreement between the
60068     executable and your source code, when you use optimization.
60069
60070   * Users often think it is a bug when GCC reports an error for code
60071     like this:
60072
60073          int foo (struct mumble *);
60074
60075          struct mumble { ... };
60076
60077          int foo (struct mumble *x)
60078          { ... }
60079
60080     This code really is erroneous, because the scope of 'struct mumble'
60081     in the prototype is limited to the argument list containing it.  It
60082     does not refer to the 'struct mumble' defined with file scope
60083     immediately below--they are two unrelated types with similar names
60084     in different scopes.
60085
60086     But in the definition of 'foo', the file-scope type is used because
60087     that is available to be inherited.  Thus, the definition and the
60088     prototype do not match, and you get an error.
60089
60090     This behavior may seem silly, but it's what the ISO standard
60091     specifies.  It is easy enough for you to make your code work by
60092     moving the definition of 'struct mumble' above the prototype.  It's
60093     not worth being incompatible with ISO C just to avoid an error for
60094     the example shown above.
60095
60096   * Accesses to bit-fields even in volatile objects works by accessing
60097     larger objects, such as a byte or a word.  You cannot rely on what
60098     size of object is accessed in order to read or write the bit-field;
60099     it may even vary for a given bit-field according to the precise
60100     usage.
60101
60102     If you care about controlling the amount of memory that is
60103     accessed, use volatile but do not use bit-fields.
60104
60105   * GCC comes with shell scripts to fix certain known problems in
60106     system header files.  They install corrected copies of various
60107     header files in a special directory where only GCC will normally
60108     look for them.  The scripts adapt to various systems by searching
60109     all the system header files for the problem cases that we know
60110     about.
60111
60112     If new system header files are installed, nothing automatically
60113     arranges to update the corrected header files.  They can be updated
60114     using the 'mkheaders' script installed in
60115     'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
60116
60117   * On 68000 and x86 systems, for instance, you can get paradoxical
60118     results if you test the precise values of floating point numbers.
60119     For example, you can find that a floating point value which is not
60120     a NaN is not equal to itself.  This results from the fact that the
60121     floating point registers hold a few more bits of precision than fit
60122     in a 'double' in memory.  Compiled code moves values between memory
60123     and floating point registers at its convenience, and moving them
60124     into memory truncates them.
60125
60126     You can partially avoid this problem by using the '-ffloat-store'
60127     option (*note Optimize Options::).
60128
60129   * On AIX and other platforms without weak symbol support, templates
60130     need to be instantiated explicitly and symbols for static members
60131     of templates will not be generated.
60132
60133   * On AIX, GCC scans object files and library archives for static
60134     constructors and destructors when linking an application before the
60135     linker prunes unreferenced symbols.  This is necessary to prevent
60136     the AIX linker from mistakenly assuming that static constructor or
60137     destructor are unused and removing them before the scanning can
60138     occur.  All static constructors and destructors found will be
60139     referenced even though the modules in which they occur may not be
60140     used by the program.  This may lead to both increased executable
60141     size and unexpected symbol references.
60142
60143
60144File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
60145
6014614.7 Common Misunderstandings with GNU C++
60147==========================================
60148
60149C++ is a complex language and an evolving one, and its standard
60150definition (the ISO C++ standard) was only recently completed.  As a
60151result, your C++ compiler may occasionally surprise you, even when its
60152behavior is correct.  This section discusses some areas that frequently
60153give rise to questions of this sort.
60154
60155* Menu:
60156
60157* Static Definitions::  Static member declarations are not definitions
60158* Name lookup::         Name lookup, templates, and accessing members of base classes
60159* Temporaries::         Temporaries may vanish before you expect
60160* Copy Assignment::     Copy Assignment operators copy virtual bases twice
60161
60162
60163File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
60164
6016514.7.1 Declare _and_ Define Static Members
60166------------------------------------------
60167
60168When a class has static data members, it is not enough to _declare_ the
60169static member; you must also _define_ it.  For example:
60170
60171     class Foo
60172     {
60173       ...
60174       void method();
60175       static int bar;
60176     };
60177
60178 This declaration only establishes that the class 'Foo' has an 'int'
60179named 'Foo::bar', and a member function named 'Foo::method'.  But you
60180still need to define _both_ 'method' and 'bar' elsewhere.  According to
60181the ISO standard, you must supply an initializer in one (and only one)
60182source file, such as:
60183
60184     int Foo::bar = 0;
60185
60186 Other C++ compilers may not correctly implement the standard behavior.
60187As a result, when you switch to 'g++' from one of these compilers, you
60188may discover that a program that appeared to work correctly in fact does
60189not conform to the standard: 'g++' reports as undefined symbols any
60190static data members that lack definitions.
60191
60192
60193File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
60194
6019514.7.2 Name Lookup, Templates, and Accessing Members of Base Classes
60196--------------------------------------------------------------------
60197
60198The C++ standard prescribes that all names that are not dependent on
60199template parameters are bound to their present definitions when parsing
60200a template function or class.(1)  Only names that are dependent are
60201looked up at the point of instantiation.  For example, consider
60202
60203       void foo(double);
60204
60205       struct A {
60206         template <typename T>
60207         void f () {
60208           foo (1);        // 1
60209           int i = N;      // 2
60210           T t;
60211           t.bar();        // 3
60212           foo (t);        // 4
60213         }
60214
60215         static const int N;
60216       };
60217
60218 Here, the names 'foo' and 'N' appear in a context that does not depend
60219on the type of 'T'.  The compiler will thus require that they are
60220defined in the context of use in the template, not only before the point
60221of instantiation, and will here use '::foo(double)' and 'A::N',
60222respectively.  In particular, it will convert the integer value to a
60223'double' when passing it to '::foo(double)'.
60224
60225 Conversely, 'bar' and the call to 'foo' in the fourth marked line are
60226used in contexts that do depend on the type of 'T', so they are only
60227looked up at the point of instantiation, and you can provide
60228declarations for them after declaring the template, but before
60229instantiating it.  In particular, if you instantiate 'A::f<int>', the
60230last line will call an overloaded '::foo(int)' if one was provided, even
60231if after the declaration of 'struct A'.
60232
60233 This distinction between lookup of dependent and non-dependent names is
60234called two-stage (or dependent) name lookup.  G++ implements it since
60235version 3.4.
60236
60237 Two-stage name lookup sometimes leads to situations with behavior
60238different from non-template codes.  The most common is probably this:
60239
60240       template <typename T> struct Base {
60241         int i;
60242       };
60243
60244       template <typename T> struct Derived : public Base<T> {
60245         int get_i() { return i; }
60246       };
60247
60248 In 'get_i()', 'i' is not used in a dependent context, so the compiler
60249will look for a name declared at the enclosing namespace scope (which is
60250the global scope here).  It will not look into the base class, since
60251that is dependent and you may declare specializations of 'Base' even
60252after declaring 'Derived', so the compiler cannot really know what 'i'
60253would refer to.  If there is no global variable 'i', then you will get
60254an error message.
60255
60256 In order to make it clear that you want the member of the base class,
60257you need to defer lookup until instantiation time, at which the base
60258class is known.  For this, you need to access 'i' in a dependent
60259context, by either using 'this->i' (remember that 'this' is of type
60260'Derived<T>*', so is obviously dependent), or using 'Base<T>::i'.
60261Alternatively, 'Base<T>::i' might be brought into scope by a
60262'using'-declaration.
60263
60264 Another, similar example involves calling member functions of a base
60265class:
60266
60267       template <typename T> struct Base {
60268           int f();
60269       };
60270
60271       template <typename T> struct Derived : Base<T> {
60272           int g() { return f(); };
60273       };
60274
60275 Again, the call to 'f()' is not dependent on template arguments (there
60276are no arguments that depend on the type 'T', and it is also not
60277otherwise specified that the call should be in a dependent context).
60278Thus a global declaration of such a function must be available, since
60279the one in the base class is not visible until instantiation time.  The
60280compiler will consequently produce the following error message:
60281
60282       x.cc: In member function `int Derived<T>::g()':
60283       x.cc:6: error: there are no arguments to `f' that depend on a template
60284          parameter, so a declaration of `f' must be available
60285       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
60286          allowing the use of an undeclared name is deprecated)
60287
60288 To make the code valid either use 'this->f()', or 'Base<T>::f()'.
60289Using the '-fpermissive' flag will also let the compiler accept the
60290code, by marking all function calls for which no declaration is visible
60291at the time of definition of the template for later lookup at
60292instantiation time, as if it were a dependent call.  We do not recommend
60293using '-fpermissive' to work around invalid code, and it will also only
60294catch cases where functions in base classes are called, not where
60295variables in base classes are used (as in the example above).
60296
60297 Note that some compilers (including G++ versions prior to 3.4) get
60298these examples wrong and accept above code without an error.  Those
60299compilers do not implement two-stage name lookup correctly.
60300
60301   ---------- Footnotes ----------
60302
60303   (1) The C++ standard just uses the term "dependent" for names that
60304depend on the type or value of template parameters.  This shorter term
60305will also be used in the rest of this section.
60306
60307
60308File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
60309
6031014.7.3 Temporaries May Vanish Before You Expect
60311-----------------------------------------------
60312
60313It is dangerous to use pointers or references to _portions_ of a
60314temporary object.  The compiler may very well delete the object before
60315you expect it to, leaving a pointer to garbage.  The most common place
60316where this problem crops up is in classes like string classes,
60317especially ones that define a conversion function to type 'char *' or
60318'const char *'--which is one reason why the standard 'string' class
60319requires you to call the 'c_str' member function.  However, any class
60320that returns a pointer to some internal structure is potentially subject
60321to this problem.
60322
60323 For example, a program may use a function 'strfunc' that returns
60324'string' objects, and another function 'charfunc' that operates on
60325pointers to 'char':
60326
60327     string strfunc ();
60328     void charfunc (const char *);
60329
60330     void
60331     f ()
60332     {
60333       const char *p = strfunc().c_str();
60334       ...
60335       charfunc (p);
60336       ...
60337       charfunc (p);
60338     }
60339
60340In this situation, it may seem reasonable to save a pointer to the C
60341string returned by the 'c_str' member function and use that rather than
60342call 'c_str' repeatedly.  However, the temporary string created by the
60343call to 'strfunc' is destroyed after 'p' is initialized, at which point
60344'p' is left pointing to freed memory.
60345
60346 Code like this may run successfully under some other compilers,
60347particularly obsolete cfront-based compilers that delete temporaries
60348along with normal local variables.  However, the GNU C++ behavior is
60349standard-conforming, so if your program depends on late destruction of
60350temporaries it is not portable.
60351
60352 The safe way to write such code is to give the temporary a name, which
60353forces it to remain until the end of the scope of the name.  For
60354example:
60355
60356     const string& tmp = strfunc ();
60357     charfunc (tmp.c_str ());
60358
60359
60360File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
60361
6036214.7.4 Implicit Copy-Assignment for Virtual Bases
60363-------------------------------------------------
60364
60365When a base class is virtual, only one subobject of the base class
60366belongs to each full object.  Also, the constructors and destructors are
60367invoked only once, and called from the most-derived class.  However,
60368such objects behave unspecified when being assigned.  For example:
60369
60370     struct Base{
60371       char *name;
60372       Base(const char *n) : name(strdup(n)){}
60373       Base& operator= (const Base& other){
60374        free (name);
60375        name = strdup (other.name);
60376        return *this;
60377       }
60378     };
60379
60380     struct A:virtual Base{
60381       int val;
60382       A():Base("A"){}
60383     };
60384
60385     struct B:virtual Base{
60386       int bval;
60387       B():Base("B"){}
60388     };
60389
60390     struct Derived:public A, public B{
60391       Derived():Base("Derived"){}
60392     };
60393
60394     void func(Derived &d1, Derived &d2)
60395     {
60396       d1 = d2;
60397     }
60398
60399 The C++ standard specifies that 'Base::Base' is only called once when
60400constructing or copy-constructing a Derived object.  It is unspecified
60401whether 'Base::operator=' is called more than once when the implicit
60402copy-assignment for Derived objects is invoked (as it is inside 'func'
60403in the example).
60404
60405 G++ implements the "intuitive" algorithm for copy-assignment: assign
60406all direct bases, then assign all members.  In that algorithm, the
60407virtual base subobject can be encountered more than once.  In the
60408example, copying proceeds in the following order: 'name' (via 'strdup'),
60409'val', 'name' again, and 'bval'.
60410
60411 If application code relies on copy-assignment, a user-defined
60412copy-assignment operator removes any uncertainties.  With such an
60413operator, the application can define whether and how the virtual base
60414subobject is assigned.
60415
60416
60417File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
60418
6041914.8 Certain Changes We Don't Want to Make
60420==========================================
60421
60422This section lists changes that people frequently request, but which we
60423do not make because we think GCC is better without them.
60424
60425   * Checking the number and type of arguments to a function which has
60426     an old-fashioned definition and no prototype.
60427
60428     Such a feature would work only occasionally--only for calls that
60429     appear in the same file as the called function, following the
60430     definition.  The only way to check all calls reliably is to add a
60431     prototype for the function.  But adding a prototype eliminates the
60432     motivation for this feature.  So the feature is not worthwhile.
60433
60434   * Warning about using an expression whose type is signed as a shift
60435     count.
60436
60437     Shift count operands are probably signed more often than unsigned.
60438     Warning about this would cause far more annoyance than good.
60439
60440   * Warning about assigning a signed value to an unsigned variable.
60441
60442     Such assignments must be very common; warning about them would
60443     cause more annoyance than good.
60444
60445   * Warning when a non-void function value is ignored.
60446
60447     C contains many standard functions that return a value that most
60448     programs choose to ignore.  One obvious example is 'printf'.
60449     Warning about this practice only leads the defensive programmer to
60450     clutter programs with dozens of casts to 'void'.  Such casts are
60451     required so frequently that they become visual noise.  Writing
60452     those casts becomes so automatic that they no longer convey useful
60453     information about the intentions of the programmer.  For functions
60454     where the return value should never be ignored, use the
60455     'warn_unused_result' function attribute (*note Function
60456     Attributes::).
60457
60458   * Making '-fshort-enums' the default.
60459
60460     This would cause storage layout to be incompatible with most other
60461     C compilers.  And it doesn't seem very important, given that you
60462     can get the same result in other ways.  The case where it matters
60463     most is when the enumeration-valued object is inside a structure,
60464     and in that case you can specify a field width explicitly.
60465
60466   * Making bit-fields unsigned by default on particular machines where
60467     "the ABI standard" says to do so.
60468
60469     The ISO C standard leaves it up to the implementation whether a
60470     bit-field declared plain 'int' is signed or not.  This in effect
60471     creates two alternative dialects of C.
60472
60473     The GNU C compiler supports both dialects; you can specify the
60474     signed dialect with '-fsigned-bitfields' and the unsigned dialect
60475     with '-funsigned-bitfields'.  However, this leaves open the
60476     question of which dialect to use by default.
60477
60478     Currently, the preferred dialect makes plain bit-fields signed,
60479     because this is simplest.  Since 'int' is the same as 'signed int'
60480     in every other context, it is cleanest for them to be the same in
60481     bit-fields as well.
60482
60483     Some computer manufacturers have published Application Binary
60484     Interface standards which specify that plain bit-fields should be
60485     unsigned.  It is a mistake, however, to say anything about this
60486     issue in an ABI.  This is because the handling of plain bit-fields
60487     distinguishes two dialects of C.  Both dialects are meaningful on
60488     every type of machine.  Whether a particular object file was
60489     compiled using signed bit-fields or unsigned is of no concern to
60490     other object files, even if they access the same bit-fields in the
60491     same data structures.
60492
60493     A given program is written in one or the other of these two
60494     dialects.  The program stands a chance to work on most any machine
60495     if it is compiled with the proper dialect.  It is unlikely to work
60496     at all if compiled with the wrong dialect.
60497
60498     Many users appreciate the GNU C compiler because it provides an
60499     environment that is uniform across machines.  These users would be
60500     inconvenienced if the compiler treated plain bit-fields differently
60501     on certain machines.
60502
60503     Occasionally users write programs intended only for a particular
60504     machine type.  On these occasions, the users would benefit if the
60505     GNU C compiler were to support by default the same dialect as the
60506     other compilers on that machine.  But such applications are rare.
60507     And users writing a program to run on more than one type of machine
60508     cannot possibly benefit from this kind of compatibility.
60509
60510     This is why GCC does and will treat plain bit-fields in the same
60511     fashion on all types of machines (by default).
60512
60513     There are some arguments for making bit-fields unsigned by default
60514     on all machines.  If, for example, this becomes a universal de
60515     facto standard, it would make sense for GCC to go along with it.
60516     This is something to be considered in the future.
60517
60518     (Of course, users strongly concerned about portability should
60519     indicate explicitly in each bit-field whether it is signed or not.
60520     In this way, they write programs which have the same meaning in
60521     both C dialects.)
60522
60523   * Undefining '__STDC__' when '-ansi' is not used.
60524
60525     Currently, GCC defines '__STDC__' unconditionally.  This provides
60526     good results in practice.
60527
60528     Programmers normally use conditionals on '__STDC__' to ask whether
60529     it is safe to use certain features of ISO C, such as function
60530     prototypes or ISO token concatenation.  Since plain 'gcc' supports
60531     all the features of ISO C, the correct answer to these questions is
60532     "yes".
60533
60534     Some users try to use '__STDC__' to check for the availability of
60535     certain library facilities.  This is actually incorrect usage in an
60536     ISO C program, because the ISO C standard says that a conforming
60537     freestanding implementation should define '__STDC__' even though it
60538     does not have the library facilities.  'gcc -ansi -pedantic' is a
60539     conforming freestanding implementation, and it is therefore
60540     required to define '__STDC__', even though it does not come with an
60541     ISO C library.
60542
60543     Sometimes people say that defining '__STDC__' in a compiler that
60544     does not completely conform to the ISO C standard somehow violates
60545     the standard.  This is illogical.  The standard is a standard for
60546     compilers that claim to support ISO C, such as 'gcc -ansi'--not for
60547     other compilers such as plain 'gcc'.  Whatever the ISO C standard
60548     says is relevant to the design of plain 'gcc' without '-ansi' only
60549     for pragmatic reasons, not as a requirement.
60550
60551     GCC normally defines '__STDC__' to be 1, and in addition defines
60552     '__STRICT_ANSI__' if you specify the '-ansi' option, or a '-std'
60553     option for strict conformance to some version of ISO C.  On some
60554     hosts, system include files use a different convention, where
60555     '__STDC__' is normally 0, but is 1 if the user specifies strict
60556     conformance to the C Standard.  GCC follows the host convention
60557     when processing system include files, but when processing user
60558     files it follows the usual GNU C convention.
60559
60560   * Undefining '__STDC__' in C++.
60561
60562     Programs written to compile with C++-to-C translators get the value
60563     of '__STDC__' that goes with the C compiler that is subsequently
60564     used.  These programs must test '__STDC__' to determine what kind
60565     of C preprocessor that compiler uses: whether they should
60566     concatenate tokens in the ISO C fashion or in the traditional
60567     fashion.
60568
60569     These programs work properly with GNU C++ if '__STDC__' is defined.
60570     They would not work otherwise.
60571
60572     In addition, many header files are written to provide prototypes in
60573     ISO C but not in traditional C.  Many of these header files can
60574     work without change in C++ provided '__STDC__' is defined.  If
60575     '__STDC__' is not defined, they will all fail, and will all need to
60576     be changed to test explicitly for C++ as well.
60577
60578   * Deleting "empty" loops.
60579
60580     Historically, GCC has not deleted "empty" loops under the
60581     assumption that the most likely reason you would put one in a
60582     program is to have a delay, so deleting them will not make real
60583     programs run any faster.
60584
60585     However, the rationale here is that optimization of a nonempty loop
60586     cannot produce an empty one.  This held for carefully written C
60587     compiled with less powerful optimizers but is not always the case
60588     for carefully written C++ or with more powerful optimizers.  Thus
60589     GCC will remove operations from loops whenever it can determine
60590     those operations are not externally visible (apart from the time
60591     taken to execute them, of course).  In case the loop can be proved
60592     to be finite, GCC will also remove the loop itself.
60593
60594     Be aware of this when performing timing tests, for instance the
60595     following loop can be completely removed, provided
60596     'some_expression' can provably not change any global state.
60597
60598          {
60599             int sum = 0;
60600             int ix;
60601
60602             for (ix = 0; ix != 10000; ix++)
60603                sum += some_expression;
60604          }
60605
60606     Even though 'sum' is accumulated in the loop, no use is made of
60607     that summation, so the accumulation can be removed.
60608
60609   * Making side effects happen in the same order as in some other
60610     compiler.
60611
60612     It is never safe to depend on the order of evaluation of side
60613     effects.  For example, a function call like this may very well
60614     behave differently from one compiler to another:
60615
60616          void func (int, int);
60617
60618          int i = 2;
60619          func (i++, i++);
60620
60621     There is no guarantee (in either the C or the C++ standard language
60622     definitions) that the increments will be evaluated in any
60623     particular order.  Either increment might happen first.  'func'
60624     might get the arguments '2, 3', or it might get '3, 2', or even '2,
60625     2'.
60626
60627   * Making certain warnings into errors by default.
60628
60629     Some ISO C testsuites report failure when the compiler does not
60630     produce an error message for a certain program.
60631
60632     ISO C requires a "diagnostic" message for certain kinds of invalid
60633     programs, but a warning is defined by GCC to count as a diagnostic.
60634     If GCC produces a warning but not an error, that is correct ISO C
60635     support.  If testsuites call this "failure", they should be run
60636     with the GCC option '-pedantic-errors', which will turn these
60637     warnings into errors.
60638
60639
60640File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
60641
6064214.9 Warning Messages and Error Messages
60643========================================
60644
60645The GNU compiler can produce two kinds of diagnostics: errors and
60646warnings.  Each kind has a different purpose:
60647
60648     "Errors" report problems that make it impossible to compile your
60649     program.  GCC reports errors with the source file name and line
60650     number where the problem is apparent.
60651
60652     "Warnings" report other unusual conditions in your code that _may_
60653     indicate a problem, although compilation can (and does) proceed.
60654     Warning messages also report the source file name and line number,
60655     but include the text 'warning:' to distinguish them from error
60656     messages.
60657
60658 Warnings may indicate danger points where you should check to make sure
60659that your program really does what you intend; or the use of obsolete
60660features; or the use of nonstandard features of GNU C or C++.  Many
60661warnings are issued only if you ask for them, with one of the '-W'
60662options (for instance, '-Wall' requests a variety of useful warnings).
60663
60664 GCC always tries to compile your program if possible; it never
60665gratuitously rejects a program whose meaning is clear merely because
60666(for instance) it fails to conform to a standard.  In some cases,
60667however, the C and C++ standards specify that certain extensions are
60668forbidden, and a diagnostic _must_ be issued by a conforming compiler.
60669The '-pedantic' option tells GCC to issue warnings in such cases;
60670'-pedantic-errors' says to make them errors instead.  This does not mean
60671that _all_ non-ISO constructs get warnings or errors.
60672
60673 *Note Options to Request or Suppress Warnings: Warning Options, for
60674more detail on these and related command-line options.
60675
60676
60677File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
60678
6067915 Reporting Bugs
60680*****************
60681
60682Your bug reports play an essential role in making GCC reliable.
60683
60684 When you encounter a problem, the first thing to do is to see if it is
60685already known.  *Note Trouble::.  If it isn't known, then you should
60686report the problem.
60687
60688* Menu:
60689
60690* Criteria:  Bug Criteria.   Have you really found a bug?
60691* Reporting: Bug Reporting.  How to report a bug effectively.
60692
60693
60694File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
60695
6069615.1 Have You Found a Bug?
60697==========================
60698
60699If you are not sure whether you have found a bug, here are some
60700guidelines:
60701
60702   * If the compiler gets a fatal signal, for any input whatever, that
60703     is a compiler bug.  Reliable compilers never crash.
60704
60705   * If the compiler produces invalid assembly code, for any input
60706     whatever (except an 'asm' statement), that is a compiler bug,
60707     unless the compiler reports errors (not just warnings) which would
60708     ordinarily prevent the assembler from being run.
60709
60710   * If the compiler produces valid assembly code that does not
60711     correctly execute the input source code, that is a compiler bug.
60712
60713     However, you must double-check to make sure, because you may have a
60714     program whose behavior is undefined, which happened by chance to
60715     give the desired results with another C or C++ compiler.
60716
60717     For example, in many nonoptimizing compilers, you can write 'x;' at
60718     the end of a function instead of 'return x;', with the same
60719     results.  But the value of the function is undefined if 'return' is
60720     omitted; it is not a bug when GCC produces different results.
60721
60722     Problems often result from expressions with two increment
60723     operators, as in 'f (*p++, *p++)'.  Your previous compiler might
60724     have interpreted that expression the way you intended; GCC might
60725     interpret it another way.  Neither compiler is wrong.  The bug is
60726     in your code.
60727
60728     After you have localized the error to a single source line, it
60729     should be easy to check for these things.  If your program is
60730     correct and well defined, you have found a compiler bug.
60731
60732   * If the compiler produces an error message for valid input, that is
60733     a compiler bug.
60734
60735   * If the compiler does not produce an error message for invalid
60736     input, that is a compiler bug.  However, you should note that your
60737     idea of "invalid input" might be someone else's idea of "an
60738     extension" or "support for traditional practice".
60739
60740   * If you are an experienced user of one of the languages GCC
60741     supports, your suggestions for improvement of GCC are welcome in
60742     any case.
60743
60744
60745File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
60746
6074715.2 How and Where to Report Bugs
60748=================================
60749
60750Bugs should be reported to the bug database at
60751<https://gcc.gnu.org/bugs/>.
60752
60753
60754File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
60755
6075616 How To Get Help with GCC
60757***************************
60758
60759If you need help installing, using or changing GCC, there are two ways
60760to find it:
60761
60762   * Send a message to a suitable network mailing list.  First try
60763     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
60764     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
60765     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
60766     GCC, please report it following the instructions at *note Bug
60767     Reporting::.
60768
60769   * Look in the service directory for someone who might help you for a
60770     fee.  The service directory is found at
60771     <https://www.fsf.org/resources/service>.
60772
60773 For further information, see <https://gcc.gnu.org/faq.html#support>.
60774
60775
60776File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
60777
6077817 Contributing to GCC Development
60779**********************************
60780
60781If you would like to help pretest GCC releases to assure they work well,
60782current development sources are available via Git (see
60783<https://gcc.gnu.org/git.html>).  Source and binary snapshots are also
60784available for FTP; see <https://gcc.gnu.org/snapshots.html>.
60785
60786 If you would like to work on improvements to GCC, please read the
60787advice at these URLs:
60788
60789     <https://gcc.gnu.org/contribute.html>
60790     <https://gcc.gnu.org/contributewhy.html>
60791
60792for information on how to make useful contributions and avoid
60793duplication of effort.  Suggested projects are listed at
60794<https://gcc.gnu.org/projects/>.
60795
60796
60797File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
60798
60799Funding Free Software
60800*********************
60801
60802If you want to have more free software a few years from now, it makes
60803sense for you to help encourage people to contribute funds for its
60804development.  The most effective approach known is to encourage
60805commercial redistributors to donate.
60806
60807 Users of free software systems can boost the pace of development by
60808encouraging for-a-fee distributors to donate part of their selling price
60809to free software developers--the Free Software Foundation, and others.
60810
60811 The way to convince distributors to do this is to demand it and expect
60812it from them.  So when you compare distributors, judge them partly by
60813how much they give to free software development.  Show distributors they
60814must compete to be the one who gives the most.
60815
60816 To make this approach work, you must insist on numbers that you can
60817compare, such as, "We will donate ten dollars to the Frobnitz project
60818for each disk sold."  Don't be satisfied with a vague promise, such as
60819"A portion of the profits are donated," since it doesn't give a basis
60820for comparison.
60821
60822 Even a precise fraction "of the profits from this disk" is not very
60823meaningful, since creative accounting and unrelated business decisions
60824can greatly alter what fraction of the sales price counts as profit.  If
60825the price you pay is $50, ten percent of the profit is probably less
60826than a dollar; it might be a few cents, or nothing at all.
60827
60828 Some redistributors do development work themselves.  This is useful
60829too; but to keep everyone honest, you need to inquire how much they do,
60830and what kind.  Some kinds of development make much more long-term
60831difference than others.  For example, maintaining a separate version of
60832a program contributes very little; maintaining the standard version of a
60833program for the whole community contributes much.  Easy new ports
60834contribute little, since someone else would surely do them; difficult
60835ports such as adding a new CPU to the GNU Compiler Collection contribute
60836more; major new features or packages contribute the most.
60837
60838 By establishing the idea that supporting further development is "the
60839proper thing to do" when distributing free software for a fee, we can
60840assure a steady flow of resources into making more free software.
60841
60842     Copyright (C) 1994 Free Software Foundation, Inc.
60843     Verbatim copying and redistribution of this section is permitted
60844     without royalty; alteration is not permitted.
60845
60846
60847File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
60848
60849The GNU Project and GNU/Linux
60850*****************************
60851
60852The GNU Project was launched in 1984 to develop a complete Unix-like
60853operating system which is free software: the GNU system.  (GNU is a
60854recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
60855Variants of the GNU operating system, which use the kernel Linux, are
60856now widely used; though these systems are often referred to as "Linux",
60857they are more accurately called GNU/Linux systems.
60858
60859 For more information, see:
60860     <https://www.gnu.org/>
60861     <https://www.gnu.org/gnu/linux-and-gnu.html>
60862
60863
60864File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
60865
60866GNU General Public License
60867**************************
60868
60869                        Version 3, 29 June 2007
60870
60871     Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
60872
60873     Everyone is permitted to copy and distribute verbatim copies of this
60874     license document, but changing it is not allowed.
60875
60876Preamble
60877========
60878
60879The GNU General Public License is a free, copyleft license for software
60880and other kinds of works.
60881
60882 The licenses for most software and other practical works are designed
60883to take away your freedom to share and change the works.  By contrast,
60884the GNU General Public License is intended to guarantee your freedom to
60885share and change all versions of a program-to make sure it remains free
60886software for all its users.  We, the Free Software Foundation, use the
60887GNU General Public License for most of our software; it applies also to
60888any other work released this way by its authors.  You can apply it to
60889your programs, too.
60890
60891 When we speak of free software, we are referring to freedom, not price.
60892Our General Public Licenses are designed to make sure that you have the
60893freedom to distribute copies of free software (and charge for them if
60894you wish), that you receive source code or can get it if you want it,
60895that you can change the software or use pieces of it in new free
60896programs, and that you know you can do these things.
60897
60898 To protect your rights, we need to prevent others from denying you
60899these rights or asking you to surrender the rights.  Therefore, you have
60900certain responsibilities if you distribute copies of the software, or if
60901you modify it: responsibilities to respect the freedom of others.
60902
60903 For example, if you distribute copies of such a program, whether gratis
60904or for a fee, you must pass on to the recipients the same freedoms that
60905you received.  You must make sure that they, too, receive or can get the
60906source code.  And you must show them these terms so they know their
60907rights.
60908
60909 Developers that use the GNU GPL protect your rights with two steps: (1)
60910assert copyright on the software, and (2) offer you this License giving
60911you legal permission to copy, distribute and/or modify it.
60912
60913 For the developers' and authors' protection, the GPL clearly explains
60914that there is no warranty for this free software.  For both users' and
60915authors' sake, the GPL requires that modified versions be marked as
60916changed, so that their problems will not be attributed erroneously to
60917authors of previous versions.
60918
60919 Some devices are designed to deny users access to install or run
60920modified versions of the software inside them, although the manufacturer
60921can do so.  This is fundamentally incompatible with the aim of
60922protecting users' freedom to change the software.  The systematic
60923pattern of such abuse occurs in the area of products for individuals to
60924use, which is precisely where it is most unacceptable.  Therefore, we
60925have designed this version of the GPL to prohibit the practice for those
60926products.  If such problems arise substantially in other domains, we
60927stand ready to extend this provision to those domains in future versions
60928of the GPL, as needed to protect the freedom of users.
60929
60930 Finally, every program is threatened constantly by software patents.
60931States should not allow patents to restrict development and use of
60932software on general-purpose computers, but in those that do, we wish to
60933avoid the special danger that patents applied to a free program could
60934make it effectively proprietary.  To prevent this, the GPL assures that
60935patents cannot be used to render the program non-free.
60936
60937 The precise terms and conditions for copying, distribution and
60938modification follow.
60939
60940TERMS AND CONDITIONS
60941====================
60942
60943  0. Definitions.
60944
60945     "This License" refers to version 3 of the GNU General Public
60946     License.
60947
60948     "Copyright" also means copyright-like laws that apply to other
60949     kinds of works, such as semiconductor masks.
60950
60951     "The Program" refers to any copyrightable work licensed under this
60952     License.  Each licensee is addressed as "you".  "Licensees" and
60953     "recipients" may be individuals or organizations.
60954
60955     To "modify" a work means to copy from or adapt all or part of the
60956     work in a fashion requiring copyright permission, other than the
60957     making of an exact copy.  The resulting work is called a "modified
60958     version" of the earlier work or a work "based on" the earlier work.
60959
60960     A "covered work" means either the unmodified Program or a work
60961     based on the Program.
60962
60963     To "propagate" a work means to do anything with it that, without
60964     permission, would make you directly or secondarily liable for
60965     infringement under applicable copyright law, except executing it on
60966     a computer or modifying a private copy.  Propagation includes
60967     copying, distribution (with or without modification), making
60968     available to the public, and in some countries other activities as
60969     well.
60970
60971     To "convey" a work means any kind of propagation that enables other
60972     parties to make or receive copies.  Mere interaction with a user
60973     through a computer network, with no transfer of a copy, is not
60974     conveying.
60975
60976     An interactive user interface displays "Appropriate Legal Notices"
60977     to the extent that it includes a convenient and prominently visible
60978     feature that (1) displays an appropriate copyright notice, and (2)
60979     tells the user that there is no warranty for the work (except to
60980     the extent that warranties are provided), that licensees may convey
60981     the work under this License, and how to view a copy of this
60982     License.  If the interface presents a list of user commands or
60983     options, such as a menu, a prominent item in the list meets this
60984     criterion.
60985
60986  1. Source Code.
60987
60988     The "source code" for a work means the preferred form of the work
60989     for making modifications to it.  "Object code" means any non-source
60990     form of a work.
60991
60992     A "Standard Interface" means an interface that either is an
60993     official standard defined by a recognized standards body, or, in
60994     the case of interfaces specified for a particular programming
60995     language, one that is widely used among developers working in that
60996     language.
60997
60998     The "System Libraries" of an executable work include anything,
60999     other than the work as a whole, that (a) is included in the normal
61000     form of packaging a Major Component, but which is not part of that
61001     Major Component, and (b) serves only to enable use of the work with
61002     that Major Component, or to implement a Standard Interface for
61003     which an implementation is available to the public in source code
61004     form.  A "Major Component", in this context, means a major
61005     essential component (kernel, window system, and so on) of the
61006     specific operating system (if any) on which the executable work
61007     runs, or a compiler used to produce the work, or an object code
61008     interpreter used to run it.
61009
61010     The "Corresponding Source" for a work in object code form means all
61011     the source code needed to generate, install, and (for an executable
61012     work) run the object code and to modify the work, including scripts
61013     to control those activities.  However, it does not include the
61014     work's System Libraries, or general-purpose tools or generally
61015     available free programs which are used unmodified in performing
61016     those activities but which are not part of the work.  For example,
61017     Corresponding Source includes interface definition files associated
61018     with source files for the work, and the source code for shared
61019     libraries and dynamically linked subprograms that the work is
61020     specifically designed to require, such as by intimate data
61021     communication or control flow between those subprograms and other
61022     parts of the work.
61023
61024     The Corresponding Source need not include anything that users can
61025     regenerate automatically from other parts of the Corresponding
61026     Source.
61027
61028     The Corresponding Source for a work in source code form is that
61029     same work.
61030
61031  2. Basic Permissions.
61032
61033     All rights granted under this License are granted for the term of
61034     copyright on the Program, and are irrevocable provided the stated
61035     conditions are met.  This License explicitly affirms your unlimited
61036     permission to run the unmodified Program.  The output from running
61037     a covered work is covered by this License only if the output, given
61038     its content, constitutes a covered work.  This License acknowledges
61039     your rights of fair use or other equivalent, as provided by
61040     copyright law.
61041
61042     You may make, run and propagate covered works that you do not
61043     convey, without conditions so long as your license otherwise
61044     remains in force.  You may convey covered works to others for the
61045     sole purpose of having them make modifications exclusively for you,
61046     or provide you with facilities for running those works, provided
61047     that you comply with the terms of this License in conveying all
61048     material for which you do not control copyright.  Those thus making
61049     or running the covered works for you must do so exclusively on your
61050     behalf, under your direction and control, on terms that prohibit
61051     them from making any copies of your copyrighted material outside
61052     their relationship with you.
61053
61054     Conveying under any other circumstances is permitted solely under
61055     the conditions stated below.  Sublicensing is not allowed; section
61056     10 makes it unnecessary.
61057
61058  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
61059
61060     No covered work shall be deemed part of an effective technological
61061     measure under any applicable law fulfilling obligations under
61062     article 11 of the WIPO copyright treaty adopted on 20 December
61063     1996, or similar laws prohibiting or restricting circumvention of
61064     such measures.
61065
61066     When you convey a covered work, you waive any legal power to forbid
61067     circumvention of technological measures to the extent such
61068     circumvention is effected by exercising rights under this License
61069     with respect to the covered work, and you disclaim any intention to
61070     limit operation or modification of the work as a means of
61071     enforcing, against the work's users, your or third parties' legal
61072     rights to forbid circumvention of technological measures.
61073
61074  4. Conveying Verbatim Copies.
61075
61076     You may convey verbatim copies of the Program's source code as you
61077     receive it, in any medium, provided that you conspicuously and
61078     appropriately publish on each copy an appropriate copyright notice;
61079     keep intact all notices stating that this License and any
61080     non-permissive terms added in accord with section 7 apply to the
61081     code; keep intact all notices of the absence of any warranty; and
61082     give all recipients a copy of this License along with the Program.
61083
61084     You may charge any price or no price for each copy that you convey,
61085     and you may offer support or warranty protection for a fee.
61086
61087  5. Conveying Modified Source Versions.
61088
61089     You may convey a work based on the Program, or the modifications to
61090     produce it from the Program, in the form of source code under the
61091     terms of section 4, provided that you also meet all of these
61092     conditions:
61093
61094       a. The work must carry prominent notices stating that you
61095          modified it, and giving a relevant date.
61096
61097       b. The work must carry prominent notices stating that it is
61098          released under this License and any conditions added under
61099          section 7.  This requirement modifies the requirement in
61100          section 4 to "keep intact all notices".
61101
61102       c. You must license the entire work, as a whole, under this
61103          License to anyone who comes into possession of a copy.  This
61104          License will therefore apply, along with any applicable
61105          section 7 additional terms, to the whole of the work, and all
61106          its parts, regardless of how they are packaged.  This License
61107          gives no permission to license the work in any other way, but
61108          it does not invalidate such permission if you have separately
61109          received it.
61110
61111       d. If the work has interactive user interfaces, each must display
61112          Appropriate Legal Notices; however, if the Program has
61113          interactive interfaces that do not display Appropriate Legal
61114          Notices, your work need not make them do so.
61115
61116     A compilation of a covered work with other separate and independent
61117     works, which are not by their nature extensions of the covered
61118     work, and which are not combined with it such as to form a larger
61119     program, in or on a volume of a storage or distribution medium, is
61120     called an "aggregate" if the compilation and its resulting
61121     copyright are not used to limit the access or legal rights of the
61122     compilation's users beyond what the individual works permit.
61123     Inclusion of a covered work in an aggregate does not cause this
61124     License to apply to the other parts of the aggregate.
61125
61126  6. Conveying Non-Source Forms.
61127
61128     You may convey a covered work in object code form under the terms
61129     of sections 4 and 5, provided that you also convey the
61130     machine-readable Corresponding Source under the terms of this
61131     License, in one of these ways:
61132
61133       a. Convey the object code in, or embodied in, a physical product
61134          (including a physical distribution medium), accompanied by the
61135          Corresponding Source fixed on a durable physical medium
61136          customarily used for software interchange.
61137
61138       b. Convey the object code in, or embodied in, a physical product
61139          (including a physical distribution medium), accompanied by a
61140          written offer, valid for at least three years and valid for as
61141          long as you offer spare parts or customer support for that
61142          product model, to give anyone who possesses the object code
61143          either (1) a copy of the Corresponding Source for all the
61144          software in the product that is covered by this License, on a
61145          durable physical medium customarily used for software
61146          interchange, for a price no more than your reasonable cost of
61147          physically performing this conveying of source, or (2) access
61148          to copy the Corresponding Source from a network server at no
61149          charge.
61150
61151       c. Convey individual copies of the object code with a copy of the
61152          written offer to provide the Corresponding Source.  This
61153          alternative is allowed only occasionally and noncommercially,
61154          and only if you received the object code with such an offer,
61155          in accord with subsection 6b.
61156
61157       d. Convey the object code by offering access from a designated
61158          place (gratis or for a charge), and offer equivalent access to
61159          the Corresponding Source in the same way through the same
61160          place at no further charge.  You need not require recipients
61161          to copy the Corresponding Source along with the object code.
61162          If the place to copy the object code is a network server, the
61163          Corresponding Source may be on a different server (operated by
61164          you or a third party) that supports equivalent copying
61165          facilities, provided you maintain clear directions next to the
61166          object code saying where to find the Corresponding Source.
61167          Regardless of what server hosts the Corresponding Source, you
61168          remain obligated to ensure that it is available for as long as
61169          needed to satisfy these requirements.
61170
61171       e. Convey the object code using peer-to-peer transmission,
61172          provided you inform other peers where the object code and
61173          Corresponding Source of the work are being offered to the
61174          general public at no charge under subsection 6d.
61175
61176     A separable portion of the object code, whose source code is
61177     excluded from the Corresponding Source as a System Library, need
61178     not be included in conveying the object code work.
61179
61180     A "User Product" is either (1) a "consumer product", which means
61181     any tangible personal property which is normally used for personal,
61182     family, or household purposes, or (2) anything designed or sold for
61183     incorporation into a dwelling.  In determining whether a product is
61184     a consumer product, doubtful cases shall be resolved in favor of
61185     coverage.  For a particular product received by a particular user,
61186     "normally used" refers to a typical or common use of that class of
61187     product, regardless of the status of the particular user or of the
61188     way in which the particular user actually uses, or expects or is
61189     expected to use, the product.  A product is a consumer product
61190     regardless of whether the product has substantial commercial,
61191     industrial or non-consumer uses, unless such uses represent the
61192     only significant mode of use of the product.
61193
61194     "Installation Information" for a User Product means any methods,
61195     procedures, authorization keys, or other information required to
61196     install and execute modified versions of a covered work in that
61197     User Product from a modified version of its Corresponding Source.
61198     The information must suffice to ensure that the continued
61199     functioning of the modified object code is in no case prevented or
61200     interfered with solely because modification has been made.
61201
61202     If you convey an object code work under this section in, or with,
61203     or specifically for use in, a User Product, and the conveying
61204     occurs as part of a transaction in which the right of possession
61205     and use of the User Product is transferred to the recipient in
61206     perpetuity or for a fixed term (regardless of how the transaction
61207     is characterized), the Corresponding Source conveyed under this
61208     section must be accompanied by the Installation Information.  But
61209     this requirement does not apply if neither you nor any third party
61210     retains the ability to install modified object code on the User
61211     Product (for example, the work has been installed in ROM).
61212
61213     The requirement to provide Installation Information does not
61214     include a requirement to continue to provide support service,
61215     warranty, or updates for a work that has been modified or installed
61216     by the recipient, or for the User Product in which it has been
61217     modified or installed.  Access to a network may be denied when the
61218     modification itself materially and adversely affects the operation
61219     of the network or violates the rules and protocols for
61220     communication across the network.
61221
61222     Corresponding Source conveyed, and Installation Information
61223     provided, in accord with this section must be in a format that is
61224     publicly documented (and with an implementation available to the
61225     public in source code form), and must require no special password
61226     or key for unpacking, reading or copying.
61227
61228  7. Additional Terms.
61229
61230     "Additional permissions" are terms that supplement the terms of
61231     this License by making exceptions from one or more of its
61232     conditions.  Additional permissions that are applicable to the
61233     entire Program shall be treated as though they were included in
61234     this License, to the extent that they are valid under applicable
61235     law.  If additional permissions apply only to part of the Program,
61236     that part may be used separately under those permissions, but the
61237     entire Program remains governed by this License without regard to
61238     the additional permissions.
61239
61240     When you convey a copy of a covered work, you may at your option
61241     remove any additional permissions from that copy, or from any part
61242     of it.  (Additional permissions may be written to require their own
61243     removal in certain cases when you modify the work.)  You may place
61244     additional permissions on material, added by you to a covered work,
61245     for which you have or can give appropriate copyright permission.
61246
61247     Notwithstanding any other provision of this License, for material
61248     you add to a covered work, you may (if authorized by the copyright
61249     holders of that material) supplement the terms of this License with
61250     terms:
61251
61252       a. Disclaiming warranty or limiting liability differently from
61253          the terms of sections 15 and 16 of this License; or
61254
61255       b. Requiring preservation of specified reasonable legal notices
61256          or author attributions in that material or in the Appropriate
61257          Legal Notices displayed by works containing it; or
61258
61259       c. Prohibiting misrepresentation of the origin of that material,
61260          or requiring that modified versions of such material be marked
61261          in reasonable ways as different from the original version; or
61262
61263       d. Limiting the use for publicity purposes of names of licensors
61264          or authors of the material; or
61265
61266       e. Declining to grant rights under trademark law for use of some
61267          trade names, trademarks, or service marks; or
61268
61269       f. Requiring indemnification of licensors and authors of that
61270          material by anyone who conveys the material (or modified
61271          versions of it) with contractual assumptions of liability to
61272          the recipient, for any liability that these contractual
61273          assumptions directly impose on those licensors and authors.
61274
61275     All other non-permissive additional terms are considered "further
61276     restrictions" within the meaning of section 10.  If the Program as
61277     you received it, or any part of it, contains a notice stating that
61278     it is governed by this License along with a term that is a further
61279     restriction, you may remove that term.  If a license document
61280     contains a further restriction but permits relicensing or conveying
61281     under this License, you may add to a covered work material governed
61282     by the terms of that license document, provided that the further
61283     restriction does not survive such relicensing or conveying.
61284
61285     If you add terms to a covered work in accord with this section, you
61286     must place, in the relevant source files, a statement of the
61287     additional terms that apply to those files, or a notice indicating
61288     where to find the applicable terms.
61289
61290     Additional terms, permissive or non-permissive, may be stated in
61291     the form of a separately written license, or stated as exceptions;
61292     the above requirements apply either way.
61293
61294  8. Termination.
61295
61296     You may not propagate or modify a covered work except as expressly
61297     provided under this License.  Any attempt otherwise to propagate or
61298     modify it is void, and will automatically terminate your rights
61299     under this License (including any patent licenses granted under the
61300     third paragraph of section 11).
61301
61302     However, if you cease all violation of this License, then your
61303     license from a particular copyright holder is reinstated (a)
61304     provisionally, unless and until the copyright holder explicitly and
61305     finally terminates your license, and (b) permanently, if the
61306     copyright holder fails to notify you of the violation by some
61307     reasonable means prior to 60 days after the cessation.
61308
61309     Moreover, your license from a particular copyright holder is
61310     reinstated permanently if the copyright holder notifies you of the
61311     violation by some reasonable means, this is the first time you have
61312     received notice of violation of this License (for any work) from
61313     that copyright holder, and you cure the violation prior to 30 days
61314     after your receipt of the notice.
61315
61316     Termination of your rights under this section does not terminate
61317     the licenses of parties who have received copies or rights from you
61318     under this License.  If your rights have been terminated and not
61319     permanently reinstated, you do not qualify to receive new licenses
61320     for the same material under section 10.
61321
61322  9. Acceptance Not Required for Having Copies.
61323
61324     You are not required to accept this License in order to receive or
61325     run a copy of the Program.  Ancillary propagation of a covered work
61326     occurring solely as a consequence of using peer-to-peer
61327     transmission to receive a copy likewise does not require
61328     acceptance.  However, nothing other than this License grants you
61329     permission to propagate or modify any covered work.  These actions
61330     infringe copyright if you do not accept this License.  Therefore,
61331     by modifying or propagating a covered work, you indicate your
61332     acceptance of this License to do so.
61333
61334  10. Automatic Licensing of Downstream Recipients.
61335
61336     Each time you convey a covered work, the recipient automatically
61337     receives a license from the original licensors, to run, modify and
61338     propagate that work, subject to this License.  You are not
61339     responsible for enforcing compliance by third parties with this
61340     License.
61341
61342     An "entity transaction" is a transaction transferring control of an
61343     organization, or substantially all assets of one, or subdividing an
61344     organization, or merging organizations.  If propagation of a
61345     covered work results from an entity transaction, each party to that
61346     transaction who receives a copy of the work also receives whatever
61347     licenses to the work the party's predecessor in interest had or
61348     could give under the previous paragraph, plus a right to possession
61349     of the Corresponding Source of the work from the predecessor in
61350     interest, if the predecessor has it or can get it with reasonable
61351     efforts.
61352
61353     You may not impose any further restrictions on the exercise of the
61354     rights granted or affirmed under this License.  For example, you
61355     may not impose a license fee, royalty, or other charge for exercise
61356     of rights granted under this License, and you may not initiate
61357     litigation (including a cross-claim or counterclaim in a lawsuit)
61358     alleging that any patent claim is infringed by making, using,
61359     selling, offering for sale, or importing the Program or any portion
61360     of it.
61361
61362  11. Patents.
61363
61364     A "contributor" is a copyright holder who authorizes use under this
61365     License of the Program or a work on which the Program is based.
61366     The work thus licensed is called the contributor's "contributor
61367     version".
61368
61369     A contributor's "essential patent claims" are all patent claims
61370     owned or controlled by the contributor, whether already acquired or
61371     hereafter acquired, that would be infringed by some manner,
61372     permitted by this License, of making, using, or selling its
61373     contributor version, but do not include claims that would be
61374     infringed only as a consequence of further modification of the
61375     contributor version.  For purposes of this definition, "control"
61376     includes the right to grant patent sublicenses in a manner
61377     consistent with the requirements of this License.
61378
61379     Each contributor grants you a non-exclusive, worldwide,
61380     royalty-free patent license under the contributor's essential
61381     patent claims, to make, use, sell, offer for sale, import and
61382     otherwise run, modify and propagate the contents of its contributor
61383     version.
61384
61385     In the following three paragraphs, a "patent license" is any
61386     express agreement or commitment, however denominated, not to
61387     enforce a patent (such as an express permission to practice a
61388     patent or covenant not to sue for patent infringement).  To "grant"
61389     such a patent license to a party means to make such an agreement or
61390     commitment not to enforce a patent against the party.
61391
61392     If you convey a covered work, knowingly relying on a patent
61393     license, and the Corresponding Source of the work is not available
61394     for anyone to copy, free of charge and under the terms of this
61395     License, through a publicly available network server or other
61396     readily accessible means, then you must either (1) cause the
61397     Corresponding Source to be so available, or (2) arrange to deprive
61398     yourself of the benefit of the patent license for this particular
61399     work, or (3) arrange, in a manner consistent with the requirements
61400     of this License, to extend the patent license to downstream
61401     recipients.  "Knowingly relying" means you have actual knowledge
61402     that, but for the patent license, your conveying the covered work
61403     in a country, or your recipient's use of the covered work in a
61404     country, would infringe one or more identifiable patents in that
61405     country that you have reason to believe are valid.
61406
61407     If, pursuant to or in connection with a single transaction or
61408     arrangement, you convey, or propagate by procuring conveyance of, a
61409     covered work, and grant a patent license to some of the parties
61410     receiving the covered work authorizing them to use, propagate,
61411     modify or convey a specific copy of the covered work, then the
61412     patent license you grant is automatically extended to all
61413     recipients of the covered work and works based on it.
61414
61415     A patent license is "discriminatory" if it does not include within
61416     the scope of its coverage, prohibits the exercise of, or is
61417     conditioned on the non-exercise of one or more of the rights that
61418     are specifically granted under this License.  You may not convey a
61419     covered work if you are a party to an arrangement with a third
61420     party that is in the business of distributing software, under which
61421     you make payment to the third party based on the extent of your
61422     activity of conveying the work, and under which the third party
61423     grants, to any of the parties who would receive the covered work
61424     from you, a discriminatory patent license (a) in connection with
61425     copies of the covered work conveyed by you (or copies made from
61426     those copies), or (b) primarily for and in connection with specific
61427     products or compilations that contain the covered work, unless you
61428     entered into that arrangement, or that patent license was granted,
61429     prior to 28 March 2007.
61430
61431     Nothing in this License shall be construed as excluding or limiting
61432     any implied license or other defenses to infringement that may
61433     otherwise be available to you under applicable patent law.
61434
61435  12. No Surrender of Others' Freedom.
61436
61437     If conditions are imposed on you (whether by court order, agreement
61438     or otherwise) that contradict the conditions of this License, they
61439     do not excuse you from the conditions of this License.  If you
61440     cannot convey a covered work so as to satisfy simultaneously your
61441     obligations under this License and any other pertinent obligations,
61442     then as a consequence you may not convey it at all.  For example,
61443     if you agree to terms that obligate you to collect a royalty for
61444     further conveying from those to whom you convey the Program, the
61445     only way you could satisfy both those terms and this License would
61446     be to refrain entirely from conveying the Program.
61447
61448  13. Use with the GNU Affero General Public License.
61449
61450     Notwithstanding any other provision of this License, you have
61451     permission to link or combine any covered work with a work licensed
61452     under version 3 of the GNU Affero General Public License into a
61453     single combined work, and to convey the resulting work.  The terms
61454     of this License will continue to apply to the part which is the
61455     covered work, but the special requirements of the GNU Affero
61456     General Public License, section 13, concerning interaction through
61457     a network will apply to the combination as such.
61458
61459  14. Revised Versions of this License.
61460
61461     The Free Software Foundation may publish revised and/or new
61462     versions of the GNU General Public License from time to time.  Such
61463     new versions will be similar in spirit to the present version, but
61464     may differ in detail to address new problems or concerns.
61465
61466     Each version is given a distinguishing version number.  If the
61467     Program specifies that a certain numbered version of the GNU
61468     General Public License "or any later version" applies to it, you
61469     have the option of following the terms and conditions either of
61470     that numbered version or of any later version published by the Free
61471     Software Foundation.  If the Program does not specify a version
61472     number of the GNU General Public License, you may choose any
61473     version ever published by the Free Software Foundation.
61474
61475     If the Program specifies that a proxy can decide which future
61476     versions of the GNU General Public License can be used, that
61477     proxy's public statement of acceptance of a version permanently
61478     authorizes you to choose that version for the Program.
61479
61480     Later license versions may give you additional or different
61481     permissions.  However, no additional obligations are imposed on any
61482     author or copyright holder as a result of your choosing to follow a
61483     later version.
61484
61485  15. Disclaimer of Warranty.
61486
61487     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
61488     APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
61489     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
61490     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
61491     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
61492     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
61493     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
61494     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
61495     NECESSARY SERVICING, REPAIR OR CORRECTION.
61496
61497  16. Limitation of Liability.
61498
61499     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
61500     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
61501     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
61502     DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
61503     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
61504     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
61505     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
61506     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
61507     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
61508     THE POSSIBILITY OF SUCH DAMAGES.
61509
61510  17. Interpretation of Sections 15 and 16.
61511
61512     If the disclaimer of warranty and limitation of liability provided
61513     above cannot be given local legal effect according to their terms,
61514     reviewing courts shall apply local law that most closely
61515     approximates an absolute waiver of all civil liability in
61516     connection with the Program, unless a warranty or assumption of
61517     liability accompanies a copy of the Program in return for a fee.
61518
61519END OF TERMS AND CONDITIONS
61520===========================
61521
61522How to Apply These Terms to Your New Programs
61523=============================================
61524
61525If you develop a new program, and you want it to be of the greatest
61526possible use to the public, the best way to achieve this is to make it
61527free software which everyone can redistribute and change under these
61528terms.
61529
61530 To do so, attach the following notices to the program.  It is safest to
61531attach them to the start of each source file to most effectively state
61532the exclusion of warranty; and each file should have at least the
61533"copyright" line and a pointer to where the full notice is found.
61534
61535     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
61536     Copyright (C) YEAR NAME OF AUTHOR
61537
61538     This program is free software: you can redistribute it and/or modify
61539     it under the terms of the GNU General Public License as published by
61540     the Free Software Foundation, either version 3 of the License, or (at
61541     your option) any later version.
61542
61543     This program is distributed in the hope that it will be useful, but
61544     WITHOUT ANY WARRANTY; without even the implied warranty of
61545     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
61546     General Public License for more details.
61547
61548     You should have received a copy of the GNU General Public License
61549     along with this program.  If not, see <https://www.gnu.org/licenses/>.
61550
61551 Also add information on how to contact you by electronic and paper
61552mail.
61553
61554 If the program does terminal interaction, make it output a short notice
61555like this when it starts in an interactive mode:
61556
61557     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
61558     This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
61559     This is free software, and you are welcome to redistribute it
61560     under certain conditions; type 'show c' for details.
61561
61562 The hypothetical commands 'show w' and 'show c' should show the
61563appropriate parts of the General Public License.  Of course, your
61564program's commands might be different; for a GUI interface, you would
61565use an "about box".
61566
61567 You should also get your employer (if you work as a programmer) or
61568school, if any, to sign a "copyright disclaimer" for the program, if
61569necessary.  For more information on this, and how to apply and follow
61570the GNU GPL, see <https://www.gnu.org/licenses/>.
61571
61572 The GNU General Public License does not permit incorporating your
61573program into proprietary programs.  If your program is a subroutine
61574library, you may consider it more useful to permit linking proprietary
61575applications with the library.  If this is what you want to do, use the
61576GNU Lesser General Public License instead of this License.  But first,
61577please read <https://www.gnu.org/licenses/why-not-lgpl.html>.
61578
61579
61580File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
61581
61582GNU Free Documentation License
61583******************************
61584
61585                     Version 1.3, 3 November 2008
61586
61587     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
61588     <https://fsf.org/>
61589
61590     Everyone is permitted to copy and distribute verbatim copies
61591     of this license document, but changing it is not allowed.
61592
61593  0. PREAMBLE
61594
61595     The purpose of this License is to make a manual, textbook, or other
61596     functional and useful document "free" in the sense of freedom: to
61597     assure everyone the effective freedom to copy and redistribute it,
61598     with or without modifying it, either commercially or
61599     noncommercially.  Secondarily, this License preserves for the
61600     author and publisher a way to get credit for their work, while not
61601     being considered responsible for modifications made by others.
61602
61603     This License is a kind of "copyleft", which means that derivative
61604     works of the document must themselves be free in the same sense.
61605     It complements the GNU General Public License, which is a copyleft
61606     license designed for free software.
61607
61608     We have designed this License in order to use it for manuals for
61609     free software, because free software needs free documentation: a
61610     free program should come with manuals providing the same freedoms
61611     that the software does.  But this License is not limited to
61612     software manuals; it can be used for any textual work, regardless
61613     of subject matter or whether it is published as a printed book.  We
61614     recommend this License principally for works whose purpose is
61615     instruction or reference.
61616
61617  1. APPLICABILITY AND DEFINITIONS
61618
61619     This License applies to any manual or other work, in any medium,
61620     that contains a notice placed by the copyright holder saying it can
61621     be distributed under the terms of this License.  Such a notice
61622     grants a world-wide, royalty-free license, unlimited in duration,
61623     to use that work under the conditions stated herein.  The
61624     "Document", below, refers to any such manual or work.  Any member
61625     of the public is a licensee, and is addressed as "you".  You accept
61626     the license if you copy, modify or distribute the work in a way
61627     requiring permission under copyright law.
61628
61629     A "Modified Version" of the Document means any work containing the
61630     Document or a portion of it, either copied verbatim, or with
61631     modifications and/or translated into another language.
61632
61633     A "Secondary Section" is a named appendix or a front-matter section
61634     of the Document that deals exclusively with the relationship of the
61635     publishers or authors of the Document to the Document's overall
61636     subject (or to related matters) and contains nothing that could
61637     fall directly within that overall subject.  (Thus, if the Document
61638     is in part a textbook of mathematics, a Secondary Section may not
61639     explain any mathematics.)  The relationship could be a matter of
61640     historical connection with the subject or with related matters, or
61641     of legal, commercial, philosophical, ethical or political position
61642     regarding them.
61643
61644     The "Invariant Sections" are certain Secondary Sections whose
61645     titles are designated, as being those of Invariant Sections, in the
61646     notice that says that the Document is released under this License.
61647     If a section does not fit the above definition of Secondary then it
61648     is not allowed to be designated as Invariant.  The Document may
61649     contain zero Invariant Sections.  If the Document does not identify
61650     any Invariant Sections then there are none.
61651
61652     The "Cover Texts" are certain short passages of text that are
61653     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
61654     that says that the Document is released under this License.  A
61655     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
61656     be at most 25 words.
61657
61658     A "Transparent" copy of the Document means a machine-readable copy,
61659     represented in a format whose specification is available to the
61660     general public, that is suitable for revising the document
61661     straightforwardly with generic text editors or (for images composed
61662     of pixels) generic paint programs or (for drawings) some widely
61663     available drawing editor, and that is suitable for input to text
61664     formatters or for automatic translation to a variety of formats
61665     suitable for input to text formatters.  A copy made in an otherwise
61666     Transparent file format whose markup, or absence of markup, has
61667     been arranged to thwart or discourage subsequent modification by
61668     readers is not Transparent.  An image format is not Transparent if
61669     used for any substantial amount of text.  A copy that is not
61670     "Transparent" is called "Opaque".
61671
61672     Examples of suitable formats for Transparent copies include plain
61673     ASCII without markup, Texinfo input format, LaTeX input format,
61674     SGML or XML using a publicly available DTD, and standard-conforming
61675     simple HTML, PostScript or PDF designed for human modification.
61676     Examples of transparent image formats include PNG, XCF and JPG.
61677     Opaque formats include proprietary formats that can be read and
61678     edited only by proprietary word processors, SGML or XML for which
61679     the DTD and/or processing tools are not generally available, and
61680     the machine-generated HTML, PostScript or PDF produced by some word
61681     processors for output purposes only.
61682
61683     The "Title Page" means, for a printed book, the title page itself,
61684     plus such following pages as are needed to hold, legibly, the
61685     material this License requires to appear in the title page.  For
61686     works in formats which do not have any title page as such, "Title
61687     Page" means the text near the most prominent appearance of the
61688     work's title, preceding the beginning of the body of the text.
61689
61690     The "publisher" means any person or entity that distributes copies
61691     of the Document to the public.
61692
61693     A section "Entitled XYZ" means a named subunit of the Document
61694     whose title either is precisely XYZ or contains XYZ in parentheses
61695     following text that translates XYZ in another language.  (Here XYZ
61696     stands for a specific section name mentioned below, such as
61697     "Acknowledgements", "Dedications", "Endorsements", or "History".)
61698     To "Preserve the Title" of such a section when you modify the
61699     Document means that it remains a section "Entitled XYZ" according
61700     to this definition.
61701
61702     The Document may include Warranty Disclaimers next to the notice
61703     which states that this License applies to the Document.  These
61704     Warranty Disclaimers are considered to be included by reference in
61705     this License, but only as regards disclaiming warranties: any other
61706     implication that these Warranty Disclaimers may have is void and
61707     has no effect on the meaning of this License.
61708
61709  2. VERBATIM COPYING
61710
61711     You may copy and distribute the Document in any medium, either
61712     commercially or noncommercially, provided that this License, the
61713     copyright notices, and the license notice saying this License
61714     applies to the Document are reproduced in all copies, and that you
61715     add no other conditions whatsoever to those of this License.  You
61716     may not use technical measures to obstruct or control the reading
61717     or further copying of the copies you make or distribute.  However,
61718     you may accept compensation in exchange for copies.  If you
61719     distribute a large enough number of copies you must also follow the
61720     conditions in section 3.
61721
61722     You may also lend copies, under the same conditions stated above,
61723     and you may publicly display copies.
61724
61725  3. COPYING IN QUANTITY
61726
61727     If you publish printed copies (or copies in media that commonly
61728     have printed covers) of the Document, numbering more than 100, and
61729     the Document's license notice requires Cover Texts, you must
61730     enclose the copies in covers that carry, clearly and legibly, all
61731     these Cover Texts: Front-Cover Texts on the front cover, and
61732     Back-Cover Texts on the back cover.  Both covers must also clearly
61733     and legibly identify you as the publisher of these copies.  The
61734     front cover must present the full title with all words of the title
61735     equally prominent and visible.  You may add other material on the
61736     covers in addition.  Copying with changes limited to the covers, as
61737     long as they preserve the title of the Document and satisfy these
61738     conditions, can be treated as verbatim copying in other respects.
61739
61740     If the required texts for either cover are too voluminous to fit
61741     legibly, you should put the first ones listed (as many as fit
61742     reasonably) on the actual cover, and continue the rest onto
61743     adjacent pages.
61744
61745     If you publish or distribute Opaque copies of the Document
61746     numbering more than 100, you must either include a machine-readable
61747     Transparent copy along with each Opaque copy, or state in or with
61748     each Opaque copy a computer-network location from which the general
61749     network-using public has access to download using public-standard
61750     network protocols a complete Transparent copy of the Document, free
61751     of added material.  If you use the latter option, you must take
61752     reasonably prudent steps, when you begin distribution of Opaque
61753     copies in quantity, to ensure that this Transparent copy will
61754     remain thus accessible at the stated location until at least one
61755     year after the last time you distribute an Opaque copy (directly or
61756     through your agents or retailers) of that edition to the public.
61757
61758     It is requested, but not required, that you contact the authors of
61759     the Document well before redistributing any large number of copies,
61760     to give them a chance to provide you with an updated version of the
61761     Document.
61762
61763  4. MODIFICATIONS
61764
61765     You may copy and distribute a Modified Version of the Document
61766     under the conditions of sections 2 and 3 above, provided that you
61767     release the Modified Version under precisely this License, with the
61768     Modified Version filling the role of the Document, thus licensing
61769     distribution and modification of the Modified Version to whoever
61770     possesses a copy of it.  In addition, you must do these things in
61771     the Modified Version:
61772
61773       A. Use in the Title Page (and on the covers, if any) a title
61774          distinct from that of the Document, and from those of previous
61775          versions (which should, if there were any, be listed in the
61776          History section of the Document).  You may use the same title
61777          as a previous version if the original publisher of that
61778          version gives permission.
61779
61780       B. List on the Title Page, as authors, one or more persons or
61781          entities responsible for authorship of the modifications in
61782          the Modified Version, together with at least five of the
61783          principal authors of the Document (all of its principal
61784          authors, if it has fewer than five), unless they release you
61785          from this requirement.
61786
61787       C. State on the Title page the name of the publisher of the
61788          Modified Version, as the publisher.
61789
61790       D. Preserve all the copyright notices of the Document.
61791
61792       E. Add an appropriate copyright notice for your modifications
61793          adjacent to the other copyright notices.
61794
61795       F. Include, immediately after the copyright notices, a license
61796          notice giving the public permission to use the Modified
61797          Version under the terms of this License, in the form shown in
61798          the Addendum below.
61799
61800       G. Preserve in that license notice the full lists of Invariant
61801          Sections and required Cover Texts given in the Document's
61802          license notice.
61803
61804       H. Include an unaltered copy of this License.
61805
61806       I. Preserve the section Entitled "History", Preserve its Title,
61807          and add to it an item stating at least the title, year, new
61808          authors, and publisher of the Modified Version as given on the
61809          Title Page.  If there is no section Entitled "History" in the
61810          Document, create one stating the title, year, authors, and
61811          publisher of the Document as given on its Title Page, then add
61812          an item describing the Modified Version as stated in the
61813          previous sentence.
61814
61815       J. Preserve the network location, if any, given in the Document
61816          for public access to a Transparent copy of the Document, and
61817          likewise the network locations given in the Document for
61818          previous versions it was based on.  These may be placed in the
61819          "History" section.  You may omit a network location for a work
61820          that was published at least four years before the Document
61821          itself, or if the original publisher of the version it refers
61822          to gives permission.
61823
61824       K. For any section Entitled "Acknowledgements" or "Dedications",
61825          Preserve the Title of the section, and preserve in the section
61826          all the substance and tone of each of the contributor
61827          acknowledgements and/or dedications given therein.
61828
61829       L. Preserve all the Invariant Sections of the Document, unaltered
61830          in their text and in their titles.  Section numbers or the
61831          equivalent are not considered part of the section titles.
61832
61833       M. Delete any section Entitled "Endorsements".  Such a section
61834          may not be included in the Modified Version.
61835
61836       N. Do not retitle any existing section to be Entitled
61837          "Endorsements" or to conflict in title with any Invariant
61838          Section.
61839
61840       O. Preserve any Warranty Disclaimers.
61841
61842     If the Modified Version includes new front-matter sections or
61843     appendices that qualify as Secondary Sections and contain no
61844     material copied from the Document, you may at your option designate
61845     some or all of these sections as invariant.  To do this, add their
61846     titles to the list of Invariant Sections in the Modified Version's
61847     license notice.  These titles must be distinct from any other
61848     section titles.
61849
61850     You may add a section Entitled "Endorsements", provided it contains
61851     nothing but endorsements of your Modified Version by various
61852     parties--for example, statements of peer review or that the text
61853     has been approved by an organization as the authoritative
61854     definition of a standard.
61855
61856     You may add a passage of up to five words as a Front-Cover Text,
61857     and a passage of up to 25 words as a Back-Cover Text, to the end of
61858     the list of Cover Texts in the Modified Version.  Only one passage
61859     of Front-Cover Text and one of Back-Cover Text may be added by (or
61860     through arrangements made by) any one entity.  If the Document
61861     already includes a cover text for the same cover, previously added
61862     by you or by arrangement made by the same entity you are acting on
61863     behalf of, you may not add another; but you may replace the old
61864     one, on explicit permission from the previous publisher that added
61865     the old one.
61866
61867     The author(s) and publisher(s) of the Document do not by this
61868     License give permission to use their names for publicity for or to
61869     assert or imply endorsement of any Modified Version.
61870
61871  5. COMBINING DOCUMENTS
61872
61873     You may combine the Document with other documents released under
61874     this License, under the terms defined in section 4 above for
61875     modified versions, provided that you include in the combination all
61876     of the Invariant Sections of all of the original documents,
61877     unmodified, and list them all as Invariant Sections of your
61878     combined work in its license notice, and that you preserve all
61879     their Warranty Disclaimers.
61880
61881     The combined work need only contain one copy of this License, and
61882     multiple identical Invariant Sections may be replaced with a single
61883     copy.  If there are multiple Invariant Sections with the same name
61884     but different contents, make the title of each such section unique
61885     by adding at the end of it, in parentheses, the name of the
61886     original author or publisher of that section if known, or else a
61887     unique number.  Make the same adjustment to the section titles in
61888     the list of Invariant Sections in the license notice of the
61889     combined work.
61890
61891     In the combination, you must combine any sections Entitled
61892     "History" in the various original documents, forming one section
61893     Entitled "History"; likewise combine any sections Entitled
61894     "Acknowledgements", and any sections Entitled "Dedications".  You
61895     must delete all sections Entitled "Endorsements."
61896
61897  6. COLLECTIONS OF DOCUMENTS
61898
61899     You may make a collection consisting of the Document and other
61900     documents released under this License, and replace the individual
61901     copies of this License in the various documents with a single copy
61902     that is included in the collection, provided that you follow the
61903     rules of this License for verbatim copying of each of the documents
61904     in all other respects.
61905
61906     You may extract a single document from such a collection, and
61907     distribute it individually under this License, provided you insert
61908     a copy of this License into the extracted document, and follow this
61909     License in all other respects regarding verbatim copying of that
61910     document.
61911
61912  7. AGGREGATION WITH INDEPENDENT WORKS
61913
61914     A compilation of the Document or its derivatives with other
61915     separate and independent documents or works, in or on a volume of a
61916     storage or distribution medium, is called an "aggregate" if the
61917     copyright resulting from the compilation is not used to limit the
61918     legal rights of the compilation's users beyond what the individual
61919     works permit.  When the Document is included in an aggregate, this
61920     License does not apply to the other works in the aggregate which
61921     are not themselves derivative works of the Document.
61922
61923     If the Cover Text requirement of section 3 is applicable to these
61924     copies of the Document, then if the Document is less than one half
61925     of the entire aggregate, the Document's Cover Texts may be placed
61926     on covers that bracket the Document within the aggregate, or the
61927     electronic equivalent of covers if the Document is in electronic
61928     form.  Otherwise they must appear on printed covers that bracket
61929     the whole aggregate.
61930
61931  8. TRANSLATION
61932
61933     Translation is considered a kind of modification, so you may
61934     distribute translations of the Document under the terms of section
61935     4.  Replacing Invariant Sections with translations requires special
61936     permission from their copyright holders, but you may include
61937     translations of some or all Invariant Sections in addition to the
61938     original versions of these Invariant Sections.  You may include a
61939     translation of this License, and all the license notices in the
61940     Document, and any Warranty Disclaimers, provided that you also
61941     include the original English version of this License and the
61942     original versions of those notices and disclaimers.  In case of a
61943     disagreement between the translation and the original version of
61944     this License or a notice or disclaimer, the original version will
61945     prevail.
61946
61947     If a section in the Document is Entitled "Acknowledgements",
61948     "Dedications", or "History", the requirement (section 4) to
61949     Preserve its Title (section 1) will typically require changing the
61950     actual title.
61951
61952  9. TERMINATION
61953
61954     You may not copy, modify, sublicense, or distribute the Document
61955     except as expressly provided under this License.  Any attempt
61956     otherwise to copy, modify, sublicense, or distribute it is void,
61957     and will automatically terminate your rights under this License.
61958
61959     However, if you cease all violation of this License, then your
61960     license from a particular copyright holder is reinstated (a)
61961     provisionally, unless and until the copyright holder explicitly and
61962     finally terminates your license, and (b) permanently, if the
61963     copyright holder fails to notify you of the violation by some
61964     reasonable means prior to 60 days after the cessation.
61965
61966     Moreover, your license from a particular copyright holder is
61967     reinstated permanently if the copyright holder notifies you of the
61968     violation by some reasonable means, this is the first time you have
61969     received notice of violation of this License (for any work) from
61970     that copyright holder, and you cure the violation prior to 30 days
61971     after your receipt of the notice.
61972
61973     Termination of your rights under this section does not terminate
61974     the licenses of parties who have received copies or rights from you
61975     under this License.  If your rights have been terminated and not
61976     permanently reinstated, receipt of a copy of some or all of the
61977     same material does not give you any rights to use it.
61978
61979  10. FUTURE REVISIONS OF THIS LICENSE
61980
61981     The Free Software Foundation may publish new, revised versions of
61982     the GNU Free Documentation License from time to time.  Such new
61983     versions will be similar in spirit to the present version, but may
61984     differ in detail to address new problems or concerns.  See
61985     <https://www.gnu.org/copyleft/>.
61986
61987     Each version of the License is given a distinguishing version
61988     number.  If the Document specifies that a particular numbered
61989     version of this License "or any later version" applies to it, you
61990     have the option of following the terms and conditions either of
61991     that specified version or of any later version that has been
61992     published (not as a draft) by the Free Software Foundation.  If the
61993     Document does not specify a version number of this License, you may
61994     choose any version ever published (not as a draft) by the Free
61995     Software Foundation.  If the Document specifies that a proxy can
61996     decide which future versions of this License can be used, that
61997     proxy's public statement of acceptance of a version permanently
61998     authorizes you to choose that version for the Document.
61999
62000  11. RELICENSING
62001
62002     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
62003     World Wide Web server that publishes copyrightable works and also
62004     provides prominent facilities for anybody to edit those works.  A
62005     public wiki that anybody can edit is an example of such a server.
62006     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
62007     site means any set of copyrightable works thus published on the MMC
62008     site.
62009
62010     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
62011     license published by Creative Commons Corporation, a not-for-profit
62012     corporation with a principal place of business in San Francisco,
62013     California, as well as future copyleft versions of that license
62014     published by that same organization.
62015
62016     "Incorporate" means to publish or republish a Document, in whole or
62017     in part, as part of another Document.
62018
62019     An MMC is "eligible for relicensing" if it is licensed under this
62020     License, and if all works that were first published under this
62021     License somewhere other than this MMC, and subsequently
62022     incorporated in whole or in part into the MMC, (1) had no cover
62023     texts or invariant sections, and (2) were thus incorporated prior
62024     to November 1, 2008.
62025
62026     The operator of an MMC Site may republish an MMC contained in the
62027     site under CC-BY-SA on the same site at any time before August 1,
62028     2009, provided the MMC is eligible for relicensing.
62029
62030ADDENDUM: How to use this License for your documents
62031====================================================
62032
62033To use this License in a document you have written, include a copy of
62034the License in the document and put the following copyright and license
62035notices just after the title page:
62036
62037       Copyright (C)  YEAR  YOUR NAME.
62038       Permission is granted to copy, distribute and/or modify this document
62039       under the terms of the GNU Free Documentation License, Version 1.3
62040       or any later version published by the Free Software Foundation;
62041       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
62042       Texts.  A copy of the license is included in the section entitled ``GNU
62043       Free Documentation License''.
62044
62045 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
62046replace the "with...Texts."  line with this:
62047
62048         with the Invariant Sections being LIST THEIR TITLES, with
62049         the Front-Cover Texts being LIST, and with the Back-Cover Texts
62050         being LIST.
62051
62052 If you have Invariant Sections without Cover Texts, or some other
62053combination of the three, merge those two alternatives to suit the
62054situation.
62055
62056 If your document contains nontrivial examples of program code, we
62057recommend releasing these examples in parallel under your choice of free
62058software license, such as the GNU General Public License, to permit
62059their use in free software.
62060
62061
62062File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
62063
62064Contributors to GCC
62065*******************
62066
62067The GCC project would like to thank its many contributors.  Without them
62068the project would not have been nearly as successful as it has been.
62069Any omissions in this list are accidental.  Feel free to contact
62070<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
62071some of your contributions are not listed.  Please keep this list in
62072alphabetical order.
62073
62074   * Analog Devices helped implement the support for complex data types
62075     and iterators.
62076
62077   * John David Anglin for threading-related fixes and improvements to
62078     libstdc++-v3, and the HP-UX port.
62079
62080   * James van Artsdalen wrote the code that makes efficient use of the
62081     Intel 80387 register stack.
62082
62083   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
62084     Series port.
62085
62086   * Alasdair Baird for various bug fixes.
62087
62088   * Giovanni Bajo for analyzing lots of complicated C++ problem
62089     reports.
62090
62091   * Peter Barada for his work to improve code generation for new
62092     ColdFire cores.
62093
62094   * Gerald Baumgartner added the signature extension to the C++ front
62095     end.
62096
62097   * Godmar Back for his Java improvements and encouragement.
62098
62099   * Scott Bambrough for help porting the Java compiler.
62100
62101   * Wolfgang Bangerth for processing tons of bug reports.
62102
62103   * Jon Beniston for his Microsoft Windows port of Java and port to
62104     Lattice Mico32.
62105
62106   * Daniel Berlin for better DWARF 2 support, faster/better
62107     optimizations, improved alias analysis, plus migrating GCC to
62108     Bugzilla.
62109
62110   * Geoff Berry for his Java object serialization work and various
62111     patches.
62112
62113   * David Binderman tests weekly snapshots of GCC trunk against Fedora
62114     Rawhide for several architectures.
62115
62116   * Laurynas Biveinis for memory management work and DJGPP port fixes.
62117
62118   * Uros Bizjak for the implementation of x87 math built-in functions
62119     and for various middle end and i386 back end improvements and bug
62120     fixes.
62121
62122   * Eric Blake for helping to make GCJ and libgcj conform to the
62123     specifications.
62124
62125   * Janne Blomqvist for contributions to GNU Fortran.
62126
62127   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
62128     other Java work.
62129
62130   * Segher Boessenkool for helping maintain the PowerPC port and the
62131     instruction combiner plus various contributions to the middle end.
62132
62133   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
62134     miscellaneous clean-ups.
62135
62136   * Steven Bosscher for integrating the GNU Fortran front end into GCC
62137     and for contributing to the tree-ssa branch.
62138
62139   * Eric Botcazou for fixing middle- and backend bugs left and right.
62140
62141   * Per Bothner for his direction via the steering committee and
62142     various improvements to the infrastructure for supporting new
62143     languages.  Chill front end implementation.  Initial
62144     implementations of cpplib, fix-header, config.guess, libio, and
62145     past C++ library (libg++) maintainer.  Dreaming up, designing and
62146     implementing much of GCJ.
62147
62148   * Devon Bowen helped port GCC to the Tahoe.
62149
62150   * Don Bowman for mips-vxworks contributions.
62151
62152   * James Bowman for the FT32 port.
62153
62154   * Dave Brolley for work on cpplib and Chill.
62155
62156   * Paul Brook for work on the ARM architecture and maintaining GNU
62157     Fortran.
62158
62159   * Robert Brown implemented the support for Encore 32000 systems.
62160
62161   * Christian Bruel for improvements to local store elimination.
62162
62163   * Herman A.J. ten Brugge for various fixes.
62164
62165   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
62166     FAQ.
62167
62168   * Joe Buck for his direction via the steering committee from its
62169     creation to 2013.
62170
62171   * Iain Buclaw for the D frontend.
62172
62173   * Craig Burley for leadership of the G77 Fortran effort.
62174
62175   * Tobias Burnus for contributions to GNU Fortran.
62176
62177   * Stephan Buys for contributing Doxygen notes for libstdc++.
62178
62179   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
62180     to the C++ strings, streambufs and formatted I/O, hard detective
62181     work on the frustrating localization issues, and keeping up with
62182     the problem reports.
62183
62184   * John Carr for his alias work, SPARC hacking, infrastructure
62185     improvements, previous contributions to the steering committee,
62186     loop optimizations, etc.
62187
62188   * Stephane Carrez for 68HC11 and 68HC12 ports.
62189
62190   * Steve Chamberlain for support for the Renesas SH and H8 processors
62191     and the PicoJava processor, and for GCJ config fixes.
62192
62193   * Glenn Chambers for help with the GCJ FAQ.
62194
62195   * John-Marc Chandonia for various libgcj patches.
62196
62197   * Denis Chertykov for contributing and maintaining the AVR port, the
62198     first GCC port for an 8-bit architecture.
62199
62200   * Kito Cheng for his work on the RISC-V port, including bringing up
62201     the test suite and maintenance.
62202
62203   * Scott Christley for his Objective-C contributions.
62204
62205   * Eric Christopher for his Java porting help and clean-ups.
62206
62207   * Branko Cibej for more warning contributions.
62208
62209   * The GNU Classpath project for all of their merged runtime code.
62210
62211   * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
62212     '--help', and other random hacking.
62213
62214   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
62215
62216   * R. Kelley Cook for making GCC buildable from a read-only directory
62217     as well as other miscellaneous build process and documentation
62218     clean-ups.
62219
62220   * Ralf Corsepius for SH testing and minor bug fixing.
62221
62222   * Franc,ois-Xavier Coudert for contributions to GNU Fortran.
62223
62224   * Stan Cox for care and feeding of the x86 port and lots of behind
62225     the scenes hacking.
62226
62227   * Alex Crain provided changes for the 3b1.
62228
62229   * Ian Dall for major improvements to the NS32k port.
62230
62231   * Paul Dale for his work to add uClinux platform support to the m68k
62232     backend.
62233
62234   * Palmer Dabbelt for his work maintaining the RISC-V port.
62235
62236   * Dario Dariol contributed the four varieties of sample programs that
62237     print a copy of their source.
62238
62239   * Russell Davidson for fstream and stringstream fixes in libstdc++.
62240
62241   * Bud Davis for work on the G77 and GNU Fortran compilers.
62242
62243   * Mo DeJong for GCJ and libgcj bug fixes.
62244
62245   * Jerry DeLisle for contributions to GNU Fortran.
62246
62247   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
62248     various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.
62249
62250   * Arnaud Desitter for helping to debug GNU Fortran.
62251
62252   * Gabriel Dos Reis for contributions to G++, contributions and
62253     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
62254     including 'valarray<>', 'complex<>', maintaining the numerics
62255     library (including that pesky '<limits>' :-) and keeping up-to-date
62256     anything to do with numbers.
62257
62258   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
62259     ISO C99 support, CFG dumping support, etc., plus support of the C++
62260     runtime libraries including for all kinds of C interface issues,
62261     contributing and maintaining 'complex<>', sanity checking and
62262     disbursement, configuration architecture, libio maintenance, and
62263     early math work.
62264
62265   * Franc,ois Dumont for his work on libstdc++-v3, especially
62266     maintaining and improving 'debug-mode' and associative and
62267     unordered containers.
62268
62269   * Zdenek Dvorak for a new loop unroller and various fixes.
62270
62271   * Michael Eager for his work on the Xilinx MicroBlaze port.
62272
62273   * Richard Earnshaw for his ongoing work with the ARM.
62274
62275   * David Edelsohn for his direction via the steering committee,
62276     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
62277     loop changes, doing the entire AIX port of libstdc++ with his bare
62278     hands, and for ensuring GCC properly keeps working on AIX.
62279
62280   * Kevin Ediger for the floating point formatting of num_put::do_put
62281     in libstdc++.
62282
62283   * Phil Edwards for libstdc++ work including configuration hackery,
62284     documentation maintainer, chief breaker of the web pages, the
62285     occasional iostream bug fix, and work on shared library symbol
62286     versioning.
62287
62288   * Paul Eggert for random hacking all over GCC.
62289
62290   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
62291     configuration support for locales and fstream-related fixes.
62292
62293   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
62294     iostreams.
62295
62296   * Christian Ehrhardt for dealing with bug reports.
62297
62298   * Ben Elliston for his work to move the Objective-C runtime into its
62299     own subdirectory and for his work on autoconf.
62300
62301   * Revital Eres for work on the PowerPC 750CL port.
62302
62303   * Marc Espie for OpenBSD support.
62304
62305   * Doug Evans for much of the global optimization framework, arc,
62306     m32r, and SPARC work.
62307
62308   * Christopher Faylor for his work on the Cygwin port and for caring
62309     and feeding the gcc.gnu.org box and saving its users tons of spam.
62310
62311   * Fred Fish for BeOS support and Ada fixes.
62312
62313   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
62314
62315   * Peter Gerwinski for various bug fixes and the Pascal front end.
62316
62317   * Kaveh R. Ghazi for his direction via the steering committee,
62318     amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC
62319     on a plethora of platforms.  Kaveh extends his gratitude to the
62320     CAIP Center at Rutgers University for providing him with computing
62321     resources to work on Free Software from the late 1980s to 2010.
62322
62323   * John Gilmore for a donation to the FSF earmarked improving GNU
62324     Java.
62325
62326   * Judy Goldberg for c++ contributions.
62327
62328   * Torbjorn Granlund for various fixes and the c-torture testsuite,
62329     multiply- and divide-by-constant optimization, improved long long
62330     support, improved leaf function register allocation, and his
62331     direction via the steering committee.
62332
62333   * Jonny Grant for improvements to 'collect2's' '--help'
62334     documentation.
62335
62336   * Anthony Green for his '-Os' contributions, the moxie port, and Java
62337     front end work.
62338
62339   * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
62340     code.
62341
62342   * Michael K. Gschwind contributed the port to the PDP-11.
62343
62344   * Richard Biener for his ongoing middle-end contributions and bug
62345     fixes and for release management.
62346
62347   * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools,
62348     the support for DWARF 1 symbolic debugging information, and much of
62349     the support for System V Release 4.  He has also worked heavily on
62350     the Intel 386 and 860 support.
62351
62352   * Sumanth Gundapaneni for contributing the CR16 port.
62353
62354   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
62355     GCSE.
62356
62357   * Bruno Haible for improvements in the runtime overhead for EH, new
62358     warnings and assorted bug fixes.
62359
62360   * Andrew Haley for his amazing Java compiler and library efforts.
62361
62362   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
62363     series 300.
62364
62365   * Michael Hayes for various thankless work he's done trying to get
62366     the c30/c40 ports functional.  Lots of loop and unroll improvements
62367     and fixes.
62368
62369   * Dara Hazeghi for wading through myriads of target-specific bug
62370     reports.
62371
62372   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
62373
62374   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
62375     work, loop opts, and generally fixing lots of old problems we've
62376     ignored for years, flow rewrite and lots of further stuff,
62377     including reviewing tons of patches.
62378
62379   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
62380     various fixes.
62381
62382   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
62383     contributed the support for the Sony NEWS machine.
62384
62385   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
62386     various fixes.
62387
62388   * Katherine Holcomb for work on GNU Fortran.
62389
62390   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
62391     of testing and bug fixing, particularly of GCC configury code.
62392
62393   * Steve Holmgren for MachTen patches.
62394
62395   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
62396
62397   * Jan Hubicka for his x86 port improvements.
62398
62399   * Falk Hueffner for working on C and optimization bug reports.
62400
62401   * Bernardo Innocenti for his m68k work, including merging of ColdFire
62402     improvements and uClinux support.
62403
62404   * Christian Iseli for various bug fixes.
62405
62406   * Kamil Iskra for general m68k hacking.
62407
62408   * Lee Iverson for random fixes and MIPS testing.
62409
62410   * Balaji V. Iyer for Cilk+ development and merging.
62411
62412   * Andreas Jaeger for testing and benchmarking of GCC and various bug
62413     fixes.
62414
62415   * Martin Jambor for his work on inter-procedural optimizations, the
62416     switch conversion pass, and scalar replacement of aggregates.
62417
62418   * Jakub Jelinek for his SPARC work and sibling call optimizations as
62419     well as lots of bug fixes and test cases, and for improving the
62420     Java build system.
62421
62422   * Janis Johnson for ia64 testing and fixes, her quality improvement
62423     sidetracks, and web page maintenance.
62424
62425   * Kean Johnston for SCO OpenServer support and various fixes.
62426
62427   * Tim Josling for the sample language treelang based originally on
62428     Richard Kenner's "toy" language.
62429
62430   * Nicolai Josuttis for additional libstdc++ documentation.
62431
62432   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
62433     target.
62434
62435   * Steven G. Kargl for work on GNU Fortran.
62436
62437   * David Kashtan of SRI adapted GCC to VMS.
62438
62439   * Ryszard Kabatek for many, many libstdc++ bug fixes and
62440     optimizations of strings, especially member functions, and for
62441     auto_ptr fixes.
62442
62443   * Geoffrey Keating for his ongoing work to make the PPC work for
62444     GNU/Linux and his automatic regression tester.
62445
62446   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
62447     work in just about every part of libstdc++.
62448
62449   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
62450     MIL-STD-1750A.
62451
62452   * Richard Kenner of the New York University Ultracomputer Research
62453     Laboratory wrote the machine descriptions for the AMD 29000, the
62454     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
62455     support for instruction attributes.  He also made changes to better
62456     support RISC processors including changes to common subexpression
62457     elimination, strength reduction, function calling sequence
62458     handling, and condition code support, in addition to generalizing
62459     the code for frame pointer elimination and delay slot scheduling.
62460     Richard Kenner was also the head maintainer of GCC for several
62461     years.
62462
62463   * Mumit Khan for various contributions to the Cygwin and Mingw32
62464     ports and maintaining binary releases for Microsoft Windows hosts,
62465     and for massive libstdc++ porting work to Cygwin/Mingw32.
62466
62467   * Robin Kirkham for cpu32 support.
62468
62469   * Mark Klein for PA improvements.
62470
62471   * Thomas Koenig for various bug fixes.
62472
62473   * Bruce Korb for the new and improved fixincludes code.
62474
62475   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
62476     effort.
62477
62478   * Maxim Kuvyrkov for contributions to the instruction scheduler, the
62479     Android and m68k/Coldfire ports, and optimizations.
62480
62481   * Charles LaBrec contributed the support for the Integrated Solutions
62482     68020 system.
62483
62484   * Asher Langton and Mike Kumbera for contributing Cray pointer
62485     support to GNU Fortran, and for other GNU Fortran improvements.
62486
62487   * Jeff Law for his direction via the steering committee, coordinating
62488     the entire egcs project and GCC 2.95, rolling out snapshots and
62489     releases, handling merges from GCC2, reviewing tons of patches that
62490     might have fallen through the cracks else, and random but extensive
62491     hacking.
62492
62493   * Walter Lee for work on the TILE-Gx and TILEPro ports.
62494
62495   * Marc Lehmann for his direction via the steering committee and
62496     helping with analysis and improvements of x86 performance.
62497
62498   * Victor Leikehman for work on GNU Fortran.
62499
62500   * Ted Lemon wrote parts of the RTL reader and printer.
62501
62502   * Kriang Lerdsuwanakij for C++ improvements including template as
62503     template parameter support, and many C++ fixes.
62504
62505   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
62506     and random work on the Java front end.
62507
62508   * Alain Lichnewsky ported GCC to the MIPS CPU.
62509
62510   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
62511     and patches.
62512
62513   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
62514
62515   * Chen Liqin for various S+core related fixes/improvement, and for
62516     maintaining the S+core port.
62517
62518   * Martin Liska for his work on identical code folding, the
62519     sanitizers, HSA, general bug fixing and for running automated
62520     regression testing of GCC and reporting numerous bugs.
62521
62522   * Weiwen Liu for testing and various bug fixes.
62523
62524   * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other
62525     diagnostics fixes and improvements.
62526
62527   * Dave Love for his ongoing work with the Fortran front end and
62528     runtime libraries.
62529
62530   * Martin von Lo"wis for internal consistency checking infrastructure,
62531     various C++ improvements including namespace support, and tons of
62532     assistance with libstdc++/compiler merges.
62533
62534   * H.J. Lu for his previous contributions to the steering committee,
62535     many x86 bug reports, prototype patches, and keeping the GNU/Linux
62536     ports working.
62537
62538   * Greg McGary for random fixes and (someday) bounded pointers.
62539
62540   * Andrew MacLeod for his ongoing work in building a real EH system,
62541     various code generation improvements, work on the global optimizer,
62542     etc.
62543
62544   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
62545     hacking improvements to compile-time performance, overall knowledge
62546     and direction in the area of instruction scheduling, design and
62547     implementation of the automaton based instruction scheduler and
62548     design and implementation of the integrated and local register
62549     allocators.
62550
62551   * David Malcolm for his work on improving GCC diagnostics, JIT,
62552     self-tests and unit testing.
62553
62554   * Bob Manson for his behind the scenes work on dejagnu.
62555
62556   * John Marino for contributing the DragonFly BSD port.
62557
62558   * Philip Martin for lots of libstdc++ string and vector iterator
62559     fixes and improvements, and string clean up and testsuites.
62560
62561   * Michael Matz for his work on dominance tree discovery, the x86-64
62562     port, link-time optimization framework and general optimization
62563     improvements.
62564
62565   * All of the Mauve project contributors for Java test code.
62566
62567   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
62568
62569   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
62570
62571   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
62572     powerpc, haifa, ECOFF debug support, and other assorted hacking.
62573
62574   * Jason Merrill for his direction via the steering committee and
62575     leading the G++ effort.
62576
62577   * Martin Michlmayr for testing GCC on several architectures using the
62578     entire Debian archive.
62579
62580   * David Miller for his direction via the steering committee, lots of
62581     SPARC work, improvements in jump.cc and interfacing with the Linux
62582     kernel developers.
62583
62584   * Gary Miller ported GCC to Charles River Data Systems machines.
62585
62586   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
62587     the entire libstdc++ testsuite namespace-compatible.
62588
62589   * Mark Mitchell for his direction via the steering committee,
62590     mountains of C++ work, load/store hoisting out of loops, alias
62591     analysis improvements, ISO C 'restrict' support, and serving as
62592     release manager from 2000 to 2011.
62593
62594   * Alan Modra for various GNU/Linux bits and testing.
62595
62596   * Toon Moene for his direction via the steering committee, Fortran
62597     maintenance, and his ongoing work to make us make Fortran run fast.
62598
62599   * Jason Molenda for major help in the care and feeding of all the
62600     services on the gcc.gnu.org (formerly egcs.cygnus.com)
62601     machine--mail, web services, ftp services, etc etc.  Doing all this
62602     work on scrap paper and the backs of envelopes would have been...
62603     difficult.
62604
62605   * Catherine Moore for fixing various ugly problems we have sent her
62606     way, including the haifa bug which was killing the Alpha & PowerPC
62607     Linux kernels.
62608
62609   * Mike Moreton for his various Java patches.
62610
62611   * David Mosberger-Tang for various Alpha improvements, and for the
62612     initial IA-64 port.
62613
62614   * Stephen Moshier contributed the floating point emulator that
62615     assists in cross-compilation and permits support for floating point
62616     numbers wider than 64 bits and for ISO C99 support.
62617
62618   * Bill Moyer for his behind the scenes work on various issues.
62619
62620   * Philippe De Muyter for his work on the m68k port.
62621
62622   * Joseph S. Myers for his work on the PDP-11 port, format checking
62623     and ISO C99 support, and continuous emphasis on (and contributions
62624     to) documentation.
62625
62626   * Nathan Myers for his work on libstdc++-v3: architecture and
62627     authorship through the first three snapshots, including
62628     implementation of locale infrastructure, string, shadow C headers,
62629     and the initial project documentation (DESIGN, CHECKLIST, and so
62630     forth).  Later, more work on MT-safe string and shadow headers.
62631
62632   * Felix Natter for documentation on porting libstdc++.
62633
62634   * Nathanael Nerode for cleaning up the configuration/build process.
62635
62636   * NeXT, Inc. donated the front end that supports the Objective-C
62637     language.
62638
62639   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
62640     search engine setup, various documentation fixes and other small
62641     fixes.
62642
62643   * Geoff Noer for his work on getting cygwin native builds working.
62644
62645   * Vegard Nossum for running automated regression testing of GCC and
62646     reporting numerous bugs.
62647
62648   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
62649     tracking web pages, GIMPLE tuples, and assorted fixes.
62650
62651   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
62652     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
62653     infrastructure improvements.
62654
62655   * Alexandre Oliva for various build infrastructure improvements,
62656     scripts and amazing testing work, including keeping libtool issues
62657     sane and happy.
62658
62659   * Stefan Olsson for work on mt_alloc.
62660
62661   * Melissa O'Neill for various NeXT fixes.
62662
62663   * Rainer Orth for random MIPS work, including improvements to GCC's
62664     o32 ABI support, improvements to dejagnu's MIPS support, Java
62665     configuration clean-ups and porting work, and maintaining the IRIX,
62666     Solaris 2, and Tru64 UNIX ports.
62667
62668   * Steven Pemberton for his contribution of 'enquire' which allowed
62669     GCC to determine various properties of the floating point unit and
62670     generate 'float.h' in older versions of GCC.
62671
62672   * Hartmut Penner for work on the s390 port.
62673
62674   * Paul Petersen wrote the machine description for the Alliant FX/8.
62675
62676   * Alexandre Petit-Bianco for implementing much of the Java compiler
62677     and continued Java maintainership.
62678
62679   * Matthias Pfaller for major improvements to the NS32k port.
62680
62681   * Gerald Pfeifer for his direction via the steering committee,
62682     pointing out lots of problems we need to solve, maintenance of the
62683     web pages, and taking care of documentation maintenance in general.
62684
62685   * Marek Polacek for his work on the C front end, the sanitizers and
62686     general bug fixing.
62687
62688   * Andrew Pinski for processing bug reports by the dozen.
62689
62690   * Ovidiu Predescu for his work on the Objective-C front end and
62691     runtime libraries.
62692
62693   * Jerry Quinn for major performance improvements in C++ formatted
62694     I/O.
62695
62696   * Ken Raeburn for various improvements to checker, MIPS ports and
62697     various cleanups in the compiler.
62698
62699   * Rolf W. Rasmussen for hacking on AWT.
62700
62701   * David Reese of Sun Microsystems contributed to the Solaris on
62702     PowerPC port.
62703
62704   * John Regehr for running automated regression testing of GCC and
62705     reporting numerous bugs.
62706
62707   * Volker Reichelt for running automated regression testing of GCC and
62708     reporting numerous bugs and for keeping up with the problem
62709     reports.
62710
62711   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
62712     hacking and developing and maintaining the Epiphany port.
62713
62714   * Loren J. Rittle for improvements to libstdc++-v3 including the
62715     FreeBSD port, threading fixes, thread-related configury changes,
62716     critical threading documentation, and solutions to really tricky
62717     I/O problems, as well as keeping GCC properly working on FreeBSD
62718     and continuous testing.
62719
62720   * Craig Rodrigues for processing tons of bug reports.
62721
62722   * Ola Ro"nnerup for work on mt_alloc.
62723
62724   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
62725
62726   * David Ronis inspired and encouraged Craig to rewrite the G77
62727     documentation in texinfo format by contributing a first pass at a
62728     translation of the old 'g77-0.5.16/f/DOC' file.
62729
62730   * Ken Rose for fixes to GCC's delay slot filling code.
62731
62732   * Ira Rosen for her contributions to the auto-vectorizer.
62733
62734   * Paul Rubin wrote most of the preprocessor.
62735
62736   * Pe'tur Runo'lfsson for major performance improvements in C++
62737     formatted I/O and large file support in C++ filebuf.
62738
62739   * Chip Salzenberg for libstdc++ patches and improvements to locales,
62740     traits, Makefiles, libio, libtool hackery, and "long long" support.
62741
62742   * Juha Sarlin for improvements to the H8 code generator.
62743
62744   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
62745     300.
62746
62747   * Roger Sayle for improvements to constant folding and GCC's RTL
62748     optimizers as well as for fixing numerous bugs.
62749
62750   * Bradley Schatz for his work on the GCJ FAQ.
62751
62752   * Peter Schauer wrote the code to allow debugging to work on the
62753     Alpha.
62754
62755   * William Schelter did most of the work on the Intel 80386 support.
62756
62757   * Tobias Schlu"ter for work on GNU Fortran.
62758
62759   * Bernd Schmidt for various code generation improvements and major
62760     work in the reload pass, serving as release manager for GCC 2.95.3,
62761     and work on the Blackfin and C6X ports.
62762
62763   * Peter Schmid for constant testing of libstdc++--especially
62764     application testing, going above and beyond what was requested for
62765     the release criteria--and libstdc++ header file tweaks.
62766
62767   * Jason Schroeder for jcf-dump patches.
62768
62769   * Andreas Schwab for his work on the m68k port.
62770
62771   * Lars Segerlund for work on GNU Fortran.
62772
62773   * Dodji Seketeli for numerous C++ bug fixes and debug info
62774     improvements.
62775
62776   * Tim Shen for major work on '<regex>'.
62777
62778   * Joel Sherrill for his direction via the steering committee, RTEMS
62779     contributions and RTEMS testing.
62780
62781   * Nathan Sidwell for many C++ fixes/improvements.
62782
62783   * Jeffrey Siegal for helping RMS with the original design of GCC,
62784     some code which handles the parse tree and RTL data structures,
62785     constant folding and help with the original VAX & m68k ports.
62786
62787   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
62788     from the LWG (thereby keeping GCC in line with updates from the
62789     ISO).
62790
62791   * Franz Sirl for his ongoing work with making the PPC port stable for
62792     GNU/Linux.
62793
62794   * Andrey Slepuhin for assorted AIX hacking.
62795
62796   * Trevor Smigiel for contributing the SPU port.
62797
62798   * Christopher Smith did the port for Convex machines.
62799
62800   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
62801     Retired from GCC maintainership August 2010, having mentored two
62802     new maintainers into the role.
62803
62804   * Randy Smith finished the Sun FPA support.
62805
62806   * Ed Smith-Rowland for his continuous work on libstdc++-v3, special
62807     functions, '<random>', and various improvements to C++11 features.
62808
62809   * Scott Snyder for queue, iterator, istream, and string fixes and
62810     libstdc++ testsuite entries.  Also for providing the patch to G77
62811     to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and
62812     'LOGICAL*1'.
62813
62814   * Zdenek Sojka for running automated regression testing of GCC and
62815     reporting numerous bugs.
62816
62817   * Arseny Solokha for running automated regression testing of GCC and
62818     reporting numerous bugs.
62819
62820   * Jayant Sonar for contributing the CR16 port.
62821
62822   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
62823
62824   * Richard Stallman, for writing the original GCC and launching the
62825     GNU project.
62826
62827   * Jan Stein of the Chalmers Computer Society provided support for
62828     Genix, as well as part of the 32000 machine description.
62829
62830   * Gerhard Steinmetz for running automated regression testing of GCC
62831     and reporting numerous bugs.
62832
62833   * Nigel Stephens for various mips16 related fixes/improvements.
62834
62835   * Jonathan Stone wrote the machine description for the Pyramid
62836     computer.
62837
62838   * Graham Stott for various infrastructure improvements.
62839
62840   * John Stracke for his Java HTTP protocol fixes.
62841
62842   * Mike Stump for his Elxsi port, G++ contributions over the years and
62843     more recently his vxworks contributions
62844
62845   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
62846
62847   * Zhendong Su for running automated regression testing of GCC and
62848     reporting numerous bugs.
62849
62850   * Chengnian Sun for running automated regression testing of GCC and
62851     reporting numerous bugs.
62852
62853   * Shigeya Suzuki for this fixes for the bsdi platforms.
62854
62855   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
62856     support, general configury hacking, fixincludes, etc.
62857
62858   * Holger Teutsch provided the support for the Clipper CPU.
62859
62860   * Gary Thomas for his ongoing work to make the PPC work for
62861     GNU/Linux.
62862
62863   * Paul Thomas for contributions to GNU Fortran.
62864
62865   * Philipp Thomas for random bug fixes throughout the compiler
62866
62867   * Jason Thorpe for thread support in libstdc++ on NetBSD.
62868
62869   * Kresten Krab Thorup wrote the run time support for the Objective-C
62870     language and the fantastic Java bytecode interpreter.
62871
62872   * Michael Tiemann for random bug fixes, the first instruction
62873     scheduler, initial C++ support, function integration, NS32k, SPARC
62874     and M88k machine description work, delay slot scheduling.
62875
62876   * Andreas Tobler for his work porting libgcj to Darwin.
62877
62878   * Teemu Torma for thread safe exception handling support.
62879
62880   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
62881     definitions, and of the VAX machine description.
62882
62883   * Daniel Towner and Hariharan Sandanagobalane contributed and
62884     maintain the picoChip port.
62885
62886   * Tom Tromey for internationalization support and for his many Java
62887     contributions and libgcj maintainership.
62888
62889   * Lassi Tuura for improvements to config.guess to determine HP
62890     processor types.
62891
62892   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
62893
62894   * Andy Vaught for the design and initial implementation of the GNU
62895     Fortran front end.
62896
62897   * Brent Verner for work with the libstdc++ cshadow files and their
62898     associated configure steps.
62899
62900   * Todd Vierling for contributions for NetBSD ports.
62901
62902   * Andrew Waterman for contributing the RISC-V port, as well as
62903     maintaining it.
62904
62905   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
62906     guidance and maintaining libstdc++.
62907
62908   * Dean Wakerley for converting the install documentation from HTML to
62909     texinfo in time for GCC 3.0.
62910
62911   * Krister Walfridsson for random bug fixes.
62912
62913   * Feng Wang for contributions to GNU Fortran.
62914
62915   * Stephen M. Webb for time and effort on making libstdc++ shadow
62916     files work with the tricky Solaris 8+ headers, and for pushing the
62917     build-time header tree.  Also, for starting and driving the
62918     '<regex>' effort.
62919
62920   * John Wehle for various improvements for the x86 code generator,
62921     related infrastructure improvements to help x86 code generation,
62922     value range propagation and other work, WE32k port.
62923
62924   * Ulrich Weigand for work on the s390 port.
62925
62926   * Janus Weil for contributions to GNU Fortran.
62927
62928   * Zack Weinberg for major work on cpplib and various other bug fixes.
62929
62930   * Matt Welsh for help with Linux Threads support in GCJ.
62931
62932   * Urban Widmark for help fixing java.io.
62933
62934   * Mark Wielaard for new Java library code and his work integrating
62935     with Classpath.
62936
62937   * Dale Wiles helped port GCC to the Tahoe.
62938
62939   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
62940
62941   * Jim Wilson for his direction via the steering committee, tackling
62942     hard problems in various places that nobody else wanted to work on,
62943     strength reduction and other loop optimizations.
62944
62945   * Paul Woegerer and Tal Agmon for the CRX port.
62946
62947   * Carlo Wood for various fixes.
62948
62949   * Tom Wood for work on the m88k port.
62950
62951   * Chung-Ju Wu for his work on the Andes NDS32 port.
62952
62953   * Canqun Yang for work on GNU Fortran.
62954
62955   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
62956     description for the Tron architecture (specifically, the Gmicro).
62957
62958   * Kevin Zachmann helped port GCC to the Tahoe.
62959
62960   * Ayal Zaks for Swing Modulo Scheduling (SMS).
62961
62962   * Qirun Zhang for running automated regression testing of GCC and
62963     reporting numerous bugs.
62964
62965   * Xiaoqiang Zhang for work on GNU Fortran.
62966
62967   * Gilles Zunino for help porting Java to Irix.
62968
62969 The following people are recognized for their contributions to GNAT,
62970the Ada front end of GCC:
62971   * Bernard Banner
62972
62973   * Romain Berrendonner
62974
62975   * Geert Bosch
62976
62977   * Emmanuel Briot
62978
62979   * Joel Brobecker
62980
62981   * Ben Brosgol
62982
62983   * Vincent Celier
62984
62985   * Arnaud Charlet
62986
62987   * Chien Chieng
62988
62989   * Cyrille Comar
62990
62991   * Cyrille Crozes
62992
62993   * Robert Dewar
62994
62995   * Gary Dismukes
62996
62997   * Robert Duff
62998
62999   * Ed Falis
63000
63001   * Ramon Fernandez
63002
63003   * Sam Figueroa
63004
63005   * Vasiliy Fofanov
63006
63007   * Michael Friess
63008
63009   * Franco Gasperoni
63010
63011   * Ted Giering
63012
63013   * Matthew Gingell
63014
63015   * Laurent Guerby
63016
63017   * Jerome Guitton
63018
63019   * Olivier Hainque
63020
63021   * Jerome Hugues
63022
63023   * Hristian Kirtchev
63024
63025   * Jerome Lambourg
63026
63027   * Bruno Leclerc
63028
63029   * Albert Lee
63030
63031   * Sean McNeil
63032
63033   * Javier Miranda
63034
63035   * Laurent Nana
63036
63037   * Pascal Obry
63038
63039   * Dong-Ik Oh
63040
63041   * Laurent Pautet
63042
63043   * Brett Porter
63044
63045   * Thomas Quinot
63046
63047   * Nicolas Roche
63048
63049   * Pat Rogers
63050
63051   * Jose Ruiz
63052
63053   * Douglas Rupp
63054
63055   * Sergey Rybin
63056
63057   * Gail Schenker
63058
63059   * Ed Schonberg
63060
63061   * Nicolas Setton
63062
63063   * Samuel Tardieu
63064
63065 The following people are recognized for their contributions of new
63066features, bug reports, testing and integration of classpath/libgcj for
63067GCC version 4.1:
63068   * Lillian Angel for 'JTree' implementation and lots Free Swing
63069     additions and bug fixes.
63070
63071   * Wolfgang Baer for 'GapContent' bug fixes.
63072
63073   * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse
63074     event fixes, lots of Free Swing work including 'JTable' editing.
63075
63076   * Stuart Ballard for RMI constant fixes.
63077
63078   * Goffredo Baroncelli for 'HTTPURLConnection' fixes.
63079
63080   * Gary Benson for 'MessageFormat' fixes.
63081
63082   * Daniel Bonniot for 'Serialization' fixes.
63083
63084   * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX'
63085     and 'DOM xml:id' support.
63086
63087   * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes.
63088
63089   * Archie Cobbs for build fixes, VM interface updates,
63090     'URLClassLoader' updates.
63091
63092   * Kelley Cook for build fixes.
63093
63094   * Martin Cordova for Suggestions for better 'SocketTimeoutException'.
63095
63096   * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and
63097     improvements.
63098
63099   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
63100     2D support.  Lots of imageio framework additions, lots of AWT and
63101     Free Swing bug fixes.
63102
63103   * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization
63104     fixes, better 'Proxy' support, bug fixes and IKVM integration.
63105
63106   * Santiago Gala for 'AccessControlContext' fixes.
63107
63108   * Nicolas Geoffray for 'VMClassLoader' and 'AccessController'
63109     improvements.
63110
63111   * David Gilbert for 'basic' and 'metal' icon and plaf support and
63112     lots of documenting, Lots of Free Swing and metal theme additions.
63113     'MetalIconFactory' implementation.
63114
63115   * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers.
63116
63117   * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj
63118     build speedups.
63119
63120   * Kim Ho for 'JFileChooser' implementation.
63121
63122   * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates,
63123     'Serialization' fixes, 'Properties' XML support and generic branch
63124     work, VMIntegration guide update.
63125
63126   * Bastiaan Huisman for 'TimeZone' bug fixing.
63127
63128   * Andreas Jaeger for mprec updates.
63129
63130   * Paul Jenner for better '-Werror' support.
63131
63132   * Ito Kazumitsu for 'NetworkInterface' implementation and updates.
63133
63134   * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus
63135     bug fixes all over.  Lots of Free Swing work including styled text.
63136
63137   * Simon Kitching for 'String' cleanups and optimization suggestions.
63138
63139   * Michael Koch for configuration fixes, 'Locale' updates, bug and
63140     build fixes.
63141
63142   * Guilhem Lavaux for configuration, thread and channel fixes and
63143     Kaffe integration.  JCL native 'Pointer' updates.  Logger bug
63144     fixes.
63145
63146   * David Lichteblau for JCL support library global/local reference
63147     cleanups.
63148
63149   * Aaron Luchko for JDWP updates and documentation fixes.
63150
63151   * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex
63152     features.
63153
63154   * Sven de Marothy for BMP imageio support, CSS and 'TextLayout'
63155     fixes.  'GtkImage' rewrite, 2D, awt, free swing and date/time fixes
63156     and implementing the Qt4 peers.
63157
63158   * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock,
63159     'SystemLogger' and 'FileHandler' rotate implementations, NIO
63160     'FileChannel.map' support, security and policy updates.
63161
63162   * Bryce McKinlay for RMI work.
63163
63164   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
63165     testing and documenting.
63166
63167   * Kalle Olavi Niemitalo for build fixes.
63168
63169   * Rainer Orth for build fixes.
63170
63171   * Andrew Overholt for 'File' locking fixes.
63172
63173   * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates.
63174
63175   * Olga Rodimina for 'MenuSelectionManager' implementation.
63176
63177   * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes.
63178
63179   * Julian Scheid for documentation updates and gjdoc support.
63180
63181   * Christian Schlichtherle for zip fixes and cleanups.
63182
63183   * Robert Schuster for documentation updates and beans fixes,
63184     'TreeNode' enumerations and 'ActionCommand' and various fixes, XML
63185     and URL, AWT and Free Swing bug fixes.
63186
63187   * Keith Seitz for lots of JDWP work.
63188
63189   * Christian Thalinger for 64-bit cleanups, Configuration and VM
63190     interface fixes and 'CACAO' integration, 'fdlibm' updates.
63191
63192   * Gael Thomas for 'VMClassLoader' boot packages support suggestions.
63193
63194   * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4'
63195     support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates.
63196
63197   * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe
63198     integration.  'Qt4' build infrastructure, 'SHA1PRNG' and
63199     'GdkPixbugDecoder' updates.
63200
63201   * Tom Tromey for Eclipse integration, generics work, lots of bug
63202     fixes and gcj integration including coordinating The Big Merge.
63203
63204   * Mark Wielaard for bug fixes, packaging and release management,
63205     'Clipboard' implementation, system call interrupts and network
63206     timeouts and 'GdkPixpufDecoder' fixes.
63207
63208 In addition to the above, all of which also contributed time and energy
63209in testing GCC, we would like to thank the following for their
63210contributions to testing:
63211
63212   * Michael Abd-El-Malek
63213
63214   * Thomas Arend
63215
63216   * Bonzo Armstrong
63217
63218   * Steven Ashe
63219
63220   * Chris Baldwin
63221
63222   * David Billinghurst
63223
63224   * Jim Blandy
63225
63226   * Stephane Bortzmeyer
63227
63228   * Horst von Brand
63229
63230   * Frank Braun
63231
63232   * Rodney Brown
63233
63234   * Sidney Cadot
63235
63236   * Bradford Castalia
63237
63238   * Robert Clark
63239
63240   * Jonathan Corbet
63241
63242   * Ralph Doncaster
63243
63244   * Richard Emberson
63245
63246   * Levente Farkas
63247
63248   * Graham Fawcett
63249
63250   * Mark Fernyhough
63251
63252   * Robert A. French
63253
63254   * Jo"rgen Freyh
63255
63256   * Mark K. Gardner
63257
63258   * Charles-Antoine Gauthier
63259
63260   * Yung Shing Gene
63261
63262   * David Gilbert
63263
63264   * Simon Gornall
63265
63266   * Fred Gray
63267
63268   * John Griffin
63269
63270   * Patrik Hagglund
63271
63272   * Phil Hargett
63273
63274   * Amancio Hasty
63275
63276   * Takafumi Hayashi
63277
63278   * Bryan W. Headley
63279
63280   * Kevin B. Hendricks
63281
63282   * Joep Jansen
63283
63284   * Christian Joensson
63285
63286   * Michel Kern
63287
63288   * David Kidd
63289
63290   * Tobias Kuipers
63291
63292   * Anand Krishnaswamy
63293
63294   * A. O. V. Le Blanc
63295
63296   * llewelly
63297
63298   * Damon Love
63299
63300   * Brad Lucier
63301
63302   * Matthias Klose
63303
63304   * Martin Knoblauch
63305
63306   * Rick Lutowski
63307
63308   * Jesse Macnish
63309
63310   * Stefan Morrell
63311
63312   * Anon A. Mous
63313
63314   * Matthias Mueller
63315
63316   * Pekka Nikander
63317
63318   * Rick Niles
63319
63320   * Jon Olson
63321
63322   * Magnus Persson
63323
63324   * Chris Pollard
63325
63326   * Richard Polton
63327
63328   * Derk Reefman
63329
63330   * David Rees
63331
63332   * Paul Reilly
63333
63334   * Tom Reilly
63335
63336   * Torsten Rueger
63337
63338   * Danny Sadinoff
63339
63340   * Marc Schifer
63341
63342   * Erik Schnetter
63343
63344   * Wayne K. Schroll
63345
63346   * David Schuler
63347
63348   * Vin Shelton
63349
63350   * Tim Souder
63351
63352   * Adam Sulmicki
63353
63354   * Bill Thorson
63355
63356   * George Talbot
63357
63358   * Pedro A. M. Vazquez
63359
63360   * Gregory Warnes
63361
63362   * Ian Watson
63363
63364   * David E. Young
63365
63366   * And many others
63367
63368 And finally we'd like to thank everyone who uses the compiler, provides
63369feedback and generally reminds us why we're doing this work in the first
63370place.
63371
63372
63373File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
63374
63375Option Index
63376************
63377
63378GCC's command line options are indexed here without any initial '-' or
63379'--'.  Where an option has both positive and negative forms (such as
63380'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
63381indexed under the most appropriate form; it may sometimes be useful to
63382look up both forms.
63383
63384[index]
63385* Menu:
63386
63387* ###:                                   Overall Options.    (line  472)
63388* -march:                                LoongArch Options.  (line    9)
63389* -mbranch-cost:                         LoongArch Options.  (line   80)
63390* -mcheck-zero-division:                 LoongArch Options.  (line   84)
63391* -mcond-move-float:                     LoongArch Options.  (line   95)
63392* -mcond-move-int:                       LoongArch Options.  (line   90)
63393* -mdouble-float:                        LoongArch Options.  (line   75)
63394* -mmax-inline-memcpy-size:              LoongArch Options.  (line  118)
63395* -mmemcpy:                              LoongArch Options.  (line  100)
63396* -msingle-float:                        LoongArch Options.  (line   70)
63397* -msmall-data-limit:                    LoongArch Options.  (line  114)
63398* -mstrict-align:                        LoongArch Options.  (line  109)
63399* 80387:                                 x86 Options.        (line  603)
63400* A:                                     Preprocessor Options.
63401                                                             (line  337)
63402* allowable_client:                      Darwin Options.     (line  196)
63403* all_load:                              Darwin Options.     (line  110)
63404* analyzer:                              Static Analyzer Options.
63405                                                             (line    7)
63406* ansi:                                  Standards.          (line   13)
63407* ansi <1>:                              C Dialect Options.  (line   11)
63408* ansi <2>:                              Other Builtins.     (line   31)
63409* ansi <3>:                              Non-bugs.           (line  107)
63410* arch_errors_fatal:                     Darwin Options.     (line  114)
63411* aux-info:                              C Dialect Options.  (line  202)
63412* B:                                     Directory Options.  (line  122)
63413* Bdynamic:                              VxWorks Options.    (line   22)
63414* bind_at_load:                          Darwin Options.     (line  118)
63415* block-ops-unaligned-vsx:               RS/6000 and PowerPC Options.
63416                                                             (line  959)
63417* Bstatic:                               VxWorks Options.    (line   22)
63418* bundle:                                Darwin Options.     (line  123)
63419* bundle_loader:                         Darwin Options.     (line  127)
63420* c:                                     Overall Options.    (line  165)
63421* C:                                     Preprocessor Options.
63422                                                             (line  346)
63423* c <1>:                                 Link Options.       (line   20)
63424* CC:                                    Preprocessor Options.
63425                                                             (line  358)
63426* client_name:                           Darwin Options.     (line  196)
63427* compatibility_version:                 Darwin Options.     (line  196)
63428* coverage:                              Instrumentation Options.
63429                                                             (line   56)
63430* current_version:                       Darwin Options.     (line  196)
63431* D:                                     Preprocessor Options.
63432                                                             (line   19)
63433* d:                                     Preprocessor Options.
63434                                                             (line  412)
63435* d <1>:                                 Developer Options.  (line   52)
63436* da:                                    Developer Options.  (line  246)
63437* dA:                                    Developer Options.  (line  249)
63438* dD:                                    Preprocessor Options.
63439                                                             (line  436)
63440* dD <1>:                                Developer Options.  (line  253)
63441* dead_strip:                            Darwin Options.     (line  196)
63442* dependency-file:                       Darwin Options.     (line  196)
63443* dH:                                    Developer Options.  (line  257)
63444* dI:                                    Preprocessor Options.
63445                                                             (line  446)
63446* dM:                                    Preprocessor Options.
63447                                                             (line  421)
63448* dN:                                    Preprocessor Options.
63449                                                             (line  442)
63450* dp:                                    Developer Options.  (line  260)
63451* dP:                                    Developer Options.  (line  265)
63452* dU:                                    Preprocessor Options.
63453                                                             (line  450)
63454* dump-analyzer-exploded-nodes:          Static Analyzer Options.
63455                                                             (line  448)
63456* dump-analyzer-exploded-nodes-2:        Static Analyzer Options.
63457                                                             (line  452)
63458* dump-analyzer-exploded-nodes-3:        Static Analyzer Options.
63459                                                             (line  456)
63460* dump-analyzer-feasibility:             Static Analyzer Options.
63461                                                             (line  465)
63462* dumpbase:                              Overall Options.    (line  252)
63463* dumpbase-ext:                          Overall Options.    (line  325)
63464* dumpdir:                               Overall Options.    (line  353)
63465* dumpfullversion:                       Developer Options.  (line 1014)
63466* dumpmachine:                           Developer Options.  (line 1002)
63467* dumpspecs:                             Developer Options.  (line 1019)
63468* dumpversion:                           Developer Options.  (line 1006)
63469* dx:                                    Developer Options.  (line  269)
63470* dylib_file:                            Darwin Options.     (line  196)
63471* dylinker_install_name:                 Darwin Options.     (line  196)
63472* dynamic:                               Darwin Options.     (line  196)
63473* dynamiclib:                            Darwin Options.     (line  131)
63474* E:                                     Overall Options.    (line  186)
63475* E <1>:                                 Link Options.       (line   20)
63476* e:                                     Link Options.       (line  172)
63477* EB:                                    ARC Options.        (line  590)
63478* EB <1>:                                C-SKY Options.      (line   29)
63479* EB <2>:                                MIPS Options.       (line    7)
63480* EL:                                    ARC Options.        (line  599)
63481* EL <1>:                                C-SKY Options.      (line   31)
63482* EL <2>:                                MIPS Options.       (line   10)
63483* entry:                                 Link Options.       (line  172)
63484* exported_symbols_list:                 Darwin Options.     (line  196)
63485* F:                                     Darwin Options.     (line   31)
63486* fabi-compat-version:                   C++ Dialect Options.
63487                                                             (line   92)
63488* fabi-version:                          C++ Dialect Options.
63489                                                             (line   24)
63490* faccess-control:                       C++ Dialect Options.
63491                                                             (line  108)
63492* fada-spec-parent:                      Overall Options.    (line  655)
63493* faggressive-loop-optimizations:        Optimize Options.   (line  554)
63494* falign-functions:                      Optimize Options.   (line 1734)
63495* falign-jumps:                          Optimize Options.   (line 1816)
63496* falign-labels:                         Optimize Options.   (line 1775)
63497* falign-loops:                          Optimize Options.   (line 1795)
63498* faligned-new:                          C++ Dialect Options.
63499                                                             (line  112)
63500* fallow-parameterless-variadic-functions: C Dialect Options.
63501                                                             (line  218)
63502* fallow-store-data-races:               Optimize Options.   (line 1836)
63503* fanalyzer:                             Static Analyzer Options.
63504                                                             (line    7)
63505* fanalyzer-call-summaries:              Static Analyzer Options.
63506                                                             (line  303)
63507* fanalyzer-checker:                     Static Analyzer Options.
63508                                                             (line  312)
63509* fanalyzer-feasibility:                 Static Analyzer Options.
63510                                                             (line  339)
63511* fanalyzer-fine-grained:                Static Analyzer Options.
63512                                                             (line  349)
63513* fanalyzer-show-duplicate-count:        Static Analyzer Options.
63514                                                             (line  359)
63515* fanalyzer-state-merge:                 Static Analyzer Options.
63516                                                             (line  366)
63517* fanalyzer-state-purge:                 Static Analyzer Options.
63518                                                             (line  374)
63519* fanalyzer-transitivity:                Static Analyzer Options.
63520                                                             (line  385)
63521* fasan-shadow-offset:                   Instrumentation Options.
63522                                                             (line  619)
63523* fasm:                                  C Dialect Options.  (line  225)
63524* fassociative-math:                     Optimize Options.   (line 2373)
63525* fasynchronous-unwind-tables:           Code Gen Options.   (line  159)
63526* fauto-inc-dec:                         Optimize Options.   (line  576)
63527* fauto-profile:                         Optimize Options.   (line 2248)
63528* fbit-tests:                            Code Gen Options.   (line  425)
63529* fbranch-count-reg:                     Optimize Options.   (line  428)
63530* fbranch-probabilities:                 Optimize Options.   (line 2519)
63531* fbuiltin:                              C Dialect Options.  (line  239)
63532* fcall-saved:                           Code Gen Options.   (line  455)
63533* fcall-used:                            Code Gen Options.   (line  441)
63534* fcaller-saves:                         Optimize Options.   (line  934)
63535* fcallgraph-info:                       Developer Options.  (line   34)
63536* fcf-protection:                        Instrumentation Options.
63537                                                             (line  692)
63538* fchar8_t:                              C++ Dialect Options.
63539                                                             (line  122)
63540* fcheck-new:                            C++ Dialect Options.
63541                                                             (line  165)
63542* fchecking:                             Developer Options.  (line  716)
63543* fcode-hoisting:                        Optimize Options.   (line  975)
63544* fcombine-stack-adjustments:            Optimize Options.   (line  946)
63545* fcommon:                               Code Gen Options.   (line  234)
63546* fcommon <1>:                           Common Variable Attributes.
63547                                                             (line  176)
63548* fcompare-debug:                        Developer Options.  (line  788)
63549* fcompare-debug-second:                 Developer Options.  (line  814)
63550* fcompare-elim:                         Optimize Options.   (line 2178)
63551* fconcepts:                             C++ Dialect Options.
63552                                                             (line  176)
63553* fconcepts-ts:                          C++ Dialect Options.
63554                                                             (line  176)
63555* fcond-mismatch:                        C Dialect Options.  (line  273)
63556* fconserve-stack:                       Optimize Options.   (line  965)
63557* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
63558                                                             (line   30)
63559* fconstexpr-cache-depth:                C++ Dialect Options.
63560                                                             (line  192)
63561* fconstexpr-depth:                      C++ Dialect Options.
63562                                                             (line  186)
63563* fconstexpr-fp-except:                  C++ Dialect Options.
63564                                                             (line  202)
63565* fconstexpr-loop-limit:                 C++ Dialect Options.
63566                                                             (line  213)
63567* fconstexpr-ops-limit:                  C++ Dialect Options.
63568                                                             (line  218)
63569* fcoroutines:                           C++ Dialect Options.
63570                                                             (line  227)
63571* fcprop-registers:                      Optimize Options.   (line 2190)
63572* fcrossjumping:                         Optimize Options.   (line  569)
63573* fcse-follow-jumps:                     Optimize Options.   (line  488)
63574* fcse-skip-blocks:                      Optimize Options.   (line  497)
63575* fcx-fortran-rules:                     Optimize Options.   (line 2506)
63576* fcx-limited-range:                     Optimize Options.   (line 2494)
63577* fdata-sections:                        Optimize Options.   (line 2666)
63578* fdbg-cnt:                              Developer Options.  (line  924)
63579* fdbg-cnt-list:                         Developer Options.  (line  921)
63580* fdce:                                  Optimize Options.   (line  582)
63581* fdebug-cpp:                            Preprocessor Options.
63582                                                             (line  457)
63583* fdebug-prefix-map:                     Debugging Options.  (line  173)
63584* fdebug-types-section:                  Debugging Options.  (line  235)
63585* fdeclone-ctor-dtor:                    Optimize Options.   (line  605)
63586* fdefer-pop:                            Optimize Options.   (line  229)
63587* fdelayed-branch:                       Optimize Options.   (line  758)
63588* fdelete-dead-exceptions:               Code Gen Options.   (line  142)
63589* fdelete-null-pointer-checks:           Optimize Options.   (line  616)
63590* fdevirtualize:                         Optimize Options.   (line  637)
63591* fdevirtualize-at-ltrans:               Optimize Options.   (line  654)
63592* fdevirtualize-speculatively:           Optimize Options.   (line  644)
63593* fdiagnostics-color:                    Diagnostic Message Formatting Options.
63594                                                             (line   55)
63595* fdiagnostics-column-origin:            Diagnostic Message Formatting Options.
63596                                                             (line  432)
63597* fdiagnostics-column-unit:              Diagnostic Message Formatting Options.
63598                                                             (line  413)
63599* fdiagnostics-escape-format:            Diagnostic Message Formatting Options.
63600                                                             (line  439)
63601* fdiagnostics-format:                   Diagnostic Message Formatting Options.
63602                                                             (line  469)
63603* fdiagnostics-generate-patch:           Diagnostic Message Formatting Options.
63604                                                             (line  255)
63605* fdiagnostics-minimum-margin-width:     Diagnostic Message Formatting Options.
63606                                                             (line  224)
63607* fdiagnostics-parseable-fixits:         Diagnostic Message Formatting Options.
63608                                                             (line  228)
63609* fdiagnostics-path-format:              Diagnostic Message Formatting Options.
63610                                                             (line  305)
63611* fdiagnostics-show-caret:               Diagnostic Message Formatting Options.
63612                                                             (line  188)
63613* fdiagnostics-show-cwe:                 Diagnostic Message Formatting Options.
63614                                                             (line  210)
63615* fdiagnostics-show-labels:              Diagnostic Message Formatting Options.
63616                                                             (line  197)
63617* fdiagnostics-show-line-numbers:        Diagnostic Message Formatting Options.
63618                                                             (line  219)
63619* fdiagnostics-show-location:            Diagnostic Message Formatting Options.
63620                                                             (line   40)
63621* fdiagnostics-show-option:              Diagnostic Message Formatting Options.
63622                                                             (line  182)
63623* fdiagnostics-show-path-depths:         Diagnostic Message Formatting Options.
63624                                                             (line  396)
63625* fdiagnostics-show-template-tree:       Diagnostic Message Formatting Options.
63626                                                             (line  273)
63627* fdiagnostics-urls:                     Diagnostic Message Formatting Options.
63628                                                             (line  144)
63629* fdirectives-only:                      Preprocessor Options.
63630                                                             (line  205)
63631* fdisable-:                             Developer Options.  (line  647)
63632* fdollars-in-identifiers:               Preprocessor Options.
63633                                                             (line  226)
63634* fdollars-in-identifiers <1>:           Interoperation.     (line  141)
63635* fdpic:                                 SH Options.         (line  388)
63636* fdse:                                  Optimize Options.   (line  586)
63637* fdump-ada-spec:                        Overall Options.    (line  650)
63638* fdump-analyzer:                        Static Analyzer Options.
63639                                                             (line  430)
63640* fdump-analyzer-callgraph:              Static Analyzer Options.
63641                                                             (line  439)
63642* fdump-analyzer-exploded-graph:         Static Analyzer Options.
63643                                                             (line  443)
63644* fdump-analyzer-exploded-paths:         Static Analyzer Options.
63645                                                             (line  461)
63646* fdump-analyzer-json:                   Static Analyzer Options.
63647                                                             (line  471)
63648* fdump-analyzer-state-purge:            Static Analyzer Options.
63649                                                             (line  475)
63650* fdump-analyzer-stderr:                 Static Analyzer Options.
63651                                                             (line  435)
63652* fdump-analyzer-supergraph:             Static Analyzer Options.
63653                                                             (line  481)
63654* fdump-analyzer-untracked:              Static Analyzer Options.
63655                                                             (line  489)
63656* fdump-debug:                           Developer Options.  (line  273)
63657* fdump-earlydebug:                      Developer Options.  (line  277)
63658* fdump-final-insns:                     Developer Options.  (line  782)
63659* fdump-go-spec:                         Overall Options.    (line  659)
63660* fdump-ipa:                             Developer Options.  (line  303)
63661* fdump-lang:                            Developer Options.  (line  332)
63662* fdump-lang <1>:                        Developer Options.  (line  339)
63663* fdump-lang-all:                        Developer Options.  (line  339)
63664* fdump-noaddr:                          Developer Options.  (line  281)
63665* fdump-passes:                          Developer Options.  (line  364)
63666* fdump-rtl-alignments:                  Developer Options.  (line   65)
63667* fdump-rtl-all:                         Developer Options.  (line  246)
63668* fdump-rtl-asmcons:                     Developer Options.  (line   68)
63669* fdump-rtl-auto_inc_dec:                Developer Options.  (line   72)
63670* fdump-rtl-barriers:                    Developer Options.  (line   76)
63671* fdump-rtl-bbpart:                      Developer Options.  (line   79)
63672* fdump-rtl-bbro:                        Developer Options.  (line   82)
63673* fdump-rtl-btl2:                        Developer Options.  (line   86)
63674* fdump-rtl-btl2 <1>:                    Developer Options.  (line   86)
63675* fdump-rtl-bypass:                      Developer Options.  (line   90)
63676* fdump-rtl-ce1:                         Developer Options.  (line  101)
63677* fdump-rtl-ce2:                         Developer Options.  (line  101)
63678* fdump-rtl-ce3:                         Developer Options.  (line  101)
63679* fdump-rtl-combine:                     Developer Options.  (line   93)
63680* fdump-rtl-compgotos:                   Developer Options.  (line   96)
63681* fdump-rtl-cprop_hardreg:               Developer Options.  (line  105)
63682* fdump-rtl-csa:                         Developer Options.  (line  108)
63683* fdump-rtl-cse1:                        Developer Options.  (line  112)
63684* fdump-rtl-cse2:                        Developer Options.  (line  112)
63685* fdump-rtl-dbr:                         Developer Options.  (line  119)
63686* fdump-rtl-dce:                         Developer Options.  (line  116)
63687* fdump-rtl-dce1:                        Developer Options.  (line  123)
63688* fdump-rtl-dce2:                        Developer Options.  (line  123)
63689* fdump-rtl-dfinish:                     Developer Options.  (line  242)
63690* fdump-rtl-dfinit:                      Developer Options.  (line  242)
63691* fdump-rtl-eh:                          Developer Options.  (line  127)
63692* fdump-rtl-eh_ranges:                   Developer Options.  (line  130)
63693* fdump-rtl-expand:                      Developer Options.  (line  133)
63694* fdump-rtl-fwprop1:                     Developer Options.  (line  137)
63695* fdump-rtl-fwprop2:                     Developer Options.  (line  137)
63696* fdump-rtl-gcse1:                       Developer Options.  (line  142)
63697* fdump-rtl-gcse2:                       Developer Options.  (line  142)
63698* fdump-rtl-init-regs:                   Developer Options.  (line  146)
63699* fdump-rtl-initvals:                    Developer Options.  (line  149)
63700* fdump-rtl-into_cfglayout:              Developer Options.  (line  152)
63701* fdump-rtl-ira:                         Developer Options.  (line  155)
63702* fdump-rtl-jump:                        Developer Options.  (line  158)
63703* fdump-rtl-loop2:                       Developer Options.  (line  161)
63704* fdump-rtl-mach:                        Developer Options.  (line  165)
63705* fdump-rtl-mode_sw:                     Developer Options.  (line  169)
63706* fdump-rtl-outof_cfglayout:             Developer Options.  (line  175)
63707* fdump-rtl-PASS:                        Developer Options.  (line   52)
63708* fdump-rtl-peephole2:                   Developer Options.  (line  178)
63709* fdump-rtl-postreload:                  Developer Options.  (line  181)
63710* fdump-rtl-pro_and_epilogue:            Developer Options.  (line  184)
63711* fdump-rtl-ree:                         Developer Options.  (line  192)
63712* fdump-rtl-regclass:                    Developer Options.  (line  242)
63713* fdump-rtl-rnreg:                       Developer Options.  (line  172)
63714* fdump-rtl-sched1:                      Developer Options.  (line  188)
63715* fdump-rtl-sched2:                      Developer Options.  (line  188)
63716* fdump-rtl-seqabstr:                    Developer Options.  (line  195)
63717* fdump-rtl-shorten:                     Developer Options.  (line  198)
63718* fdump-rtl-sibling:                     Developer Options.  (line  201)
63719* fdump-rtl-sms:                         Developer Options.  (line  212)
63720* fdump-rtl-split1:                      Developer Options.  (line  208)
63721* fdump-rtl-split2:                      Developer Options.  (line  208)
63722* fdump-rtl-split3:                      Developer Options.  (line  208)
63723* fdump-rtl-split4:                      Developer Options.  (line  208)
63724* fdump-rtl-split5:                      Developer Options.  (line  208)
63725* fdump-rtl-stack:                       Developer Options.  (line  216)
63726* fdump-rtl-subreg1:                     Developer Options.  (line  222)
63727* fdump-rtl-subreg2:                     Developer Options.  (line  222)
63728* fdump-rtl-subregs_of_mode_finish:      Developer Options.  (line  242)
63729* fdump-rtl-subregs_of_mode_init:        Developer Options.  (line  242)
63730* fdump-rtl-unshare:                     Developer Options.  (line  226)
63731* fdump-rtl-vartrack:                    Developer Options.  (line  229)
63732* fdump-rtl-vregs:                       Developer Options.  (line  232)
63733* fdump-rtl-web:                         Developer Options.  (line  235)
63734* fdump-statistics:                      Developer Options.  (line  368)
63735* fdump-tree:                            Developer Options.  (line  381)
63736* fdump-tree-all:                        Developer Options.  (line  381)
63737* fdump-unnumbered:                      Developer Options.  (line  291)
63738* fdump-unnumbered-links:                Developer Options.  (line  297)
63739* fdwarf2-cfi-asm:                       Debugging Options.  (line  440)
63740* fearly-inlining:                       Optimize Options.   (line  328)
63741* felide-constructors:                   C++ Dialect Options.
63742                                                             (line  230)
63743* felide-type:                           Diagnostic Message Formatting Options.
63744                                                             (line  293)
63745* feliminate-unused-debug-symbols:       Debugging Options.  (line  153)
63746* feliminate-unused-debug-types:         Debugging Options.  (line  444)
63747* femit-class-debug-always:              Debugging Options.  (line  158)
63748* femit-struct-debug-baseonly:           Debugging Options.  (line  371)
63749* femit-struct-debug-detailed:           Debugging Options.  (line  398)
63750* femit-struct-debug-reduced:            Debugging Options.  (line  384)
63751* fenable-:                              Developer Options.  (line  647)
63752* fenforce-eh-specs:                     C++ Dialect Options.
63753                                                             (line  241)
63754* fexceptions:                           Code Gen Options.   (line  119)
63755* fexcess-precision:                     Optimize Options.   (line 2299)
63756* fexec-charset:                         Preprocessor Options.
63757                                                             (line  273)
63758* fexpensive-optimizations:              Optimize Options.   (line  661)
63759* fext-numeric-literals:                 C++ Dialect Options.
63760                                                             (line  546)
63761* fextended-identifiers:                 Preprocessor Options.
63762                                                             (line  229)
63763* fextern-tls-init:                      C++ Dialect Options.
63764                                                             (line  251)
63765* ffast-math:                            Optimize Options.   (line 2323)
63766* ffat-lto-objects:                      Optimize Options.   (line 2155)
63767* ffile-prefix-map:                      Overall Options.    (line  630)
63768* ffinite-loops:                         Optimize Options.   (line 1222)
63769* ffinite-math-only:                     Optimize Options.   (line 2400)
63770* ffix-and-continue:                     Darwin Options.     (line  104)
63771* ffixed:                                Code Gen Options.   (line  429)
63772* ffloat-store:                          Optimize Options.   (line 2285)
63773* ffloat-store <1>:                      Disappointments.    (line   77)
63774* ffold-simple-inlines:                  C++ Dialect Options.
63775                                                             (line  272)
63776* fforward-propagate:                    Optimize Options.   (line  236)
63777* ffp-contract:                          Optimize Options.   (line  245)
63778* ffp-int-builtin-inexact:               Optimize Options.   (line 2472)
63779* ffreestanding:                         Standards.          (line   99)
63780* ffreestanding <1>:                     C Dialect Options.  (line  278)
63781* ffreestanding <2>:                     Warning Options.    (line  432)
63782* ffreestanding <3>:                     Common Function Attributes.
63783                                                             (line  451)
63784* ffunction-cse:                         Optimize Options.   (line  442)
63785* ffunction-sections:                    Optimize Options.   (line 2666)
63786* fgcse:                                 Optimize Options.   (line  511)
63787* fgcse-after-reload:                    Optimize Options.   (line  547)
63788* fgcse-las:                             Optimize Options.   (line  540)
63789* fgcse-lm:                              Optimize Options.   (line  522)
63790* fgcse-sm:                              Optimize Options.   (line  531)
63791* fgimple:                               C Dialect Options.  (line  289)
63792* fgnu-keywords:                         C++ Dialect Options.
63793                                                             (line  279)
63794* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
63795                                                             (line   39)
63796* fgnu-tm:                               C Dialect Options.  (line  295)
63797* fgnu-unique:                           Code Gen Options.   (line  165)
63798* fgnu89-inline:                         C Dialect Options.  (line  310)
63799* fgraphite-identity:                    Optimize Options.   (line 1264)
63800* fguess-branch-probability:             Optimize Options.   (line 1605)
63801* fharden-compares:                      Instrumentation Options.
63802                                                             (line  725)
63803* fharden-conditional-branches:          Instrumentation Options.
63804                                                             (line  734)
63805* fhoist-adjacent-loads:                 Optimize Options.   (line 1005)
63806* fhosted:                               C Dialect Options.  (line  327)
63807* fident:                                Code Gen Options.   (line  255)
63808* fif-conversion:                        Optimize Options.   (line  590)
63809* fif-conversion2:                       Optimize Options.   (line  599)
63810* fiji:                                  AMD GCN Options.    (line   13)
63811* filelist:                              Darwin Options.     (line  196)
63812* fimplement-inlines:                    C++ Dialect Options.
63813                                                             (line  305)
63814* fimplicit-constexpr:                   C++ Dialect Options.
63815                                                             (line  285)
63816* fimplicit-inline-templates:            C++ Dialect Options.
63817                                                             (line  299)
63818* fimplicit-templates:                   C++ Dialect Options.
63819                                                             (line  291)
63820* findirect-data:                        Darwin Options.     (line  104)
63821* findirect-inlining:                    Optimize Options.   (line  300)
63822* finhibit-size-directive:               Code Gen Options.   (line  258)
63823* finline:                               Optimize Options.   (line  283)
63824* finline-functions:                     Optimize Options.   (line  308)
63825* finline-functions-called-once:         Optimize Options.   (line  320)
63826* finline-limit:                         Optimize Options.   (line  344)
63827* finline-small-functions:               Optimize Options.   (line  291)
63828* finput-charset:                        Preprocessor Options.
63829                                                             (line  288)
63830* finstrument-functions:                 Instrumentation Options.
63831                                                             (line  911)
63832* finstrument-functions <1>:             Common Function Attributes.
63833                                                             (line  814)
63834* finstrument-functions-exclude-file-list: Instrumentation Options.
63835                                                             (line  947)
63836* finstrument-functions-exclude-function-list: Instrumentation Options.
63837                                                             (line  968)
63838* fipa-bit-cp:                           Optimize Options.   (line 1072)
63839* fipa-cp:                               Optimize Options.   (line 1053)
63840* fipa-cp-clone:                         Optimize Options.   (line 1062)
63841* fipa-icf:                              Optimize Options.   (line 1082)
63842* fipa-modref:                           Optimize Options.   (line 1046)
63843* fipa-profile:                          Optimize Options.   (line 1038)
63844* fipa-pta:                              Optimize Options.   (line 1032)
63845* fipa-pure-const:                       Optimize Options.   (line 1016)
63846* fipa-ra:                               Optimize Options.   (line  952)
63847* fipa-reference:                        Optimize Options.   (line 1020)
63848* fipa-reference-addressable:            Optimize Options.   (line 1024)
63849* fipa-sra:                              Optimize Options.   (line  337)
63850* fipa-stack-alignment:                  Optimize Options.   (line 1028)
63851* fipa-strict-aliasing:                  Optimize Options.   (line 1721)
63852* fipa-vrp:                              Optimize Options.   (line 1077)
63853* fira-algorithm:                        Optimize Options.   (line  695)
63854* fira-hoist-pressure:                   Optimize Options.   (line  724)
63855* fira-loop-pressure:                    Optimize Options.   (line  731)
63856* fira-region:                           Optimize Options.   (line  703)
63857* fira-share-save-slots:                 Optimize Options.   (line  739)
63858* fira-share-spill-slots:                Optimize Options.   (line  745)
63859* fira-verbose:                          Developer Options.  (line  851)
63860* fisolate-erroneous-paths-attribute:    Optimize Options.   (line 1164)
63861* fisolate-erroneous-paths-dereference:  Optimize Options.   (line 1156)
63862* fivar-visibility:                      Objective-C and Objective-C++ Dialect Options.
63863                                                             (line  161)
63864* fivopts:                               Optimize Options.   (line 1389)
63865* fjump-tables:                          Code Gen Options.   (line  417)
63866* fkeep-inline-dllexport:                Optimize Options.   (line  369)
63867* fkeep-inline-functions:                Optimize Options.   (line  375)
63868* fkeep-inline-functions <1>:            Inline.             (line   51)
63869* fkeep-static-consts:                   Optimize Options.   (line  386)
63870* fkeep-static-functions:                Optimize Options.   (line  382)
63871* flang-info-include-translate:          C++ Dialect Options.
63872                                                             (line  562)
63873* flang-info-include-translate-not:      C++ Dialect Options.
63874                                                             (line  562)
63875* flang-info-module-cmi:                 C++ Dialect Options.
63876                                                             (line  571)
63877* flarge-source-files:                   Preprocessor Options.
63878                                                             (line  497)
63879* flat_namespace:                        Darwin Options.     (line  196)
63880* flax-vector-conversions:               C Dialect Options.  (line  335)
63881* fleading-underscore:                   Code Gen Options.   (line  485)
63882* flifetime-dse:                         Optimize Options.   (line  675)
63883* flinker-output:                        Link Options.       (line   25)
63884* flive-patching:                        Optimize Options.   (line 1096)
63885* flive-range-shrinkage:                 Optimize Options.   (line  690)
63886* flocal-ivars:                          Objective-C and Objective-C++ Dialect Options.
63887                                                             (line  152)
63888* floop-block:                           Optimize Options.   (line 1258)
63889* floop-interchange:                     Optimize Options.   (line 1342)
63890* floop-nest-optimize:                   Optimize Options.   (line 1272)
63891* floop-parallelize-all:                 Optimize Options.   (line 1278)
63892* floop-strip-mine:                      Optimize Options.   (line 1258)
63893* floop-unroll-and-jam:                  Optimize Options.   (line 1359)
63894* flra-remat:                            Optimize Options.   (line  751)
63895* flto:                                  Optimize Options.   (line 1894)
63896* flto-compression-level:                Optimize Options.   (line 2126)
63897* flto-partition:                        Optimize Options.   (line 2112)
63898* flto-report:                           Developer Options.  (line  857)
63899* flto-report-wpa:                       Developer Options.  (line  865)
63900* fmacro-prefix-map:                     Preprocessor Options.
63901                                                             (line  264)
63902* fmath-errno:                           Optimize Options.   (line 2337)
63903* fmax-errors:                           Warning Options.    (line   18)
63904* fmax-include-depth:                    Preprocessor Options.
63905                                                             (line  238)
63906* fmem-report:                           Developer Options.  (line  869)
63907* fmem-report-wpa:                       Developer Options.  (line  873)
63908* fmerge-all-constants:                  Optimize Options.   (line  405)
63909* fmerge-constants:                      Optimize Options.   (line  395)
63910* fmerge-debug-strings:                  Debugging Options.  (line  166)
63911* fmessage-length:                       Diagnostic Message Formatting Options.
63912                                                             (line   14)
63913* fmodule-header:                        C++ Dialect Options.
63914                                                             (line  319)
63915* fmodule-implicit-inline:               C++ Dialect Options.
63916                                                             (line  322)
63917* fmodule-lazy:                          C++ Dialect Options.
63918                                                             (line  332)
63919* fmodule-mapper:                        C++ Dialect Options.
63920                                                             (line  340)
63921* fmodule-only:                          C++ Dialect Options.
63922                                                             (line  345)
63923* fmodules-ts:                           C++ Dialect Options.
63924                                                             (line  311)
63925* fmodulo-sched:                         Optimize Options.   (line  416)
63926* fmodulo-sched-allow-regmoves:          Optimize Options.   (line  421)
63927* fmove-loop-invariants:                 Optimize Options.   (line 2618)
63928* fmove-loop-stores:                     Optimize Options.   (line 2622)
63929* fms-extensions:                        C Dialect Options.  (line  340)
63930* fms-extensions <1>:                    C++ Dialect Options.
63931                                                             (line  349)
63932* fms-extensions <2>:                    Unnamed Fields.     (line   36)
63933* fnew-inheriting-ctors:                 C++ Dialect Options.
63934                                                             (line  354)
63935* fnew-ttp-matching:                     C++ Dialect Options.
63936                                                             (line  360)
63937* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
63938                                                             (line   43)
63939* fnil-receivers:                        Objective-C and Objective-C++ Dialect Options.
63940                                                             (line   49)
63941* fno-access-control:                    C++ Dialect Options.
63942                                                             (line  108)
63943* fno-allocation-dce:                    Optimize Options.   (line 1833)
63944* fno-analyzer:                          Static Analyzer Options.
63945                                                             (line    7)
63946* fno-analyzer-call-summaries:           Static Analyzer Options.
63947                                                             (line  303)
63948* fno-analyzer-feasibility:              Static Analyzer Options.
63949                                                             (line  339)
63950* fno-analyzer-fine-grained:             Static Analyzer Options.
63951                                                             (line  349)
63952* fno-analyzer-show-duplicate-count:     Static Analyzer Options.
63953                                                             (line  359)
63954* fno-analyzer-state-merge:              Static Analyzer Options.
63955                                                             (line  366)
63956* fno-analyzer-state-purge:              Static Analyzer Options.
63957                                                             (line  374)
63958* fno-analyzer-transitivity:             Static Analyzer Options.
63959                                                             (line  385)
63960* fno-asm:                               C Dialect Options.  (line  225)
63961* fno-bit-tests:                         Code Gen Options.   (line  425)
63962* fno-branch-count-reg:                  Optimize Options.   (line  428)
63963* fno-builtin:                           C Dialect Options.  (line  239)
63964* fno-builtin <1>:                       Warning Options.    (line  432)
63965* fno-builtin <2>:                       Common Function Attributes.
63966                                                             (line  451)
63967* fno-builtin <3>:                       Other Builtins.     (line   21)
63968* fno-canonical-system-headers:          Preprocessor Options.
63969                                                             (line  234)
63970* fno-char8_t:                           C++ Dialect Options.
63971                                                             (line  122)
63972* fno-checking:                          Developer Options.  (line  716)
63973* fno-common:                            Code Gen Options.   (line  234)
63974* fno-common <1>:                        Common Variable Attributes.
63975                                                             (line  176)
63976* fno-compare-debug:                     Developer Options.  (line  788)
63977* fno-debug-types-section:               Debugging Options.  (line  235)
63978* fno-default-inline:                    Inline.             (line   68)
63979* fno-defer-pop:                         Optimize Options.   (line  229)
63980* fno-diagnostics-show-caret:            Diagnostic Message Formatting Options.
63981                                                             (line  188)
63982* fno-diagnostics-show-cwe:              Diagnostic Message Formatting Options.
63983                                                             (line  210)
63984* fno-diagnostics-show-labels:           Diagnostic Message Formatting Options.
63985                                                             (line  197)
63986* fno-diagnostics-show-line-numbers:     Diagnostic Message Formatting Options.
63987                                                             (line  219)
63988* fno-diagnostics-show-option:           Diagnostic Message Formatting Options.
63989                                                             (line  182)
63990* fno-dwarf2-cfi-asm:                    Debugging Options.  (line  440)
63991* fno-elide-constructors:                C++ Dialect Options.
63992                                                             (line  230)
63993* fno-elide-type:                        Diagnostic Message Formatting Options.
63994                                                             (line  293)
63995* fno-eliminate-unused-debug-symbols:    Debugging Options.  (line  153)
63996* fno-eliminate-unused-debug-types:      Debugging Options.  (line  444)
63997* fno-enforce-eh-specs:                  C++ Dialect Options.
63998                                                             (line  241)
63999* fno-ext-numeric-literals:              C++ Dialect Options.
64000                                                             (line  546)
64001* fno-extern-tls-init:                   C++ Dialect Options.
64002                                                             (line  251)
64003* fno-finite-loops:                      Optimize Options.   (line 1222)
64004* fno-fold-simple-inlines:               C++ Dialect Options.
64005                                                             (line  272)
64006* fno-fp-int-builtin-inexact:            Optimize Options.   (line 2472)
64007* fno-function-cse:                      Optimize Options.   (line  442)
64008* fno-gnu-keywords:                      C++ Dialect Options.
64009                                                             (line  279)
64010* fno-gnu-unique:                        Code Gen Options.   (line  165)
64011* fno-guess-branch-probability:          Optimize Options.   (line 1605)
64012* fno-ident:                             Code Gen Options.   (line  255)
64013* fno-implement-inlines:                 C++ Dialect Options.
64014                                                             (line  305)
64015* fno-implement-inlines <1>:             C++ Interface.      (line   66)
64016* fno-implicit-inline-templates:         C++ Dialect Options.
64017                                                             (line  299)
64018* fno-implicit-templates:                C++ Dialect Options.
64019                                                             (line  291)
64020* fno-implicit-templates <1>:            Template Instantiation.
64021                                                             (line   94)
64022* fno-inline:                            Optimize Options.   (line  283)
64023* fno-ira-share-save-slots:              Optimize Options.   (line  739)
64024* fno-ira-share-spill-slots:             Optimize Options.   (line  745)
64025* fno-jump-tables:                       Code Gen Options.   (line  417)
64026* fno-keep-inline-dllexport:             Optimize Options.   (line  369)
64027* fno-lifetime-dse:                      Optimize Options.   (line  675)
64028* fno-local-ivars:                       Objective-C and Objective-C++ Dialect Options.
64029                                                             (line  152)
64030* fno-math-errno:                        Optimize Options.   (line 2337)
64031* fno-merge-debug-strings:               Debugging Options.  (line  166)
64032* fno-module-lazy:                       C++ Dialect Options.
64033                                                             (line  332)
64034* fno-modules-ts:                        C++ Dialect Options.
64035                                                             (line  311)
64036* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
64037                                                             (line   49)
64038* fno-nonansi-builtins:                  C++ Dialect Options.
64039                                                             (line  367)
64040* fno-operator-names:                    C++ Dialect Options.
64041                                                             (line  383)
64042* fno-optional-diags:                    C++ Dialect Options.
64043                                                             (line  387)
64044* fno-peephole:                          Optimize Options.   (line 1596)
64045* fno-peephole2:                         Optimize Options.   (line 1596)
64046* fno-plt:                               Code Gen Options.   (line  399)
64047* fno-pretty-templates:                  C++ Dialect Options.
64048                                                             (line  397)
64049* fno-printf-return-value:               Optimize Options.   (line 1573)
64050* fno-rtti:                              C++ Dialect Options.
64051                                                             (line  409)
64052* fno-sanitize-recover:                  Instrumentation Options.
64053                                                             (line  628)
64054* fno-sanitize=all:                      Instrumentation Options.
64055                                                             (line  613)
64056* fno-sched-interblock:                  Optimize Options.   (line  784)
64057* fno-sched-spec:                        Optimize Options.   (line  789)
64058* fno-set-stack-executable:              x86 Windows Options.
64059                                                             (line   46)
64060* fno-show-column:                       Diagnostic Message Formatting Options.
64061                                                             (line  408)
64062* fno-signed-bitfields:                  C Dialect Options.  (line  451)
64063* fno-signed-zeros:                      Optimize Options.   (line 2412)
64064* fno-stack-limit:                       Instrumentation Options.
64065                                                             (line  823)
64066* fno-threadsafe-statics:                C++ Dialect Options.
64067                                                             (line  464)
64068* fno-toplevel-reorder:                  Optimize Options.   (line 1859)
64069* fno-trapping-math:                     Optimize Options.   (line 2422)
64070* fno-unsigned-bitfields:                C Dialect Options.  (line  451)
64071* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
64072                                                             (line  477)
64073* fno-var-tracking-assignments:          Debugging Options.  (line  193)
64074* fno-var-tracking-assignments-toggle:   Developer Options.  (line  835)
64075* fno-weak:                              C++ Dialect Options.
64076                                                             (line  539)
64077* fno-working-directory:                 Preprocessor Options.
64078                                                             (line  323)
64079* fno-writable-relocated-rdata:          x86 Windows Options.
64080                                                             (line   53)
64081* fno-zero-initialized-in-bss:           Optimize Options.   (line  453)
64082* fnon-call-exceptions:                  Code Gen Options.   (line  133)
64083* fnonansi-builtins:                     C++ Dialect Options.
64084                                                             (line  367)
64085* fnothrow-opt:                          C++ Dialect Options.
64086                                                             (line  372)
64087* fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
64088                                                             (line   56)
64089* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
64090                                                             (line   67)
64091* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
64092                                                             (line   92)
64093* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
64094                                                             (line   96)
64095* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
64096                                                             (line  104)
64097* fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
64098                                                             (line  110)
64099* fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
64100                                                             (line  119)
64101* foffload:                              C Dialect Options.  (line  360)
64102* foffload-options:                      C Dialect Options.  (line  373)
64103* fomit-frame-pointer:                   Optimize Options.   (line  256)
64104* fopenacc:                              C Dialect Options.  (line  388)
64105* fopenacc-dim:                          C Dialect Options.  (line  397)
64106* fopenmp:                               C Dialect Options.  (line  403)
64107* fopenmp-simd:                          C Dialect Options.  (line  412)
64108* foperator-names:                       C++ Dialect Options.
64109                                                             (line  383)
64110* fopt-info:                             Developer Options.  (line  487)
64111* foptimize-sibling-calls:               Optimize Options.   (line  271)
64112* foptimize-strlen:                      Optimize Options.   (line  276)
64113* foptional-diags:                       C++ Dialect Options.
64114                                                             (line  387)
64115* force_cpusubtype_ALL:                  Darwin Options.     (line  135)
64116* force_flat_namespace:                  Darwin Options.     (line  196)
64117* fpack-struct:                          Code Gen Options.   (line  472)
64118* fpartial-inlining:                     Optimize Options.   (line 1548)
64119* fpatchable-function-entry:             Instrumentation Options.
64120                                                             (line  980)
64121* fpcc-struct-return:                    Code Gen Options.   (line  178)
64122* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
64123* fpch-deps:                             Preprocessor Options.
64124                                                             (line  298)
64125* fpch-preprocess:                       Preprocessor Options.
64126                                                             (line  306)
64127* fpeel-loops:                           Optimize Options.   (line 2610)
64128* fpeephole:                             Optimize Options.   (line 1596)
64129* fpeephole2:                            Optimize Options.   (line 1596)
64130* fpermissive:                           C++ Dialect Options.
64131                                                             (line  392)
64132* fpermitted-flt-eval-methods:           C Dialect Options.  (line  416)
64133* fpermitted-flt-eval-methods=c11:       C Dialect Options.  (line  416)
64134* fpermitted-flt-eval-methods=ts-18661-3: C Dialect Options. (line  416)
64135* fpic:                                  Code Gen Options.   (line  356)
64136* fPIC:                                  Code Gen Options.   (line  377)
64137* fpie:                                  Code Gen Options.   (line  390)
64138* fPIE:                                  Code Gen Options.   (line  390)
64139* fplan9-extensions:                     C Dialect Options.  (line  438)
64140* fplan9-extensions <1>:                 Unnamed Fields.     (line   43)
64141* fplt:                                  Code Gen Options.   (line  399)
64142* fplugin:                               Overall Options.    (line  639)
64143* fplugin-arg:                           Overall Options.    (line  646)
64144* fpost-ipa-mem-report:                  Developer Options.  (line  878)
64145* fpre-ipa-mem-report:                   Developer Options.  (line  877)
64146* fpredictive-commoning:                 Optimize Options.   (line 1555)
64147* fprefetch-loop-arrays:                 Optimize Options.   (line 1563)
64148* fpreprocessed:                         Preprocessor Options.
64149                                                             (line  192)
64150* fpretty-templates:                     C++ Dialect Options.
64151                                                             (line  397)
64152* fprintf-return-value:                  Optimize Options.   (line 1573)
64153* fprofile-abs-path:                     Instrumentation Options.
64154                                                             (line  116)
64155* fprofile-arcs:                         Instrumentation Options.
64156                                                             (line   30)
64157* fprofile-arcs <1>:                     Other Builtins.     (line  596)
64158* fprofile-correction:                   Optimize Options.   (line 2197)
64159* fprofile-dir:                          Instrumentation Options.
64160                                                             (line  122)
64161* fprofile-exclude-files:                Instrumentation Options.
64162                                                             (line  299)
64163* fprofile-filter-files:                 Instrumentation Options.
64164                                                             (line  291)
64165* fprofile-generate:                     Instrumentation Options.
64166                                                             (line  148)
64167* fprofile-info-section:                 Instrumentation Options.
64168                                                             (line  166)
64169* fprofile-note:                         Instrumentation Options.
64170                                                             (line  248)
64171* fprofile-partial-training:             Optimize Options.   (line 2206)
64172* fprofile-prefix-map:                   Instrumentation Options.
64173                                                             (line  269)
64174* fprofile-prefix-path:                  Instrumentation Options.
64175                                                             (line  254)
64176* fprofile-reorder-functions:            Optimize Options.   (line 2550)
64177* fprofile-report:                       Developer Options.  (line  882)
64178* fprofile-reproducible:                 Instrumentation Options.
64179                                                             (line  308)
64180* fprofile-update:                       Instrumentation Options.
64181                                                             (line  274)
64182* fprofile-use:                          Optimize Options.   (line 2220)
64183* fprofile-values:                       Optimize Options.   (line 2540)
64184* fpu:                                   RX Options.         (line   17)
64185* frandom-seed:                          Developer Options.  (line  721)
64186* freciprocal-math:                      Optimize Options.   (line 2390)
64187* frecord-gcc-switches:                  Code Gen Options.   (line  344)
64188* free:                                  Optimize Options.   (line  667)
64189* freg-struct-return:                    Code Gen Options.   (line  196)
64190* frename-registers:                     Optimize Options.   (line 2569)
64191* freorder-blocks:                       Optimize Options.   (line 1626)
64192* freorder-blocks-algorithm:             Optimize Options.   (line 1632)
64193* freorder-blocks-and-partition:         Optimize Options.   (line 1643)
64194* freorder-functions:                    Optimize Options.   (line 1660)
64195* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
64196                                                             (line  130)
64197* freport-bug:                           Developer Options.  (line  287)
64198* frerun-cse-after-loop:                 Optimize Options.   (line  505)
64199* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  883)
64200* frounding-math:                        Optimize Options.   (line 2437)
64201* frtti:                                 C++ Dialect Options.
64202                                                             (line  409)
64203* fsanitize-address-use-after-scope:     Instrumentation Options.
64204                                                             (line  664)
64205* fsanitize-coverage=trace-cmp:          Instrumentation Options.
64206                                                             (line  679)
64207* fsanitize-coverage=trace-pc:           Instrumentation Options.
64208                                                             (line  675)
64209* fsanitize-recover:                     Instrumentation Options.
64210                                                             (line  628)
64211* fsanitize-sections:                    Instrumentation Options.
64212                                                             (line  624)
64213* fsanitize-undefined-trap-on-error:     Instrumentation Options.
64214                                                             (line  668)
64215* fsanitize=address:                     Instrumentation Options.
64216                                                             (line  336)
64217* fsanitize=alignment:                   Instrumentation Options.
64218                                                             (line  539)
64219* fsanitize=bool:                        Instrumentation Options.
64220                                                             (line  577)
64221* fsanitize=bounds:                      Instrumentation Options.
64222                                                             (line  526)
64223* fsanitize=bounds-strict:               Instrumentation Options.
64224                                                             (line  532)
64225* fsanitize=builtin:                     Instrumentation Options.
64226                                                             (line  601)
64227* fsanitize=enum:                        Instrumentation Options.
64228                                                             (line  582)
64229* fsanitize=float-cast-overflow:         Instrumentation Options.
64230                                                             (line  557)
64231* fsanitize=float-divide-by-zero:        Instrumentation Options.
64232                                                             (line  551)
64233* fsanitize=hwaddress:                   Instrumentation Options.
64234                                                             (line  356)
64235* fsanitize=integer-divide-by-zero:      Instrumentation Options.
64236                                                             (line  489)
64237* fsanitize=kernel-address:              Instrumentation Options.
64238                                                             (line  352)
64239* fsanitize=kernel-hwaddress:            Instrumentation Options.
64240                                                             (line  370)
64241* fsanitize=leak:                        Instrumentation Options.
64242                                                             (line  451)
64243* fsanitize=nonnull-attribute:           Instrumentation Options.
64244                                                             (line  565)
64245* fsanitize=null:                        Instrumentation Options.
64246                                                             (line  502)
64247* fsanitize=object-size:                 Instrumentation Options.
64248                                                             (line  546)
64249* fsanitize=pointer-compare:             Instrumentation Options.
64250                                                             (line  386)
64251* fsanitize=pointer-overflow:            Instrumentation Options.
64252                                                             (line  595)
64253* fsanitize=pointer-subtract:            Instrumentation Options.
64254                                                             (line  396)
64255* fsanitize=return:                      Instrumentation Options.
64256                                                             (line  510)
64257* fsanitize=returns-nonnull-attribute:   Instrumentation Options.
64258                                                             (line  571)
64259* fsanitize=shadow-call-stack:           Instrumentation Options.
64260                                                             (line  406)
64261* fsanitize=shift:                       Instrumentation Options.
64262                                                             (line  469)
64263* fsanitize=shift-base:                  Instrumentation Options.
64264                                                             (line  482)
64265* fsanitize=shift-exponent:              Instrumentation Options.
64266                                                             (line  477)
64267* fsanitize=signed-integer-overflow:     Instrumentation Options.
64268                                                             (line  516)
64269* fsanitize=thread:                      Instrumentation Options.
64270                                                             (line  437)
64271* fsanitize=undefined:                   Instrumentation Options.
64272                                                             (line  461)
64273* fsanitize=unreachable:                 Instrumentation Options.
64274                                                             (line  492)
64275* fsanitize=vla-bound:                   Instrumentation Options.
64276                                                             (line  498)
64277* fsanitize=vptr:                        Instrumentation Options.
64278                                                             (line  588)
64279* fsave-optimization-record:             Developer Options.  (line  593)
64280* fsched-critical-path-heuristic:        Optimize Options.   (line  849)
64281* fsched-dep-count-heuristic:            Optimize Options.   (line  876)
64282* fsched-group-heuristic:                Optimize Options.   (line  843)
64283* fsched-interblock:                     Optimize Options.   (line  784)
64284* fsched-last-insn-heuristic:            Optimize Options.   (line  869)
64285* fsched-pressure:                       Optimize Options.   (line  794)
64286* fsched-rank-heuristic:                 Optimize Options.   (line  862)
64287* fsched-spec:                           Optimize Options.   (line  789)
64288* fsched-spec-insn-heuristic:            Optimize Options.   (line  855)
64289* fsched-spec-load:                      Optimize Options.   (line  803)
64290* fsched-spec-load-dangerous:            Optimize Options.   (line  808)
64291* fsched-stalled-insns:                  Optimize Options.   (line  814)
64292* fsched-stalled-insns-dep:              Optimize Options.   (line  824)
64293* fsched-verbose:                        Developer Options.  (line  633)
64294* fsched2-use-superblocks:               Optimize Options.   (line  833)
64295* fschedule-fusion:                      Optimize Options.   (line 2579)
64296* fschedule-insns:                       Optimize Options.   (line  765)
64297* fschedule-insns2:                      Optimize Options.   (line  775)
64298* fsection-anchors:                      Optimize Options.   (line 2699)
64299* fsel-sched-pipelining:                 Optimize Options.   (line  896)
64300* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  901)
64301* fselective-scheduling:                 Optimize Options.   (line  888)
64302* fselective-scheduling2:                Optimize Options.   (line  892)
64303* fsemantic-interposition:               Optimize Options.   (line  906)
64304* fset-stack-executable:                 x86 Windows Options.
64305                                                             (line   46)
64306* fshort-enums:                          Code Gen Options.   (line  214)
64307* fshort-enums <1>:                      Structures unions enumerations and bit-fields implementation.
64308                                                             (line   48)
64309* fshort-enums <2>:                      Common Type Attributes.
64310                                                             (line  299)
64311* fshort-enums <3>:                      Non-bugs.           (line   42)
64312* fshort-wchar:                          Code Gen Options.   (line  224)
64313* fshow-column:                          Diagnostic Message Formatting Options.
64314                                                             (line  408)
64315* fshrink-wrap:                          Optimize Options.   (line  923)
64316* fshrink-wrap-separate:                 Optimize Options.   (line  928)
64317* fsignaling-nans:                       Optimize Options.   (line 2457)
64318* fsigned-bitfields:                     C Dialect Options.  (line  451)
64319* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
64320* fsigned-char:                          C Dialect Options.  (line  457)
64321* fsigned-char <1>:                      Characters implementation.
64322                                                             (line   31)
64323* fsigned-zeros:                         Optimize Options.   (line 2412)
64324* fsimd-cost-model:                      Optimize Options.   (line 1505)
64325* fsingle-precision-constant:            Optimize Options.   (line 2490)
64326* fsized-deallocation:                   C++ Dialect Options.
64327                                                             (line  424)
64328* fsplit-ivs-in-unroller:                Optimize Options.   (line 1526)
64329* fsplit-loops:                          Optimize Options.   (line 2630)
64330* fsplit-paths:                          Optimize Options.   (line 1521)
64331* fsplit-stack:                          Instrumentation Options.
64332                                                             (line  840)
64333* fsplit-stack <1>:                      Common Function Attributes.
64334                                                             (line  869)
64335* fsplit-wide-types:                     Optimize Options.   (line  474)
64336* fsplit-wide-types-early:               Optimize Options.   (line  482)
64337* fssa-backprop:                         Optimize Options.   (line 1188)
64338* fssa-phiopt:                           Optimize Options.   (line 1194)
64339* fsso-struct:                           C Dialect Options.  (line  482)
64340* fstack-check:                          Instrumentation Options.
64341                                                             (line  766)
64342* fstack-clash-protection:               Instrumentation Options.
64343                                                             (line  808)
64344* fstack-limit-register:                 Instrumentation Options.
64345                                                             (line  823)
64346* fstack-limit-symbol:                   Instrumentation Options.
64347                                                             (line  823)
64348* fstack-protector:                      Instrumentation Options.
64349                                                             (line  741)
64350* fstack-protector-all:                  Instrumentation Options.
64351                                                             (line  752)
64352* fstack-protector-explicit:             Instrumentation Options.
64353                                                             (line  762)
64354* fstack-protector-strong:               Instrumentation Options.
64355                                                             (line  755)
64356* fstack-usage:                          Developer Options.  (line  886)
64357* fstack_reuse:                          Code Gen Options.   (line   15)
64358* fstats:                                Developer Options.  (line  915)
64359* fstdarg-opt:                           Optimize Options.   (line 2695)
64360* fstore-merging:                        Optimize Options.   (line 1413)
64361* fstrict-aliasing:                      Optimize Options.   (line 1675)
64362* fstrict-enums:                         C++ Dialect Options.
64363                                                             (line  434)
64364* fstrict-overflow:                      Code Gen Options.   (line  115)
64365* fstrict-volatile-bitfields:            Code Gen Options.   (line  601)
64366* fstrong-eval-order:                    C++ Dialect Options.
64367                                                             (line  443)
64368* fsync-libcalls:                        Code Gen Options.   (line  633)
64369* fsyntax-only:                          Warning Options.    (line   14)
64370* ftabstop:                              Preprocessor Options.
64371                                                             (line  241)
64372* ftemplate-backtrace-limit:             C++ Dialect Options.
64373                                                             (line  451)
64374* ftemplate-depth:                       C++ Dialect Options.
64375                                                             (line  455)
64376* ftest-coverage:                        Instrumentation Options.
64377                                                             (line  107)
64378* fthread-jumps:                         Optimize Options.   (line  465)
64379* fthreadsafe-statics:                   C++ Dialect Options.
64380                                                             (line  464)
64381* ftime-report:                          Developer Options.  (line  843)
64382* ftime-report-details:                  Developer Options.  (line  847)
64383* ftls-model:                            Code Gen Options.   (line  496)
64384* ftoplevel-reorder:                     Optimize Options.   (line 1859)
64385* ftracer:                               Optimize Options.   (line 2587)
64386* ftrack-macro-expansion:                Preprocessor Options.
64387                                                             (line  247)
64388* ftrampolines:                          Code Gen Options.   (line  507)
64389* ftrapping-math:                        Optimize Options.   (line 2422)
64390* ftrapv:                                Code Gen Options.   (line   91)
64391* ftree-bit-ccp:                         Optimize Options.   (line 1176)
64392* ftree-builtin-call-dce:                Optimize Options.   (line 1216)
64393* ftree-ccp:                             Optimize Options.   (line 1183)
64394* ftree-ch:                              Optimize Options.   (line 1245)
64395* ftree-coalesce-vars:                   Optimize Options.   (line 1284)
64396* ftree-copy-prop:                       Optimize Options.   (line 1011)
64397* ftree-dce:                             Optimize Options.   (line 1212)
64398* ftree-dominator-opts:                  Optimize Options.   (line 1231)
64399* ftree-dse:                             Optimize Options.   (line 1238)
64400* ftree-forwprop:                        Optimize Options.   (line  990)
64401* ftree-fre:                             Optimize Options.   (line  994)
64402* ftree-loop-distribute-patterns:        Optimize Options.   (line 1320)
64403* ftree-loop-distribution:               Optimize Options.   (line 1301)
64404* ftree-loop-if-convert:                 Optimize Options.   (line 1294)
64405* ftree-loop-im:                         Optimize Options.   (line 1365)
64406* ftree-loop-ivcanon:                    Optimize Options.   (line 1374)
64407* ftree-loop-linear:                     Optimize Options.   (line 1258)
64408* ftree-loop-optimize:                   Optimize Options.   (line 1252)
64409* ftree-loop-vectorize:                  Optimize Options.   (line 1439)
64410* ftree-parallelize-loops:               Optimize Options.   (line 1394)
64411* ftree-partial-pre:                     Optimize Options.   (line  986)
64412* ftree-phiprop:                         Optimize Options.   (line 1001)
64413* ftree-pre:                             Optimize Options.   (line  982)
64414* ftree-pta:                             Optimize Options.   (line 1403)
64415* ftree-reassoc:                         Optimize Options.   (line  971)
64416* ftree-scev-cprop:                      Optimize Options.   (line 1380)
64417* ftree-sink:                            Optimize Options.   (line 1172)
64418* ftree-slp-vectorize:                   Optimize Options.   (line 1444)
64419* ftree-slsr:                            Optimize Options.   (line 1428)
64420* ftree-sra:                             Optimize Options.   (line 1407)
64421* ftree-switch-conversion:               Optimize Options.   (line 1199)
64422* ftree-tail-merge:                      Optimize Options.   (line 1204)
64423* ftree-ter:                             Optimize Options.   (line 1420)
64424* ftree-vectorize:                       Optimize Options.   (line 1434)
64425* ftree-vrp:                             Optimize Options.   (line 1512)
64426* ftrivial-auto-var-init:                Optimize Options.   (line 1449)
64427* funconstrained-commons:                Optimize Options.   (line  563)
64428* funit-at-a-time:                       Optimize Options.   (line 1852)
64429* funroll-all-loops:                     Optimize Options.   (line 2604)
64430* funroll-loops:                         Optimize Options.   (line 2594)
64431* funsafe-math-optimizations:            Optimize Options.   (line 2355)
64432* funsigned-bitfields:                   C Dialect Options.  (line  451)
64433* funsigned-bitfields <1>:               Structures unions enumerations and bit-fields implementation.
64434                                                             (line   17)
64435* funsigned-bitfields <2>:               Non-bugs.           (line   57)
64436* funsigned-char:                        C Dialect Options.  (line  464)
64437* funsigned-char <1>:                    Characters implementation.
64438                                                             (line   31)
64439* funswitch-loops:                       Optimize Options.   (line 2636)
64440* funwind-tables:                        Code Gen Options.   (line  152)
64441* fuse-cxa-atexit:                       C++ Dialect Options.
64442                                                             (line  470)
64443* fuse-cxa-get-exception-ptr:            C++ Dialect Options.
64444                                                             (line  477)
64445* fuse-ld=bfd:                           Link Options.       (line   74)
64446* fuse-ld=gold:                          Link Options.       (line   77)
64447* fuse-ld=lld:                           Link Options.       (line   80)
64448* fuse-ld=mold:                          Link Options.       (line   83)
64449* fuse-linker-plugin:                    Optimize Options.   (line 2137)
64450* fvar-tracking:                         Debugging Options.  (line  183)
64451* fvar-tracking-assignments:             Debugging Options.  (line  193)
64452* fvar-tracking-assignments-toggle:      Developer Options.  (line  835)
64453* fvariable-expansion-in-unroller:       Optimize Options.   (line 1540)
64454* fvect-cost-model:                      Optimize Options.   (line 1484)
64455* fverbose-asm:                          Code Gen Options.   (line  265)
64456* fversion-loops-for-strides:            Optimize Options.   (line 2643)
64457* fvisibility:                           Code Gen Options.   (line  536)
64458* fvisibility-inlines-hidden:            C++ Dialect Options.
64459                                                             (line  482)
64460* fvisibility-ms-compat:                 C++ Dialect Options.
64461                                                             (line  510)
64462* fvpt:                                  Optimize Options.   (line 2557)
64463* fvtable-verify:                        Instrumentation Options.
64464                                                             (line  858)
64465* fvtv-counts:                           Instrumentation Options.
64466                                                             (line  894)
64467* fvtv-debug:                            Instrumentation Options.
64468                                                             (line  881)
64469* fweak:                                 C++ Dialect Options.
64470                                                             (line  539)
64471* fweb:                                  Optimize Options.   (line 1872)
64472* fwhole-program:                        Optimize Options.   (line 1883)
64473* fwide-exec-charset:                    Preprocessor Options.
64474                                                             (line  278)
64475* fworking-directory:                    Preprocessor Options.
64476                                                             (line  323)
64477* fwrapv:                                Code Gen Options.   (line   99)
64478* fwrapv-pointer:                        Code Gen Options.   (line  109)
64479* fwritable-relocated-rdata:             x86 Windows Options.
64480                                                             (line   53)
64481* fzero-call-used-regs:                  Optimize Options.   (line 2723)
64482* fzero-initialized-in-bss:              Optimize Options.   (line  453)
64483* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
64484                                                             (line  140)
64485* g:                                     Debugging Options.  (line   28)
64486* G:                                     ARC Options.        (line  416)
64487* G <1>:                                 M32R/D Options.     (line   57)
64488* G <2>:                                 MIPS Options.       (line  460)
64489* G <3>:                                 Nios II Options.    (line    9)
64490* G <4>:                                 RS/6000 and PowerPC Options.
64491                                                             (line  714)
64492* G <5>:                                 System V Options.   (line   10)
64493* gas-loc-support:                       Debugging Options.  (line  264)
64494* gas-locview-support:                   Debugging Options.  (line  280)
64495* gbtf:                                  Debugging Options.  (line   67)
64496* gcolumn-info:                          Debugging Options.  (line  292)
64497* gctf:                                  Debugging Options.  (line   75)
64498* gdescribe-dies:                        Debugging Options.  (line  222)
64499* gdwarf:                                Debugging Options.  (line   48)
64500* gdwarf32:                              Debugging Options.  (line  212)
64501* gdwarf64:                              Debugging Options.  (line  212)
64502* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
64503                                                             (line  166)
64504* gfull:                                 Darwin Options.     (line   69)
64505* ggdb:                                  Debugging Options.  (line   41)
64506* ggnu-pubnames:                         Debugging Options.  (line  230)
64507* ginline-points:                        Debugging Options.  (line  351)
64508* ginternal-reset-location-views:        Debugging Options.  (line  340)
64509* gno-as-loc-support:                    Debugging Options.  (line  276)
64510* gno-column-info:                       Debugging Options.  (line  292)
64511* gno-inline-points:                     Debugging Options.  (line  351)
64512* gno-internal-reset-location-views:     Debugging Options.  (line  340)
64513* gno-record-gcc-switches:               Debugging Options.  (line  245)
64514* gno-statement-frontiers:               Debugging Options.  (line  297)
64515* gno-strict-dwarf:                      Debugging Options.  (line  260)
64516* gno-variable-location-views:           Debugging Options.  (line  308)
64517* gpubnames:                             Debugging Options.  (line  227)
64518* grecord-gcc-switches:                  Debugging Options.  (line  245)
64519* gsplit-dwarf:                          Debugging Options.  (line  204)
64520* gstabs:                                Debugging Options.  (line   95)
64521* gstabs+:                               Debugging Options.  (line  103)
64522* gstatement-frontiers:                  Debugging Options.  (line  297)
64523* gstrict-dwarf:                         Debugging Options.  (line  254)
64524* gtoggle:                               Developer Options.  (line  827)
64525* gused:                                 Darwin Options.     (line   64)
64526* gvariable-location-views:              Debugging Options.  (line  308)
64527* gvariable-location-views=incompat5:    Debugging Options.  (line  308)
64528* gvms:                                  Debugging Options.  (line  122)
64529* gxcoff:                                Debugging Options.  (line  109)
64530* gxcoff+:                               Debugging Options.  (line  114)
64531* gz:                                    Debugging Options.  (line  360)
64532* H:                                     Preprocessor Options.
64533                                                             (line  405)
64534* headerpad_max_install_names:           Darwin Options.     (line  196)
64535* help:                                  Overall Options.    (line  478)
64536* I:                                     Directory Options.  (line   13)
64537* I-:                                    Directory Options.  (line   65)
64538* idirafter:                             Directory Options.  (line   13)
64539* iframework:                            Darwin Options.     (line   57)
64540* imacros:                               Preprocessor Options.
64541                                                             (line   57)
64542* image_base:                            Darwin Options.     (line  196)
64543* imultilib:                             Directory Options.  (line   98)
64544* include:                               Preprocessor Options.
64545                                                             (line   46)
64546* init:                                  Darwin Options.     (line  196)
64547* install_name:                          Darwin Options.     (line  196)
64548* iplugindir=:                           Directory Options.  (line  113)
64549* iprefix:                               Directory Options.  (line   80)
64550* iquote:                                Directory Options.  (line   13)
64551* isysroot:                              Directory Options.  (line   92)
64552* isystem:                               Directory Options.  (line   13)
64553* iwithprefix:                           Directory Options.  (line   86)
64554* iwithprefixbefore:                     Directory Options.  (line   86)
64555* keep_private_externs:                  Darwin Options.     (line  196)
64556* l:                                     Link Options.       (line   87)
64557* L:                                     Directory Options.  (line  118)
64558* lobjc:                                 Link Options.       (line  113)
64559* M:                                     Preprocessor Options.
64560                                                             (line   77)
64561* m:                                     RS/6000 and PowerPC Options.
64562                                                             (line  521)
64563* m1:                                    SH Options.         (line    9)
64564* m10:                                   PDP-11 Options.     (line   29)
64565* m128bit-long-double:                   x86 Options.        (line  655)
64566* m16:                                   x86 Options.        (line 1542)
64567* m16-bit:                               CRIS Options.       (line   63)
64568* m16-bit <1>:                           NDS32 Options.      (line   51)
64569* m1reg-:                                Adapteva Epiphany Options.
64570                                                             (line  131)
64571* m2:                                    SH Options.         (line   12)
64572* m210:                                  MCore Options.      (line   43)
64573* m2a:                                   SH Options.         (line   30)
64574* m2a-nofpu:                             SH Options.         (line   18)
64575* m2a-single:                            SH Options.         (line   26)
64576* m2a-single-only:                       SH Options.         (line   22)
64577* m3:                                    SH Options.         (line   34)
64578* m31:                                   S/390 and zSeries Options.
64579                                                             (line   86)
64580* m32:                                   RS/6000 and PowerPC Options.
64581                                                             (line  245)
64582* m32 <1>:                               SPARC Options.      (line  315)
64583* m32 <2>:                               TILE-Gx Options.    (line   23)
64584* m32 <3>:                               TILEPro Options.    (line   13)
64585* m32 <4>:                               x86 Options.        (line 1542)
64586* m32-bit:                               CRIS Options.       (line   63)
64587* m32bit-doubles:                        RL78 Options.       (line   73)
64588* m32bit-doubles <1>:                    RX Options.         (line   10)
64589* m32r:                                  M32R/D Options.     (line   15)
64590* m32r2:                                 M32R/D Options.     (line    9)
64591* m32rx:                                 M32R/D Options.     (line   12)
64592* m340:                                  MCore Options.      (line   43)
64593* m3dnow:                                x86 Options.        (line  878)
64594* m3dnowa:                               x86 Options.        (line  879)
64595* m3e:                                   SH Options.         (line   37)
64596* m4:                                    SH Options.         (line   51)
64597* m4-100:                                SH Options.         (line   54)
64598* m4-100-nofpu:                          SH Options.         (line   57)
64599* m4-100-single:                         SH Options.         (line   61)
64600* m4-100-single-only:                    SH Options.         (line   65)
64601* m4-200:                                SH Options.         (line   69)
64602* m4-200-nofpu:                          SH Options.         (line   72)
64603* m4-200-single:                         SH Options.         (line   76)
64604* m4-200-single-only:                    SH Options.         (line   80)
64605* m4-300:                                SH Options.         (line   84)
64606* m4-300-nofpu:                          SH Options.         (line   87)
64607* m4-300-single:                         SH Options.         (line   91)
64608* m4-300-single-only:                    SH Options.         (line   95)
64609* m4-340:                                SH Options.         (line   99)
64610* m4-500:                                SH Options.         (line  102)
64611* m4-nofpu:                              SH Options.         (line   40)
64612* m4-single:                             SH Options.         (line   47)
64613* m4-single-only:                        SH Options.         (line   43)
64614* m40:                                   PDP-11 Options.     (line   23)
64615* m45:                                   PDP-11 Options.     (line   26)
64616* m4a:                                   SH Options.         (line  118)
64617* m4a-nofpu:                             SH Options.         (line  106)
64618* m4a-single:                            SH Options.         (line  114)
64619* m4a-single-only:                       SH Options.         (line  110)
64620* m4al:                                  SH Options.         (line  121)
64621* m4byte-functions:                      MCore Options.      (line   27)
64622* m5200:                                 M680x0 Options.     (line  145)
64623* m5206e:                                M680x0 Options.     (line  154)
64624* m528x:                                 M680x0 Options.     (line  158)
64625* m5307:                                 M680x0 Options.     (line  162)
64626* m5407:                                 M680x0 Options.     (line  166)
64627* m64:                                   Nvidia PTX Options. (line    9)
64628* m64 <1>:                               RS/6000 and PowerPC Options.
64629                                                             (line  245)
64630* m64 <2>:                               S/390 and zSeries Options.
64631                                                             (line   86)
64632* m64 <3>:                               SPARC Options.      (line  315)
64633* m64 <4>:                               TILE-Gx Options.    (line   23)
64634* m64 <5>:                               x86 Options.        (line 1542)
64635* m64bit-doubles:                        RL78 Options.       (line   73)
64636* m64bit-doubles <1>:                    RX Options.         (line   10)
64637* m68000:                                M680x0 Options.     (line   94)
64638* m68010:                                M680x0 Options.     (line  102)
64639* m68020:                                M680x0 Options.     (line  108)
64640* m68020-40:                             M680x0 Options.     (line  176)
64641* m68020-60:                             M680x0 Options.     (line  185)
64642* m68030:                                M680x0 Options.     (line  113)
64643* m68040:                                M680x0 Options.     (line  118)
64644* m68060:                                M680x0 Options.     (line  127)
64645* m68881:                                M680x0 Options.     (line  195)
64646* m8-bit:                                CRIS Options.       (line   63)
64647* m8bit-idiv:                            x86 Options.        (line 1444)
64648* m8byte-align:                          V850 Options.       (line  170)
64649* m96bit-long-double:                    x86 Options.        (line  655)
64650* mA6:                                   ARC Options.        (line   23)
64651* mA7:                                   ARC Options.        (line   30)
64652* mabi:                                  AArch64 Options.    (line    9)
64653* mabi <1>:                              ARM Options.        (line    9)
64654* mabi <2>:                              LoongArch Options.  (line   36)
64655* mabi <3>:                              PRU Options.        (line   28)
64656* mabi <4>:                              RISC-V Options.     (line   17)
64657* mabi <5>:                              RS/6000 and PowerPC Options.
64658                                                             (line  552)
64659* mabi <6>:                              x86 Options.        (line 1137)
64660* mabi <7>:                              Xtensa Options.     (line  103)
64661* mabi=32:                               MIPS Options.       (line  156)
64662* mabi=64:                               MIPS Options.       (line  156)
64663* mabi=call0:                            Xtensa Options.     (line  108)
64664* mabi=eabi:                             MIPS Options.       (line  156)
64665* mabi=elfv1:                            RS/6000 and PowerPC Options.
64666                                                             (line  574)
64667* mabi=elfv2:                            RS/6000 and PowerPC Options.
64668                                                             (line  580)
64669* mabi=gnu:                              MMIX Options.       (line   20)
64670* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
64671                                                             (line  558)
64672* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
64673                                                             (line  566)
64674* mabi=mmixware:                         MMIX Options.       (line   20)
64675* mabi=n32:                              MIPS Options.       (line  156)
64676* mabi=o64:                              MIPS Options.       (line  156)
64677* mabi=windowed:                         Xtensa Options.     (line  115)
64678* mabicalls:                             MIPS Options.       (line  192)
64679* mabm:                                  x86 Options.        (line  881)
64680* mabort-on-noreturn:                    ARM Options.        (line  752)
64681* mabs=2008:                             MIPS Options.       (line  300)
64682* mabs=legacy:                           MIPS Options.       (line  300)
64683* mabsdata:                              AVR Options.        (line  163)
64684* mabsdiff:                              MeP Options.        (line    7)
64685* mac0:                                  PDP-11 Options.     (line   16)
64686* macc-4:                                FRV Options.        (line  139)
64687* macc-8:                                FRV Options.        (line  143)
64688* maccumulate-args:                      AVR Options.        (line  170)
64689* maccumulate-outgoing-args:             SH Options.         (line  314)
64690* maccumulate-outgoing-args <1>:         x86 Options.        (line 1181)
64691* maddress-mode=long:                    x86 Options.        (line 1592)
64692* maddress-mode=short:                   x86 Options.        (line 1597)
64693* mads:                                  RS/6000 and PowerPC Options.
64694                                                             (line  614)
64695* madx:                                  x86 Options.        (line  882)
64696* maes:                                  x86 Options.        (line  859)
64697* maix-struct-return:                    RS/6000 and PowerPC Options.
64698                                                             (line  545)
64699* maix32:                                RS/6000 and PowerPC Options.
64700                                                             (line  283)
64701* maix64:                                RS/6000 and PowerPC Options.
64702                                                             (line  283)
64703* malign-300:                            H8/300 Options.     (line   41)
64704* malign-call:                           ARC Options.        (line  435)
64705* malign-data:                           RISC-V Options.     (line  168)
64706* malign-data <1>:                       x86 Options.        (line  695)
64707* malign-double:                         x86 Options.        (line  640)
64708* malign-int:                            M680x0 Options.     (line  262)
64709* malign-labels:                         FRV Options.        (line  128)
64710* malign-loops:                          M32R/D Options.     (line   73)
64711* malign-natural:                        RS/6000 and PowerPC Options.
64712                                                             (line  321)
64713* malign-power:                          RS/6000 and PowerPC Options.
64714                                                             (line  321)
64715* malign-stringops:                      x86 Options.        (line 1317)
64716* mall-opts:                             MeP Options.        (line   11)
64717* malloc-cc:                             FRV Options.        (line   31)
64718* mallow-string-insns:                   RX Options.         (line  150)
64719* mallregs:                              RL78 Options.       (line   66)
64720* maltivec:                              RS/6000 and PowerPC Options.
64721                                                             (line  137)
64722* malu32:                                eBPF Options.       (line   35)
64723* mam33:                                 MN10300 Options.    (line   17)
64724* mam33-2:                               MN10300 Options.    (line   24)
64725* mam34:                                 MN10300 Options.    (line   27)
64726* mamx-bf16:                             x86 Options.        (line  920)
64727* mamx-int8:                             x86 Options.        (line  919)
64728* mamx-tile:                             x86 Options.        (line  918)
64729* manchor:                               C-SKY Options.      (line  126)
64730* mandroid:                              GNU/Linux Options.  (line   26)
64731* mannotate-align:                       ARC Options.        (line  382)
64732* mapcs:                                 ARM Options.        (line   21)
64733* mapcs-frame:                           ARM Options.        (line   13)
64734* mapp-regs:                             SPARC Options.      (line   10)
64735* mapp-regs <1>:                         V850 Options.       (line  181)
64736* mARC600:                               ARC Options.        (line   23)
64737* mARC601:                               ARC Options.        (line   27)
64738* mARC700:                               ARC Options.        (line   30)
64739* march:                                 AArch64 Options.    (line  150)
64740* march <1>:                             AMD GCN Options.    (line    9)
64741* march <2>:                             ARM Options.        (line   80)
64742* march <3>:                             C6X Options.        (line    7)
64743* march <4>:                             CRIS Options.       (line   10)
64744* march <5>:                             HPPA Options.       (line    9)
64745* march <6>:                             HPPA Options.       (line  162)
64746* march <7>:                             M680x0 Options.     (line   12)
64747* march <8>:                             MIPS Options.       (line   14)
64748* march <9>:                             NDS32 Options.      (line   64)
64749* march <10>:                            Nios II Options.    (line   94)
64750* march <11>:                            Nvidia PTX Options. (line   13)
64751* march <12>:                            Nvidia PTX Options. (line   25)
64752* march <13>:                            RISC-V Options.     (line   67)
64753* march <14>:                            S/390 and zSeries Options.
64754                                                             (line  148)
64755* march <15>:                            x86 Options.        (line    9)
64756* march=:                                C-SKY Options.      (line    9)
64757* marclinux:                             ARC Options.        (line  388)
64758* marclinux_prof:                        ARC Options.        (line  395)
64759* margonaut:                             ARC Options.        (line  586)
64760* marm:                                  ARM Options.        (line  824)
64761* mas100-syntax:                         RX Options.         (line   76)
64762* masm-hex:                              MSP430 Options.     (line    9)
64763* masm-syntax-unified:                   ARM Options.        (line  932)
64764* masm=DIALECT:                          x86 Options.        (line  589)
64765* matomic:                               ARC Options.        (line  155)
64766* matomic-model=MODEL:                   SH Options.         (line  193)
64767* mauto-litpools:                        Xtensa Options.     (line   60)
64768* mauto-modify-reg:                      ARC Options.        (line  438)
64769* mauto-pic:                             IA-64 Options.      (line   50)
64770* maverage:                              MeP Options.        (line   16)
64771* mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
64772                                                             (line  360)
64773* mavx:                                  x86 Options.        (line  847)
64774* mavx2:                                 x86 Options.        (line  848)
64775* mavx256-split-unaligned-load:          x86 Options.        (line 1452)
64776* mavx256-split-unaligned-store:         x86 Options.        (line 1452)
64777* mavx5124fmaps:                         x86 Options.        (line  912)
64778* mavx5124vnniw:                         x86 Options.        (line  915)
64779* mavx512bf16:                           x86 Options.        (line  898)
64780* mavx512bitalg:                         x86 Options.        (line  904)
64781* mavx512bw:                             x86 Options.        (line  854)
64782* mavx512cd:                             x86 Options.        (line  852)
64783* mavx512dq:                             x86 Options.        (line  855)
64784* mavx512er:                             x86 Options.        (line  851)
64785* mavx512f:                              x86 Options.        (line  849)
64786* mavx512fp16:                           x86 Options.        (line  899)
64787* mavx512ifma:                           x86 Options.        (line  856)
64788* mavx512pf:                             x86 Options.        (line  850)
64789* mavx512vbmi:                           x86 Options.        (line  857)
64790* mavx512vbmi2:                          x86 Options.        (line  897)
64791* mavx512vl:                             x86 Options.        (line  853)
64792* mavx512vnni:                           x86 Options.        (line  913)
64793* mavx512vp2intersect:                   x86 Options.        (line  911)
64794* mavx512vpopcntdq:                      x86 Options.        (line  910)
64795* mavxvnni:                              x86 Options.        (line  914)
64796* max-vect-align:                        Adapteva Epiphany Options.
64797                                                             (line  119)
64798* mb:                                    SH Options.         (line  126)
64799* mbackchain:                            S/390 and zSeries Options.
64800                                                             (line   35)
64801* mbarrel-shift-enabled:                 LM32 Options.       (line    9)
64802* mbarrel-shifter:                       ARC Options.        (line   10)
64803* mbarrel_shifter:                       ARC Options.        (line  606)
64804* mbase-addresses:                       MMIX Options.       (line   53)
64805* mbased=:                               MeP Options.        (line   20)
64806* mbbit-peephole:                        ARC Options.        (line  441)
64807* mbe8:                                  ARM Options.        (line   72)
64808* mbig:                                  RS/6000 and PowerPC Options.
64809                                                             (line  440)
64810* mbig-endian:                           AArch64 Options.    (line   20)
64811* mbig-endian <1>:                       ARC Options.        (line  589)
64812* mbig-endian <2>:                       ARM Options.        (line   67)
64813* mbig-endian <3>:                       C6X Options.        (line   13)
64814* mbig-endian <4>:                       C-SKY Options.      (line   28)
64815* mbig-endian <5>:                       eBPF Options.       (line   22)
64816* mbig-endian <6>:                       IA-64 Options.      (line    9)
64817* mbig-endian <7>:                       MCore Options.      (line   39)
64818* mbig-endian <8>:                       MicroBlaze Options. (line   56)
64819* mbig-endian <9>:                       NDS32 Options.      (line    9)
64820* mbig-endian <10>:                      RISC-V Options.     (line  174)
64821* mbig-endian <11>:                      RS/6000 and PowerPC Options.
64822                                                             (line  440)
64823* mbig-endian <12>:                      TILE-Gx Options.    (line   29)
64824* mbig-endian-data:                      RX Options.         (line   42)
64825* mbig-switch:                           V850 Options.       (line  176)
64826* mbigtable:                             SH Options.         (line  141)
64827* mbionic:                               GNU/Linux Options.  (line   22)
64828* mbit-align:                            RS/6000 and PowerPC Options.
64829                                                             (line  392)
64830* mbit-ops:                              CR16 Options.       (line   25)
64831* mbitfield:                             M680x0 Options.     (line  232)
64832* mbitops:                               MeP Options.        (line   26)
64833* mbitops <1>:                           SH Options.         (line  145)
64834* mblock-compare-inline-limit:           RS/6000 and PowerPC Options.
64835                                                             (line  694)
64836* mblock-compare-inline-loop-limit:      RS/6000 and PowerPC Options.
64837                                                             (line  700)
64838* mblock-move-inline-limit:              RS/6000 and PowerPC Options.
64839                                                             (line  688)
64840* mbmi:                                  x86 Options.        (line  883)
64841* mbmi2:                                 x86 Options.        (line  884)
64842* mboard:                                OpenRISC Options.   (line    9)
64843* mbranch-cost:                          Adapteva Epiphany Options.
64844                                                             (line   18)
64845* mbranch-cost <1>:                      AVR Options.        (line  185)
64846* mbranch-cost <2>:                      MIPS Options.       (line  791)
64847* mbranch-cost <3>:                      RISC-V Options.     (line    9)
64848* mbranch-cost=:                         C-SKY Options.      (line  159)
64849* mbranch-cost=NUM:                      SH Options.         (line  334)
64850* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
64851* mbranch-index:                         ARC Options.        (line  329)
64852* mbranch-likely:                        MIPS Options.       (line  798)
64853* mbranch-predict:                       MMIX Options.       (line   48)
64854* mbranch-protection:                    AArch64 Options.    (line  288)
64855* mbss-plt:                              RS/6000 and PowerPC Options.
64856                                                             (line  161)
64857* mbuild-constants:                      DEC Alpha Options.  (line  141)
64858* mbwx:                                  DEC Alpha Options.  (line  163)
64859* mbypass-cache:                         Nios II Options.    (line  103)
64860* mc68000:                               M680x0 Options.     (line   94)
64861* mc68020:                               M680x0 Options.     (line  108)
64862* mc=:                                   MeP Options.        (line   31)
64863* mcache:                                C-SKY Options.      (line   93)
64864* mcache-block-size:                     NDS32 Options.      (line   60)
64865* mcache-volatile:                       Nios II Options.    (line  109)
64866* mcall-eabi:                            RS/6000 and PowerPC Options.
64867                                                             (line  515)
64868* mcall-freebsd:                         RS/6000 and PowerPC Options.
64869                                                             (line  529)
64870* mcall-linux:                           RS/6000 and PowerPC Options.
64871                                                             (line  525)
64872* mcall-ms2sysv-xlogues:                 x86 Options.        (line 1157)
64873* mcall-netbsd:                          RS/6000 and PowerPC Options.
64874                                                             (line  533)
64875* mcall-netbsd <1>:                      RS/6000 and PowerPC Options.
64876                                                             (line  537)
64877* mcall-prologues:                       AVR Options.        (line  190)
64878* mcall-sysv:                            RS/6000 and PowerPC Options.
64879                                                             (line  507)
64880* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
64881                                                             (line  515)
64882* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
64883                                                             (line  518)
64884* mcallee-super-interworking:            ARM Options.        (line  853)
64885* mcaller-copies:                        HPPA Options.       (line   23)
64886* mcaller-super-interworking:            ARM Options.        (line  860)
64887* mcallgraph-data:                       MCore Options.      (line   31)
64888* mcase-vector-pcrel:                    ARC Options.        (line  450)
64889* mcbcond:                               SPARC Options.      (line  260)
64890* mcbranch-force-delay-slot:             SH Options.         (line  349)
64891* mcc-init:                              CRIS Options.       (line   41)
64892* mccrt:                                 C-SKY Options.      (line  155)
64893* mcfv4e:                                M680x0 Options.     (line  170)
64894* mcheck-zero-division:                  MIPS Options.       (line  570)
64895* mcix:                                  DEC Alpha Options.  (line  163)
64896* mcld:                                  x86 Options.        (line  975)
64897* mcldemote:                             x86 Options.        (line  916)
64898* mclear-hwcap:                          Solaris 2 Options.  (line    9)
64899* mclflushopt:                           x86 Options.        (line  861)
64900* mclip:                                 MeP Options.        (line   35)
64901* mclwb:                                 x86 Options.        (line  862)
64902* mclzero:                               x86 Options.        (line  895)
64903* mcmodel:                               NDS32 Options.      (line   67)
64904* mcmodel <1>:                           SPARC Options.      (line  320)
64905* mcmodel=kernel:                        x86 Options.        (line 1576)
64906* mcmodel=large:                         AArch64 Options.    (line   45)
64907* mcmodel=large <1>:                     OpenRISC Options.   (line   77)
64908* mcmodel=large <2>:                     RS/6000 and PowerPC Options.
64909                                                             (line  131)
64910* mcmodel=large <3>:                     TILE-Gx Options.    (line   14)
64911* mcmodel=large <4>:                     x86 Options.        (line 1588)
64912* mcmodel=medany:                        RISC-V Options.     (line  142)
64913* mcmodel=medium:                        RS/6000 and PowerPC Options.
64914                                                             (line  126)
64915* mcmodel=medium <1>:                    x86 Options.        (line 1581)
64916* mcmodel=medlow:                        RISC-V Options.     (line  135)
64917* mcmodel=small:                         AArch64 Options.    (line   39)
64918* mcmodel=small <1>:                     OpenRISC Options.   (line   73)
64919* mcmodel=small <2>:                     RS/6000 and PowerPC Options.
64920                                                             (line  122)
64921* mcmodel=small <3>:                     TILE-Gx Options.    (line    9)
64922* mcmodel=small <4>:                     x86 Options.        (line 1570)
64923* mcmodel=tiny:                          AArch64 Options.    (line   34)
64924* mcmov:                                 NDS32 Options.      (line   21)
64925* mcmov <1>:                             OpenRISC Options.   (line   45)
64926* mcmove:                                Adapteva Epiphany Options.
64927                                                             (line   23)
64928* mcmpb:                                 RS/6000 and PowerPC Options.
64929                                                             (line   25)
64930* mcmse:                                 ARM Options.        (line  961)
64931* mco-re:                                eBPF Options.       (line   56)
64932* mcode-density:                         ARC Options.        (line  163)
64933* mcode-density-frame:                   ARC Options.        (line  511)
64934* mcode-readable:                        MIPS Options.       (line  530)
64935* mcode-region:                          MSP430 Options.     (line  150)
64936* mcompact-branches=always:              MIPS Options.       (line  810)
64937* mcompact-branches=never:               MIPS Options.       (line  810)
64938* mcompact-branches=optimal:             MIPS Options.       (line  810)
64939* mcompact-casesi:                       ARC Options.        (line  454)
64940* mcompat-align-parm:                    RS/6000 and PowerPC Options.
64941                                                             (line  899)
64942* mcompress:                             FT32 Options.       (line   26)
64943* mcond-exec:                            FRV Options.        (line  187)
64944* mcond-move:                            FRV Options.        (line  159)
64945* mconfig=:                              MeP Options.        (line   39)
64946* mconsole:                              x86 Windows Options.
64947                                                             (line    9)
64948* mconst-align:                          CRIS Options.       (line   54)
64949* mconst16:                              Xtensa Options.     (line   10)
64950* mconstant-gp:                          IA-64 Options.      (line   46)
64951* mconstpool:                            C-SKY Options.      (line  143)
64952* mcop:                                  MeP Options.        (line   48)
64953* mcop32:                                MeP Options.        (line   53)
64954* mcop64:                                MeP Options.        (line   56)
64955* mcorea:                                Blackfin Options.   (line  154)
64956* mcoreb:                                Blackfin Options.   (line  161)
64957* mcp:                                   C-SKY Options.      (line   90)
64958* mcpu:                                  AArch64 Options.    (line  235)
64959* mcpu <1>:                              ARC Options.        (line   18)
64960* mcpu <2>:                              ARM Options.        (line  622)
64961* mcpu <3>:                              CRIS Options.       (line   10)
64962* mcpu <4>:                              DEC Alpha Options.  (line  215)
64963* mcpu <5>:                              eBPF Options.       (line   38)
64964* mcpu <6>:                              FRV Options.        (line  258)
64965* mcpu <7>:                              M680x0 Options.     (line   28)
64966* mcpu <8>:                              picoChip Options.   (line    9)
64967* mcpu <9>:                              RISC-V Options.     (line   78)
64968* mcpu <10>:                             RL78 Options.       (line   32)
64969* mcpu <11>:                             RS/6000 and PowerPC Options.
64970                                                             (line   62)
64971* mcpu <12>:                             RX Options.         (line   30)
64972* mcpu <13>:                             SPARC Options.      (line  115)
64973* mcpu <14>:                             TILE-Gx Options.    (line   18)
64974* mcpu <15>:                             TILEPro Options.    (line    9)
64975* mcpu <16>:                             Visium Options.     (line   33)
64976* mcpu <17>:                             x86 Options.        (line  535)
64977* mcpu32:                                M680x0 Options.     (line  136)
64978* mcpu=:                                 Blackfin Options.   (line    7)
64979* mcpu= <1>:                             C-SKY Options.      (line   14)
64980* mcpu= <2>:                             M32C Options.       (line    7)
64981* mcpu= <3>:                             MicroBlaze Options. (line   20)
64982* mcpu= <4>:                             MSP430 Options.     (line   72)
64983* mcr16c:                                CR16 Options.       (line   14)
64984* mcr16cplus:                            CR16 Options.       (line   14)
64985* mcrc:                                  MIPS Options.       (line  416)
64986* mcrc32:                                x86 Options.        (line 1053)
64987* mcrypto:                               RS/6000 and PowerPC Options.
64988                                                             (line  178)
64989* mcsync-anomaly:                        Blackfin Options.   (line   57)
64990* mcsync-anomaly <1>:                    Blackfin Options.   (line   63)
64991* mctor-dtor:                            NDS32 Options.      (line   81)
64992* mcustom-fpu-cfg:                       Nios II Options.    (line  259)
64993* mcustom-INSN:                          Nios II Options.    (line  139)
64994* mcx16:                                 x86 Options.        (line 1026)
64995* MD:                                    Preprocessor Options.
64996                                                             (line  172)
64997* mdalign:                               SH Options.         (line  132)
64998* mdata-align:                           CRIS Options.       (line   54)
64999* mdata-model:                           CR16 Options.       (line   28)
65000* mdata-region:                          MSP430 Options.     (line  150)
65001* mdc:                                   MeP Options.        (line   62)
65002* mdebug:                                M32R/D Options.     (line   69)
65003* mdebug <1>:                            S/390 and zSeries Options.
65004                                                             (line  144)
65005* mdebug <2>:                            Visium Options.     (line    7)
65006* mdebug-main=PREFIX:                    VMS Options.        (line   13)
65007* mdec-asm:                              PDP-11 Options.     (line   46)
65008* mdirect-extern-access:                 x86 Options.        (line 1608)
65009* mdisable-callt:                        V850 Options.       (line   92)
65010* mdisable-fpregs:                       HPPA Options.       (line   34)
65011* mdisable-indexing:                     HPPA Options.       (line   40)
65012* mdiv:                                  C-SKY Options.      (line  109)
65013* mdiv <1>:                              M680x0 Options.     (line  207)
65014* mdiv <2>:                              MCore Options.      (line   15)
65015* mdiv <3>:                              MeP Options.        (line   65)
65016* mdiv <4>:                              RISC-V Options.     (line   49)
65017* mdiv-rem:                              ARC Options.        (line  160)
65018* mdiv=STRATEGY:                         SH Options.         (line  284)
65019* mdivide-breaks:                        MIPS Options.       (line  576)
65020* mdivide-enabled:                       LM32 Options.       (line   12)
65021* mdivide-traps:                         MIPS Options.       (line  576)
65022* mdivsi3_libfunc=NAME:                  SH Options.         (line  320)
65023* mdll:                                  x86 Windows Options.
65024                                                             (line   16)
65025* mdlmzb:                                RS/6000 and PowerPC Options.
65026                                                             (line  385)
65027* mdmx:                                  MIPS Options.       (line  376)
65028* mdouble:                               AVR Options.        (line  195)
65029* mdouble <1>:                           FRV Options.        (line   48)
65030* mdouble-float:                         C-SKY Options.      (line   58)
65031* mdouble-float <1>:                     MIPS Options.       (line  288)
65032* mdouble-float <2>:                     OpenRISC Options.   (line   33)
65033* mdpfp:                                 ARC Options.        (line   99)
65034* mdpfp-compact:                         ARC Options.        (line  100)
65035* mdpfp-fast:                            ARC Options.        (line  104)
65036* mdpfp_compact:                         ARC Options.        (line  609)
65037* mdpfp_fast:                            ARC Options.        (line  612)
65038* mdsp:                                  C-SKY Options.      (line  102)
65039* mdsp <1>:                              MIPS Options.       (line  353)
65040* mdsp-packa:                            ARC Options.        (line  335)
65041* mdspr2:                                MIPS Options.       (line  359)
65042* mdsp_packa:                            ARC Options.        (line  615)
65043* mdump-tune-features:                   x86 Options.        (line  957)
65044* mdvbf:                                 ARC Options.        (line  340)
65045* mdwarf2-asm:                           IA-64 Options.      (line   94)
65046* mdword:                                FRV Options.        (line   40)
65047* mdword <1>:                            FRV Options.        (line   44)
65048* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
65049                                                             (line  445)
65050* mea:                                   ARC Options.        (line  112)
65051* mEA:                                   ARC Options.        (line  618)
65052* meabi:                                 RS/6000 and PowerPC Options.
65053                                                             (line  633)
65054* mearly-cbranchsi:                      ARC Options.        (line  476)
65055* mearly-stop-bits:                      IA-64 Options.      (line  100)
65056* meb:                                   MeP Options.        (line   68)
65057* meb <1>:                               Moxie Options.      (line    7)
65058* meb <2>:                               Nios II Options.    (line   90)
65059* meb <3>:                               Score Options.      (line    9)
65060* medsp:                                 C-SKY Options.      (line  103)
65061* mel:                                   MeP Options.        (line   71)
65062* mel <1>:                               Moxie Options.      (line   11)
65063* mel <2>:                               Nios II Options.    (line   90)
65064* mel <3>:                               Score Options.      (line   12)
65065* melf:                                  CRIS Options.       (line   79)
65066* melf <1>:                              MMIX Options.       (line   43)
65067* melrw:                                 C-SKY Options.      (line   76)
65068* memb:                                  RS/6000 and PowerPC Options.
65069                                                             (line  628)
65070* membedded-data:                        MIPS Options.       (line  517)
65071* memregs=:                              M32C Options.       (line   21)
65072* menqcmd:                               x86 Options.        (line  907)
65073* mep:                                   V850 Options.       (line   16)
65074* mepsilon:                              MMIX Options.       (line   15)
65075* mesa:                                  S/390 and zSeries Options.
65076                                                             (line   94)
65077* metrax100:                             CRIS Options.       (line   26)
65078* metrax4:                               CRIS Options.       (line   26)
65079* meva:                                  MIPS Options.       (line  403)
65080* mexpand-adddi:                         ARC Options.        (line  479)
65081* mexplicit-relocs:                      DEC Alpha Options.  (line  176)
65082* mexplicit-relocs <1>:                  MIPS Options.       (line  561)
65083* mexr:                                  H8/300 Options.     (line   28)
65084* mexr <1>:                              H8/300 Options.     (line   33)
65085* mext-perf:                             NDS32 Options.      (line   27)
65086* mext-perf2:                            NDS32 Options.      (line   33)
65087* mext-string:                           NDS32 Options.      (line   39)
65088* mextern-sdata:                         MIPS Options.       (line  480)
65089* MF:                                    Preprocessor Options.
65090                                                             (line  111)
65091* mf16c:                                 x86 Options.        (line  866)
65092* mfancy-math-387:                       x86 Options.        (line  630)
65093* mfast-fp:                              Blackfin Options.   (line  130)
65094* mfast-indirect-calls:                  HPPA Options.       (line   52)
65095* mfast-sw-div:                          Nios II Options.    (line  115)
65096* mfaster-structs:                       SPARC Options.      (line   91)
65097* mfdiv:                                 RISC-V Options.     (line   42)
65098* mfdivdu:                               C-SKY Options.      (line   64)
65099* mfdpic:                                ARM Options.        (line  984)
65100* mfdpic <1>:                            FRV Options.        (line   72)
65101* mfentry:                               x86 Options.        (line 1391)
65102* mfentry-name:                          x86 Options.        (line 1422)
65103* mfentry-section:                       x86 Options.        (line 1426)
65104* mfix:                                  DEC Alpha Options.  (line  163)
65105* mfix-24k:                              MIPS Options.       (line  647)
65106* mfix-and-continue:                     Darwin Options.     (line  104)
65107* mfix-at697f:                           SPARC Options.      (line  294)
65108* mfix-cmse-cve-2021-35465:              ARM Options.        (line  967)
65109* mfix-cortex-a53-835769:                AArch64 Options.    (line   90)
65110* mfix-cortex-a53-843419:                AArch64 Options.    (line   97)
65111* mfix-cortex-m3-ldrd:                   ARM Options.        (line  894)
65112* mfix-gr712rc:                          SPARC Options.      (line  307)
65113* mfix-r10000:                           MIPS Options.       (line  669)
65114* mfix-r4000:                            MIPS Options.       (line  653)
65115* mfix-r4400:                            MIPS Options.       (line  663)
65116* mfix-r5900:                            MIPS Options.       (line  680)
65117* mfix-rm7000:                           MIPS Options.       (line  690)
65118* mfix-sb1:                              MIPS Options.       (line  715)
65119* mfix-ut699:                            SPARC Options.      (line  299)
65120* mfix-ut700:                            SPARC Options.      (line  303)
65121* mfix-vr4120:                           MIPS Options.       (line  695)
65122* mfix-vr4130:                           MIPS Options.       (line  708)
65123* mfixed-cc:                             FRV Options.        (line   35)
65124* mfixed-range:                          HPPA Options.       (line   59)
65125* mfixed-range <1>:                      IA-64 Options.      (line  105)
65126* mfixed-range <2>:                      SH Options.         (line  327)
65127* mflat:                                 SPARC Options.      (line   22)
65128* mflip-mips16:                          MIPS Options.       (line  128)
65129* mflip-thumb:                           ARM Options.        (line  836)
65130* mfloat-abi:                            ARM Options.        (line   41)
65131* mfloat-abi <1>:                        C-SKY Options.      (line   35)
65132* mfloat-ieee:                           DEC Alpha Options.  (line  171)
65133* mfloat-vax:                            DEC Alpha Options.  (line  171)
65134* mfloat128:                             RS/6000 and PowerPC Options.
65135                                                             (line  215)
65136* mfloat128-hardware:                    RS/6000 and PowerPC Options.
65137                                                             (line  236)
65138* mflush-func:                           MIPS Options.       (line  782)
65139* mflush-func=NAME:                      M32R/D Options.     (line   93)
65140* mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
65141* mfma:                                  x86 Options.        (line  867)
65142* mfma4:                                 x86 Options.        (line  870)
65143* mfmaf:                                 SPARC Options.      (line  267)
65144* mfmovd:                                SH Options.         (line  148)
65145* mforce-indirect-call:                  x86 Options.        (line 1146)
65146* mforce-no-pic:                         Xtensa Options.     (line   41)
65147* mfp-exceptions:                        MIPS Options.       (line  830)
65148* mfp-mode:                              Adapteva Epiphany Options.
65149                                                             (line   71)
65150* mfp-reg:                               DEC Alpha Options.  (line   25)
65151* mfp-ret-in-387:                        x86 Options.        (line  620)
65152* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
65153* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
65154* mfp16-format:                          ARM Options.        (line  730)
65155* mfp32:                                 MIPS Options.       (line  258)
65156* mfp64:                                 MIPS Options.       (line  261)
65157* mfpmath:                               Optimize Options.   (line 2316)
65158* mfpmath <1>:                           x86 Options.        (line  538)
65159* mfpr-32:                               FRV Options.        (line   15)
65160* mfpr-64:                               FRV Options.        (line   19)
65161* mfprnd:                                RS/6000 and PowerPC Options.
65162                                                             (line   25)
65163* mfpu:                                  ARC Options.        (line  231)
65164* mfpu <1>:                              ARM Options.        (line  702)
65165* mfpu <2>:                              LoongArch Options.  (line   54)
65166* mfpu <3>:                              PDP-11 Options.     (line    9)
65167* mfpu <4>:                              SPARC Options.      (line   34)
65168* mfpu <5>:                              Visium Options.     (line   19)
65169* mfpu=:                                 C-SKY Options.      (line   69)
65170* mfpxx:                                 MIPS Options.       (line  264)
65171* mfract-convert-truncate:               AVR Options.        (line  286)
65172* mframe-header-opt:                     MIPS Options.       (line  891)
65173* mfriz:                                 RS/6000 and PowerPC Options.
65174                                                             (line  870)
65175* mfsca:                                 SH Options.         (line  365)
65176* mfsgsbase:                             x86 Options.        (line  863)
65177* mfsmuld:                               SPARC Options.      (line  274)
65178* mfsrra:                                SH Options.         (line  374)
65179* mft32b:                                FT32 Options.       (line   23)
65180* mfull-regs:                            NDS32 Options.      (line   18)
65181* mfull-toc:                             RS/6000 and PowerPC Options.
65182                                                             (line  256)
65183* mfunction-return:                      x86 Options.        (line 1500)
65184* mfused-madd:                           IA-64 Options.      (line   88)
65185* mfused-madd <1>:                       MIPS Options.       (line  630)
65186* mfused-madd <2>:                       RS/6000 and PowerPC Options.
65187                                                             (line  369)
65188* mfused-madd <3>:                       S/390 and zSeries Options.
65189                                                             (line  183)
65190* mfused-madd <4>:                       SH Options.         (line  356)
65191* mfused-madd <5>:                       Xtensa Options.     (line   19)
65192* mfxsr:                                 x86 Options.        (line  886)
65193* MG:                                    Preprocessor Options.
65194                                                             (line  122)
65195* mg:                                    VAX Options.        (line   17)
65196* mg10:                                  RL78 Options.       (line   62)
65197* mg13:                                  RL78 Options.       (line   62)
65198* mg14:                                  RL78 Options.       (line   62)
65199* mgas:                                  HPPA Options.       (line   75)
65200* mgas-isr-prologues:                    AVR Options.        (line  203)
65201* mgcc-abi:                              V850 Options.       (line  148)
65202* mgeneral-regs-only:                    AArch64 Options.    (line   24)
65203* mgeneral-regs-only <1>:                ARM Options.        (line   57)
65204* mgeneral-regs-only <2>:                x86 Options.        (line 1470)
65205* mgfni:                                 x86 Options.        (line  900)
65206* mghs:                                  V850 Options.       (line  127)
65207* mginv:                                 MIPS Options.       (line  421)
65208* mglibc:                                GNU/Linux Options.  (line    9)
65209* mgnu:                                  VAX Options.        (line   13)
65210* mgnu-as:                               IA-64 Options.      (line   18)
65211* mgnu-asm:                              PDP-11 Options.     (line   49)
65212* mgnu-attribute:                        RS/6000 and PowerPC Options.
65213                                                             (line  587)
65214* mgnu-ld:                               HPPA Options.       (line  111)
65215* mgnu-ld <1>:                           IA-64 Options.      (line   23)
65216* mgomp:                                 Nvidia PTX Options. (line   76)
65217* mgp32:                                 MIPS Options.       (line  252)
65218* mgp64:                                 MIPS Options.       (line  255)
65219* mgpopt:                                MIPS Options.       (line  502)
65220* mgpopt <1>:                            Nios II Options.    (line   16)
65221* mgpr-32:                               FRV Options.        (line    7)
65222* mgpr-64:                               FRV Options.        (line   11)
65223* mgprel-ro:                             FRV Options.        (line   99)
65224* mgprel-sec:                            Nios II Options.    (line   65)
65225* mh:                                    H8/300 Options.     (line   14)
65226* mhal:                                  Nios II Options.    (line  332)
65227* mhalf-reg-file:                        Adapteva Epiphany Options.
65228                                                             (line    9)
65229* mhard-dfp:                             RS/6000 and PowerPC Options.
65230                                                             (line   25)
65231* mhard-dfp <1>:                         S/390 and zSeries Options.
65232                                                             (line   20)
65233* mhard-div:                             OpenRISC Options.   (line   19)
65234* mhard-float:                           C-SKY Options.      (line   51)
65235* mhard-float <1>:                       FRV Options.        (line   23)
65236* mhard-float <2>:                       M680x0 Options.     (line  195)
65237* mhard-float <3>:                       MicroBlaze Options. (line   10)
65238* mhard-float <4>:                       MIPS Options.       (line  267)
65239* mhard-float <5>:                       OpenRISC Options.   (line   29)
65240* mhard-float <6>:                       RS/6000 and PowerPC Options.
65241                                                             (line  333)
65242* mhard-float <7>:                       S/390 and zSeries Options.
65243                                                             (line   11)
65244* mhard-float <8>:                       SPARC Options.      (line   34)
65245* mhard-float <9>:                       V850 Options.       (line  113)
65246* mhard-float <10>:                      Visium Options.     (line   19)
65247* mhard-float <11>:                      x86 Options.        (line  603)
65248* mhard-mul:                             OpenRISC Options.   (line   24)
65249* mhard-quad-float:                      SPARC Options.      (line   55)
65250* mharden-sls:                           AArch64 Options.    (line  301)
65251* mharden-sls <1>:                       x86 Options.        (line 1522)
65252* mhardlit:                              MCore Options.      (line   10)
65253* mhigh-registers:                       C-SKY Options.      (line  120)
65254* mhle:                                  x86 Options.        (line  892)
65255* mhotpatch:                             S/390 and zSeries Options.
65256                                                             (line  218)
65257* mhp-ld:                                HPPA Options.       (line  123)
65258* mhreset:                               x86 Options.        (line  921)
65259* mhtm:                                  RS/6000 and PowerPC Options.
65260                                                             (line  184)
65261* mhtm <1>:                              S/390 and zSeries Options.
65262                                                             (line  104)
65263* mhw-div:                               Nios II Options.    (line  124)
65264* mhw-mul:                               Nios II Options.    (line  124)
65265* mhw-mulx:                              Nios II Options.    (line  124)
65266* mhwmult=:                              MSP430 Options.     (line   93)
65267* miamcu:                                x86 Options.        (line 1542)
65268* micplb:                                Blackfin Options.   (line  175)
65269* mid-shared-library:                    Blackfin Options.   (line   78)
65270* mid-shared-library <1>:                Blackfin Options.   (line   85)
65271* mieee:                                 DEC Alpha Options.  (line   39)
65272* mieee <1>:                             SH Options.         (line  165)
65273* mieee-conformant:                      DEC Alpha Options.  (line  134)
65274* mieee-fp:                              x86 Options.        (line  597)
65275* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
65276* milp32:                                IA-64 Options.      (line  121)
65277* mimadd:                                MIPS Options.       (line  623)
65278* mimpure-text:                          Solaris 2 Options.  (line   15)
65279* mincoming-stack-boundary:              x86 Options.        (line  813)
65280* mindexed-loads:                        ARC Options.        (line  483)
65281* mindirect-branch:                      x86 Options.        (line 1481)
65282* mindirect-branch-cs-prefix:            x86 Options.        (line 1529)
65283* mindirect-branch-register:             x86 Options.        (line 1519)
65284* minline-all-stringops:                 x86 Options.        (line 1322)
65285* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
65286* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
65287* minline-ic_invalidate:                 SH Options.         (line  174)
65288* minline-int-divide:                    IA-64 Options.      (line   73)
65289* minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
65290* minline-int-divide-min-latency:        IA-64 Options.      (line   65)
65291* minline-plt:                           Blackfin Options.   (line  135)
65292* minline-plt <1>:                       FRV Options.        (line   81)
65293* minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
65294* minline-sqrt-min-latency:              IA-64 Options.      (line   76)
65295* minline-stringops-dynamically:         x86 Options.        (line 1330)
65296* minrt:                                 MSP430 Options.     (line  115)
65297* minrt <1>:                             PRU Options.        (line    9)
65298* minsert-sched-nops:                    RS/6000 and PowerPC Options.
65299                                                             (line  485)
65300* minstrument-return:                    x86 Options.        (line 1410)
65301* mint-register:                         RX Options.         (line  100)
65302* mint16:                                PDP-11 Options.     (line   33)
65303* mint32:                                CR16 Options.       (line   22)
65304* mint32 <1>:                            H8/300 Options.     (line   38)
65305* mint32 <2>:                            PDP-11 Options.     (line   37)
65306* mint8:                                 AVR Options.        (line  213)
65307* minterlink-compressed:                 MIPS Options.       (line  135)
65308* minterlink-mips16:                     MIPS Options.       (line  147)
65309* mio-volatile:                          MeP Options.        (line   74)
65310* mips1:                                 MIPS Options.       (line   80)
65311* mips16:                                MIPS Options.       (line  120)
65312* mips2:                                 MIPS Options.       (line   83)
65313* mips3:                                 MIPS Options.       (line   86)
65314* mips32:                                MIPS Options.       (line   92)
65315* mips32r3:                              MIPS Options.       (line   95)
65316* mips32r5:                              MIPS Options.       (line   98)
65317* mips32r6:                              MIPS Options.       (line  101)
65318* mips3d:                                MIPS Options.       (line  382)
65319* mips4:                                 MIPS Options.       (line   89)
65320* mips64:                                MIPS Options.       (line  104)
65321* mips64r2:                              MIPS Options.       (line  107)
65322* mips64r3:                              MIPS Options.       (line  110)
65323* mips64r5:                              MIPS Options.       (line  113)
65324* mips64r6:                              MIPS Options.       (line  116)
65325* mirq-ctrl-saved:                       ARC Options.        (line  296)
65326* misa:                                  Nvidia PTX Options. (line   22)
65327* misa-spec:                             RISC-V Options.     (line   54)
65328* misel:                                 RS/6000 and PowerPC Options.
65329                                                             (line  167)
65330* misize:                                ARC Options.        (line  379)
65331* misize <1>:                            SH Options.         (line  186)
65332* misr-vector-size:                      NDS32 Options.      (line   57)
65333* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
65334* mistack:                               C-SKY Options.      (line   81)
65335* mivc2:                                 MeP Options.        (line   59)
65336* mjli-always:                           ARC Options.        (line   14)
65337* mjmp32:                                eBPF Options.       (line   32)
65338* mjmpext:                               eBPF Options.       (line   28)
65339* mjsr:                                  RX Options.         (line  169)
65340* mjump-in-delay:                        HPPA Options.       (line   30)
65341* mkernel:                               Darwin Options.     (line   82)
65342* mkernel <1>:                           eBPF Options.       (line   13)
65343* mkl:                                   x86 Options.        (line  922)
65344* mknuthdiv:                             MMIX Options.       (line   32)
65345* ml:                                    MeP Options.        (line   78)
65346* ml <1>:                                SH Options.         (line  129)
65347* mlarge:                                MSP430 Options.     (line   82)
65348* mlarge-data:                           DEC Alpha Options.  (line  187)
65349* mlarge-data-threshold:                 x86 Options.        (line  702)
65350* mlarge-text:                           DEC Alpha Options.  (line  205)
65351* mleadz:                                MeP Options.        (line   81)
65352* mleaf-id-shared-library:               Blackfin Options.   (line   89)
65353* mleaf-id-shared-library <1>:           Blackfin Options.   (line   95)
65354* mlibfuncs:                             MMIX Options.       (line   10)
65355* mlibrary-pic:                          FRV Options.        (line  135)
65356* mlinked-fp:                            FRV Options.        (line  116)
65357* mlinker-opt:                           HPPA Options.       (line   85)
65358* mlittle:                               RS/6000 and PowerPC Options.
65359                                                             (line  434)
65360* mlittle-endian:                        AArch64 Options.    (line   30)
65361* mlittle-endian <1>:                    ARC Options.        (line  598)
65362* mlittle-endian <2>:                    ARM Options.        (line   63)
65363* mlittle-endian <3>:                    C6X Options.        (line   16)
65364* mlittle-endian <4>:                    C-SKY Options.      (line   30)
65365* mlittle-endian <5>:                    eBPF Options.       (line   25)
65366* mlittle-endian <6>:                    IA-64 Options.      (line   13)
65367* mlittle-endian <7>:                    MCore Options.      (line   39)
65368* mlittle-endian <8>:                    MicroBlaze Options. (line   59)
65369* mlittle-endian <9>:                    NDS32 Options.      (line   12)
65370* mlittle-endian <10>:                   RISC-V Options.     (line  178)
65371* mlittle-endian <11>:                   RS/6000 and PowerPC Options.
65372                                                             (line  434)
65373* mlittle-endian <12>:                   TILE-Gx Options.    (line   29)
65374* mlittle-endian-data:                   RX Options.         (line   42)
65375* mliw:                                  MN10300 Options.    (line   54)
65376* mll64:                                 ARC Options.        (line  167)
65377* mllsc:                                 MIPS Options.       (line  339)
65378* mload-store-pairs:                     MIPS Options.       (line  590)
65379* mlocal-sdata:                          MIPS Options.       (line  468)
65380* mlock:                                 ARC Options.        (line  345)
65381* mlong-calls:                           Adapteva Epiphany Options.
65382                                                             (line   55)
65383* mlong-calls <1>:                       ARC Options.        (line  404)
65384* mlong-calls <2>:                       ARM Options.        (line  757)
65385* mlong-calls <3>:                       Blackfin Options.   (line  118)
65386* mlong-calls <4>:                       FRV Options.        (line  122)
65387* mlong-calls <5>:                       HPPA Options.       (line  136)
65388* mlong-calls <6>:                       MIPS Options.       (line  609)
65389* mlong-calls <7>:                       V850 Options.       (line   10)
65390* mlong-double:                          AVR Options.        (line  195)
65391* mlong-double-128:                      S/390 and zSeries Options.
65392                                                             (line   29)
65393* mlong-double-128 <1>:                  x86 Options.        (line  681)
65394* mlong-double-64:                       S/390 and zSeries Options.
65395                                                             (line   29)
65396* mlong-double-64 <1>:                   x86 Options.        (line  681)
65397* mlong-double-80:                       x86 Options.        (line  681)
65398* mlong-jump-table-offsets:              M680x0 Options.     (line  340)
65399* mlong-jumps:                           V850 Options.       (line  108)
65400* mlong-load-store:                      HPPA Options.       (line   66)
65401* mlong32:                               MIPS Options.       (line  443)
65402* mlong64:                               MIPS Options.       (line  438)
65403* mlongcall:                             RS/6000 and PowerPC Options.
65404                                                             (line  728)
65405* mlongcalls:                            Xtensa Options.     (line   87)
65406* mloongson-ext:                         MIPS Options.       (line  430)
65407* mloongson-ext2:                        MIPS Options.       (line  434)
65408* mloongson-mmi:                         MIPS Options.       (line  425)
65409* mloop:                                 PRU Options.        (line   25)
65410* mloop <1>:                             V850 Options.       (line  121)
65411* mlow-precision-div:                    AArch64 Options.    (line  120)
65412* mlow-precision-recip-sqrt:             AArch64 Options.    (line  103)
65413* mlow-precision-sqrt:                   AArch64 Options.    (line  111)
65414* mlow64k:                               Blackfin Options.   (line   67)
65415* mlp64:                                 IA-64 Options.      (line  121)
65416* mlpc-width:                            ARC Options.        (line  313)
65417* mlra:                                  ARC Options.        (line  488)
65418* mlra <1>:                              FT32 Options.       (line   16)
65419* mlra <2>:                              PDP-11 Options.     (line   52)
65420* mlra <3>:                              SPARC Options.      (line  111)
65421* mlra <4>:                              VAX Options.        (line   22)
65422* mlra-priority-compact:                 ARC Options.        (line  496)
65423* mlra-priority-noncompact:              ARC Options.        (line  499)
65424* mlra-priority-none:                    ARC Options.        (line  493)
65425* mlwp:                                  x86 Options.        (line  877)
65426* mlxc1-sxc1:                            MIPS Options.       (line  901)
65427* mlzcnt:                                x86 Options.        (line  885)
65428* MM:                                    Preprocessor Options.
65429                                                             (line  102)
65430* mm:                                    MeP Options.        (line   84)
65431* mmac:                                  CR16 Options.       (line    9)
65432* mmac <1>:                              Score Options.      (line   21)
65433* mmac-24:                               ARC Options.        (line  354)
65434* mmac-d16:                              ARC Options.        (line  350)
65435* mmac_24:                               ARC Options.        (line  621)
65436* mmac_d16:                              ARC Options.        (line  624)
65437* mmad:                                  MIPS Options.       (line  618)
65438* mmadd4:                                MIPS Options.       (line  906)
65439* mmain-is-OS_task:                      AVR Options.        (line  219)
65440* mmainkernel:                           Nvidia PTX Options. (line   41)
65441* mmalloc64:                             VMS Options.        (line   17)
65442* mmanual-endbr:                         x86 Options.        (line 1151)
65443* mmax:                                  DEC Alpha Options.  (line  163)
65444* mmax-constant-size:                    RX Options.         (line   82)
65445* mmax-inline-shift=:                    MSP430 Options.     (line  134)
65446* mmax-stack-frame:                      CRIS Options.       (line   22)
65447* mmcount-ra-address:                    MIPS Options.       (line  878)
65448* mmcu:                                  AVR Options.        (line    9)
65449* mmcu <1>:                              MIPS Options.       (line  399)
65450* mmcu <2>:                              PRU Options.        (line   17)
65451* mmcu=:                                 MSP430 Options.     (line   14)
65452* MMD:                                   Preprocessor Options.
65453                                                             (line  188)
65454* mmedia:                                FRV Options.        (line   56)
65455* mmedium-calls:                         ARC Options.        (line  408)
65456* mmemcpy:                               MicroBlaze Options. (line   13)
65457* mmemcpy <1>:                           MIPS Options.       (line  603)
65458* mmemcpy-strategy=STRATEGY:             x86 Options.        (line 1352)
65459* mmemory-latency:                       DEC Alpha Options.  (line  268)
65460* mmemory-model:                         SPARC Options.      (line  348)
65461* mmemset-strategy=STRATEGY:             x86 Options.        (line 1364)
65462* mmfcrf:                                RS/6000 and PowerPC Options.
65463                                                             (line   25)
65464* mmicromips:                            MIPS Options.       (line  387)
65465* mmillicode:                            ARC Options.        (line  502)
65466* mminimal-toc:                          RS/6000 and PowerPC Options.
65467                                                             (line  256)
65468* mminmax:                               MeP Options.        (line   87)
65469* mmixed-code:                           ARC Options.        (line  516)
65470* mmma:                                  RS/6000 and PowerPC Options.
65471                                                             (line  944)
65472* mmmx:                                  x86 Options.        (line  838)
65473* mmodel=large:                          M32R/D Options.     (line   33)
65474* mmodel=medium:                         M32R/D Options.     (line   27)
65475* mmodel=small:                          M32R/D Options.     (line   18)
65476* mmovbe:                                x86 Options.        (line 1045)
65477* mmovdir64b:                            x86 Options.        (line  906)
65478* mmovdiri:                              x86 Options.        (line  905)
65479* mmove-max:                             x86 Options.        (line 1003)
65480* mmp:                                   C-SKY Options.      (line   87)
65481* mmpy:                                  ARC Options.        (line  117)
65482* mmpy-option:                           ARC Options.        (line  173)
65483* mms-bitfields:                         x86 Options.        (line 1197)
65484* mmt:                                   MIPS Options.       (line  395)
65485* mmul:                                  RL78 Options.       (line   15)
65486* mmul-bug-workaround:                   CRIS Options.       (line   31)
65487* mmul.x:                                Moxie Options.      (line   14)
65488* mmul32x16:                             ARC Options.        (line  121)
65489* mmul64:                                ARC Options.        (line  124)
65490* mmuladd:                               FRV Options.        (line   64)
65491* mmulhw:                                RS/6000 and PowerPC Options.
65492                                                             (line  378)
65493* mmult:                                 MeP Options.        (line   90)
65494* mmult-bug:                             MN10300 Options.    (line    9)
65495* mmultcost:                             ARC Options.        (line  576)
65496* mmulti-cond-exec:                      FRV Options.        (line  215)
65497* mmulticore:                            Blackfin Options.   (line  139)
65498* mmultiple:                             RS/6000 and PowerPC Options.
65499                                                             (line  339)
65500* mmultiple-stld:                        C-SKY Options.      (line  137)
65501* mmusl:                                 GNU/Linux Options.  (line   18)
65502* mmvcle:                                S/390 and zSeries Options.
65503                                                             (line  138)
65504* mmvme:                                 RS/6000 and PowerPC Options.
65505                                                             (line  609)
65506* mmwait:                                x86 Options.        (line 1059)
65507* mmwaitx:                               x86 Options.        (line  894)
65508* mn:                                    H8/300 Options.     (line   20)
65509* mn-flash:                              AVR Options.        (line  224)
65510* mnan=2008:                             MIPS Options.       (line  320)
65511* mnan=legacy:                           MIPS Options.       (line  320)
65512* mneeded:                               x86 Options.        (line 1603)
65513* mneon-for-64bits:                      ARM Options.        (line  923)
65514* mnested-cond-exec:                     FRV Options.        (line  230)
65515* mnewlib:                               OpenRISC Options.   (line   13)
65516* mnhwloop:                              Score Options.      (line   15)
65517* mno-16-bit:                            NDS32 Options.      (line   54)
65518* mno-4byte-functions:                   MCore Options.      (line   27)
65519* mno-8byte-align:                       V850 Options.       (line  170)
65520* mno-abicalls:                          MIPS Options.       (line  192)
65521* mno-ac0:                               PDP-11 Options.     (line   20)
65522* mno-align-double:                      x86 Options.        (line  640)
65523* mno-align-int:                         M680x0 Options.     (line  262)
65524* mno-align-loops:                       M32R/D Options.     (line   76)
65525* mno-align-stringops:                   x86 Options.        (line 1317)
65526* mno-allow-string-insns:                RX Options.         (line  150)
65527* mno-altivec:                           RS/6000 and PowerPC Options.
65528                                                             (line  137)
65529* mno-am33:                              MN10300 Options.    (line   20)
65530* mno-app-regs:                          SPARC Options.      (line   10)
65531* mno-app-regs <1>:                      V850 Options.       (line  185)
65532* mno-as100-syntax:                      RX Options.         (line   76)
65533* mno-auto-litpools:                     Xtensa Options.     (line   60)
65534* mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
65535                                                             (line  360)
65536* mno-backchain:                         S/390 and zSeries Options.
65537                                                             (line   35)
65538* mno-base-addresses:                    MMIX Options.       (line   53)
65539* mno-bit-align:                         RS/6000 and PowerPC Options.
65540                                                             (line  392)
65541* mno-bitfield:                          M680x0 Options.     (line  228)
65542* mno-branch-likely:                     MIPS Options.       (line  798)
65543* mno-branch-predict:                    MMIX Options.       (line   48)
65544* mno-brcc:                              ARC Options.        (line  444)
65545* mno-bwx:                               DEC Alpha Options.  (line  163)
65546* mno-bypass-cache:                      Nios II Options.    (line  103)
65547* mno-cache-volatile:                    Nios II Options.    (line  109)
65548* mno-call-ms2sysv-xlogues:              x86 Options.        (line 1157)
65549* mno-callgraph-data:                    MCore Options.      (line   31)
65550* mno-cbcond:                            SPARC Options.      (line  260)
65551* mno-check-zero-division:               MIPS Options.       (line  570)
65552* mno-cix:                               DEC Alpha Options.  (line  163)
65553* mno-clearbss:                          MicroBlaze Options. (line   16)
65554* mno-cmov:                              NDS32 Options.      (line   24)
65555* mno-cmpb:                              RS/6000 and PowerPC Options.
65556                                                             (line   25)
65557* mno-co-re:                             eBPF Options.       (line   60)
65558* mno-cond-exec:                         ARC Options.        (line  458)
65559* mno-cond-exec <1>:                     FRV Options.        (line  194)
65560* mno-cond-move:                         FRV Options.        (line  166)
65561* mno-const-align:                       CRIS Options.       (line   54)
65562* mno-const16:                           Xtensa Options.     (line   10)
65563* mno-crc:                               MIPS Options.       (line  416)
65564* mno-crt0:                              MN10300 Options.    (line   43)
65565* mno-crt0 <1>:                          Moxie Options.      (line   18)
65566* mno-crypto:                            RS/6000 and PowerPC Options.
65567                                                             (line  178)
65568* mno-csync-anomaly:                     Blackfin Options.   (line   63)
65569* mno-custom-INSN:                       Nios II Options.    (line  139)
65570* mno-data-align:                        CRIS Options.       (line   54)
65571* mno-debug:                             S/390 and zSeries Options.
65572                                                             (line  144)
65573* mno-default:                           x86 Options.        (line  971)
65574* mno-direct-extern-access:              x86 Options.        (line 1608)
65575* mno-direct-extern-access <1>:          x86 Function Attributes.
65576                                                             (line  712)
65577* mno-disable-callt:                     V850 Options.       (line   92)
65578* mno-div:                               M680x0 Options.     (line  207)
65579* mno-div <1>:                           MCore Options.      (line   15)
65580* mno-dlmzb:                             RS/6000 and PowerPC Options.
65581                                                             (line  385)
65582* mno-double:                            FRV Options.        (line   52)
65583* mno-dpfp-lrsr:                         ARC Options.        (line  108)
65584* mno-dsp:                               MIPS Options.       (line  353)
65585* mno-dspr2:                             MIPS Options.       (line  359)
65586* mno-dwarf2-asm:                        IA-64 Options.      (line   94)
65587* mno-dword:                             FRV Options.        (line   44)
65588* mno-eabi:                              RS/6000 and PowerPC Options.
65589                                                             (line  633)
65590* mno-early-stop-bits:                   IA-64 Options.      (line  100)
65591* mno-eflags:                            FRV Options.        (line  155)
65592* mno-embedded-data:                     MIPS Options.       (line  517)
65593* mno-ep:                                V850 Options.       (line   16)
65594* mno-epsilon:                           MMIX Options.       (line   15)
65595* mno-eva:                               MIPS Options.       (line  403)
65596* mno-explicit-relocs:                   DEC Alpha Options.  (line  176)
65597* mno-explicit-relocs <1>:               MIPS Options.       (line  561)
65598* mno-exr:                               H8/300 Options.     (line   33)
65599* mno-ext-perf:                          NDS32 Options.      (line   30)
65600* mno-ext-perf2:                         NDS32 Options.      (line   36)
65601* mno-ext-string:                        NDS32 Options.      (line   42)
65602* mno-extern-sdata:                      MIPS Options.       (line  480)
65603* mno-fancy-math-387:                    x86 Options.        (line  630)
65604* mno-fast-sw-div:                       Nios II Options.    (line  115)
65605* mno-faster-structs:                    SPARC Options.      (line   91)
65606* mno-fdpic:                             ARM Options.        (line  984)
65607* mno-fix:                               DEC Alpha Options.  (line  163)
65608* mno-fix-24k:                           MIPS Options.       (line  647)
65609* mno-fix-cortex-a53-835769:             AArch64 Options.    (line   90)
65610* mno-fix-cortex-a53-843419:             AArch64 Options.    (line   97)
65611* mno-fix-r10000:                        MIPS Options.       (line  669)
65612* mno-fix-r4000:                         MIPS Options.       (line  653)
65613* mno-fix-r4400:                         MIPS Options.       (line  663)
65614* mno-flat:                              SPARC Options.      (line   22)
65615* mno-float:                             MIPS Options.       (line  274)
65616* mno-float128:                          RS/6000 and PowerPC Options.
65617                                                             (line  215)
65618* mno-float128-hardware:                 RS/6000 and PowerPC Options.
65619                                                             (line  236)
65620* mno-flush-func:                        M32R/D Options.     (line   98)
65621* mno-flush-trap:                        M32R/D Options.     (line   90)
65622* mno-fmaf:                              SPARC Options.      (line  267)
65623* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
65624                                                             (line  256)
65625* mno-fp-regs:                           DEC Alpha Options.  (line   25)
65626* mno-fp-ret-in-387:                     x86 Options.        (line  620)
65627* mno-fprnd:                             RS/6000 and PowerPC Options.
65628                                                             (line   25)
65629* mno-fpu:                               SPARC Options.      (line   39)
65630* mno-fpu <1>:                           Visium Options.     (line   24)
65631* mno-fsca:                              SH Options.         (line  365)
65632* mno-fsmuld:                            SPARC Options.      (line  274)
65633* mno-fsrra:                             SH Options.         (line  374)
65634* mno-fused-madd:                        IA-64 Options.      (line   88)
65635* mno-fused-madd <1>:                    MIPS Options.       (line  630)
65636* mno-fused-madd <2>:                    RS/6000 and PowerPC Options.
65637                                                             (line  369)
65638* mno-fused-madd <3>:                    S/390 and zSeries Options.
65639                                                             (line  183)
65640* mno-fused-madd <4>:                    SH Options.         (line  356)
65641* mno-fused-madd <5>:                    Xtensa Options.     (line   19)
65642* mno-ginv:                              MIPS Options.       (line  421)
65643* mno-gnu-as:                            IA-64 Options.      (line   18)
65644* mno-gnu-attribute:                     RS/6000 and PowerPC Options.
65645                                                             (line  587)
65646* mno-gnu-ld:                            IA-64 Options.      (line   23)
65647* mno-gpopt:                             MIPS Options.       (line  502)
65648* mno-gpopt <1>:                         Nios II Options.    (line   16)
65649* mno-hard-dfp:                          RS/6000 and PowerPC Options.
65650                                                             (line   25)
65651* mno-hard-dfp <1>:                      S/390 and zSeries Options.
65652                                                             (line   20)
65653* mno-hardlit:                           MCore Options.      (line   10)
65654* mno-htm:                               RS/6000 and PowerPC Options.
65655                                                             (line  184)
65656* mno-htm <1>:                           S/390 and zSeries Options.
65657                                                             (line  104)
65658* mno-hw-div:                            Nios II Options.    (line  124)
65659* mno-hw-mul:                            Nios II Options.    (line  124)
65660* mno-hw-mulx:                           Nios II Options.    (line  124)
65661* mno-id-shared-library:                 Blackfin Options.   (line   85)
65662* mno-ieee:                              SH Options.         (line  165)
65663* mno-ieee-fp:                           x86 Options.        (line  597)
65664* mno-imadd:                             MIPS Options.       (line  623)
65665* mno-inline-float-divide:               IA-64 Options.      (line   62)
65666* mno-inline-int-divide:                 IA-64 Options.      (line   73)
65667* mno-inline-sqrt:                       IA-64 Options.      (line   84)
65668* mno-int16:                             PDP-11 Options.     (line   37)
65669* mno-int32:                             PDP-11 Options.     (line   33)
65670* mno-interlink-compressed:              MIPS Options.       (line  135)
65671* mno-interlink-mips16:                  MIPS Options.       (line  147)
65672* mno-interrupts:                        AVR Options.        (line  227)
65673* mno-isel:                              RS/6000 and PowerPC Options.
65674                                                             (line  167)
65675* mno-jsr:                               RX Options.         (line  169)
65676* mno-knuthdiv:                          MMIX Options.       (line   32)
65677* mno-leaf-id-shared-library:            Blackfin Options.   (line   95)
65678* mno-libfuncs:                          MMIX Options.       (line   10)
65679* mno-liw:                               MN10300 Options.    (line   59)
65680* mno-llsc:                              MIPS Options.       (line  339)
65681* mno-load-store-pairs:                  MIPS Options.       (line  590)
65682* mno-local-sdata:                       MIPS Options.       (line  468)
65683* mno-long-calls:                        ARM Options.        (line  757)
65684* mno-long-calls <1>:                    Blackfin Options.   (line  118)
65685* mno-long-calls <2>:                    HPPA Options.       (line  136)
65686* mno-long-calls <3>:                    MIPS Options.       (line  609)
65687* mno-long-calls <4>:                    V850 Options.       (line   10)
65688* mno-long-jumps:                        V850 Options.       (line  108)
65689* mno-longcall:                          RS/6000 and PowerPC Options.
65690                                                             (line  728)
65691* mno-longcalls:                         Xtensa Options.     (line   87)
65692* mno-loongson-ext:                      MIPS Options.       (line  430)
65693* mno-loongson-ext2:                     MIPS Options.       (line  434)
65694* mno-loongson-mmi:                      MIPS Options.       (line  425)
65695* mno-low-precision-div:                 AArch64 Options.    (line  120)
65696* mno-low-precision-recip-sqrt:          AArch64 Options.    (line  103)
65697* mno-low-precision-sqrt:                AArch64 Options.    (line  111)
65698* mno-low64k:                            Blackfin Options.   (line   71)
65699* mno-lra:                               SPARC Options.      (line  111)
65700* mno-lra <1>:                           VAX Options.        (line   22)
65701* mno-lsim:                              FR30 Options.       (line   14)
65702* mno-lsim <1>:                          MCore Options.      (line   46)
65703* mno-mad:                               MIPS Options.       (line  618)
65704* mno-max:                               DEC Alpha Options.  (line  163)
65705* mno-mcount-ra-address:                 MIPS Options.       (line  878)
65706* mno-mcu:                               MIPS Options.       (line  399)
65707* mno-mdmx:                              MIPS Options.       (line  376)
65708* mno-media:                             FRV Options.        (line   60)
65709* mno-memcpy:                            MIPS Options.       (line  603)
65710* mno-mfcrf:                             RS/6000 and PowerPC Options.
65711                                                             (line   25)
65712* mno-mips16:                            MIPS Options.       (line  120)
65713* mno-mips3d:                            MIPS Options.       (line  382)
65714* mno-mma:                               RS/6000 and PowerPC Options.
65715                                                             (line  944)
65716* mno-mmicromips:                        MIPS Options.       (line  387)
65717* Mno-modules:                           Preprocessor Options.
65718                                                             (line  132)
65719* mno-mpy:                               ARC Options.        (line  117)
65720* mno-ms-bitfields:                      x86 Options.        (line 1197)
65721* mno-mt:                                MIPS Options.       (line  395)
65722* mno-mul-bug-workaround:                CRIS Options.       (line   31)
65723* mno-muladd:                            FRV Options.        (line   68)
65724* mno-mulhw:                             RS/6000 and PowerPC Options.
65725                                                             (line  378)
65726* mno-mult-bug:                          MN10300 Options.    (line   13)
65727* mno-multi-cond-exec:                   FRV Options.        (line  223)
65728* mno-multiple:                          RS/6000 and PowerPC Options.
65729                                                             (line  339)
65730* mno-mvcle:                             S/390 and zSeries Options.
65731                                                             (line  138)
65732* mno-nested-cond-exec:                  FRV Options.        (line  237)
65733* mno-odd-spreg:                         MIPS Options.       (line  293)
65734* mno-omit-leaf-frame-pointer:           AArch64 Options.    (line   58)
65735* mno-optimize-membar:                   FRV Options.        (line  249)
65736* mno-opts:                              MeP Options.        (line   93)
65737* mno-pack:                              FRV Options.        (line  151)
65738* mno-packed-stack:                      S/390 and zSeries Options.
65739                                                             (line   54)
65740* mno-paired-single:                     MIPS Options.       (line  370)
65741* mno-pc-relative-literal-loads:         AArch64 Options.    (line  274)
65742* mno-pcrel:                             RS/6000 and PowerPC Options.
65743                                                             (line  932)
65744* mno-pic:                               IA-64 Options.      (line   26)
65745* mno-pid:                               RX Options.         (line  117)
65746* mno-plt:                               MIPS Options.       (line  219)
65747* mno-pltseq:                            RS/6000 and PowerPC Options.
65748                                                             (line  765)
65749* mno-popc:                              SPARC Options.      (line  281)
65750* mno-popcntb:                           RS/6000 and PowerPC Options.
65751                                                             (line   25)
65752* mno-popcntd:                           RS/6000 and PowerPC Options.
65753                                                             (line   25)
65754* mno-postinc:                           Adapteva Epiphany Options.
65755                                                             (line  109)
65756* mno-postmodify:                        Adapteva Epiphany Options.
65757                                                             (line  109)
65758* mno-power8-fusion:                     RS/6000 and PowerPC Options.
65759                                                             (line  190)
65760* mno-power8-vector:                     RS/6000 and PowerPC Options.
65761                                                             (line  196)
65762* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
65763                                                             (line   25)
65764* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
65765                                                             (line   25)
65766* mno-powerpc64:                         RS/6000 and PowerPC Options.
65767                                                             (line   25)
65768* mno-prefixed:                          RS/6000 and PowerPC Options.
65769                                                             (line  938)
65770* mno-privileged:                        RS/6000 and PowerPC Options.
65771                                                             (line  955)
65772* mno-prolog-function:                   V850 Options.       (line   23)
65773* mno-prologue-epilogue:                 CRIS Options.       (line   70)
65774* mno-prototype:                         RS/6000 and PowerPC Options.
65775                                                             (line  593)
65776* mno-push-args:                         x86 Options.        (line 1174)
65777* mno-quad-memory:                       RS/6000 and PowerPC Options.
65778                                                             (line  203)
65779* mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
65780                                                             (line  209)
65781* mno-readonly-in-sdata:                 RS/6000 and PowerPC Options.
65782                                                             (line  684)
65783* mno-red-zone:                          x86 Options.        (line 1562)
65784* mno-register-names:                    IA-64 Options.      (line   37)
65785* mno-regnames:                          RS/6000 and PowerPC Options.
65786                                                             (line  722)
65787* mno-relax:                             PRU Options.        (line   21)
65788* mno-relax <1>:                         V850 Options.       (line  103)
65789* mno-relax-immediate:                   MCore Options.      (line   19)
65790* mno-relocatable:                       RS/6000 and PowerPC Options.
65791                                                             (line  408)
65792* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
65793                                                             (line  419)
65794* mno-renesas:                           SH Options.         (line  155)
65795* mno-rop-protect:                       RS/6000 and PowerPC Options.
65796                                                             (line  949)
65797* mno-round-nearest:                     Adapteva Epiphany Options.
65798                                                             (line   51)
65799* mno-save-mduc-in-interrupts:           RL78 Options.       (line   79)
65800* mno-scc:                               FRV Options.        (line  180)
65801* mno-sched-ar-data-spec:                IA-64 Options.      (line  135)
65802* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  157)
65803* mno-sched-br-data-spec:                IA-64 Options.      (line  128)
65804* mno-sched-br-in-data-spec:             IA-64 Options.      (line  150)
65805* mno-sched-control-spec:                IA-64 Options.      (line  142)
65806* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  185)
65807* mno-sched-in-control-spec:             IA-64 Options.      (line  164)
65808* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  178)
65809* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  171)
65810* mno-sched-prolog:                      ARM Options.        (line   32)
65811* mno-sdata:                             ARC Options.        (line  422)
65812* mno-sdata <1>:                         IA-64 Options.      (line   42)
65813* mno-sdata <2>:                         RS/6000 and PowerPC Options.
65814                                                             (line  679)
65815* mno-sep-data:                          Blackfin Options.   (line  113)
65816* mno-serialize-volatile:                Xtensa Options.     (line   35)
65817* mno-setlb:                             MN10300 Options.    (line   69)
65818* mno-short:                             M680x0 Options.     (line  223)
65819* mno-side-effects:                      CRIS Options.       (line   45)
65820* mno-sim:                               RX Options.         (line   71)
65821* mno-single-exit:                       MMIX Options.       (line   65)
65822* mno-slow-bytes:                        MCore Options.      (line   35)
65823* mno-small-exec:                        S/390 and zSeries Options.
65824                                                             (line   79)
65825* mno-smartmips:                         MIPS Options.       (line  366)
65826* mno-soft-cmpsf:                        Adapteva Epiphany Options.
65827                                                             (line   29)
65828* mno-soft-float:                        DEC Alpha Options.  (line   10)
65829* mno-space-regs:                        HPPA Options.       (line   45)
65830* mno-specld-anomaly:                    Blackfin Options.   (line   53)
65831* mno-split-addresses:                   MIPS Options.       (line  555)
65832* mno-split-lohi:                        Adapteva Epiphany Options.
65833                                                             (line  109)
65834* mno-stack-align:                       CRIS Options.       (line   54)
65835* mno-stack-bias:                        SPARC Options.      (line  372)
65836* mno-std-struct-return:                 SPARC Options.      (line  102)
65837* mno-strict-align:                      AArch64 Options.    (line   52)
65838* mno-strict-align <1>:                  M680x0 Options.     (line  281)
65839* mno-strict-align <2>:                  RS/6000 and PowerPC Options.
65840                                                             (line  403)
65841* mno-subxc:                             SPARC Options.      (line  288)
65842* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
65843                                                             (line  256)
65844* mno-sym32:                             MIPS Options.       (line  453)
65845* mno-target-align:                      Xtensa Options.     (line   74)
65846* mno-text-section-literals:             Xtensa Options.     (line   47)
65847* mno-tls-markers:                       RS/6000 and PowerPC Options.
65848                                                             (line  777)
65849* mno-toc:                               RS/6000 and PowerPC Options.
65850                                                             (line  428)
65851* mno-toplevel-symbols:                  MMIX Options.       (line   39)
65852* mno-tpf-trace:                         S/390 and zSeries Options.
65853                                                             (line  169)
65854* mno-tpf-trace-skip:                    S/390 and zSeries Options.
65855                                                             (line  175)
65856* mno-unaligned-access:                  ARM Options.        (line  910)
65857* mno-unaligned-access <1>:              MIPS Options.       (line  597)
65858* mno-unaligned-doubles:                 SPARC Options.      (line   73)
65859* mno-uninit-const-in-rodata:            MIPS Options.       (line  525)
65860* mno-update:                            RS/6000 and PowerPC Options.
65861                                                             (line  350)
65862* mno-user-mode:                         SPARC Options.      (line   85)
65863* mno-usermode:                          SH Options.         (line  274)
65864* mno-v3push:                            NDS32 Options.      (line   48)
65865* mno-v8plus:                            SPARC Options.      (line  214)
65866* mno-vect-double:                       Adapteva Epiphany Options.
65867                                                             (line  115)
65868* mno-virt:                              MIPS Options.       (line  407)
65869* mno-vis:                               SPARC Options.      (line  221)
65870* mno-vis2:                              SPARC Options.      (line  227)
65871* mno-vis3:                              SPARC Options.      (line  235)
65872* mno-vis4:                              SPARC Options.      (line  243)
65873* mno-vis4b:                             SPARC Options.      (line  251)
65874* mno-vliw-branch:                       FRV Options.        (line  208)
65875* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
65876* mno-volatile-cache:                    ARC Options.        (line  431)
65877* mno-vrsave:                            RS/6000 and PowerPC Options.
65878                                                             (line  153)
65879* mno-vsx:                               RS/6000 and PowerPC Options.
65880                                                             (line  172)
65881* mno-vx:                                S/390 and zSeries Options.
65882                                                             (line  112)
65883* mno-warn-devices-csv:                  MSP430 Options.     (line  168)
65884* mno-warn-mcu:                          MSP430 Options.     (line   65)
65885* mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
65886* mno-wide-bitfields:                    MCore Options.      (line   23)
65887* mno-xgot:                              M680x0 Options.     (line  313)
65888* mno-xgot <1>:                          MIPS Options.       (line  229)
65889* mno-xl-compat:                         RS/6000 and PowerPC Options.
65890                                                             (line  291)
65891* mno-xpa:                               MIPS Options.       (line  411)
65892* mno-zdcbranch:                         SH Options.         (line  341)
65893* mno-zero-extend:                       MMIX Options.       (line   26)
65894* mno-zvector:                           S/390 and zSeries Options.
65895                                                             (line  123)
65896* mnobitfield:                           M680x0 Options.     (line  228)
65897* mnodiv:                                FT32 Options.       (line   20)
65898* mnomacsave:                            SH Options.         (line  160)
65899* mnop-fun-dllimport:                    x86 Windows Options.
65900                                                             (line   22)
65901* mnop-mcount:                           x86 Options.        (line 1404)
65902* mnopm:                                 FT32 Options.       (line   29)
65903* mnops:                                 Adapteva Epiphany Options.
65904                                                             (line   26)
65905* mnorm:                                 ARC Options.        (line  128)
65906* modd-spreg:                            MIPS Options.       (line  293)
65907* momit-leaf-frame-pointer:              AArch64 Options.    (line   58)
65908* momit-leaf-frame-pointer <1>:          Blackfin Options.   (line   43)
65909* momit-leaf-frame-pointer <2>:          x86 Options.        (line 1368)
65910* mone-byte-bool:                        Darwin Options.     (line   90)
65911* moptimize:                             Nvidia PTX Options. (line   45)
65912* moptimize-membar:                      FRV Options.        (line  244)
65913* moptimize-membar <1>:                  FRV Options.        (line  249)
65914* moverride:                             AArch64 Options.    (line  261)
65915* MP:                                    Preprocessor Options.
65916                                                             (line  135)
65917* mpa-risc-1-0:                          HPPA Options.       (line   19)
65918* mpa-risc-1-1:                          HPPA Options.       (line   19)
65919* mpa-risc-2-0:                          HPPA Options.       (line   19)
65920* mpack:                                 FRV Options.        (line  147)
65921* mpacked-stack:                         S/390 and zSeries Options.
65922                                                             (line   54)
65923* mpadstruct:                            SH Options.         (line  189)
65924* mpaired-single:                        MIPS Options.       (line  370)
65925* mpc-relative-literal-loads:            AArch64 Options.    (line  274)
65926* mpc32:                                 x86 Options.        (line  762)
65927* mpc64:                                 x86 Options.        (line  762)
65928* mpc80:                                 x86 Options.        (line  762)
65929* mpclmul:                               x86 Options.        (line  860)
65930* mpconfig:                              x86 Options.        (line  868)
65931* mpcrel:                                M680x0 Options.     (line  273)
65932* mpcrel <1>:                            RS/6000 and PowerPC Options.
65933                                                             (line  932)
65934* mpdebug:                               CRIS Options.       (line   35)
65935* mpe:                                   RS/6000 and PowerPC Options.
65936                                                             (line  310)
65937* mpe-aligned-commons:                   x86 Windows Options.
65938                                                             (line   59)
65939* mpic-data-is-text-relative:            ARM Options.        (line  794)
65940* mpic-data-is-text-relative <1>:        MicroBlaze Options. (line   92)
65941* mpic-register:                         ARM Options.        (line  787)
65942* mpid:                                  RX Options.         (line  117)
65943* mpku:                                  x86 Options.        (line  896)
65944* mplt:                                  MIPS Options.       (line  219)
65945* mpltseq:                               RS/6000 and PowerPC Options.
65946                                                             (line  765)
65947* mpointer-size=SIZE:                    VMS Options.        (line   20)
65948* mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
65949                                                             (line  878)
65950* mpoke-function-name:                   ARM Options.        (line  802)
65951* mpopc:                                 SPARC Options.      (line  281)
65952* mpopcnt:                               x86 Options.        (line  880)
65953* mpopcntb:                              RS/6000 and PowerPC Options.
65954                                                             (line   25)
65955* mpopcntd:                              RS/6000 and PowerPC Options.
65956                                                             (line   25)
65957* mportable-runtime:                     HPPA Options.       (line   71)
65958* mpostinc:                              Adapteva Epiphany Options.
65959                                                             (line  109)
65960* mpostmodify:                           Adapteva Epiphany Options.
65961                                                             (line  109)
65962* mpower8-fusion:                        RS/6000 and PowerPC Options.
65963                                                             (line  190)
65964* mpower8-vector:                        RS/6000 and PowerPC Options.
65965                                                             (line  196)
65966* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
65967                                                             (line   25)
65968* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
65969                                                             (line   25)
65970* mpowerpc64:                            RS/6000 and PowerPC Options.
65971                                                             (line   25)
65972* mprefer-avx128:                        x86 Options.        (line  995)
65973* mprefer-short-insn-regs:               Adapteva Epiphany Options.
65974                                                             (line   13)
65975* mprefer-vector-width:                  x86 Options.        (line  999)
65976* mprefergot:                            SH Options.         (line  268)
65977* mpreferred-stack-boundary:             RISC-V Options.     (line  101)
65978* mpreferred-stack-boundary <1>:         x86 Options.        (line  792)
65979* mprefetchwt1:                          x86 Options.        (line  873)
65980* mprefixed:                             RS/6000 and PowerPC Options.
65981                                                             (line  938)
65982* mpretend-cmove:                        SH Options.         (line  383)
65983* mprfchw:                               x86 Options.        (line  871)
65984* mprint-tune-info:                      ARM Options.        (line  944)
65985* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
65986                                                             (line  457)
65987* mprivileged:                           RS/6000 and PowerPC Options.
65988                                                             (line  955)
65989* mprolog-function:                      V850 Options.       (line   23)
65990* mprologue-epilogue:                    CRIS Options.       (line   70)
65991* mprototype:                            RS/6000 and PowerPC Options.
65992                                                             (line  593)
65993* mptwrite:                              x86 Options.        (line  864)
65994* mptx:                                  Nvidia PTX Options. (line   30)
65995* mpure-code:                            ARM Options.        (line  954)
65996* mpush-args:                            x86 Options.        (line 1174)
65997* mpushpop:                              C-SKY Options.      (line  130)
65998* MQ:                                    Preprocessor Options.
65999                                                             (line  162)
66000* mq-class:                              ARC Options.        (line  519)
66001* mquad-memory:                          RS/6000 and PowerPC Options.
66002                                                             (line  203)
66003* mquad-memory-atomic:                   RS/6000 and PowerPC Options.
66004                                                             (line  209)
66005* mr0rel-sec:                            Nios II Options.    (line   76)
66006* mr10k-cache-barrier:                   MIPS Options.       (line  720)
66007* mRcq:                                  ARC Options.        (line  523)
66008* mRcw:                                  ARC Options.        (line  527)
66009* mrdpid:                                x86 Options.        (line  872)
66010* mrdrnd:                                x86 Options.        (line  865)
66011* mrdseed:                               x86 Options.        (line  874)
66012* mreadonly-in-sdata:                    RS/6000 and PowerPC Options.
66013                                                             (line  684)
66014* mrecip:                                RS/6000 and PowerPC Options.
66015                                                             (line  785)
66016* mrecip <1>:                            x86 Options.        (line 1064)
66017* mrecip-precision:                      RS/6000 and PowerPC Options.
66018                                                             (line  842)
66019* mrecip=opt:                            RS/6000 and PowerPC Options.
66020                                                             (line  798)
66021* mrecip=opt <1>:                        x86 Options.        (line 1086)
66022* mrecord-mcount:                        x86 Options.        (line 1398)
66023* mrecord-return:                        x86 Options.        (line 1418)
66024* mred-zone:                             x86 Options.        (line 1562)
66025* mreduced-regs:                         NDS32 Options.      (line   15)
66026* mregister-names:                       IA-64 Options.      (line   37)
66027* mregnames:                             RS/6000 and PowerPC Options.
66028                                                             (line  722)
66029* mregparm:                              x86 Options.        (line  732)
66030* mrelax:                                AVR Options.        (line  231)
66031* mrelax <1>:                            H8/300 Options.     (line    9)
66032* mrelax <2>:                            MN10300 Options.    (line   46)
66033* mrelax <3>:                            MSP430 Options.     (line   88)
66034* mrelax <4>:                            NDS32 Options.      (line   84)
66035* mrelax <5>:                            RX Options.         (line   95)
66036* mrelax <6>:                            SH Options.         (line  137)
66037* mrelax <7>:                            V850 Options.       (line  103)
66038* mrelax-cmpxchg-loop:                   x86 Options.        (line 1475)
66039* mrelax-immediate:                      MCore Options.      (line   19)
66040* mrelax-pic-calls:                      MIPS Options.       (line  865)
66041* mrelocatable:                          RS/6000 and PowerPC Options.
66042                                                             (line  408)
66043* mrelocatable-lib:                      RS/6000 and PowerPC Options.
66044                                                             (line  419)
66045* mrenesas:                              SH Options.         (line  152)
66046* mrepeat:                               MeP Options.        (line   96)
66047* mrestrict-it:                          ARM Options.        (line  938)
66048* mreturn-pointer-on-d0:                 MN10300 Options.    (line   36)
66049* mrf16:                                 ARC Options.        (line  324)
66050* mrgf-banked-regs:                      ARC Options.        (line  304)
66051* mrh850-abi:                            V850 Options.       (line  127)
66052* mrl78:                                 RL78 Options.       (line   62)
66053* mrmw:                                  AVR Options.        (line  245)
66054* mrop-protect:                          RS/6000 and PowerPC Options.
66055                                                             (line  949)
66056* mror:                                  OpenRISC Options.   (line   49)
66057* mrori:                                 OpenRISC Options.   (line   54)
66058* mround-nearest:                        Adapteva Epiphany Options.
66059                                                             (line   51)
66060* mrtd:                                  M680x0 Options.     (line  237)
66061* mrtd <1>:                              x86 Options.        (line  708)
66062* mrtd <2>:                              x86 Function Attributes.
66063                                                             (line    9)
66064* mrtm:                                  x86 Options.        (line  891)
66065* mrtp:                                  VxWorks Options.    (line   11)
66066* mrtsc:                                 ARC Options.        (line  358)
66067* ms:                                    H8/300 Options.     (line   17)
66068* ms <1>:                                MeP Options.        (line  100)
66069* ms2600:                                H8/300 Options.     (line   24)
66070* msahf:                                 x86 Options.        (line 1035)
66071* msatur:                                MeP Options.        (line  105)
66072* msave-acc-in-interrupts:               RX Options.         (line  109)
66073* msave-mduc-in-interrupts:              RL78 Options.       (line   79)
66074* msave-restore:                         RISC-V Options.     (line  115)
66075* msave-toc-indirect:                    RS/6000 and PowerPC Options.
66076                                                             (line  890)
66077* mscc:                                  FRV Options.        (line  173)
66078* msched-ar-data-spec:                   IA-64 Options.      (line  135)
66079* msched-ar-in-data-spec:                IA-64 Options.      (line  157)
66080* msched-br-data-spec:                   IA-64 Options.      (line  128)
66081* msched-br-in-data-spec:                IA-64 Options.      (line  150)
66082* msched-control-spec:                   IA-64 Options.      (line  142)
66083* msched-costly-dep:                     RS/6000 and PowerPC Options.
66084                                                             (line  464)
66085* msched-count-spec-in-critical-path:    IA-64 Options.      (line  185)
66086* msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  202)
66087* msched-in-control-spec:                IA-64 Options.      (line  164)
66088* msched-max-memory-insns:               IA-64 Options.      (line  211)
66089* msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  217)
66090* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  178)
66091* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  171)
66092* msched-prolog:                         ARM Options.        (line   32)
66093* msched-prolog <1>:                     C-SKY Options.      (line  164)
66094* msched-spec-ldc:                       IA-64 Options.      (line  191)
66095* msched-spec-ldc <1>:                   IA-64 Options.      (line  194)
66096* msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  198)
66097* mschedule:                             HPPA Options.       (line   78)
66098* mscore5:                               Score Options.      (line   25)
66099* mscore5u:                              Score Options.      (line   28)
66100* mscore7:                               Score Options.      (line   31)
66101* mscore7d:                              Score Options.      (line   35)
66102* msda:                                  V850 Options.       (line   40)
66103* msdata:                                ARC Options.        (line  422)
66104* msdata <1>:                            IA-64 Options.      (line   42)
66105* msdata <2>:                            RS/6000 and PowerPC Options.
66106                                                             (line  666)
66107* msdata=all:                            C6X Options.        (line   30)
66108* msdata=data:                           RS/6000 and PowerPC Options.
66109                                                             (line  671)
66110* msdata=default:                        C6X Options.        (line   22)
66111* msdata=default <1>:                    RS/6000 and PowerPC Options.
66112                                                             (line  666)
66113* msdata=eabi:                           RS/6000 and PowerPC Options.
66114                                                             (line  647)
66115* msdata=none:                           C6X Options.        (line   35)
66116* msdata=none <1>:                       M32R/D Options.     (line   40)
66117* msdata=none <2>:                       RS/6000 and PowerPC Options.
66118                                                             (line  679)
66119* msdata=sdata:                          M32R/D Options.     (line   49)
66120* msdata=sysv:                           RS/6000 and PowerPC Options.
66121                                                             (line  657)
66122* msdata=use:                            M32R/D Options.     (line   53)
66123* msdram:                                Blackfin Options.   (line  169)
66124* msdram <1>:                            MeP Options.        (line  110)
66125* msecure-plt:                           RS/6000 and PowerPC Options.
66126                                                             (line  156)
66127* msecurity:                             C-SKY Options.      (line   96)
66128* msel-sched-dont-check-control-spec:    IA-64 Options.      (line  207)
66129* msep-data:                             Blackfin Options.   (line  107)
66130* msep-data <1>:                         Blackfin Options.   (line  113)
66131* mserialize:                            x86 Options.        (line  917)
66132* mserialize-volatile:                   Xtensa Options.     (line   35)
66133* msetlb:                                MN10300 Options.    (line   64)
66134* msext:                                 OpenRISC Options.   (line   59)
66135* msfimm:                                OpenRISC Options.   (line   63)
66136* msgx:                                  x86 Options.        (line  875)
66137* msha:                                  x86 Options.        (line  858)
66138* mshared-library-id:                    Blackfin Options.   (line  100)
66139* mshftimm:                              OpenRISC Options.   (line   68)
66140* mshort:                                M680x0 Options.     (line  217)
66141* mshort-calls:                          AVR Options.        (line  249)
66142* mshorten-memrefs:                      RISC-V Options.     (line  121)
66143* mshstk:                                x86 Options.        (line 1049)
66144* mside-effects:                         CRIS Options.       (line   45)
66145* msign-extend-enabled:                  LM32 Options.       (line   18)
66146* msign-return-address:                  AArch64 Options.    (line  280)
66147* msilicon-errata:                       MSP430 Options.     (line  159)
66148* msilicon-errata-warn:                  MSP430 Options.     (line  163)
66149* msim:                                  Blackfin Options.   (line   36)
66150* msim <1>:                              C6X Options.        (line   19)
66151* msim <2>:                              CR16 Options.       (line   18)
66152* msim <3>:                              C-SKY Options.      (line  170)
66153* msim <4>:                              FT32 Options.       (line    9)
66154* msim <5>:                              M32C Options.       (line   13)
66155* msim <6>:                              MeP Options.        (line  114)
66156* msim <7>:                              MSP430 Options.     (line   77)
66157* msim <8>:                              RL78 Options.       (line    7)
66158* msim <9>:                              RS/6000 and PowerPC Options.
66159                                                             (line  603)
66160* msim <10>:                             RX Options.         (line   71)
66161* msim <11>:                             Visium Options.     (line   13)
66162* msim <12>:                             Xstormy16 Options.  (line    9)
66163* msimd:                                 ARC Options.        (line  141)
66164* msimnovec:                             MeP Options.        (line  117)
66165* msingle-exit:                          MMIX Options.       (line   65)
66166* msingle-float:                         MIPS Options.       (line  284)
66167* msingle-pic-base:                      ARM Options.        (line  781)
66168* msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
66169                                                             (line  451)
66170* msio:                                  HPPA Options.       (line  105)
66171* msize-level:                           ARC Options.        (line  531)
66172* mskip-rax-setup:                       x86 Options.        (line 1431)
66173* mslow-bytes:                           MCore Options.      (line   35)
66174* mslow-flash-data:                      ARM Options.        (line  926)
66175* msmall:                                MSP430 Options.     (line   85)
66176* msmall-data:                           DEC Alpha Options.  (line  187)
66177* msmall-data-limit:                     RISC-V Options.     (line  110)
66178* msmall-data-limit <1>:                 RX Options.         (line   47)
66179* msmall-divides:                        MicroBlaze Options. (line   38)
66180* msmall-exec:                           S/390 and zSeries Options.
66181                                                             (line   79)
66182* msmall-model:                          FR30 Options.       (line    9)
66183* msmall-text:                           DEC Alpha Options.  (line  205)
66184* msmall16:                              Adapteva Epiphany Options.
66185                                                             (line   66)
66186* msmallc:                               Nios II Options.    (line  338)
66187* msmart:                                C-SKY Options.      (line  113)
66188* msmartmips:                            MIPS Options.       (line  366)
66189* msoft-cmpsf:                           Adapteva Epiphany Options.
66190                                                             (line   29)
66191* msoft-div:                             OpenRISC Options.   (line   19)
66192* msoft-float:                           ARC Options.        (line  145)
66193* msoft-float <1>:                       C-SKY Options.      (line   52)
66194* msoft-float <2>:                       DEC Alpha Options.  (line   10)
66195* msoft-float <3>:                       FRV Options.        (line   27)
66196* msoft-float <4>:                       HPPA Options.       (line   91)
66197* msoft-float <5>:                       LoongArch Options.  (line   66)
66198* msoft-float <6>:                       M680x0 Options.     (line  201)
66199* msoft-float <7>:                       MicroBlaze Options. (line    7)
66200* msoft-float <8>:                       MIPS Options.       (line  270)
66201* msoft-float <9>:                       OpenRISC Options.   (line   29)
66202* msoft-float <10>:                      PDP-11 Options.     (line   13)
66203* msoft-float <11>:                      RS/6000 and PowerPC Options.
66204                                                             (line  333)
66205* msoft-float <12>:                      S/390 and zSeries Options.
66206                                                             (line   11)
66207* msoft-float <13>:                      SPARC Options.      (line   39)
66208* msoft-float <14>:                      V850 Options.       (line  113)
66209* msoft-float <15>:                      Visium Options.     (line   24)
66210* msoft-float <16>:                      x86 Options.        (line  607)
66211* msoft-mul:                             OpenRISC Options.   (line   24)
66212* msoft-quad-float:                      SPARC Options.      (line   59)
66213* msoft-stack:                           Nvidia PTX Options. (line   49)
66214* msp8:                                  AVR Options.        (line  256)
66215* mspace:                                V850 Options.       (line   30)
66216* mspace-regs:                           HPPA Options.       (line   45)
66217* mspecld-anomaly:                       Blackfin Options.   (line   48)
66218* mspecld-anomaly <1>:                   Blackfin Options.   (line   53)
66219* mspfp:                                 ARC Options.        (line  132)
66220* mspfp-compact:                         ARC Options.        (line  133)
66221* mspfp-fast:                            ARC Options.        (line  137)
66222* mspfp_compact:                         ARC Options.        (line  627)
66223* mspfp_fast:                            ARC Options.        (line  630)
66224* msplit:                                PDP-11 Options.     (line   40)
66225* msplit-addresses:                      MIPS Options.       (line  555)
66226* msplit-lohi:                           Adapteva Epiphany Options.
66227                                                             (line  109)
66228* msplit-vecmove-early:                  Adapteva Epiphany Options.
66229                                                             (line  126)
66230* msram-ecc:                             AMD GCN Options.    (line   25)
66231* msse:                                  x86 Options.        (line  839)
66232* msse2:                                 x86 Options.        (line  840)
66233* msse2avx:                              x86 Options.        (line 1386)
66234* msse3:                                 x86 Options.        (line  841)
66235* msse4:                                 x86 Options.        (line  843)
66236* msse4.1:                               x86 Options.        (line  845)
66237* msse4.2:                               x86 Options.        (line  846)
66238* msse4a:                                x86 Options.        (line  844)
66239* msseregparm:                           x86 Options.        (line  743)
66240* mssse3:                                x86 Options.        (line  842)
66241* mstack-align:                          CRIS Options.       (line   54)
66242* mstack-bias:                           SPARC Options.      (line  372)
66243* mstack-check-l1:                       Blackfin Options.   (line   74)
66244* mstack-guard:                          S/390 and zSeries Options.
66245                                                             (line  202)
66246* mstack-increment:                      MCore Options.      (line   50)
66247* mstack-offset:                         Adapteva Epiphany Options.
66248                                                             (line   37)
66249* mstack-protector-guard:                AArch64 Options.    (line   64)
66250* mstack-protector-guard <1>:            ARM Options.        (line  976)
66251* mstack-protector-guard <2>:            RISC-V Options.     (line  185)
66252* mstack-protector-guard <3>:            RS/6000 and PowerPC Options.
66253                                                             (line  916)
66254* mstack-protector-guard <4>:            x86 Options.        (line 1457)
66255* mstack-protector-guard-offset:         AArch64 Options.    (line   64)
66256* mstack-protector-guard-offset <1>:     ARM Options.        (line  976)
66257* mstack-protector-guard-offset <2>:     RISC-V Options.     (line  185)
66258* mstack-protector-guard-offset <3>:     RS/6000 and PowerPC Options.
66259                                                             (line  916)
66260* mstack-protector-guard-offset <4>:     x86 Options.        (line 1457)
66261* mstack-protector-guard-reg:            AArch64 Options.    (line   64)
66262* mstack-protector-guard-reg <1>:        RISC-V Options.     (line  185)
66263* mstack-protector-guard-reg <2>:        RS/6000 and PowerPC Options.
66264                                                             (line  916)
66265* mstack-protector-guard-reg <3>:        x86 Options.        (line 1457)
66266* mstack-protector-guard-symbol:         RS/6000 and PowerPC Options.
66267                                                             (line  916)
66268* mstack-size:                           AMD GCN Options.    (line   31)
66269* mstack-size <1>:                       C-SKY Options.      (line  150)
66270* mstack-size <2>:                       S/390 and zSeries Options.
66271                                                             (line  202)
66272* mstackrealign:                         x86 Options.        (line  783)
66273* mstd-struct-return:                    SPARC Options.      (line  102)
66274* mstore-max:                            x86 Options.        (line 1008)
66275* mstrict-align:                         AArch64 Options.    (line   52)
66276* mstrict-align <1>:                     M680x0 Options.     (line  281)
66277* mstrict-align <2>:                     RISC-V Options.     (line  130)
66278* mstrict-align <3>:                     RS/6000 and PowerPC Options.
66279                                                             (line  403)
66280* mstrict-X:                             AVR Options.        (line  269)
66281* mstring-compare-inline-limit:          RS/6000 and PowerPC Options.
66282                                                             (line  708)
66283* mstringop-strategy=ALG:                x86 Options.        (line 1334)
66284* mstructure-size-boundary:              ARM Options.        (line  736)
66285* msubxc:                                SPARC Options.      (line  288)
66286* msv-mode:                              Visium Options.     (line   52)
66287* msve-vector-bits:                      AArch64 Options.    (line  309)
66288* msvr4-struct-return:                   RS/6000 and PowerPC Options.
66289                                                             (line  548)
66290* mswap:                                 ARC Options.        (line  152)
66291* mswape:                                ARC Options.        (line  363)
66292* msym32:                                MIPS Options.       (line  453)
66293* msynci:                                MIPS Options.       (line  851)
66294* msys-crt0:                             Nios II Options.    (line  342)
66295* msys-lib:                              Nios II Options.    (line  346)
66296* MT:                                    Preprocessor Options.
66297                                                             (line  147)
66298* mtarget-align:                         Xtensa Options.     (line   74)
66299* mtas:                                  SH Options.         (line  259)
66300* mtbm:                                  x86 Options.        (line  893)
66301* mtda:                                  V850 Options.       (line   34)
66302* mtelephony:                            ARC Options.        (line  368)
66303* mtext-section-literals:                Xtensa Options.     (line   47)
66304* mtf:                                   MeP Options.        (line  121)
66305* mthreads:                              x86 Options.        (line 1189)
66306* mthreads <1>:                          x86 Windows Options.
66307                                                             (line   26)
66308* mthumb:                                ARM Options.        (line  824)
66309* mthumb-interwork:                      ARM Options.        (line   24)
66310* mtiny-printf:                          MSP430 Options.     (line  122)
66311* mtiny-stack:                           AVR Options.        (line  283)
66312* mtiny=:                                MeP Options.        (line  125)
66313* mTLS:                                  FRV Options.        (line   90)
66314* mtls:                                  FRV Options.        (line   94)
66315* mtls-dialect:                          ARM Options.        (line  876)
66316* mtls-dialect <1>:                      x86 Options.        (line 1167)
66317* mtls-dialect=desc:                     AArch64 Options.    (line   77)
66318* mtls-dialect=traditional:              AArch64 Options.    (line   81)
66319* mtls-direct-seg-refs:                  x86 Options.        (line 1376)
66320* mtls-markers:                          RS/6000 and PowerPC Options.
66321                                                             (line  777)
66322* mtls-size:                             AArch64 Options.    (line   85)
66323* mtls-size <1>:                         IA-64 Options.      (line  112)
66324* mtoc:                                  RS/6000 and PowerPC Options.
66325                                                             (line  428)
66326* mtomcat-stats:                         FRV Options.        (line  254)
66327* mtoplevel-symbols:                     MMIX Options.       (line   39)
66328* mtp:                                   ARM Options.        (line  868)
66329* mtp-regno:                             ARC Options.        (line  170)
66330* mtpcs-frame:                           ARM Options.        (line  841)
66331* mtpcs-leaf-frame:                      ARM Options.        (line  847)
66332* mtpf-trace:                            S/390 and zSeries Options.
66333                                                             (line  169)
66334* mtpf-trace-skip:                       S/390 and zSeries Options.
66335                                                             (line  175)
66336* mtraceback:                            RS/6000 and PowerPC Options.
66337                                                             (line  541)
66338* mtrap-precision:                       DEC Alpha Options.  (line  109)
66339* mtrust:                                C-SKY Options.      (line   99)
66340* mtsxldtrk:                             x86 Options.        (line  909)
66341* mtune:                                 AArch64 Options.    (line  189)
66342* mtune <1>:                             AMD GCN Options.    (line   10)
66343* mtune <2>:                             ARC Options.        (line  552)
66344* mtune <3>:                             ARC Options.        (line  633)
66345* mtune <4>:                             ARM Options.        (line  571)
66346* mtune <5>:                             CRIS Options.       (line   16)
66347* mtune <6>:                             DEC Alpha Options.  (line  259)
66348* mtune <7>:                             IA-64 Options.      (line  116)
66349* mtune <8>:                             LoongArch Options.  (line   32)
66350* mtune <9>:                             M680x0 Options.     (line   69)
66351* mtune <10>:                            MIPS Options.       (line   66)
66352* mtune <11>:                            MN10300 Options.    (line   30)
66353* mtune <12>:                            RISC-V Options.     (line   86)
66354* mtune <13>:                            RS/6000 and PowerPC Options.
66355                                                             (line  114)
66356* mtune <14>:                            S/390 and zSeries Options.
66357                                                             (line  162)
66358* mtune <15>:                            SPARC Options.      (line  199)
66359* mtune <16>:                            Visium Options.     (line   47)
66360* mtune <17>:                            x86 Options.        (line  481)
66361* mtune-ctrl=FEATURE-LIST:               x86 Options.        (line  962)
66362* muclibc:                               GNU/Linux Options.  (line   14)
66363* muintr:                                x86 Options.        (line  908)
66364* muls:                                  Score Options.      (line   18)
66365* multcost:                              ARC Options.        (line  638)
66366* multcost=NUMBER:                       SH Options.         (line  281)
66367* multilib-library-pic:                  FRV Options.        (line  110)
66368* multiply-enabled:                      LM32 Options.       (line   15)
66369* multiply_defined:                      Darwin Options.     (line  196)
66370* multiply_defined_unused:               Darwin Options.     (line  196)
66371* multi_module:                          Darwin Options.     (line  196)
66372* munalign-prob-threshold:               ARC Options.        (line  580)
66373* munaligned-access:                     ARM Options.        (line  910)
66374* munaligned-access <1>:                 MIPS Options.       (line  597)
66375* munaligned-doubles:                    SPARC Options.      (line   73)
66376* municode:                              x86 Windows Options.
66377                                                             (line   30)
66378* muniform-simt:                         Nvidia PTX Options. (line   61)
66379* muninit-const-in-rodata:               MIPS Options.       (line  525)
66380* munix:                                 VAX Options.        (line    9)
66381* munix-asm:                             PDP-11 Options.     (line   43)
66382* munordered-float:                      OpenRISC Options.   (line   39)
66383* mupdate:                               RS/6000 and PowerPC Options.
66384                                                             (line  350)
66385* muser-enabled:                         LM32 Options.       (line   21)
66386* muser-mode:                            SPARC Options.      (line   85)
66387* muser-mode <1>:                        Visium Options.     (line   57)
66388* musermode:                             SH Options.         (line  274)
66389* mv3push:                               NDS32 Options.      (line   45)
66390* mv850:                                 V850 Options.       (line   49)
66391* mv850e:                                V850 Options.       (line   79)
66392* mv850e1:                               V850 Options.       (line   70)
66393* mv850e2:                               V850 Options.       (line   66)
66394* mv850e2v3:                             V850 Options.       (line   61)
66395* mv850e2v4:                             V850 Options.       (line   57)
66396* mv850e3v5:                             V850 Options.       (line   52)
66397* mv850es:                               V850 Options.       (line   75)
66398* mv8plus:                               SPARC Options.      (line  214)
66399* mvaes:                                 x86 Options.        (line  901)
66400* mvdsp:                                 C-SKY Options.      (line  104)
66401* mveclibabi:                            RS/6000 and PowerPC Options.
66402                                                             (line  851)
66403* mveclibabi <1>:                        x86 Options.        (line 1115)
66404* mvect-double:                          Adapteva Epiphany Options.
66405                                                             (line  115)
66406* mvect8-ret-in-mem:                     x86 Options.        (line  753)
66407* mverbose-cost-dump:                    AArch64 Options.    (line  269)
66408* mverbose-cost-dump <1>:                ARM Options.        (line  950)
66409* mvirt:                                 MIPS Options.       (line  407)
66410* mvis:                                  SPARC Options.      (line  221)
66411* mvis2:                                 SPARC Options.      (line  227)
66412* mvis3:                                 SPARC Options.      (line  235)
66413* mvis4:                                 SPARC Options.      (line  243)
66414* mvis4b:                                SPARC Options.      (line  251)
66415* mvliw-branch:                          FRV Options.        (line  201)
66416* mvms-return-codes:                     VMS Options.        (line    9)
66417* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
66418* mvolatile-cache:                       ARC Options.        (line  427)
66419* mvolatile-cache <1>:                   ARC Options.        (line  431)
66420* mvpclmulqdq:                           x86 Options.        (line  903)
66421* mvr4130-align:                         MIPS Options.       (line  840)
66422* mvrsave:                               RS/6000 and PowerPC Options.
66423                                                             (line  153)
66424* mvsx:                                  RS/6000 and PowerPC Options.
66425                                                             (line  172)
66426* mvx:                                   S/390 and zSeries Options.
66427                                                             (line  112)
66428* mvxworks:                              RS/6000 and PowerPC Options.
66429                                                             (line  624)
66430* mvzeroupper:                           x86 Options.        (line  989)
66431* mwaitpkg:                              x86 Options.        (line  902)
66432* mwarn-devices-csv:                     MSP430 Options.     (line  168)
66433* mwarn-dynamicstack:                    S/390 and zSeries Options.
66434                                                             (line  196)
66435* mwarn-framesize:                       S/390 and zSeries Options.
66436                                                             (line  188)
66437* mwarn-mcu:                             MSP430 Options.     (line   65)
66438* mwarn-multiple-fast-interrupts:        RX Options.         (line  143)
66439* mwbnoinvd:                             x86 Options.        (line  869)
66440* mwide-bitfields:                       MCore Options.      (line   23)
66441* mwidekl:                               x86 Options.        (line  923)
66442* mwin32:                                x86 Windows Options.
66443                                                             (line   35)
66444* mwindows:                              x86 Windows Options.
66445                                                             (line   41)
66446* mword-relocations:                     ARM Options.        (line  887)
66447* mx32:                                  x86 Options.        (line 1542)
66448* mxgot:                                 M680x0 Options.     (line  313)
66449* mxgot <1>:                             MIPS Options.       (line  229)
66450* mxl-barrel-shift:                      MicroBlaze Options. (line   32)
66451* mxl-compat:                            RS/6000 and PowerPC Options.
66452                                                             (line  291)
66453* mxl-float-convert:                     MicroBlaze Options. (line   50)
66454* mxl-float-sqrt:                        MicroBlaze Options. (line   53)
66455* mxl-gp-opt:                            MicroBlaze Options. (line   44)
66456* mxl-multiply-high:                     MicroBlaze Options. (line   47)
66457* mxl-pattern-compare:                   MicroBlaze Options. (line   35)
66458* mxl-reorder:                           MicroBlaze Options. (line   62)
66459* mxl-soft-div:                          MicroBlaze Options. (line   29)
66460* mxl-soft-mul:                          MicroBlaze Options. (line   26)
66461* mxl-stack-check:                       MicroBlaze Options. (line   41)
66462* mxnack:                                AMD GCN Options.    (line   38)
66463* mxop:                                  x86 Options.        (line  876)
66464* mxpa:                                  MIPS Options.       (line  411)
66465* mxsave:                                x86 Options.        (line  887)
66466* mxsavec:                               x86 Options.        (line  889)
66467* mxsaveopt:                             x86 Options.        (line  888)
66468* mxsaves:                               x86 Options.        (line  890)
66469* mxy:                                   ARC Options.        (line  373)
66470* myellowknife:                          RS/6000 and PowerPC Options.
66471                                                             (line  619)
66472* mzarch:                                S/390 and zSeries Options.
66473                                                             (line   94)
66474* mzda:                                  V850 Options.       (line   45)
66475* mzdcbranch:                            SH Options.         (line  341)
66476* mzero-extend:                          MMIX Options.       (line   26)
66477* mzvector:                              S/390 and zSeries Options.
66478                                                             (line  123)
66479* no-80387:                              x86 Options.        (line  607)
66480* no-block-ops-unaligned-vsx:            RS/6000 and PowerPC Options.
66481                                                             (line  959)
66482* no-canonical-prefixes:                 Directory Options.  (line  164)
66483* no-integrated-cpp:                     Preprocessor Options.
66484                                                             (line  485)
66485* no-pie:                                Link Options.       (line  184)
66486* no-sysroot-suffix:                     Directory Options.  (line  183)
66487* noall_load:                            Darwin Options.     (line  196)
66488* nocpp:                                 MIPS Options.       (line  642)
66489* nodefaultlibs:                         Link Options.       (line  122)
66490* nodevicelib:                           AVR Options.        (line  290)
66491* nodevicespecs:                         AVR Options.        (line  293)
66492* nofixprebinding:                       Darwin Options.     (line  196)
66493* nofpu:                                 RX Options.         (line   17)
66494* nolibc:                                Link Options.       (line  134)
66495* nolibdld:                              HPPA Options.       (line  188)
66496* nomultidefs:                           Darwin Options.     (line  196)
66497* non-static:                            VxWorks Options.    (line   16)
66498* noprebind:                             Darwin Options.     (line  196)
66499* noseglinkedit:                         Darwin Options.     (line  196)
66500* nostartfiles:                          Link Options.       (line  117)
66501* nostdinc:                              Directory Options.  (line  102)
66502* nostdinc++:                            C++ Dialect Options.
66503                                                             (line  555)
66504* nostdinc++ <1>:                        Directory Options.  (line  108)
66505* nostdlib:                              Link Options.       (line  146)
66506* no_dead_strip_inits_and_terms:         Darwin Options.     (line  196)
66507* o:                                     Overall Options.    (line  193)
66508* O:                                     Optimize Options.   (line   39)
66509* O0:                                    Optimize Options.   (line  166)
66510* O1:                                    Optimize Options.   (line   39)
66511* O2:                                    Optimize Options.   (line   97)
66512* O3:                                    Optimize Options.   (line  148)
66513* Ofast:                                 Optimize Options.   (line  182)
66514* Og:                                    Optimize Options.   (line  190)
66515* Os:                                    Optimize Options.   (line  170)
66516* Oz:                                    Optimize Options.   (line  209)
66517* p:                                     Instrumentation Options.
66518                                                             (line   20)
66519* P:                                     Preprocessor Options.
66520                                                             (line  370)
66521* p <1>:                                 Common Function Attributes.
66522                                                             (line  814)
66523* pagezero_size:                         Darwin Options.     (line  196)
66524* param:                                 Optimize Options.   (line 2736)
66525* pass-exit-codes:                       Overall Options.    (line  597)
66526* pedantic:                              Standards.          (line   13)
66527* pedantic <1>:                          Warning Options.    (line   88)
66528* pedantic <2>:                          C Extensions.       (line    6)
66529* pedantic <3>:                          Alternate Keywords. (line   30)
66530* pedantic <4>:                          Warnings and Errors.
66531                                                             (line   25)
66532* pedantic-errors:                       Standards.          (line   13)
66533* pedantic-errors <1>:                   Warning Options.    (line  131)
66534* pedantic-errors <2>:                   Non-bugs.           (line  216)
66535* pedantic-errors <3>:                   Warnings and Errors.
66536                                                             (line   25)
66537* pg:                                    Instrumentation Options.
66538                                                             (line   20)
66539* pg <1>:                                Common Function Attributes.
66540                                                             (line  814)
66541* pie:                                   Link Options.       (line  178)
66542* pipe:                                  Overall Options.    (line  605)
66543* plt:                                   RISC-V Options.     (line   13)
66544* prebind:                               Darwin Options.     (line  196)
66545* prebind_all_twolevel_modules:          Darwin Options.     (line  196)
66546* print-file-name:                       Developer Options.  (line  935)
66547* print-libgcc-file-name:                Developer Options.  (line  969)
66548* print-multi-directory:                 Developer Options.  (line  941)
66549* print-multi-lib:                       Developer Options.  (line  946)
66550* print-multi-os-directory:              Developer Options.  (line  953)
66551* print-multiarch:                       Developer Options.  (line  962)
66552* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
66553                                                             (line  227)
66554* print-prog-name:                       Developer Options.  (line  966)
66555* print-search-dirs:                     Developer Options.  (line  977)
66556* print-sysroot:                         Developer Options.  (line  990)
66557* print-sysroot-headers-suffix:          Developer Options.  (line  997)
66558* private_bundle:                        Darwin Options.     (line  196)
66559* pthread:                               Preprocessor Options.
66560                                                             (line   70)
66561* pthread <1>:                           Link Options.       (line  195)
66562* pthreads:                              Solaris 2 Options.  (line   30)
66563* Q:                                     Developer Options.  (line  839)
66564* Qn:                                    System V Options.   (line   18)
66565* Qy:                                    System V Options.   (line   14)
66566* r:                                     Link Options.       (line  202)
66567* rdynamic:                              Link Options.       (line  206)
66568* read_only_relocs:                      Darwin Options.     (line  196)
66569* remap:                                 Preprocessor Options.
66570                                                             (line  401)
66571* S:                                     Overall Options.    (line  176)
66572* S <1>:                                 Link Options.       (line   20)
66573* s:                                     Link Options.       (line  213)
66574* save-temps:                            Developer Options.  (line  735)
66575* save-temps=cwd:                        Developer Options.  (line  746)
66576* save-temps=obj:                        Developer Options.  (line  749)
66577* sectalign:                             Darwin Options.     (line  196)
66578* sectcreate:                            Darwin Options.     (line  196)
66579* sectobjectsymbols:                     Darwin Options.     (line  196)
66580* sectobjectsymbols <1>:                 Darwin Options.     (line  196)
66581* sectorder:                             Darwin Options.     (line  196)
66582* seg1addr:                              Darwin Options.     (line  196)
66583* segaddr:                               Darwin Options.     (line  196)
66584* seglinkedit:                           Darwin Options.     (line  196)
66585* segprot:                               Darwin Options.     (line  196)
66586* segs_read_only_addr:                   Darwin Options.     (line  196)
66587* segs_read_only_addr <1>:               Darwin Options.     (line  196)
66588* segs_read_write_addr:                  Darwin Options.     (line  196)
66589* segs_read_write_addr <1>:              Darwin Options.     (line  196)
66590* seg_addr_table:                        Darwin Options.     (line  196)
66591* seg_addr_table_filename:               Darwin Options.     (line  196)
66592* shared:                                Link Options.       (line  222)
66593* shared-libgcc:                         Link Options.       (line  230)
66594* short-calls:                           Adapteva Epiphany Options.
66595                                                             (line   61)
66596* sim:                                   CRIS Options.       (line   82)
66597* sim2:                                  CRIS Options.       (line   87)
66598* single_module:                         Darwin Options.     (line  196)
66599* specs:                                 Overall Options.    (line  611)
66600* static:                                Link Options.       (line  217)
66601* static <1>:                            Darwin Options.     (line  196)
66602* static <2>:                            HPPA Options.       (line  192)
66603* static-libasan:                        Link Options.       (line  264)
66604* static-libgcc:                         Link Options.       (line  230)
66605* static-liblsan:                        Link Options.       (line  280)
66606* static-libstdc++:                      Link Options.       (line  297)
66607* static-libtsan:                        Link Options.       (line  272)
66608* static-libubsan:                       Link Options.       (line  288)
66609* static-pie:                            Link Options.       (line  187)
66610* std:                                   Standards.          (line   13)
66611* std <1>:                               C Dialect Options.  (line   46)
66612* std <2>:                               Other Builtins.     (line   31)
66613* std <3>:                               Non-bugs.           (line  107)
66614* stdlib:                                C++ Dialect Options.
66615                                                             (line  578)
66616* sub_library:                           Darwin Options.     (line  196)
66617* sub_umbrella:                          Darwin Options.     (line  196)
66618* symbolic:                              Link Options.       (line  308)
66619* sysroot:                               Directory Options.  (line  168)
66620* T:                                     Link Options.       (line  314)
66621* target-help:                           Overall Options.    (line  487)
66622* threads:                               HPPA Options.       (line  205)
66623* time:                                  Developer Options.  (line  755)
66624* tno-android-cc:                        GNU/Linux Options.  (line   36)
66625* tno-android-ld:                        GNU/Linux Options.  (line   40)
66626* traditional:                           Preprocessor Options.
66627                                                             (line  377)
66628* traditional <1>:                       Incompatibilities.  (line    6)
66629* traditional-cpp:                       Preprocessor Options.
66630                                                             (line  377)
66631* trigraphs:                             Preprocessor Options.
66632                                                             (line  387)
66633* twolevel_namespace:                    Darwin Options.     (line  196)
66634* U:                                     Preprocessor Options.
66635                                                             (line   42)
66636* u:                                     Link Options.       (line  346)
66637* umbrella:                              Darwin Options.     (line  196)
66638* undef:                                 Preprocessor Options.
66639                                                             (line   66)
66640* undefined:                             Darwin Options.     (line  196)
66641* unexported_symbols_list:               Darwin Options.     (line  196)
66642* v:                                     Overall Options.    (line  466)
66643* version:                               Overall Options.    (line  594)
66644* w:                                     Warning Options.    (line   25)
66645* W:                                     Warning Options.    (line  222)
66646* W <1>:                                 Warning Options.    (line 2948)
66647* W <2>:                                 Warning Options.    (line 3105)
66648* W <3>:                                 Incompatibilities.  (line   64)
66649* Wa:                                    Assembler Options.  (line    9)
66650* Wabi:                                  Warning Options.    (line  267)
66651* Wabi-tag:                              C++ Dialect Options.
66652                                                             (line  590)
66653* Wabsolute-value:                       Warning Options.    (line 2352)
66654* Waddr-space-convert:                   AVR Options.        (line  308)
66655* Waddress:                              Warning Options.    (line 2781)
66656* Waddress-of-packed-member:             Warning Options.    (line 2815)
66657* Waggregate-return:                     Warning Options.    (line 2843)
66658* Waggressive-loop-optimizations:        Warning Options.    (line 2848)
66659* Waligned-new:                          C++ Dialect Options.
66660                                                             (line 1180)
66661* Wall:                                  Warning Options.    (line  140)
66662* Wall <1>:                              Standard Libraries. (line    6)
66663* Walloc-size-larger-than=:              Warning Options.    (line 1715)
66664* Walloc-zero:                           Warning Options.    (line 1705)
66665* Walloca:                               Warning Options.    (line 1730)
66666* Walloca-larger-than=:                  Warning Options.    (line 1733)
66667* Wanalyzer-double-fclose:               Static Analyzer Options.
66668                                                             (line   59)
66669* Wanalyzer-double-free:                 Static Analyzer Options.
66670                                                             (line   66)
66671* Wanalyzer-exposure-through-output-file: Static Analyzer Options.
66672                                                             (line   74)
66673* Wanalyzer-file-leak:                   Static Analyzer Options.
66674                                                             (line   82)
66675* Wanalyzer-free-of-non-heap:            Static Analyzer Options.
66676                                                             (line   89)
66677* Wanalyzer-malloc-leak:                 Static Analyzer Options.
66678                                                             (line   97)
66679* Wanalyzer-mismatching-deallocation:    Static Analyzer Options.
66680                                                             (line  105)
66681* Wanalyzer-null-argument:               Static Analyzer Options.
66682                                                             (line  131)
66683* Wanalyzer-null-dereference:            Static Analyzer Options.
66684                                                             (line  139)
66685* Wanalyzer-possible-null-argument:      Static Analyzer Options.
66686                                                             (line  116)
66687* Wanalyzer-possible-null-dereference:   Static Analyzer Options.
66688                                                             (line  124)
66689* Wanalyzer-shift-count-negative:        Static Analyzer Options.
66690                                                             (line  146)
66691* Wanalyzer-shift-count-overflow:        Static Analyzer Options.
66692                                                             (line  158)
66693* Wanalyzer-stale-setjmp-buffer:         Static Analyzer Options.
66694                                                             (line  171)
66695* Wanalyzer-tainted-allocation-size:     Static Analyzer Options.
66696                                                             (line  185)
66697* Wanalyzer-tainted-array-index:         Static Analyzer Options.
66698                                                             (line  199)
66699* Wanalyzer-tainted-divisor:             Static Analyzer Options.
66700                                                             (line  212)
66701* Wanalyzer-tainted-offset:              Static Analyzer Options.
66702                                                             (line  222)
66703* Wanalyzer-tainted-size:                Static Analyzer Options.
66704                                                             (line  235)
66705* Wanalyzer-too-complex:                 Static Analyzer Options.
66706                                                             (line   49)
66707* Wanalyzer-unsafe-call-within-signal-handler: Static Analyzer Options.
66708                                                             (line  245)
66709* Wanalyzer-use-after-free:              Static Analyzer Options.
66710                                                             (line  253)
66711* Wanalyzer-use-of-pointer-in-stale-stack-frame: Static Analyzer Options.
66712                                                             (line  261)
66713* Wanalyzer-use-of-uninitialized-value:  Static Analyzer Options.
66714                                                             (line  288)
66715* Wanalyzer-write-to-const:              Static Analyzer Options.
66716                                                             (line  268)
66717* Wanalyzer-write-to-string-literal:     Static Analyzer Options.
66718                                                             (line  278)
66719* Warith-conversion:                     Warning Options.    (line 1798)
66720* Warray-bounds:                         Warning Options.    (line 1811)
66721* Warray-compare:                        Warning Options.    (line 1830)
66722* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
66723                                                             (line  170)
66724* Wattribute-alias:                      Warning Options.    (line 1886)
66725* Wattribute-warning:                    Warning Options.    (line 3072)
66726* Wattributes:                           Warning Options.    (line 2853)
66727* Wbad-function-cast:                    Warning Options.    (line 2421)
66728* Wbidi-chars:                           Warning Options.    (line 1918)
66729* Wbidi-chars=:                          Warning Options.    (line 1918)
66730* Wbool-compare:                         Warning Options.    (line 1940)
66731* Wbool-operation:                       Warning Options.    (line 1949)
66732* Wbuiltin-declaration-mismatch:         Warning Options.    (line 2875)
66733* Wbuiltin-macro-redefined:              Warning Options.    (line 2896)
66734* Wc++-compat:                           Warning Options.    (line 2449)
66735* Wc++11-compat:                         Warning Options.    (line 2454)
66736* Wc++11-extensions:                     Warning Options.    (line 2472)
66737* Wc++14-compat:                         Warning Options.    (line 2460)
66738* Wc++14-extensions:                     Warning Options.    (line 2477)
66739* Wc++17-compat:                         Warning Options.    (line 2464)
66740* Wc++17-extensions:                     Warning Options.    (line 2482)
66741* Wc++20-compat:                         Warning Options.    (line 2468)
66742* Wc++20-extensions:                     Warning Options.    (line 2487)
66743* Wc++23-extensions:                     Warning Options.    (line 2492)
66744* Wc11-c2x-compat:                       Warning Options.    (line 2441)
66745* Wc90-c99-compat:                       Warning Options.    (line 2426)
66746* Wc99-c11-compat:                       Warning Options.    (line 2433)
66747* Wcast-align:                           Warning Options.    (line 2513)
66748* Wcast-align=strict:                    Warning Options.    (line 2519)
66749* Wcast-function-type:                   Warning Options.    (line 2524)
66750* Wcast-qual:                            Warning Options.    (line 2497)
66751* Wcatch-value:                          C++ Dialect Options.
66752                                                             (line 1227)
66753* Wchar-subscripts:                      Warning Options.    (line  377)
66754* Wclass-conversion:                     C++ Dialect Options.
66755                                                             (line 1158)
66756* Wclass-memaccess:                      C++ Dialect Options.
66757                                                             (line  785)
66758* Wclobbered:                            Warning Options.    (line 2550)
66759* Wcomma-subscript:                      C++ Dialect Options.
66760                                                             (line  595)
66761* Wcomment:                              Warning Options.    (line 2363)
66762* Wcomments:                             Warning Options.    (line 2363)
66763* Wconditionally-supported:              C++ Dialect Options.
66764                                                             (line 1235)
66765* Wconversion:                           Warning Options.    (line 2554)
66766* Wconversion-null:                      C++ Dialect Options.
66767                                                             (line 1369)
66768* Wcoverage-invalid-line-number:         Warning Options.    (line  396)
66769* Wcoverage-mismatch:                    Warning Options.    (line  382)
66770* Wcpp:                                  Warning Options.    (line  406)
66771* Wctad-maybe-unsupported:               C++ Dialect Options.
66772                                                             (line  616)
66773* Wctor-dtor-privacy:                    C++ Dialect Options.
66774                                                             (line  632)
66775* Wdangling-else:                        Warning Options.    (line 2575)
66776* Wdangling-pointer:                     Warning Options.    (line 2610)
66777* Wdate-time:                            Warning Options.    (line 2657)
66778* Wdeclaration-after-statement:          Warning Options.    (line 2169)
66779* Wdelete-incomplete:                    C++ Dialect Options.
66780                                                             (line 1238)
66781* Wdelete-non-virtual-dtor:              C++ Dialect Options.
66782                                                             (line  639)
66783* Wdeprecated:                           Warning Options.    (line 3079)
66784* Wdeprecated-copy:                      C++ Dialect Options.
66785                                                             (line  646)
66786* Wdeprecated-declarations:              Warning Options.    (line 3083)
66787* Wdeprecated-enum-enum-conversion:      C++ Dialect Options.
66788                                                             (line  654)
66789* Wdeprecated-enum-float-conversion:     C++ Dialect Options.
66790                                                             (line  668)
66791* Wdesignated-init:                      Warning Options.    (line 3410)
66792* Wdisabled-optimization:                Warning Options.    (line 3361)
66793* Wdiscarded-array-qualifiers:           Warning Options.    (line 1988)
66794* Wdiscarded-qualifiers:                 Warning Options.    (line 1982)
66795* Wdiv-by-zero:                          Warning Options.    (line 2029)
66796* Wdouble-promotion:                     Warning Options.    (line  409)
66797* Wduplicate-decl-specifier:             Warning Options.    (line  427)
66798* Wduplicated-branches:                  Warning Options.    (line 1959)
66799* Wduplicated-cond:                      Warning Options.    (line 1970)
66800* weak_reference_mismatches:             Darwin Options.     (line  196)
66801* Weffc++:                               C++ Dialect Options.
66802                                                             (line  951)
66803* Wempty-body:                           Warning Options.    (line 2662)
66804* Wendif-labels:                         Warning Options.    (line 2407)
66805* Wendif-labels <1>:                     Warning Options.    (line 2666)
66806* Wenum-compare:                         Warning Options.    (line 2669)
66807* Wenum-conversion:                      Warning Options.    (line 2675)
66808* Werror:                                Warning Options.    (line   28)
66809* Werror=:                               Warning Options.    (line   31)
66810* Wexceptions:                           C++ Dialect Options.
66811                                                             (line  979)
66812* Wexpansion-to-defined:                 Warning Options.    (line 2382)
66813* Wextra:                                Warning Options.    (line  222)
66814* Wextra <1>:                            Warning Options.    (line 2948)
66815* Wextra <2>:                            Warning Options.    (line 3105)
66816* Wextra-semi:                           C++ Dialect Options.
66817                                                             (line 1243)
66818* Wfatal-errors:                         Warning Options.    (line   48)
66819* Wfloat-conversion:                     Warning Options.    (line 2703)
66820* Wfloat-equal:                          Warning Options.    (line 2069)
66821* Wformat:                               Warning Options.    (line  432)
66822* Wformat <1>:                           Warning Options.    (line  457)
66823* Wformat <2>:                           Warning Options.    (line 1676)
66824* Wformat <3>:                           Common Function Attributes.
66825                                                             (line  411)
66826* Wformat-contains-nul:                  Warning Options.    (line  471)
66827* Wformat-extra-args:                    Warning Options.    (line  475)
66828* Wformat-nonliteral:                    Warning Options.    (line  568)
66829* Wformat-nonliteral <1>:                Common Function Attributes.
66830                                                             (line  476)
66831* Wformat-overflow:                      Warning Options.    (line  489)
66832* Wformat-overflow <1>:                  Warning Options.    (line  500)
66833* Wformat-security:                      Warning Options.    (line  573)
66834* Wformat-signedness:                    Warning Options.    (line  584)
66835* Wformat-truncation:                    Warning Options.    (line  589)
66836* Wformat-truncation <1>:                Warning Options.    (line  601)
66837* Wformat-y2k:                           Warning Options.    (line  612)
66838* Wformat-zero-length:                   Warning Options.    (line  564)
66839* Wformat=:                              Warning Options.    (line  432)
66840* Wformat=1:                             Warning Options.    (line  457)
66841* Wformat=2:                             Warning Options.    (line  466)
66842* Wframe-address:                        Warning Options.    (line 1976)
66843* Wframe-larger-than=:                   Warning Options.    (line 2243)
66844* Wfree-nonheap-object:                  Warning Options.    (line 2260)
66845* whatsloaded:                           Darwin Options.     (line  196)
66846* whyload:                               Darwin Options.     (line  196)
66847* Wif-not-aligned:                       Warning Options.    (line  791)
66848* Wignored-attributes:                   Warning Options.    (line  806)
66849* Wignored-qualifiers:                   Warning Options.    (line  795)
66850* Wimplicit:                             Warning Options.    (line  669)
66851* Wimplicit-fallthrough:                 Warning Options.    (line  673)
66852* Wimplicit-fallthrough=:                Warning Options.    (line  678)
66853* Wimplicit-function-declaration:        Warning Options.    (line  663)
66854* Wimplicit-int:                         Warning Options.    (line  658)
66855* Winaccessible-base:                    C++ Dialect Options.
66856                                                             (line 1247)
66857* Wincompatible-pointer-types:           Warning Options.    (line 1994)
66858* Winfinite-recursion:                   Warning Options.    (line  637)
66859* Winherited-variadic-ctor:              C++ Dialect Options.
66860                                                             (line 1258)
66861* Winit-list-lifetime:                   C++ Dialect Options.
66862                                                             (line  682)
66863* Winit-self:                            Warning Options.    (line  643)
66864* Winline:                               Warning Options.    (line 3198)
66865* Winline <1>:                           Inline.             (line   60)
66866* Wint-conversion:                       Warning Options.    (line 2000)
66867* Wint-in-bool-context:                  Warning Options.    (line 3246)
66868* Wint-to-pointer-cast:                  Warning Options.    (line 3254)
66869* Winterference-size:                    Warning Options.    (line 3211)
66870* Winvalid-imported-macros:              C++ Dialect Options.
66871                                                             (line  717)
66872* Winvalid-memory-model:                 Warning Options.    (line 1320)
66873* Winvalid-offsetof:                     C++ Dialect Options.
66874                                                             (line 1263)
66875* Winvalid-pch:                          Warning Options.    (line 3263)
66876* Wjump-misses-init:                     Warning Options.    (line 2680)
66877* Wl:                                    Link Options.       (line  338)
66878* Wlarger-than-BYTE-SIZE:                Warning Options.    (line 2228)
66879* Wlarger-than=:                         Warning Options.    (line 2228)
66880* Wliteral-suffix:                       C++ Dialect Options.
66881                                                             (line  723)
66882* Wlogical-not-parentheses:              Warning Options.    (line 2828)
66883* Wlogical-op:                           Warning Options.    (line 2820)
66884* Wlong-long:                            Warning Options.    (line 3267)
66885* Wlto-type-mismatch:                    Warning Options.    (line 3404)
66886* Wmain:                                 Warning Options.    (line  813)
66887* Wmaybe-uninitialized:                  Warning Options.    (line 1337)
66888* Wmemset-elt-size:                      Warning Options.    (line 2762)
66889* Wmemset-transposed-args:               Warning Options.    (line 2770)
66890* Wmisleading-indentation:               Warning Options.    (line  820)
66891* Wmismatched-dealloc:                   Warning Options.    (line  930)
66892* Wmismatched-new-delete:                C++ Dialect Options.
66893                                                             (line 1042)
66894* Wmismatched-tags:                      C++ Dialect Options.
66895                                                             (line 1073)
66896* Wmissing-attributes:                   Warning Options.    (line  854)
66897* Wmissing-braces:                       Warning Options.    (line  898)
66898* Wmissing-declarations:                 Warning Options.    (line 2938)
66899* Wmissing-field-initializers:           Warning Options.    (line 2948)
66900* Wmissing-format-attribute:             Warning Options.    (line 1676)
66901* Wmissing-include-dirs:                 Warning Options.    (line  908)
66902* Wmissing-noreturn:                     Warning Options.    (line 1662)
66903* Wmissing-parameter-type:               Warning Options.    (line 2920)
66904* Wmissing-profile:                      Warning Options.    (line  914)
66905* Wmissing-prototypes:                   Warning Options.    (line 2928)
66906* Wmissing-requires:                     Warning Options.    (line 2978)
66907* Wmissing-template-keyword:             Warning Options.    (line 2995)
66908* Wmisspelled-isr:                       AVR Options.        (line  313)
66909* Wmultichar:                            Warning Options.    (line 3023)
66910* Wmultiple-inheritance:                 C++ Dialect Options.
66911                                                             (line 1098)
66912* Wmultistatement-macros:                Warning Options.    (line  961)
66913* Wnamespaces:                           C++ Dialect Options.
66914                                                             (line 1121)
66915* Wnarrowing:                            C++ Dialect Options.
66916                                                             (line  749)
66917* Wnested-externs:                       Warning Options.    (line 3195)
66918* Wno-abi:                               Warning Options.    (line  267)
66919* Wno-absolute-value:                    Warning Options.    (line 2352)
66920* Wno-addr-space-convert:                AVR Options.        (line  308)
66921* Wno-address:                           Warning Options.    (line 2781)
66922* Wno-address-of-packed-member:          Warning Options.    (line 2815)
66923* Wno-aggregate-return:                  Warning Options.    (line 2843)
66924* Wno-aggressive-loop-optimizations:     Warning Options.    (line 2848)
66925* Wno-aligned-new:                       C++ Dialect Options.
66926                                                             (line 1180)
66927* Wno-all:                               Warning Options.    (line  140)
66928* Wno-alloc-size-larger-than:            Warning Options.    (line 1715)
66929* Wno-alloc-size-larger-than <1>:        Warning Options.    (line 1726)
66930* Wno-alloc-zero:                        Warning Options.    (line 1705)
66931* Wno-alloca:                            Warning Options.    (line 1730)
66932* Wno-alloca-larger-than:                Warning Options.    (line 1733)
66933* Wno-alloca-larger-than <1>:            Warning Options.    (line 1794)
66934* Wno-analyzer-double-fclose:            Static Analyzer Options.
66935                                                             (line   59)
66936* Wno-analyzer-double-free:              Static Analyzer Options.
66937                                                             (line   66)
66938* Wno-analyzer-exposure-through-output-file: Static Analyzer Options.
66939                                                             (line   74)
66940* Wno-analyzer-file-leak:                Static Analyzer Options.
66941                                                             (line   82)
66942* Wno-analyzer-free-of-non-heap:         Static Analyzer Options.
66943                                                             (line   89)
66944* Wno-analyzer-malloc-leak:              Static Analyzer Options.
66945                                                             (line   97)
66946* Wno-analyzer-mismatching-deallocation: Static Analyzer Options.
66947                                                             (line  105)
66948* Wno-analyzer-null-argument:            Static Analyzer Options.
66949                                                             (line  131)
66950* Wno-analyzer-null-dereference:         Static Analyzer Options.
66951                                                             (line  139)
66952* Wno-analyzer-possible-null-argument:   Static Analyzer Options.
66953                                                             (line  116)
66954* Wno-analyzer-possible-null-dereference: Static Analyzer Options.
66955                                                             (line  124)
66956* Wno-analyzer-shift-count-negative:     Static Analyzer Options.
66957                                                             (line  146)
66958* Wno-analyzer-shift-count-overflow:     Static Analyzer Options.
66959                                                             (line  158)
66960* Wno-analyzer-stale-setjmp-buffer:      Static Analyzer Options.
66961                                                             (line  171)
66962* Wno-analyzer-tainted-allocation-size:  Static Analyzer Options.
66963                                                             (line  185)
66964* Wno-analyzer-tainted-array-index:      Static Analyzer Options.
66965                                                             (line  199)
66966* Wno-analyzer-tainted-divisor:          Static Analyzer Options.
66967                                                             (line  212)
66968* Wno-analyzer-tainted-offset:           Static Analyzer Options.
66969                                                             (line  222)
66970* Wno-analyzer-tainted-size:             Static Analyzer Options.
66971                                                             (line  235)
66972* Wno-analyzer-too-complex:              Static Analyzer Options.
66973                                                             (line   49)
66974* Wno-analyzer-unsafe-call-within-signal-handler: Static Analyzer Options.
66975                                                             (line  245)
66976* Wno-analyzer-use-after-free:           Static Analyzer Options.
66977                                                             (line  253)
66978* Wno-analyzer-use-of-pointer-in-stale-stack-frame: Static Analyzer Options.
66979                                                             (line  261)
66980* Wno-analyzer-use-of-uninitialized-value: Static Analyzer Options.
66981                                                             (line  288)
66982* Wno-analyzer-write-to-const:           Static Analyzer Options.
66983                                                             (line  268)
66984* Wno-analyzer-write-to-string-literal:  Static Analyzer Options.
66985                                                             (line  278)
66986* Wno-arith-conversion:                  Warning Options.    (line 1798)
66987* Wno-array-bounds:                      Warning Options.    (line 1811)
66988* Wno-array-compare:                     Warning Options.    (line 1830)
66989* Wno-array-parameter:                   Warning Options.    (line 1842)
66990* Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
66991                                                             (line  170)
66992* Wno-attribute-alias:                   Warning Options.    (line 1886)
66993* Wno-attribute-warning:                 Warning Options.    (line 3072)
66994* Wno-attributes:                        Warning Options.    (line 2853)
66995* Wno-bad-function-cast:                 Warning Options.    (line 2421)
66996* Wno-bidi-chars:                        Warning Options.    (line 1918)
66997* Wno-bool-compare:                      Warning Options.    (line 1940)
66998* Wno-bool-operation:                    Warning Options.    (line 1949)
66999* Wno-builtin-declaration-mismatch:      Warning Options.    (line 2875)
67000* Wno-builtin-macro-redefined:           Warning Options.    (line 2896)
67001* Wno-c++-compat:                        Warning Options.    (line 2449)
67002* Wno-c++11-compat:                      Warning Options.    (line 2454)
67003* Wno-c++11-extensions:                  Warning Options.    (line 2472)
67004* Wno-c++14-compat:                      Warning Options.    (line 2460)
67005* Wno-c++14-extensions:                  Warning Options.    (line 2477)
67006* Wno-c++17-compat:                      Warning Options.    (line 2464)
67007* Wno-c++17-extensions:                  Warning Options.    (line 2482)
67008* Wno-c++20-compat:                      Warning Options.    (line 2468)
67009* Wno-c++20-extensions:                  Warning Options.    (line 2487)
67010* Wno-c++23-extensions:                  Warning Options.    (line 2492)
67011* Wno-c11-c2x-compat:                    Warning Options.    (line 2441)
67012* Wno-c90-c99-compat:                    Warning Options.    (line 2426)
67013* Wno-c99-c11-compat:                    Warning Options.    (line 2433)
67014* Wno-cast-align:                        Warning Options.    (line 2513)
67015* Wno-cast-function-type:                Warning Options.    (line 2524)
67016* Wno-cast-qual:                         Warning Options.    (line 2497)
67017* Wno-catch-value:                       C++ Dialect Options.
67018                                                             (line 1227)
67019* Wno-char-subscripts:                   Warning Options.    (line  377)
67020* Wno-class-conversion:                  C++ Dialect Options.
67021                                                             (line 1158)
67022* Wno-class-memaccess:                   C++ Dialect Options.
67023                                                             (line  785)
67024* Wno-clobbered:                         Warning Options.    (line 2550)
67025* Wno-comma-subscript:                   C++ Dialect Options.
67026                                                             (line  595)
67027* Wno-conditionally-supported:           C++ Dialect Options.
67028                                                             (line 1235)
67029* Wno-conversion:                        Warning Options.    (line 2554)
67030* Wno-conversion-null:                   C++ Dialect Options.
67031                                                             (line 1369)
67032* Wno-coverage-invalid-line-number:      Warning Options.    (line  396)
67033* Wno-coverage-mismatch:                 Warning Options.    (line  382)
67034* Wno-cpp:                               Warning Options.    (line  406)
67035* Wno-ctad-maybe-unsupported:            C++ Dialect Options.
67036                                                             (line  616)
67037* Wno-ctor-dtor-privacy:                 C++ Dialect Options.
67038                                                             (line  632)
67039* Wno-dangling-else:                     Warning Options.    (line 2575)
67040* Wno-dangling-pointer:                  Warning Options.    (line 2610)
67041* Wno-date-time:                         Warning Options.    (line 2657)
67042* Wno-declaration-after-statement:       Warning Options.    (line 2169)
67043* Wno-delete-incomplete:                 C++ Dialect Options.
67044                                                             (line 1238)
67045* Wno-delete-non-virtual-dtor:           C++ Dialect Options.
67046                                                             (line  639)
67047* Wno-deprecated:                        Warning Options.    (line 3079)
67048* Wno-deprecated-copy:                   C++ Dialect Options.
67049                                                             (line  646)
67050* Wno-deprecated-declarations:           Warning Options.    (line 3083)
67051* Wno-deprecated-enum-enum-conversion:   C++ Dialect Options.
67052                                                             (line  654)
67053* Wno-deprecated-enum-float-conversion:  C++ Dialect Options.
67054                                                             (line  668)
67055* Wno-designated-init:                   Warning Options.    (line 3410)
67056* Wno-disabled-optimization:             Warning Options.    (line 3361)
67057* Wno-discarded-array-qualifiers:        Warning Options.    (line 1988)
67058* Wno-discarded-qualifiers:              Warning Options.    (line 1982)
67059* Wno-div-by-zero:                       Warning Options.    (line 2029)
67060* Wno-double-promotion:                  Warning Options.    (line  409)
67061* Wno-duplicate-decl-specifier:          Warning Options.    (line  427)
67062* Wno-duplicated-branches:               Warning Options.    (line 1959)
67063* Wno-duplicated-cond:                   Warning Options.    (line 1970)
67064* Wno-effc++:                            C++ Dialect Options.
67065                                                             (line  951)
67066* Wno-empty-body:                        Warning Options.    (line 2662)
67067* Wno-endif-labels:                      Warning Options.    (line 2407)
67068* Wno-endif-labels <1>:                  Warning Options.    (line 2666)
67069* Wno-enum-compare:                      Warning Options.    (line 2669)
67070* Wno-enum-conversion:                   Warning Options.    (line 2675)
67071* Wno-error:                             Warning Options.    (line   28)
67072* Wno-error=:                            Warning Options.    (line   31)
67073* Wno-exceptions:                        C++ Dialect Options.
67074                                                             (line  979)
67075* Wno-extra:                             Warning Options.    (line  222)
67076* Wno-extra <1>:                         Warning Options.    (line 2948)
67077* Wno-extra <2>:                         Warning Options.    (line 3105)
67078* Wno-extra-semi:                        C++ Dialect Options.
67079                                                             (line 1243)
67080* Wno-fatal-errors:                      Warning Options.    (line   48)
67081* Wno-float-conversion:                  Warning Options.    (line 2703)
67082* Wno-float-equal:                       Warning Options.    (line 2069)
67083* Wno-format:                            Warning Options.    (line  432)
67084* Wno-format <1>:                        Warning Options.    (line 1676)
67085* Wno-format-contains-nul:               Warning Options.    (line  471)
67086* Wno-format-extra-args:                 Warning Options.    (line  475)
67087* Wno-format-nonliteral:                 Warning Options.    (line  568)
67088* Wno-format-overflow:                   Warning Options.    (line  489)
67089* Wno-format-overflow <1>:               Warning Options.    (line  500)
67090* Wno-format-security:                   Warning Options.    (line  573)
67091* Wno-format-signedness:                 Warning Options.    (line  584)
67092* Wno-format-truncation:                 Warning Options.    (line  589)
67093* Wno-format-truncation <1>:             Warning Options.    (line  601)
67094* Wno-format-y2k:                        Warning Options.    (line  612)
67095* Wno-format-zero-length:                Warning Options.    (line  564)
67096* Wno-frame-address:                     Warning Options.    (line 1976)
67097* Wno-frame-larger-than:                 Warning Options.    (line 2243)
67098* Wno-frame-larger-than <1>:             Warning Options.    (line 2256)
67099* Wno-free-nonheap-object:               Warning Options.    (line 2260)
67100* Wno-if-not-aligned:                    Warning Options.    (line  791)
67101* Wno-ignored-attributes:                Warning Options.    (line  806)
67102* Wno-ignored-qualifiers:                Warning Options.    (line  795)
67103* Wno-implicit:                          Warning Options.    (line  669)
67104* Wno-implicit-fallthrough:              Warning Options.    (line  673)
67105* Wno-implicit-function-declaration:     Warning Options.    (line  663)
67106* Wno-implicit-int:                      Warning Options.    (line  658)
67107* Wno-inaccessible-base:                 C++ Dialect Options.
67108                                                             (line 1247)
67109* Wno-incompatible-pointer-types:        Warning Options.    (line 1994)
67110* Wno-infinite-recursion:                Warning Options.    (line  637)
67111* Wno-inherited-variadic-ctor:           C++ Dialect Options.
67112                                                             (line 1258)
67113* Wno-init-list-lifetime:                C++ Dialect Options.
67114                                                             (line  682)
67115* Wno-init-self:                         Warning Options.    (line  643)
67116* Wno-inline:                            Warning Options.    (line 3198)
67117* Wno-int-conversion:                    Warning Options.    (line 2000)
67118* Wno-int-in-bool-context:               Warning Options.    (line 3246)
67119* Wno-int-to-pointer-cast:               Warning Options.    (line 3254)
67120* Wno-invalid-imported-macros:           C++ Dialect Options.
67121                                                             (line  717)
67122* Wno-invalid-memory-model:              Warning Options.    (line 1320)
67123* Wno-invalid-offsetof:                  C++ Dialect Options.
67124                                                             (line 1263)
67125* Wno-invalid-pch:                       Warning Options.    (line 3263)
67126* Wno-jump-misses-init:                  Warning Options.    (line 2680)
67127* Wno-larger-than:                       Warning Options.    (line 2239)
67128* Wno-literal-suffix:                    C++ Dialect Options.
67129                                                             (line  723)
67130* Wno-logical-not-parentheses:           Warning Options.    (line 2828)
67131* Wno-logical-op:                        Warning Options.    (line 2820)
67132* Wno-long-long:                         Warning Options.    (line 3267)
67133* Wno-lto-type-mismatch:                 Warning Options.    (line 3404)
67134* Wno-main:                              Warning Options.    (line  813)
67135* Wno-maybe-uninitialized:               Warning Options.    (line 1337)
67136* Wno-memset-elt-size:                   Warning Options.    (line 2762)
67137* Wno-memset-transposed-args:            Warning Options.    (line 2770)
67138* Wno-misleading-indentation:            Warning Options.    (line  820)
67139* Wno-mismatched-dealloc:                Warning Options.    (line  930)
67140* Wno-mismatched-new-delete:             C++ Dialect Options.
67141                                                             (line 1042)
67142* Wno-mismatched-tags:                   C++ Dialect Options.
67143                                                             (line 1073)
67144* Wno-missing-attributes:                Warning Options.    (line  854)
67145* Wno-missing-braces:                    Warning Options.    (line  898)
67146* Wno-missing-declarations:              Warning Options.    (line 2938)
67147* Wno-missing-field-initializers:        Warning Options.    (line 2948)
67148* Wno-missing-format-attribute:          Warning Options.    (line 1676)
67149* Wno-missing-include-dirs:              Warning Options.    (line  908)
67150* Wno-missing-noreturn:                  Warning Options.    (line 1662)
67151* Wno-missing-parameter-type:            Warning Options.    (line 2920)
67152* Wno-missing-profile:                   Warning Options.    (line  914)
67153* Wno-missing-prototypes:                Warning Options.    (line 2928)
67154* Wno-missing-requires:                  Warning Options.    (line 2978)
67155* Wno-missing-template-keyword:          Warning Options.    (line 2995)
67156* Wno-misspelled-isr:                    AVR Options.        (line  313)
67157* Wno-multichar:                         Warning Options.    (line 3023)
67158* Wno-multiple-inheritance:              C++ Dialect Options.
67159                                                             (line 1098)
67160* Wno-multistatement-macros:             Warning Options.    (line  961)
67161* Wno-namespaces:                        C++ Dialect Options.
67162                                                             (line 1121)
67163* Wno-narrowing:                         C++ Dialect Options.
67164                                                             (line  749)
67165* Wno-nested-externs:                    Warning Options.    (line 3195)
67166* Wno-noexcept:                          C++ Dialect Options.
67167                                                             (line  765)
67168* Wno-noexcept-type:                     C++ Dialect Options.
67169                                                             (line  771)
67170* Wno-non-template-friend:               C++ Dialect Options.
67171                                                             (line  991)
67172* Wno-non-virtual-dtor:                  C++ Dialect Options.
67173                                                             (line  805)
67174* Wno-nonnull:                           Warning Options.    (line  616)
67175* Wno-nonnull-compare:                   Warning Options.    (line  623)
67176* Wno-normalized:                        Warning Options.    (line 3029)
67177* Wno-null-dereference:                  Warning Options.    (line  630)
67178* Wno-odr:                               Warning Options.    (line 3092)
67179* Wno-old-style-cast:                    C++ Dialect Options.
67180                                                             (line 1000)
67181* Wno-old-style-declaration:             Warning Options.    (line 2907)
67182* Wno-old-style-definition:              Warning Options.    (line 2913)
67183* Wno-openacc-parallelism:               Warning Options.    (line 3096)
67184* Wno-openmp-simd:                       Warning Options.    (line 3100)
67185* Wno-overflow:                          Warning Options.    (line 3089)
67186* Wno-overlength-strings:                Warning Options.    (line 3381)
67187* Wno-overloaded-virtual:                C++ Dialect Options.
67188                                                             (line 1006)
67189* Wno-override-init:                     Warning Options.    (line 3105)
67190* Wno-override-init-side-effects:        Warning Options.    (line 3113)
67191* Wno-packed:                            Warning Options.    (line 3118)
67192* Wno-packed-bitfield-compat:            Warning Options.    (line 3135)
67193* Wno-packed-not-aligned:                Warning Options.    (line 3152)
67194* Wno-padded:                            Warning Options.    (line 3165)
67195* Wno-parentheses:                       Warning Options.    (line  981)
67196* Wno-pedantic:                          Warning Options.    (line   88)
67197* Wno-pedantic-ms-format:                Warning Options.    (line 2311)
67198* Wno-pessimizing-move:                  C++ Dialect Options.
67199                                                             (line  834)
67200* Wno-placement-new:                     C++ Dialect Options.
67201                                                             (line 1191)
67202* Wno-pmf-conversions:                   C++ Dialect Options.
67203                                                             (line 1025)
67204* Wno-pmf-conversions <1>:               Bound member functions.
67205                                                             (line   35)
67206* Wno-pointer-arith:                     Warning Options.    (line 2317)
67207* Wno-pointer-compare:                   Warning Options.    (line 2324)
67208* Wno-pointer-sign:                      Warning Options.    (line 3370)
67209* Wno-pointer-to-int-cast:               Warning Options.    (line 3259)
67210* Wno-pragmas:                           Warning Options.    (line 1397)
67211* Wno-prio-ctor-dtor:                    Warning Options.    (line 1402)
67212* Wno-property-assign-default:           Objective-C and Objective-C++ Dialect Options.
67213                                                             (line  174)
67214* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
67215                                                             (line  178)
67216* Wno-range-loop-construct:              C++ Dialect Options.
67217                                                             (line  895)
67218* Wno-redundant-decls:                   Warning Options.    (line 3172)
67219* Wno-redundant-move:                    C++ Dialect Options.
67220                                                             (line  856)
67221* Wno-redundant-tags:                    C++ Dialect Options.
67222                                                             (line  924)
67223* Wno-register:                          C++ Dialect Options.
67224                                                             (line  813)
67225* Wno-reorder:                           C++ Dialect Options.
67226                                                             (line  820)
67227* Wno-restrict:                          Warning Options.    (line 3176)
67228* Wno-return-local-addr:                 Warning Options.    (line 1061)
67229* Wno-return-type:                       Warning Options.    (line 1065)
67230* Wno-scalar-storage-order:              Warning Options.    (line 2709)
67231* Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
67232                                                             (line  195)
67233* Wno-sequence-point:                    Warning Options.    (line 1008)
67234* Wno-shadow:                            Warning Options.    (line 2175)
67235* Wno-shadow-ivar:                       Warning Options.    (line 2186)
67236* Wno-shift-count-negative:              Warning Options.    (line 1086)
67237* Wno-shift-count-overflow:              Warning Options.    (line 1090)
67238* Wno-shift-negative-value:              Warning Options.    (line 1094)
67239* Wno-shift-overflow:                    Warning Options.    (line 1099)
67240* Wno-sign-compare:                      Warning Options.    (line 2691)
67241* Wno-sign-conversion:                   Warning Options.    (line 2697)
67242* Wno-sign-promo:                        C++ Dialect Options.
67243                                                             (line 1029)
67244* Wno-sized-deallocation:                C++ Dialect Options.
67245                                                             (line 1275)
67246* Wno-sizeof-array-argument:             Warning Options.    (line 2757)
67247* Wno-sizeof-array-div:                  Warning Options.    (line 2713)
67248* Wno-sizeof-pointer-div:                Warning Options.    (line 2727)
67249* Wno-sizeof-pointer-memaccess:          Warning Options.    (line 2735)
67250* Wno-stack-protector:                   Warning Options.    (line 3376)
67251* Wno-stack-usage:                       Warning Options.    (line 2277)
67252* Wno-stack-usage <1>:                   Warning Options.    (line 2301)
67253* Wno-strict-aliasing:                   Warning Options.    (line 1410)
67254* Wno-strict-null-sentinel:              C++ Dialect Options.
67255                                                             (line  984)
67256* Wno-strict-overflow:                   Warning Options.    (line 1449)
67257* Wno-strict-prototypes:                 Warning Options.    (line 2901)
67258* Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
67259                                                             (line  207)
67260* Wno-string-compare:                    Warning Options.    (line 1497)
67261* Wno-stringop-overflow:                 Warning Options.    (line 1519)
67262* Wno-stringop-overflow <1>:             Warning Options.    (line 1558)
67263* Wno-stringop-overread:                 Warning Options.    (line 1596)
67264* Wno-stringop-truncation:               Warning Options.    (line 1603)
67265* Wno-subobject-linkage:                 C++ Dialect Options.
67266                                                             (line  938)
67267* Wno-suggest-attribute=:                Warning Options.    (line 1654)
67268* Wno-suggest-attribute=cold:            Warning Options.    (line 1697)
67269* Wno-suggest-attribute=const:           Warning Options.    (line 1662)
67270* Wno-suggest-attribute=format:          Warning Options.    (line 1676)
67271* Wno-suggest-attribute=malloc:          Warning Options.    (line 1662)
67272* Wno-suggest-attribute=noreturn:        Warning Options.    (line 1662)
67273* Wno-suggest-attribute=pure:            Warning Options.    (line 1662)
67274* Wno-suggest-final-methods:             C++ Dialect Options.
67275                                                             (line 1295)
67276* Wno-suggest-final-types:               C++ Dialect Options.
67277                                                             (line 1286)
67278* Wno-suggest-override:                  C++ Dialect Options.
67279                                                             (line 1305)
67280* Wno-switch:                            Warning Options.    (line 1115)
67281* Wno-switch-bool:                       Warning Options.    (line 1135)
67282* Wno-switch-default:                    Warning Options.    (line 1123)
67283* Wno-switch-enum:                       Warning Options.    (line 1126)
67284* Wno-switch-outside-range:              Warning Options.    (line 1146)
67285* Wno-switch-unreachable:                Warning Options.    (line 1151)
67286* Wno-sync-nand:                         Warning Options.    (line 1175)
67287* Wno-system-headers:                    Warning Options.    (line 2034)
67288* Wno-tautological-compare:              Warning Options.    (line 2045)
67289* Wno-templates:                         C++ Dialect Options.
67290                                                             (line 1035)
67291* Wno-terminate:                         C++ Dialect Options.
67292                                                             (line 1128)
67293* Wno-traditional:                       Warning Options.    (line 2084)
67294* Wno-traditional-conversion:            Warning Options.    (line 2161)
67295* Wno-trampolines:                       Warning Options.    (line 2059)
67296* Wno-trivial-auto-var-init:             Warning Options.    (line 1180)
67297* Wno-tsan:                              Warning Options.    (line 2337)
67298* Wno-type-limits:                       Warning Options.    (line 2345)
67299* Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
67300                                                             (line  215)
67301* Wno-undef:                             Warning Options.    (line 2378)
67302* Wno-uninitialized:                     Warning Options.    (line 1282)
67303* Wno-unknown-pragmas:                   Warning Options.    (line 1390)
67304* Wno-unsafe-loop-optimizations:         Warning Options.    (line 2305)
67305* Wno-unsuffixed-float-constants:        Warning Options.    (line 3396)
67306* Wno-unused:                            Warning Options.    (line 1275)
67307* Wno-unused-but-set-parameter:          Warning Options.    (line 1186)
67308* Wno-unused-but-set-variable:           Warning Options.    (line 1195)
67309* Wno-unused-const-variable:             Warning Options.    (line 1242)
67310* Wno-unused-function:                   Warning Options.    (line 1205)
67311* Wno-unused-label:                      Warning Options.    (line 1210)
67312* Wno-unused-local-typedefs:             Warning Options.    (line 1217)
67313* Wno-unused-parameter:                  Warning Options.    (line 1221)
67314* Wno-unused-result:                     Warning Options.    (line 1228)
67315* Wno-unused-value:                      Warning Options.    (line 1265)
67316* Wno-unused-variable:                   Warning Options.    (line 1233)
67317* Wno-use-after-free:                    C++ Dialect Options.
67318                                                             (line 1310)
67319* Wno-useless-cast:                      C++ Dialect Options.
67320                                                             (line 1366)
67321* Wno-varargs:                           Warning Options.    (line 3278)
67322* Wno-variadic-macros:                   Warning Options.    (line 3272)
67323* Wno-vector-operation-performance:      Warning Options.    (line 3283)
67324* Wno-vexing-parse:                      C++ Dialect Options.
67325                                                             (line 1132)
67326* Wno-virtual-inheritance:               C++ Dialect Options.
67327                                                             (line 1105)
67328* Wno-virtual-move-assign:               C++ Dialect Options.
67329                                                             (line 1112)
67330* Wno-vla:                               Warning Options.    (line 3293)
67331* Wno-vla-larger-than:                   Warning Options.    (line 3297)
67332* Wno-vla-larger-than <1>:               Warning Options.    (line 3314)
67333* Wno-vla-parameter:                     Warning Options.    (line 3318)
67334* Wno-volatile:                          C++ Dialect Options.
67335                                                             (line 1163)
67336* Wno-volatile-register-var:             Warning Options.    (line 3355)
67337* Wno-write-strings:                     Warning Options.    (line 2537)
67338* Wno-zero-as-null-pointer-constant:     C++ Dialect Options.
67339                                                             (line 1176)
67340* Wnoexcept:                             C++ Dialect Options.
67341                                                             (line  765)
67342* Wnoexcept-type:                        C++ Dialect Options.
67343                                                             (line  771)
67344* Wnon-template-friend:                  C++ Dialect Options.
67345                                                             (line  991)
67346* Wnon-virtual-dtor:                     C++ Dialect Options.
67347                                                             (line  805)
67348* Wnonnull:                              Warning Options.    (line  616)
67349* Wnonnull-compare:                      Warning Options.    (line  623)
67350* Wnormalized:                           Warning Options.    (line 3029)
67351* Wnormalized=:                          Warning Options.    (line 3029)
67352* Wnull-dereference:                     Warning Options.    (line  630)
67353* Wobjc-root-class:                      Objective-C and Objective-C++ Dialect Options.
67354                                                             (line  188)
67355* Wodr:                                  Warning Options.    (line 3092)
67356* Wold-style-cast:                       C++ Dialect Options.
67357                                                             (line 1000)
67358* Wold-style-declaration:                Warning Options.    (line 2907)
67359* Wold-style-definition:                 Warning Options.    (line 2913)
67360* Wopenacc-parallelism:                  Warning Options.    (line 3096)
67361* Wopenmp-simd:                          Warning Options.    (line 3100)
67362* Woverflow:                             Warning Options.    (line 3089)
67363* Woverlength-strings:                   Warning Options.    (line 3381)
67364* Woverloaded-virtual:                   C++ Dialect Options.
67365                                                             (line 1006)
67366* Woverride-init:                        Warning Options.    (line 3105)
67367* Woverride-init-side-effects:           Warning Options.    (line 3113)
67368* Wp:                                    Preprocessor Options.
67369                                                             (line  465)
67370* Wpacked:                               Warning Options.    (line 3118)
67371* Wpacked-bitfield-compat:               Warning Options.    (line 3135)
67372* Wpacked-not-aligned:                   Warning Options.    (line 3152)
67373* Wpadded:                               Warning Options.    (line 3165)
67374* Wparentheses:                          Warning Options.    (line  981)
67375* Wpedantic:                             Warning Options.    (line   88)
67376* Wpedantic-ms-format:                   Warning Options.    (line 2311)
67377* Wpessimizing-move:                     C++ Dialect Options.
67378                                                             (line  834)
67379* Wplacement-new:                        C++ Dialect Options.
67380                                                             (line 1191)
67381* Wpmf-conversions:                      C++ Dialect Options.
67382                                                             (line 1025)
67383* Wpointer-arith:                        Warning Options.    (line 2317)
67384* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
67385* Wpointer-compare:                      Warning Options.    (line 2324)
67386* Wpointer-sign:                         Warning Options.    (line 3370)
67387* Wpointer-to-int-cast:                  Warning Options.    (line 3259)
67388* Wpragmas:                              Warning Options.    (line 1397)
67389* Wprio-ctor-dtor:                       Warning Options.    (line 1402)
67390* Wproperty-assign-default:              Objective-C and Objective-C++ Dialect Options.
67391                                                             (line  174)
67392* Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
67393                                                             (line  178)
67394* Wrange-loop-construct:                 C++ Dialect Options.
67395                                                             (line  895)
67396* wrapper:                               Overall Options.    (line  620)
67397* Wredundant-decls:                      Warning Options.    (line 3172)
67398* Wredundant-move:                       C++ Dialect Options.
67399                                                             (line  856)
67400* Wredundant-tags:                       C++ Dialect Options.
67401                                                             (line  924)
67402* Wregister:                             C++ Dialect Options.
67403                                                             (line  813)
67404* Wreorder:                              C++ Dialect Options.
67405                                                             (line  820)
67406* Wrestrict:                             Warning Options.    (line 3176)
67407* Wreturn-local-addr:                    Warning Options.    (line 1061)
67408* Wreturn-type:                          Warning Options.    (line 1065)
67409* Wscalar-storage-order:                 Warning Options.    (line 2709)
67410* Wselector:                             Objective-C and Objective-C++ Dialect Options.
67411                                                             (line  195)
67412* Wsequence-point:                       Warning Options.    (line 1008)
67413* Wshadow:                               Warning Options.    (line 2175)
67414* Wshadow-ivar:                          Warning Options.    (line 2186)
67415* Wshadow=compatible-local:              Warning Options.    (line 2197)
67416* Wshadow=global:                        Warning Options.    (line 2190)
67417* Wshadow=local:                         Warning Options.    (line 2193)
67418* Wshift-count-negative:                 Warning Options.    (line 1086)
67419* Wshift-count-overflow:                 Warning Options.    (line 1090)
67420* Wshift-negative-value:                 Warning Options.    (line 1094)
67421* Wshift-overflow:                       Warning Options.    (line 1099)
67422* Wsign-compare:                         Warning Options.    (line 2691)
67423* Wsign-conversion:                      Warning Options.    (line 2697)
67424* Wsign-promo:                           C++ Dialect Options.
67425                                                             (line 1029)
67426* Wsized-deallocation:                   C++ Dialect Options.
67427                                                             (line 1275)
67428* Wsizeof-array-argument:                Warning Options.    (line 2757)
67429* Wsizeof-array-div:                     Warning Options.    (line 2713)
67430* Wsizeof-pointer-div:                   Warning Options.    (line 2727)
67431* Wsizeof-pointer-memaccess:             Warning Options.    (line 2735)
67432* Wstack-protector:                      Warning Options.    (line 3376)
67433* Wstack-usage:                          Warning Options.    (line 2277)
67434* Wstrict-aliasing:                      Warning Options.    (line 1410)
67435* Wstrict-aliasing=n:                    Warning Options.    (line 1417)
67436* Wstrict-null-sentinel:                 C++ Dialect Options.
67437                                                             (line  984)
67438* Wstrict-overflow:                      Warning Options.    (line 1449)
67439* Wstrict-prototypes:                    Warning Options.    (line 2901)
67440* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
67441                                                             (line  207)
67442* Wstring-compare:                       Warning Options.    (line 1497)
67443* Wstringop-overflow:                    Warning Options.    (line 1519)
67444* Wstringop-overflow <1>:                Warning Options.    (line 1558)
67445* Wstringop-overread:                    Warning Options.    (line 1596)
67446* Wstringop-truncation:                  Warning Options.    (line 1603)
67447* Wsubobject-linkage:                    C++ Dialect Options.
67448                                                             (line  938)
67449* Wsuggest-attribute=:                   Warning Options.    (line 1654)
67450* Wsuggest-attribute=cold:               Warning Options.    (line 1697)
67451* Wsuggest-attribute=const:              Warning Options.    (line 1662)
67452* Wsuggest-attribute=format:             Warning Options.    (line 1676)
67453* Wsuggest-attribute=malloc:             Warning Options.    (line 1662)
67454* Wsuggest-attribute=noreturn:           Warning Options.    (line 1662)
67455* Wsuggest-attribute=pure:               Warning Options.    (line 1662)
67456* Wsuggest-final-methods:                C++ Dialect Options.
67457                                                             (line 1295)
67458* Wsuggest-final-types:                  C++ Dialect Options.
67459                                                             (line 1286)
67460* Wsuggest-override:                     C++ Dialect Options.
67461                                                             (line 1305)
67462* Wswitch:                               Warning Options.    (line 1115)
67463* Wswitch-bool:                          Warning Options.    (line 1135)
67464* Wswitch-default:                       Warning Options.    (line 1123)
67465* Wswitch-enum:                          Warning Options.    (line 1126)
67466* Wswitch-outside-range:                 Warning Options.    (line 1146)
67467* Wswitch-unreachable:                   Warning Options.    (line 1151)
67468* Wsync-nand:                            Warning Options.    (line 1175)
67469* Wsystem-headers:                       Warning Options.    (line 2034)
67470* Wtautological-compare:                 Warning Options.    (line 2045)
67471* Wtemplates:                            C++ Dialect Options.
67472                                                             (line 1035)
67473* Wterminate:                            C++ Dialect Options.
67474                                                             (line 1128)
67475* Wtraditional:                          Warning Options.    (line 2084)
67476* Wtraditional-conversion:               Warning Options.    (line 2161)
67477* Wtrampolines:                          Warning Options.    (line 2059)
67478* Wtrigraphs:                            Warning Options.    (line 2368)
67479* Wtrivial-auto-var-init:                Warning Options.    (line 1180)
67480* Wtsan:                                 Warning Options.    (line 2337)
67481* Wtype-limits:                          Warning Options.    (line 2345)
67482* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
67483                                                             (line  215)
67484* Wundef:                                Warning Options.    (line 2378)
67485* Wuninitialized:                        Warning Options.    (line 1282)
67486* Wunknown-pragmas:                      Warning Options.    (line 1390)
67487* Wunsafe-loop-optimizations:            Warning Options.    (line 2305)
67488* Wunsuffixed-float-constants:           Warning Options.    (line 3396)
67489* Wunused:                               Warning Options.    (line 1275)
67490* Wunused-but-set-parameter:             Warning Options.    (line 1186)
67491* Wunused-but-set-variable:              Warning Options.    (line 1195)
67492* Wunused-const-variable:                Warning Options.    (line 1242)
67493* Wunused-function:                      Warning Options.    (line 1205)
67494* Wunused-label:                         Warning Options.    (line 1210)
67495* Wunused-local-typedefs:                Warning Options.    (line 1217)
67496* Wunused-macros:                        Warning Options.    (line 2388)
67497* Wunused-parameter:                     Warning Options.    (line 1221)
67498* Wunused-result:                        Warning Options.    (line 1228)
67499* Wunused-value:                         Warning Options.    (line 1265)
67500* Wunused-variable:                      Warning Options.    (line 1233)
67501* Wuse-after-free:                       C++ Dialect Options.
67502                                                             (line 1310)
67503* Wuseless-cast:                         C++ Dialect Options.
67504                                                             (line 1366)
67505* Wvarargs:                              Warning Options.    (line 3278)
67506* Wvariadic-macros:                      Warning Options.    (line 3272)
67507* Wvector-operation-performance:         Warning Options.    (line 3283)
67508* Wvexing-parse:                         C++ Dialect Options.
67509                                                             (line 1132)
67510* Wvirtual-inheritance:                  C++ Dialect Options.
67511                                                             (line 1105)
67512* Wvirtual-move-assign:                  C++ Dialect Options.
67513                                                             (line 1112)
67514* Wvla:                                  Warning Options.    (line 3293)
67515* Wvla-larger-than=:                     Warning Options.    (line 3297)
67516* Wvolatile:                             C++ Dialect Options.
67517                                                             (line 1163)
67518* Wvolatile-register-var:                Warning Options.    (line 3355)
67519* Wwrite-strings:                        Warning Options.    (line 2537)
67520* Wzero-as-null-pointer-constant:        C++ Dialect Options.
67521                                                             (line 1176)
67522* Wzero-length-bounds:                   Warning Options.    (line 2006)
67523* Wzero-length-bounds <1>:               Warning Options.    (line 2006)
67524* x:                                     Overall Options.    (line  135)
67525* Xassembler:                            Assembler Options.  (line   13)
67526* Xbind-lazy:                            VxWorks Options.    (line   26)
67527* Xbind-now:                             VxWorks Options.    (line   30)
67528* Xlinker:                               Link Options.       (line  320)
67529* Xpreprocessor:                         Preprocessor Options.
67530                                                             (line  476)
67531* Ym:                                    System V Options.   (line   26)
67532* YP:                                    System V Options.   (line   22)
67533* z:                                     Link Options.       (line  351)
67534
67535
67536File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
67537
67538Keyword Index
67539*************
67540
67541[index]
67542* Menu:
67543
67544* #pragma:                               Pragmas.            (line    6)
67545* #pragma implementation:                C++ Interface.      (line   36)
67546* #pragma implementation, implied:       C++ Interface.      (line   43)
67547* #pragma interface:                     C++ Interface.      (line   17)
67548* $:                                     Dollar Signs.       (line    6)
67549* % in constraint:                       Modifiers.          (line   52)
67550* %include:                              Spec Files.         (line   26)
67551* %include_noerr:                        Spec Files.         (line   30)
67552* %rename:                               Spec Files.         (line   34)
67553* & in constraint:                       Modifiers.          (line   25)
67554* ':                                     Incompatibilities.  (line  116)
67555* *:                                     BPF Built-in Functions.
67556                                                             (line   23)
67557* *__builtin_alloca:                     Other Builtins.     (line  137)
67558* *__builtin_alloca_with_align:          Other Builtins.     (line  174)
67559* *__builtin_alloca_with_align_and_max:  Other Builtins.     (line  219)
67560* + in constraint:                       Modifiers.          (line   12)
67561* -lgcc, use with -nodefaultlibs:        Link Options.       (line  157)
67562* -lgcc, use with -nostdlib:             Link Options.       (line  157)
67563* -march feature modifiers:              AArch64 Options.    (line  331)
67564* -mcpu feature modifiers:               AArch64 Options.    (line  331)
67565* -nodefaultlibs and unresolved references: Link Options.    (line  157)
67566* -nostdlib and unresolved references:   Link Options.       (line  157)
67567* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
67568                                                             (line  714)
67569* //:                                    C++ Comments.       (line    6)
67570* 0 in constraint:                       Simple Constraints. (line  125)
67571* < in constraint:                       Simple Constraints. (line   47)
67572* = in constraint:                       Modifiers.          (line    8)
67573* > in constraint:                       Simple Constraints. (line   59)
67574* ?: extensions:                         Conditionals.       (line    6)
67575* ?: side effect:                        Conditionals.       (line   20)
67576* _ in variables in macros:              Typeof.             (line   46)
67577* _Accum data type:                      Fixed-Point.        (line    6)
67578* _Complex keyword:                      Complex.            (line    6)
67579* _Decimal128 data type:                 Decimal Float.      (line    6)
67580* _Decimal32 data type:                  Decimal Float.      (line    6)
67581* _Decimal64 data type:                  Decimal Float.      (line    6)
67582* _Exit:                                 Other Builtins.     (line    6)
67583* _exit:                                 Other Builtins.     (line    6)
67584* _FloatN data types:                    Floating Types.     (line    6)
67585* _FloatNx data types:                   Floating Types.     (line    6)
67586* _Fract data type:                      Fixed-Point.        (line    6)
67587* _get_ssp:                              x86 control-flow protection intrinsics.
67588                                                             (line    6)
67589* _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
67590                                                             (line   44)
67591* _inc_ssp:                              x86 control-flow protection intrinsics.
67592                                                             (line   12)
67593* _Sat data type:                        Fixed-Point.        (line    6)
67594* _xabort:                               x86 transactional memory intrinsics.
67595                                                             (line   57)
67596* _xbegin:                               x86 transactional memory intrinsics.
67597                                                             (line   19)
67598* _xend:                                 x86 transactional memory intrinsics.
67599                                                             (line   48)
67600* _xtest:                                x86 transactional memory intrinsics.
67601                                                             (line   53)
67602* __atomic_add_fetch:                    __atomic Builtins.  (line  177)
67603* __atomic_always_lock_free:             __atomic Builtins.  (line  265)
67604* __atomic_and_fetch:                    __atomic Builtins.  (line  181)
67605* __atomic_clear:                        __atomic Builtins.  (line  239)
67606* __atomic_compare_exchange:             __atomic Builtins.  (line  169)
67607* __atomic_compare_exchange_n:           __atomic Builtins.  (line  145)
67608* __atomic_exchange:                     __atomic Builtins.  (line  139)
67609* __atomic_exchange_n:                   __atomic Builtins.  (line  131)
67610* __atomic_fetch_add:                    __atomic Builtins.  (line  202)
67611* __atomic_fetch_and:                    __atomic Builtins.  (line  206)
67612* __atomic_fetch_nand:                   __atomic Builtins.  (line  212)
67613* __atomic_fetch_or:                     __atomic Builtins.  (line  210)
67614* __atomic_fetch_sub:                    __atomic Builtins.  (line  204)
67615* __atomic_fetch_xor:                    __atomic Builtins.  (line  208)
67616* __atomic_is_lock_free:                 __atomic Builtins.  (line  279)
67617* __atomic_load:                         __atomic Builtins.  (line  113)
67618* __atomic_load_n:                       __atomic Builtins.  (line  106)
67619* __atomic_nand_fetch:                   __atomic Builtins.  (line  187)
67620* __atomic_or_fetch:                     __atomic Builtins.  (line  185)
67621* __atomic_signal_fence:                 __atomic Builtins.  (line  258)
67622* __atomic_store:                        __atomic Builtins.  (line  126)
67623* __atomic_store_n:                      __atomic Builtins.  (line  118)
67624* __atomic_sub_fetch:                    __atomic Builtins.  (line  179)
67625* __atomic_test_and_set:                 __atomic Builtins.  (line  227)
67626* __atomic_thread_fence:                 __atomic Builtins.  (line  251)
67627* __atomic_xor_fetch:                    __atomic Builtins.  (line  183)
67628* __builtin_addf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
67629                                                             (line   17)
67630* __builtin_add_overflow:                Integer Overflow Builtins.
67631                                                             (line    9)
67632* __builtin_add_overflow_p:              Integer Overflow Builtins.
67633                                                             (line   86)
67634* __builtin_alloca:                      Other Builtins.     (line    6)
67635* __builtin_alloca_with_align:           Other Builtins.     (line    6)
67636* __builtin_alloca_with_align_and_max:   Other Builtins.     (line    6)
67637* __builtin_apply:                       Constructing Calls. (line   29)
67638* __builtin_apply_args:                  Constructing Calls. (line   19)
67639* __builtin_arc_aligned:                 ARC Built-in Functions.
67640                                                             (line   18)
67641* __builtin_arc_brk:                     ARC Built-in Functions.
67642                                                             (line   28)
67643* __builtin_arc_core_read:               ARC Built-in Functions.
67644                                                             (line   32)
67645* __builtin_arc_core_write:              ARC Built-in Functions.
67646                                                             (line   39)
67647* __builtin_arc_divaw:                   ARC Built-in Functions.
67648                                                             (line   46)
67649* __builtin_arc_flag:                    ARC Built-in Functions.
67650                                                             (line   53)
67651* __builtin_arc_lr:                      ARC Built-in Functions.
67652                                                             (line   57)
67653* __builtin_arc_mul64:                   ARC Built-in Functions.
67654                                                             (line   64)
67655* __builtin_arc_mulu64:                  ARC Built-in Functions.
67656                                                             (line   68)
67657* __builtin_arc_nop:                     ARC Built-in Functions.
67658                                                             (line   73)
67659* __builtin_arc_norm:                    ARC Built-in Functions.
67660                                                             (line   77)
67661* __builtin_arc_normw:                   ARC Built-in Functions.
67662                                                             (line   84)
67663* __builtin_arc_rtie:                    ARC Built-in Functions.
67664                                                             (line   91)
67665* __builtin_arc_sleep:                   ARC Built-in Functions.
67666                                                             (line   95)
67667* __builtin_arc_sr:                      ARC Built-in Functions.
67668                                                             (line   99)
67669* __builtin_arc_swap:                    ARC Built-in Functions.
67670                                                             (line  106)
67671* __builtin_arc_swi:                     ARC Built-in Functions.
67672                                                             (line  112)
67673* __builtin_arc_sync:                    ARC Built-in Functions.
67674                                                             (line  116)
67675* __builtin_arc_trap_s:                  ARC Built-in Functions.
67676                                                             (line  120)
67677* __builtin_arc_unimp_s:                 ARC Built-in Functions.
67678                                                             (line  124)
67679* __builtin_assoc_barrier:               Other Builtins.     (line  695)
67680* __builtin_assume_aligned:              Other Builtins.     (line  710)
67681* __builtin_bit_cast:                    Other Builtins.     (line  581)
67682* __builtin_bswap128:                    Other Builtins.     (line 1055)
67683* __builtin_bswap16:                     Other Builtins.     (line 1043)
67684* __builtin_bswap32:                     Other Builtins.     (line 1047)
67685* __builtin_bswap64:                     Other Builtins.     (line 1051)
67686* __builtin_call_with_static_chain:      Other Builtins.     (line    6)
67687* __builtin_call_with_static_chain <1>:  Other Builtins.     (line  393)
67688* __builtin_cfuged:                      Basic PowerPC Built-in Functions Available on ISA 3.1.
67689                                                             (line   18)
67690* __builtin_choose_expr:                 Other Builtins.     (line  404)
67691* __builtin_clear_padding:               Other Builtins.     (line  561)
67692* __builtin_clrsb:                       Other Builtins.     (line  973)
67693* __builtin_clrsbl:                      Other Builtins.     (line  995)
67694* __builtin_clrsbll:                     Other Builtins.     (line 1018)
67695* __builtin_clz:                         Other Builtins.     (line  965)
67696* __builtin_clzl:                        Other Builtins.     (line  987)
67697* __builtin_clzll:                       Other Builtins.     (line 1010)
67698* __builtin_cntlzdm:                     Basic PowerPC Built-in Functions Available on ISA 3.1.
67699                                                             (line   23)
67700* __builtin_cnttzdm:                     Basic PowerPC Built-in Functions Available on ISA 3.1.
67701                                                             (line   28)
67702* __builtin_complex:                     Complex.            (line   82)
67703* __builtin_constant_p:                  Other Builtins.     (line  498)
67704* __builtin_convertvector:               Vector Extensions.  (line  189)
67705* __builtin_cpu_init:                    Basic PowerPC Built-in Functions Available on all Configurations.
67706                                                             (line    6)
67707* __builtin_cpu_init <1>:                x86 Built-in Functions.
67708                                                             (line   68)
67709* __builtin_cpu_is:                      Basic PowerPC Built-in Functions Available on all Configurations.
67710                                                             (line   10)
67711* __builtin_cpu_is <1>:                  x86 Built-in Functions.
67712                                                             (line   96)
67713* __builtin_cpu_supports:                Basic PowerPC Built-in Functions Available on all Configurations.
67714                                                             (line   70)
67715* __builtin_cpu_supports <1>:            x86 Built-in Functions.
67716                                                             (line  252)
67717* __builtin_ctz:                         Other Builtins.     (line  969)
67718* __builtin_ctzl:                        Other Builtins.     (line  991)
67719* __builtin_ctzll:                       Other Builtins.     (line 1014)
67720* __builtin_divf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
67721                                                             (line   29)
67722* __builtin_dynamic_object_size:         Object Size Checking.
67723                                                             (line    6)
67724* __builtin_dynamic_object_size <1>:     Object Size Checking.
67725                                                             (line   53)
67726* __builtin_expect:                      Other Builtins.     (line  595)
67727* __builtin_expect_with_probability:     Other Builtins.     (line  630)
67728* __builtin_extend_pointer:              Other Builtins.     (line    6)
67729* __builtin_extend_pointer <1>:          Other Builtins.     (line 1060)
67730* __builtin_extract_return_addr:         Return Address.     (line   50)
67731* __builtin_ffs:                         Other Builtins.     (line  961)
67732* __builtin_ffsl:                        Other Builtins.     (line  984)
67733* __builtin_ffsll:                       Other Builtins.     (line 1006)
67734* __builtin_FILE:                        Other Builtins.     (line  743)
67735* __builtin_fmaf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
67736                                                             (line   37)
67737* __builtin_fpclassify:                  Other Builtins.     (line    6)
67738* __builtin_fpclassify <1>:              Other Builtins.     (line  845)
67739* __builtin_frame_address:               Return Address.     (line   62)
67740* __builtin_frob_return_addr:            Return Address.     (line   59)
67741* __builtin_FUNCTION:                    Other Builtins.     (line  735)
67742* __builtin_goacc_parlevel_id:           Other Builtins.     (line 1067)
67743* __builtin_goacc_parlevel_size:         Other Builtins.     (line 1071)
67744* __builtin_has_attribute:               Other Builtins.     (line    6)
67745* __builtin_has_attribute <1>:           Other Builtins.     (line  228)
67746* __builtin_huge_val:                    Other Builtins.     (line  825)
67747* __builtin_huge_valf:                   Other Builtins.     (line  830)
67748* __builtin_huge_valfN:                  Other Builtins.     (line  837)
67749* __builtin_huge_valfNx:                 Other Builtins.     (line  841)
67750* __builtin_huge_vall:                   Other Builtins.     (line  833)
67751* __builtin_huge_valq:                   x86 Built-in Functions.
67752                                                             (line   50)
67753* __builtin_inf:                         Other Builtins.     (line  856)
67754* __builtin_infd128:                     Other Builtins.     (line  866)
67755* __builtin_infd32:                      Other Builtins.     (line  860)
67756* __builtin_infd64:                      Other Builtins.     (line  863)
67757* __builtin_inff:                        Other Builtins.     (line  870)
67758* __builtin_inffN:                       Other Builtins.     (line  879)
67759* __builtin_inffNx:                      Other Builtins.     (line  882)
67760* __builtin_infl:                        Other Builtins.     (line  875)
67761* __builtin_infq:                        x86 Built-in Functions.
67762                                                             (line   47)
67763* __builtin_isfinite:                    Other Builtins.     (line    6)
67764* __builtin_isgreater:                   Other Builtins.     (line    6)
67765* __builtin_isgreaterequal:              Other Builtins.     (line    6)
67766* __builtin_isinf_sign:                  Other Builtins.     (line    6)
67767* __builtin_isinf_sign <1>:              Other Builtins.     (line  885)
67768* __builtin_isless:                      Other Builtins.     (line    6)
67769* __builtin_islessequal:                 Other Builtins.     (line    6)
67770* __builtin_islessgreater:               Other Builtins.     (line    6)
67771* __builtin_isnormal:                    Other Builtins.     (line    6)
67772* __builtin_isunordered:                 Other Builtins.     (line    6)
67773* __builtin_is_constant_evaluated:       Other Builtins.     (line  543)
67774* __builtin_LINE:                        Other Builtins.     (line  728)
67775* __builtin_longjmp:                     Nonlocal Gotos.     (line   37)
67776* __builtin_mulf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
67777                                                             (line   25)
67778* __builtin_mul_overflow:                Integer Overflow Builtins.
67779                                                             (line   63)
67780* __builtin_mul_overflow_p:              Integer Overflow Builtins.
67781                                                             (line   90)
67782* __builtin_nan:                         Other Builtins.     (line  893)
67783* __builtin_nand128:                     Other Builtins.     (line  915)
67784* __builtin_nand32:                      Other Builtins.     (line  909)
67785* __builtin_nand64:                      Other Builtins.     (line  912)
67786* __builtin_nanf:                        Other Builtins.     (line  919)
67787* __builtin_nanfN:                       Other Builtins.     (line  926)
67788* __builtin_nanfNx:                      Other Builtins.     (line  929)
67789* __builtin_nanl:                        Other Builtins.     (line  922)
67790* __builtin_nanq:                        x86 Built-in Functions.
67791                                                             (line   54)
67792* __builtin_nans:                        Other Builtins.     (line  932)
67793* __builtin_nansd128:                    Other Builtins.     (line  944)
67794* __builtin_nansd32:                     Other Builtins.     (line  936)
67795* __builtin_nansd64:                     Other Builtins.     (line  940)
67796* __builtin_nansf:                       Other Builtins.     (line  948)
67797* __builtin_nansfN:                      Other Builtins.     (line  955)
67798* __builtin_nansfNx:                     Other Builtins.     (line  958)
67799* __builtin_nansl:                       Other Builtins.     (line  951)
67800* __builtin_nansq:                       x86 Built-in Functions.
67801                                                             (line   57)
67802* __builtin_nds32_isb:                   NDS32 Built-in Functions.
67803                                                             (line   12)
67804* __builtin_nds32_isync:                 NDS32 Built-in Functions.
67805                                                             (line    8)
67806* __builtin_nds32_mfsr:                  NDS32 Built-in Functions.
67807                                                             (line   15)
67808* __builtin_nds32_mfusr:                 NDS32 Built-in Functions.
67809                                                             (line   18)
67810* __builtin_nds32_mtsr:                  NDS32 Built-in Functions.
67811                                                             (line   21)
67812* __builtin_nds32_mtusr:                 NDS32 Built-in Functions.
67813                                                             (line   24)
67814* __builtin_nds32_setgie_dis:            NDS32 Built-in Functions.
67815                                                             (line   30)
67816* __builtin_nds32_setgie_en:             NDS32 Built-in Functions.
67817                                                             (line   27)
67818* __builtin_non_tx_store:                S/390 System z Built-in Functions.
67819                                                             (line   98)
67820* __builtin_object_size:                 Object Size Checking.
67821                                                             (line    6)
67822* __builtin_object_size <1>:             Object Size Checking.
67823                                                             (line   16)
67824* __builtin_object_size <2>:             Other Builtins.     (line    6)
67825* __builtin_object_size <3>:             Other Builtins.     (line  820)
67826* __builtin_offsetof:                    Offsetof.           (line    6)
67827* __builtin_parity:                      Other Builtins.     (line  981)
67828* __builtin_parityl:                     Other Builtins.     (line 1002)
67829* __builtin_parityll:                    Other Builtins.     (line 1026)
67830* __builtin_pdepd:                       Basic PowerPC Built-in Functions Available on ISA 3.1.
67831                                                             (line   33)
67832* __builtin_pextd:                       Basic PowerPC Built-in Functions Available on ISA 3.1.
67833                                                             (line   38)
67834* __builtin_popcount:                    Other Builtins.     (line  978)
67835* __builtin_popcountl:                   Other Builtins.     (line  998)
67836* __builtin_popcountll:                  Other Builtins.     (line 1022)
67837* __builtin_powi:                        Other Builtins.     (line    6)
67838* __builtin_powi <1>:                    Other Builtins.     (line 1030)
67839* __builtin_powif:                       Other Builtins.     (line    6)
67840* __builtin_powif <1>:                   Other Builtins.     (line 1035)
67841* __builtin_powil:                       Other Builtins.     (line    6)
67842* __builtin_powil <1>:                   Other Builtins.     (line 1039)
67843* __builtin_prefetch:                    Other Builtins.     (line  781)
67844* __builtin_return:                      Constructing Calls. (line   47)
67845* __builtin_return_address:              Return Address.     (line    9)
67846* __builtin_rx_brk:                      RX Built-in Functions.
67847                                                             (line   10)
67848* __builtin_rx_clrpsw:                   RX Built-in Functions.
67849                                                             (line   13)
67850* __builtin_rx_int:                      RX Built-in Functions.
67851                                                             (line   17)
67852* __builtin_rx_machi:                    RX Built-in Functions.
67853                                                             (line   21)
67854* __builtin_rx_maclo:                    RX Built-in Functions.
67855                                                             (line   26)
67856* __builtin_rx_mulhi:                    RX Built-in Functions.
67857                                                             (line   31)
67858* __builtin_rx_mullo:                    RX Built-in Functions.
67859                                                             (line   36)
67860* __builtin_rx_mvfachi:                  RX Built-in Functions.
67861                                                             (line   41)
67862* __builtin_rx_mvfacmi:                  RX Built-in Functions.
67863                                                             (line   45)
67864* __builtin_rx_mvfc:                     RX Built-in Functions.
67865                                                             (line   49)
67866* __builtin_rx_mvtachi:                  RX Built-in Functions.
67867                                                             (line   53)
67868* __builtin_rx_mvtaclo:                  RX Built-in Functions.
67869                                                             (line   57)
67870* __builtin_rx_mvtc:                     RX Built-in Functions.
67871                                                             (line   61)
67872* __builtin_rx_mvtipl:                   RX Built-in Functions.
67873                                                             (line   65)
67874* __builtin_rx_racw:                     RX Built-in Functions.
67875                                                             (line   69)
67876* __builtin_rx_revw:                     RX Built-in Functions.
67877                                                             (line   73)
67878* __builtin_rx_rmpa:                     RX Built-in Functions.
67879                                                             (line   78)
67880* __builtin_rx_round:                    RX Built-in Functions.
67881                                                             (line   82)
67882* __builtin_rx_sat:                      RX Built-in Functions.
67883                                                             (line   87)
67884* __builtin_rx_setpsw:                   RX Built-in Functions.
67885                                                             (line   91)
67886* __builtin_rx_wait:                     RX Built-in Functions.
67887                                                             (line   95)
67888* __builtin_saddll_overflow:             Integer Overflow Builtins.
67889                                                             (line   15)
67890* __builtin_saddl_overflow:              Integer Overflow Builtins.
67891                                                             (line   13)
67892* __builtin_sadd_overflow:               Integer Overflow Builtins.
67893                                                             (line   11)
67894* __builtin_setjmp:                      Nonlocal Gotos.     (line   32)
67895* __builtin_set_thread_pointer:          SH Built-in Functions.
67896                                                             (line    9)
67897* __builtin_shuffle:                     Vector Extensions.  (line  127)
67898* __builtin_shufflevector:               Vector Extensions.  (line  165)
67899* __builtin_sh_get_fpscr:                SH Built-in Functions.
67900                                                             (line   35)
67901* __builtin_sh_set_fpscr:                SH Built-in Functions.
67902                                                             (line   38)
67903* __builtin_smulll_overflow:             Integer Overflow Builtins.
67904                                                             (line   69)
67905* __builtin_smull_overflow:              Integer Overflow Builtins.
67906                                                             (line   67)
67907* __builtin_smul_overflow:               Integer Overflow Builtins.
67908                                                             (line   65)
67909* __builtin_speculation_safe_value:      Other Builtins.     (line    6)
67910* __builtin_speculation_safe_value <1>:  Other Builtins.     (line  269)
67911* __builtin_sqrtf128_round_to_odd:       Basic PowerPC Built-in Functions Available on ISA 3.0.
67912                                                             (line   33)
67913* __builtin_ssubll_overflow:             Integer Overflow Builtins.
67914                                                             (line   49)
67915* __builtin_ssubl_overflow:              Integer Overflow Builtins.
67916                                                             (line   47)
67917* __builtin_ssub_overflow:               Integer Overflow Builtins.
67918                                                             (line   45)
67919* __builtin_subf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
67920                                                             (line   21)
67921* __builtin_sub_overflow:                Integer Overflow Builtins.
67922                                                             (line   43)
67923* __builtin_sub_overflow_p:              Integer Overflow Builtins.
67924                                                             (line   88)
67925* __builtin_tabort:                      S/390 System z Built-in Functions.
67926                                                             (line   82)
67927* __builtin_tbegin:                      S/390 System z Built-in Functions.
67928                                                             (line    6)
67929* __builtin_tbeginc:                     S/390 System z Built-in Functions.
67930                                                             (line   73)
67931* __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
67932                                                             (line   54)
67933* __builtin_tbegin_retry:                S/390 System z Built-in Functions.
67934                                                             (line   60)
67935* __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
67936                                                             (line   67)
67937* __builtin_tend:                        S/390 System z Built-in Functions.
67938                                                             (line   77)
67939* __builtin_tgmath:                      Other Builtins.     (line  444)
67940* __builtin_thread_pointer:              RISC-V Built-in Functions.
67941                                                             (line    9)
67942* __builtin_thread_pointer <1>:          SH Built-in Functions.
67943                                                             (line   18)
67944* __builtin_trap:                        Other Builtins.     (line  639)
67945* __builtin_truncf128_round_to_odd:      Basic PowerPC Built-in Functions Available on ISA 3.0.
67946                                                             (line   41)
67947* __builtin_tx_assist:                   S/390 System z Built-in Functions.
67948                                                             (line   87)
67949* __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
67950                                                             (line   93)
67951* __builtin_types_compatible_p:          Other Builtins.     (line  348)
67952* __builtin_uaddll_overflow:             Integer Overflow Builtins.
67953                                                             (line   21)
67954* __builtin_uaddl_overflow:              Integer Overflow Builtins.
67955                                                             (line   19)
67956* __builtin_uadd_overflow:               Integer Overflow Builtins.
67957                                                             (line   17)
67958* __builtin_umulll_overflow:             Integer Overflow Builtins.
67959                                                             (line   75)
67960* __builtin_umull_overflow:              Integer Overflow Builtins.
67961                                                             (line   73)
67962* __builtin_umul_overflow:               Integer Overflow Builtins.
67963                                                             (line   71)
67964* __builtin_unreachable:                 Other Builtins.     (line  646)
67965* __builtin_usubll_overflow:             Integer Overflow Builtins.
67966                                                             (line   55)
67967* __builtin_usubl_overflow:              Integer Overflow Builtins.
67968                                                             (line   53)
67969* __builtin_usub_overflow:               Integer Overflow Builtins.
67970                                                             (line   51)
67971* __builtin_va_arg_pack:                 Constructing Calls. (line   52)
67972* __builtin_va_arg_pack_len:             Constructing Calls. (line   75)
67973* __builtin___clear_cache:               Other Builtins.     (line  768)
67974* __builtin___fprintf_chk:               Object Size Checking.
67975                                                             (line    6)
67976* __builtin___memcpy_chk:                Object Size Checking.
67977                                                             (line    6)
67978* __builtin___memmove_chk:               Object Size Checking.
67979                                                             (line    6)
67980* __builtin___mempcpy_chk:               Object Size Checking.
67981                                                             (line    6)
67982* __builtin___memset_chk:                Object Size Checking.
67983                                                             (line    6)
67984* __builtin___printf_chk:                Object Size Checking.
67985                                                             (line    6)
67986* __builtin___snprintf_chk:              Object Size Checking.
67987                                                             (line    6)
67988* __builtin___sprintf_chk:               Object Size Checking.
67989                                                             (line    6)
67990* __builtin___stpcpy_chk:                Object Size Checking.
67991                                                             (line    6)
67992* __builtin___strcat_chk:                Object Size Checking.
67993                                                             (line    6)
67994* __builtin___strcpy_chk:                Object Size Checking.
67995                                                             (line    6)
67996* __builtin___strncat_chk:               Object Size Checking.
67997                                                             (line    6)
67998* __builtin___strncpy_chk:               Object Size Checking.
67999                                                             (line    6)
68000* __builtin___vfprintf_chk:              Object Size Checking.
68001                                                             (line    6)
68002* __builtin___vprintf_chk:               Object Size Checking.
68003                                                             (line    6)
68004* __builtin___vsnprintf_chk:             Object Size Checking.
68005                                                             (line    6)
68006* __builtin___vsprintf_chk:              Object Size Checking.
68007                                                             (line    6)
68008* __complex__ keyword:                   Complex.            (line    6)
68009* __declspec(dllexport):                 Microsoft Windows Function Attributes.
68010                                                             (line   10)
68011* __declspec(dllimport):                 Microsoft Windows Function Attributes.
68012                                                             (line   42)
68013* __extension__:                         Alternate Keywords. (line   30)
68014* __far M32C Named Address Spaces:       Named Address Spaces.
68015                                                             (line  153)
68016* __far RL78 Named Address Spaces:       Named Address Spaces.
68017                                                             (line  177)
68018* __flash AVR Named Address Spaces:      Named Address Spaces.
68019                                                             (line   44)
68020* __flash1 AVR Named Address Spaces:     Named Address Spaces.
68021                                                             (line   53)
68022* __flash2 AVR Named Address Spaces:     Named Address Spaces.
68023                                                             (line   53)
68024* __flash3 AVR Named Address Spaces:     Named Address Spaces.
68025                                                             (line   53)
68026* __flash4 AVR Named Address Spaces:     Named Address Spaces.
68027                                                             (line   53)
68028* __flash5 AVR Named Address Spaces:     Named Address Spaces.
68029                                                             (line   53)
68030* __float128 data type:                  Floating Types.     (line    6)
68031* __Float16 data type:                   Half-Precision.     (line    6)
68032* __float80 data type:                   Floating Types.     (line    6)
68033* __fp16 data type:                      Half-Precision.     (line    6)
68034* __FUNCTION__ identifier:               Function Names.     (line    6)
68035* __func__ identifier:                   Function Names.     (line    6)
68036* __ibm128 data type:                    Floating Types.     (line    6)
68037* __imag__ keyword:                      Complex.            (line   43)
68038* __int128 data types:                   __int128.           (line    6)
68039* __memx AVR Named Address Spaces:       Named Address Spaces.
68040                                                             (line   59)
68041* __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
68042* __real__ keyword:                      Complex.            (line   43)
68043* __regio_symbol PRU Named Address Spaces: Named Address Spaces.
68044                                                             (line  162)
68045* __seg_fs x86 named address space:      Named Address Spaces.
68046                                                             (line  190)
68047* __seg_gs x86 named address space:      Named Address Spaces.
68048                                                             (line  190)
68049* __STDC_HOSTED__:                       Standards.          (line   13)
68050* __sync_add_and_fetch:                  __sync Builtins.    (line   72)
68051* __sync_and_and_fetch:                  __sync Builtins.    (line   72)
68052* __sync_bool_compare_and_swap:          __sync Builtins.    (line   88)
68053* __sync_fetch_and_add:                  __sync Builtins.    (line   50)
68054* __sync_fetch_and_and:                  __sync Builtins.    (line   50)
68055* __sync_fetch_and_nand:                 __sync Builtins.    (line   50)
68056* __sync_fetch_and_or:                   __sync Builtins.    (line   50)
68057* __sync_fetch_and_sub:                  __sync Builtins.    (line   50)
68058* __sync_fetch_and_xor:                  __sync Builtins.    (line   50)
68059* __sync_lock_release:                   __sync Builtins.    (line  118)
68060* __sync_lock_test_and_set:              __sync Builtins.    (line  100)
68061* __sync_nand_and_fetch:                 __sync Builtins.    (line   72)
68062* __sync_or_and_fetch:                   __sync Builtins.    (line   72)
68063* __sync_sub_and_fetch:                  __sync Builtins.    (line   72)
68064* __sync_synchronize:                    __sync Builtins.    (line   97)
68065* __sync_val_compare_and_swap:           __sync Builtins.    (line   88)
68066* __sync_xor_and_fetch:                  __sync Builtins.    (line   72)
68067* __thread:                              Thread-Local.       (line    6)
68068* AArch64 Options:                       AArch64 Options.    (line    6)
68069* ABI:                                   Compatibility.      (line    6)
68070* abi_tag function attribute:            C++ Attributes.     (line    9)
68071* abi_tag type attribute:                C++ Attributes.     (line    9)
68072* abi_tag variable attribute:            C++ Attributes.     (line    9)
68073* abort:                                 Other Builtins.     (line    6)
68074* abs:                                   Other Builtins.     (line    6)
68075* absdata variable attribute, AVR:       AVR Variable Attributes.
68076                                                             (line  104)
68077* accessing volatiles:                   Volatiles.          (line    6)
68078* accessing volatiles <1>:               C++ Volatiles.      (line    6)
68079* acos:                                  Other Builtins.     (line    6)
68080* acosf:                                 Other Builtins.     (line    6)
68081* acosh:                                 Other Builtins.     (line    6)
68082* acoshf:                                Other Builtins.     (line    6)
68083* acoshl:                                Other Builtins.     (line    6)
68084* acosl:                                 Other Builtins.     (line    6)
68085* Ada:                                   G++ and GCC.        (line    6)
68086* Ada <1>:                               G++ and GCC.        (line   29)
68087* additional floating types:             Floating Types.     (line    6)
68088* address constraints:                   Simple Constraints. (line  152)
68089* address of a label:                    Labels as Values.   (line    6)
68090* address variable attribute, AVR:       AVR Variable Attributes.
68091                                                             (line   97)
68092* address_operand:                       Simple Constraints. (line  156)
68093* alias function attribute:              Common Function Attributes.
68094                                                             (line   93)
68095* alias variable attribute:              Common Variable Attributes.
68096                                                             (line    9)
68097* aligned function attribute:            Common Function Attributes.
68098                                                             (line  112)
68099* aligned type attribute:                Common Type Attributes.
68100                                                             (line    8)
68101* aligned variable attribute:            Common Variable Attributes.
68102                                                             (line   31)
68103* alignment:                             Alignment.          (line    6)
68104* alloca:                                Other Builtins.     (line    6)
68105* alloca vs variable-length arrays:      Variable Length.    (line   35)
68106* alloc_align function attribute:        Common Function Attributes.
68107                                                             (line  140)
68108* alloc_size function attribute:         Common Function Attributes.
68109                                                             (line  160)
68110* alloc_size type attribute:             Common Type Attributes.
68111                                                             (line  136)
68112* alloc_size variable attribute:         Common Variable Attributes.
68113                                                             (line  137)
68114* Allow nesting in an interrupt handler on the Blackfin processor: Blackfin Function Attributes.
68115                                                             (line   45)
68116* Altera Nios II options:                Nios II Options.    (line    6)
68117* alternate keywords:                    Alternate Keywords. (line    6)
68118* altivec type attribute, PowerPC:       PowerPC Type Attributes.
68119                                                             (line   12)
68120* altivec variable attribute, PowerPC:   PowerPC Variable Attributes.
68121                                                             (line   12)
68122* always_inline function attribute:      Common Function Attributes.
68123                                                             (line  186)
68124* AMD GCN Options:                       AMD GCN Options.    (line    6)
68125* AMD1:                                  Standards.          (line   13)
68126* amdgpu_hsa_kernel function attribute, AMD GCN: AMD GCN Function Attributes.
68127                                                             (line    9)
68128* ANSI C:                                Standards.          (line   13)
68129* ANSI C standard:                       Standards.          (line   13)
68130* ANSI C89:                              Standards.          (line   13)
68131* ANSI support:                          C Dialect Options.  (line   10)
68132* ANSI X3.159-1989:                      Standards.          (line   13)
68133* apostrophes:                           Incompatibilities.  (line  116)
68134* application binary interface:          Compatibility.      (line    6)
68135* ARC options:                           ARC Options.        (line    6)
68136* arch= function attribute, AArch64:     AArch64 Function Attributes.
68137                                                             (line   53)
68138* arch= function attribute, ARM:         ARM Function Attributes.
68139                                                             (line   98)
68140* ARM options:                           ARM Options.        (line    6)
68141* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
68142                                                             (line    6)
68143* arrays of length zero:                 Zero Length.        (line    6)
68144* arrays of variable length:             Variable Length.    (line    6)
68145* arrays, non-lvalue:                    Subscripting.       (line    6)
68146* artificial function attribute:         Common Function Attributes.
68147                                                             (line  196)
68148* asin:                                  Other Builtins.     (line    6)
68149* asinf:                                 Other Builtins.     (line    6)
68150* asinh:                                 Other Builtins.     (line    6)
68151* asinhf:                                Other Builtins.     (line    6)
68152* asinhl:                                Other Builtins.     (line    6)
68153* asinl:                                 Other Builtins.     (line    6)
68154* asm assembler template:                Extended Asm.       (line  226)
68155* asm clobbers:                          Extended Asm.       (line  693)
68156* asm constraints:                       Constraints.        (line    6)
68157* asm expressions:                       Extended Asm.       (line  598)
68158* asm flag output operands:              Extended Asm.       (line  488)
68159* asm goto labels:                       Extended Asm.       (line  880)
68160* asm inline:                            Size of an asm.     (line   25)
68161* asm input operands:                    Extended Asm.       (line  598)
68162* asm keyword:                           Using Assembly Language with C.
68163                                                             (line    6)
68164* asm output operands:                   Extended Asm.       (line  329)
68165* asm scratch registers:                 Extended Asm.       (line  693)
68166* asm volatile:                          Extended Asm.       (line  116)
68167* assembler names for identifiers:       Asm Labels.         (line    6)
68168* assembly code, invalid:                Bug Criteria.       (line   12)
68169* assembly language in C:                Using Assembly Language with C.
68170                                                             (line    6)
68171* assembly language in C, basic:         Basic Asm.          (line    6)
68172* assembly language in C, extended:      Extended Asm.       (line    6)
68173* assume_aligned function attribute:     Common Function Attributes.
68174                                                             (line  204)
68175* atan:                                  Other Builtins.     (line    6)
68176* atan2:                                 Other Builtins.     (line    6)
68177* atan2f:                                Other Builtins.     (line    6)
68178* atan2l:                                Other Builtins.     (line    6)
68179* atanf:                                 Other Builtins.     (line    6)
68180* atanh:                                 Other Builtins.     (line    6)
68181* atanhf:                                Other Builtins.     (line    6)
68182* atanhl:                                Other Builtins.     (line    6)
68183* atanl:                                 Other Builtins.     (line    6)
68184* attribute of types:                    Type Attributes.    (line    6)
68185* attribute of variables:                Variable Attributes.
68186                                                             (line    6)
68187* attribute syntax:                      Attribute Syntax.   (line    6)
68188* autoincrement/decrement addressing:    Simple Constraints. (line   30)
68189* automatic inline for C++ member fns:   Inline.             (line   68)
68190* aux variable attribute, ARC:           ARC Variable Attributes.
68191                                                             (line    7)
68192* AVR Options:                           AVR Options.        (line    6)
68193* Backwards Compatibility:               Backwards Compatibility.
68194                                                             (line    6)
68195* bank_switch function attribute, M32C:  M32C Function Attributes.
68196                                                             (line    9)
68197* base class members:                    Name lookup.        (line    6)
68198* based type attribute, MeP:             MeP Type Attributes.
68199                                                             (line    6)
68200* based variable attribute, MeP:         MeP Variable Attributes.
68201                                                             (line   16)
68202* basic asm:                             Basic Asm.          (line    6)
68203* bcmp:                                  Other Builtins.     (line    6)
68204* below100 variable attribute, Xstormy16: Xstormy16 Variable Attributes.
68205                                                             (line   10)
68206* binary compatibility:                  Compatibility.      (line    6)
68207* Binary constants using the 0b prefix:  Binary constants.   (line    6)
68208* Blackfin Options:                      Blackfin Options.   (line    6)
68209* bound pointer to member function:      Bound member functions.
68210                                                             (line    6)
68211* branch-protection function attribute, AArch64: AArch64 Function Attributes.
68212                                                             (line   76)
68213* break handler functions:               MicroBlaze Function Attributes.
68214                                                             (line   17)
68215* break_handler function attribute, MicroBlaze: MicroBlaze Function Attributes.
68216                                                             (line   17)
68217* brk_interrupt function attribute, RL78: RL78 Function Attributes.
68218                                                             (line   10)
68219* bug criteria:                          Bug Criteria.       (line    6)
68220* bugs:                                  Bugs.               (line    6)
68221* bugs, known:                           Trouble.            (line    6)
68222* built-in functions:                    C Dialect Options.  (line  239)
68223* built-in functions <1>:                Other Builtins.     (line    6)
68224* bzero:                                 Other Builtins.     (line    6)
68225* C compilation options:                 Invoking GCC.       (line   18)
68226* C intermediate output, nonexistent:    G++ and GCC.        (line   34)
68227* C language extensions:                 C Extensions.       (line    6)
68228* C language, traditional:               Preprocessor Options.
68229                                                             (line  375)
68230* C standard:                            Standards.          (line   13)
68231* C standards:                           Standards.          (line   13)
68232* c++:                                   Invoking G++.       (line   14)
68233* C++:                                   G++ and GCC.        (line   29)
68234* C++ comments:                          C++ Comments.       (line    6)
68235* C++ Compiled Module Interface:         C++ Compiled Module Interface.
68236                                                             (line    6)
68237* C++ interface and implementation headers: C++ Interface.   (line    6)
68238* C++ language extensions:               C++ Extensions.     (line    6)
68239* C++ member fns, automatically inline:  Inline.             (line   68)
68240* C++ misunderstandings:                 C++ Misunderstandings.
68241                                                             (line    6)
68242* C++ Module Mapper:                     C++ Module Mapper.  (line    6)
68243* C++ Module Preprocessing:              C++ Module Preprocessing.
68244                                                             (line    6)
68245* C++ options, command-line:             C++ Dialect Options.
68246                                                             (line    6)
68247* C++ pragmas, effect on inlining:       C++ Interface.      (line   57)
68248* C++ source file suffixes:              Invoking G++.       (line    6)
68249* C++ static data, declaring and defining: Static Definitions.
68250                                                             (line    6)
68251* C-SKY Options:                         C-SKY Options.      (line    6)
68252* C11:                                   Standards.          (line   13)
68253* C17:                                   Standards.          (line   13)
68254* C1X:                                   Standards.          (line   13)
68255* C2X:                                   Standards.          (line   13)
68256* C6X Options:                           C6X Options.        (line    6)
68257* C89:                                   Standards.          (line   13)
68258* C90:                                   Standards.          (line   13)
68259* C94:                                   Standards.          (line   13)
68260* C95:                                   Standards.          (line   13)
68261* C99:                                   Standards.          (line   13)
68262* C9X:                                   Standards.          (line   13)
68263* cabs:                                  Other Builtins.     (line    6)
68264* cabsf:                                 Other Builtins.     (line    6)
68265* cabsl:                                 Other Builtins.     (line    6)
68266* cacos:                                 Other Builtins.     (line    6)
68267* cacosf:                                Other Builtins.     (line    6)
68268* cacosh:                                Other Builtins.     (line    6)
68269* cacoshf:                               Other Builtins.     (line    6)
68270* cacoshl:                               Other Builtins.     (line    6)
68271* cacosl:                                Other Builtins.     (line    6)
68272* callee_pop_aggregate_return function attribute, x86: x86 Function Attributes.
68273                                                             (line   47)
68274* calling functions through the function vector on SH2A: SH Function Attributes.
68275                                                             (line    9)
68276* calloc:                                Other Builtins.     (line    6)
68277* carg:                                  Other Builtins.     (line    6)
68278* cargf:                                 Other Builtins.     (line    6)
68279* cargl:                                 Other Builtins.     (line    6)
68280* case labels in initializers:           Designated Inits.   (line    6)
68281* case ranges:                           Case Ranges.        (line    6)
68282* casin:                                 Other Builtins.     (line    6)
68283* casinf:                                Other Builtins.     (line    6)
68284* casinh:                                Other Builtins.     (line    6)
68285* casinhf:                               Other Builtins.     (line    6)
68286* casinhl:                               Other Builtins.     (line    6)
68287* casinl:                                Other Builtins.     (line    6)
68288* cast to a union:                       Cast to Union.      (line    6)
68289* catan:                                 Other Builtins.     (line    6)
68290* catanf:                                Other Builtins.     (line    6)
68291* catanh:                                Other Builtins.     (line    6)
68292* catanhf:                               Other Builtins.     (line    6)
68293* catanhl:                               Other Builtins.     (line    6)
68294* catanl:                                Other Builtins.     (line    6)
68295* cb variable attribute, MeP:            MeP Variable Attributes.
68296                                                             (line   46)
68297* cbrt:                                  Other Builtins.     (line    6)
68298* cbrtf:                                 Other Builtins.     (line    6)
68299* cbrtl:                                 Other Builtins.     (line    6)
68300* ccos:                                  Other Builtins.     (line    6)
68301* ccosf:                                 Other Builtins.     (line    6)
68302* ccosh:                                 Other Builtins.     (line    6)
68303* ccoshf:                                Other Builtins.     (line    6)
68304* ccoshl:                                Other Builtins.     (line    6)
68305* ccosl:                                 Other Builtins.     (line    6)
68306* cdecl function attribute, x86-32:      x86 Function Attributes.
68307                                                             (line    9)
68308* ceil:                                  Other Builtins.     (line    6)
68309* ceilf:                                 Other Builtins.     (line    6)
68310* ceill:                                 Other Builtins.     (line    6)
68311* cexp:                                  Other Builtins.     (line    6)
68312* cexpf:                                 Other Builtins.     (line    6)
68313* cexpl:                                 Other Builtins.     (line    6)
68314* cf_check function attribute, x86:      x86 Function Attributes.
68315                                                             (line  689)
68316* character set, execution:              Preprocessor Options.
68317                                                             (line  273)
68318* character set, input:                  Preprocessor Options.
68319                                                             (line  288)
68320* character set, input normalization:    Warning Options.    (line 3029)
68321* character set, wide execution:         Preprocessor Options.
68322                                                             (line  278)
68323* cimag:                                 Other Builtins.     (line    6)
68324* cimagf:                                Other Builtins.     (line    6)
68325* cimagl:                                Other Builtins.     (line    6)
68326* cleanup variable attribute:            Common Variable Attributes.
68327                                                             (line  161)
68328* clog:                                  Other Builtins.     (line    6)
68329* clog10:                                Other Builtins.     (line    6)
68330* clog10f:                               Other Builtins.     (line    6)
68331* clog10l:                               Other Builtins.     (line    6)
68332* clogf:                                 Other Builtins.     (line    6)
68333* clogl:                                 Other Builtins.     (line    6)
68334* cmodel= function attribute, AArch64:   AArch64 Function Attributes.
68335                                                             (line   27)
68336* COBOL:                                 G++ and GCC.        (line   23)
68337* code generation conventions:           Code Gen Options.   (line    6)
68338* code, mixed with declarations:         Mixed Labels and Declarations.
68339                                                             (line    6)
68340* cold function attribute:               Common Function Attributes.
68341                                                             (line  220)
68342* cold label attribute:                  Label Attributes.   (line   46)
68343* command options:                       Invoking GCC.       (line    6)
68344* comments, C++ style:                   C++ Comments.       (line    6)
68345* common variable attribute:             Common Variable Attributes.
68346                                                             (line  176)
68347* comparison of signed and unsigned values, warning: Warning Options.
68348                                                             (line 2691)
68349* compilation statistics:                Developer Options.  (line    6)
68350* compiler bugs, reporting:              Bug Reporting.      (line    6)
68351* compiler compared to C++ preprocessor: G++ and GCC.        (line   34)
68352* compiler options, C++:                 C++ Dialect Options.
68353                                                             (line    6)
68354* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
68355                                                             (line    6)
68356* compiler version, specifying:          Invoking GCC.       (line   24)
68357* COMPILER_PATH:                         Environment Variables.
68358                                                             (line   91)
68359* complex conjugation:                   Complex.            (line   64)
68360* complex numbers:                       Complex.            (line    6)
68361* compound literals:                     Compound Literals.  (line    6)
68362* computed gotos:                        Labels as Values.   (line    6)
68363* conditional expressions, extensions:   Conditionals.       (line    6)
68364* conflicting types:                     Disappointments.    (line   21)
68365* conj:                                  Other Builtins.     (line    6)
68366* conjf:                                 Other Builtins.     (line    6)
68367* conjl:                                 Other Builtins.     (line    6)
68368* const applied to function:             Function Attributes.
68369                                                             (line    6)
68370* const function attribute:              Common Function Attributes.
68371                                                             (line  236)
68372* const qualifier:                       Pointers to Arrays. (line    6)
68373* constants in constraints:              Simple Constraints. (line   68)
68374* constraint modifier characters:        Modifiers.          (line    6)
68375* constraint, matching:                  Simple Constraints. (line  137)
68376* constraints, asm:                      Constraints.        (line    6)
68377* constraints, machine specific:         Machine Constraints.
68378                                                             (line    6)
68379* constructing calls:                    Constructing Calls. (line    6)
68380* constructor expressions:               Compound Literals.  (line    6)
68381* constructor function attribute:        Common Function Attributes.
68382                                                             (line  277)
68383* contributors:                          Contributors.       (line    6)
68384* copy function attribute:               Common Function Attributes.
68385                                                             (line  306)
68386* copy type attribute:                   Common Type Attributes.
68387                                                             (line  161)
68388* copy variable attribute:               Common Variable Attributes.
68389                                                             (line  185)
68390* copysign:                              Other Builtins.     (line    6)
68391* copysignf:                             Other Builtins.     (line    6)
68392* copysignl:                             Other Builtins.     (line    6)
68393* core dump:                             Bug Criteria.       (line    9)
68394* cos:                                   Other Builtins.     (line    6)
68395* cosf:                                  Other Builtins.     (line    6)
68396* cosh:                                  Other Builtins.     (line    6)
68397* coshf:                                 Other Builtins.     (line    6)
68398* coshl:                                 Other Builtins.     (line    6)
68399* cosl:                                  Other Builtins.     (line    6)
68400* CPATH:                                 Environment Variables.
68401                                                             (line  144)
68402* CPLUS_INCLUDE_PATH:                    Environment Variables.
68403                                                             (line  146)
68404* cpow:                                  Other Builtins.     (line    6)
68405* cpowf:                                 Other Builtins.     (line    6)
68406* cpowl:                                 Other Builtins.     (line    6)
68407* cproj:                                 Other Builtins.     (line    6)
68408* cprojf:                                Other Builtins.     (line    6)
68409* cprojl:                                Other Builtins.     (line    6)
68410* cpu= function attribute, AArch64:      AArch64 Function Attributes.
68411                                                             (line   63)
68412* CR16 Options:                          CR16 Options.       (line    6)
68413* creal:                                 Other Builtins.     (line    6)
68414* crealf:                                Other Builtins.     (line    6)
68415* creall:                                Other Builtins.     (line    6)
68416* CRIS Options:                          CRIS Options.       (line    6)
68417* critical function attribute, MSP430:   MSP430 Function Attributes.
68418                                                             (line    9)
68419* cross compiling:                       Invoking GCC.       (line   24)
68420* csin:                                  Other Builtins.     (line    6)
68421* csinf:                                 Other Builtins.     (line    6)
68422* csinh:                                 Other Builtins.     (line    6)
68423* csinhf:                                Other Builtins.     (line    6)
68424* csinhl:                                Other Builtins.     (line    6)
68425* csinl:                                 Other Builtins.     (line    6)
68426* csqrt:                                 Other Builtins.     (line    6)
68427* csqrtf:                                Other Builtins.     (line    6)
68428* csqrtl:                                Other Builtins.     (line    6)
68429* ctan:                                  Other Builtins.     (line    6)
68430* ctanf:                                 Other Builtins.     (line    6)
68431* ctanh:                                 Other Builtins.     (line    6)
68432* ctanhf:                                Other Builtins.     (line    6)
68433* ctanhl:                                Other Builtins.     (line    6)
68434* ctanl:                                 Other Builtins.     (line    6)
68435* CXX_MODULE_MAPPER environment variable: C++ Dialect Options.
68436                                                             (line  340)
68437* C_INCLUDE_PATH:                        Environment Variables.
68438                                                             (line  145)
68439* D:                                     G++ and GCC.        (line    6)
68440* Darwin options:                        Darwin Options.     (line    6)
68441* dcgettext:                             Other Builtins.     (line    6)
68442* dd integer suffix:                     Decimal Float.      (line    6)
68443* DD integer suffix:                     Decimal Float.      (line    6)
68444* deallocating variable length arrays:   Variable Length.    (line   22)
68445* debug dump options:                    Developer Options.  (line    6)
68446* debugging GCC:                         Developer Options.  (line    6)
68447* debugging information options:         Debugging Options.  (line    6)
68448* decimal floating types:                Decimal Float.      (line    6)
68449* declaration scope:                     Incompatibilities.  (line   80)
68450* declarations inside expressions:       Statement Exprs.    (line    6)
68451* declarations, mixed with code:         Mixed Labels and Declarations.
68452                                                             (line    6)
68453* declaring attributes of functions:     Function Attributes.
68454                                                             (line    6)
68455* declaring static data in C++:          Static Definitions. (line    6)
68456* defining static data in C++:           Static Definitions. (line    6)
68457* dependencies for make as output:       Environment Variables.
68458                                                             (line  173)
68459* dependencies for make as output <1>:   Environment Variables.
68460                                                             (line  189)
68461* dependencies, make:                    Preprocessor Options.
68462                                                             (line   77)
68463* DEPENDENCIES_OUTPUT:                   Environment Variables.
68464                                                             (line  172)
68465* dependent name lookup:                 Name lookup.        (line    6)
68466* deprecated enumerator attribute:       Enumerator Attributes.
68467                                                             (line   28)
68468* deprecated function attribute:         Common Function Attributes.
68469                                                             (line  338)
68470* deprecated type attribute:             Common Type Attributes.
68471                                                             (line  189)
68472* deprecated variable attribute:         Common Variable Attributes.
68473                                                             (line  201)
68474* designated initializers:               Designated Inits.   (line    6)
68475* designated_init type attribute:        Common Type Attributes.
68476                                                             (line  234)
68477* designator lists:                      Designated Inits.   (line   96)
68478* designators:                           Designated Inits.   (line   64)
68479* destructor function attribute:         Common Function Attributes.
68480                                                             (line  277)
68481* developer options:                     Developer Options.  (line    6)
68482* df integer suffix:                     Decimal Float.      (line    6)
68483* DF integer suffix:                     Decimal Float.      (line    6)
68484* dgettext:                              Other Builtins.     (line    6)
68485* diagnostic messages:                   Diagnostic Message Formatting Options.
68486                                                             (line    6)
68487* dialect options:                       C Dialect Options.  (line    6)
68488* diff-delete GCC_COLORS capability:     Diagnostic Message Formatting Options.
68489                                                             (line  134)
68490* diff-filename GCC_COLORS capability:   Diagnostic Message Formatting Options.
68491                                                             (line  127)
68492* diff-hunk GCC_COLORS capability:       Diagnostic Message Formatting Options.
68493                                                             (line  130)
68494* diff-insert GCC_COLORS capability:     Diagnostic Message Formatting Options.
68495                                                             (line  137)
68496* digits in constraint:                  Simple Constraints. (line  125)
68497* directory options:                     Directory Options.  (line    6)
68498* disinterrupt function attribute, Epiphany: Epiphany Function Attributes.
68499                                                             (line    9)
68500* disinterrupt function attribute, MeP:  MeP Function Attributes.
68501                                                             (line    9)
68502* dl integer suffix:                     Decimal Float.      (line    6)
68503* DL integer suffix:                     Decimal Float.      (line    6)
68504* dllexport function attribute:          Microsoft Windows Function Attributes.
68505                                                             (line   10)
68506* dllexport variable attribute:          Microsoft Windows Variable Attributes.
68507                                                             (line   12)
68508* dllimport function attribute:          Microsoft Windows Function Attributes.
68509                                                             (line   42)
68510* dllimport variable attribute:          Microsoft Windows Variable Attributes.
68511                                                             (line   12)
68512* dollar signs in identifier names:      Dollar Signs.       (line    6)
68513* double-word arithmetic:                Long Long.          (line    6)
68514* downward funargs:                      Nested Functions.   (line    6)
68515* drem:                                  Other Builtins.     (line    6)
68516* dremf:                                 Other Builtins.     (line    6)
68517* dreml:                                 Other Builtins.     (line    6)
68518* dump options:                          Developer Options.  (line    6)
68519* E in constraint:                       Simple Constraints. (line   87)
68520* earlyclobber operand:                  Modifiers.          (line   25)
68521* eBPF Options:                          eBPF Options.       (line    6)
68522* eight-bit data on the H8/300, H8/300H, and H8S: H8/300 Variable Attributes.
68523                                                             (line    9)
68524* eightbit_data variable attribute, H8/300: H8/300 Variable Attributes.
68525                                                             (line    9)
68526* EIND:                                  AVR Options.        (line  319)
68527* either function attribute, MSP430:     MSP430 Function Attributes.
68528                                                             (line   57)
68529* either variable attribute, MSP430:     MSP430 Variable Attributes.
68530                                                             (line    8)
68531* empty structures:                      Empty Structures.   (line    6)
68532* Enumerator Attributes:                 Enumerator Attributes.
68533                                                             (line    6)
68534* environment variables:                 Environment Variables.
68535                                                             (line    6)
68536* erf:                                   Other Builtins.     (line    6)
68537* erfc:                                  Other Builtins.     (line    6)
68538* erfcf:                                 Other Builtins.     (line    6)
68539* erfcl:                                 Other Builtins.     (line    6)
68540* erff:                                  Other Builtins.     (line    6)
68541* erfl:                                  Other Builtins.     (line    6)
68542* error function attribute:              Common Function Attributes.
68543                                                             (line  373)
68544* error GCC_COLORS capability:           Diagnostic Message Formatting Options.
68545                                                             (line   92)
68546* error messages:                        Warnings and Errors.
68547                                                             (line    6)
68548* escaped newlines:                      Escaped Newlines.   (line    6)
68549* exception function attribute:          NDS32 Function Attributes.
68550                                                             (line    9)
68551* exception handler functions, Blackfin: Blackfin Function Attributes.
68552                                                             (line    9)
68553* exception handler functions, NDS32:    NDS32 Function Attributes.
68554                                                             (line    9)
68555* exception_handler function attribute:  Blackfin Function Attributes.
68556                                                             (line    9)
68557* exit:                                  Other Builtins.     (line    6)
68558* exp:                                   Other Builtins.     (line    6)
68559* exp10:                                 Other Builtins.     (line    6)
68560* exp10f:                                Other Builtins.     (line    6)
68561* exp10l:                                Other Builtins.     (line    6)
68562* exp2:                                  Other Builtins.     (line    6)
68563* exp2f:                                 Other Builtins.     (line    6)
68564* exp2l:                                 Other Builtins.     (line    6)
68565* expf:                                  Other Builtins.     (line    6)
68566* expl:                                  Other Builtins.     (line    6)
68567* explicit register variables:           Explicit Register Variables.
68568                                                             (line    6)
68569* expm1:                                 Other Builtins.     (line    6)
68570* expm1f:                                Other Builtins.     (line    6)
68571* expm1l:                                Other Builtins.     (line    6)
68572* expressions containing statements:     Statement Exprs.    (line    6)
68573* expressions, constructor:              Compound Literals.  (line    6)
68574* extended asm:                          Extended Asm.       (line    6)
68575* extensible constraints:                Simple Constraints. (line  161)
68576* extensions, ?::                        Conditionals.       (line    6)
68577* extensions, C language:                C Extensions.       (line    6)
68578* extensions, C++ language:              C++ Extensions.     (line    6)
68579* external declaration scope:            Incompatibilities.  (line   80)
68580* externally_visible function attribute: Common Function Attributes.
68581                                                             (line  390)
68582* extra NOP instructions at the function entry point: Common Function Attributes.
68583                                                             (line 1052)
68584* F in constraint:                       Simple Constraints. (line   92)
68585* fabs:                                  Other Builtins.     (line    6)
68586* fabsf:                                 Other Builtins.     (line    6)
68587* fabsl:                                 Other Builtins.     (line    6)
68588* fallthrough statement attribute:       Statement Attributes.
68589                                                             (line   26)
68590* far function attribute, MeP:           MeP Function Attributes.
68591                                                             (line   25)
68592* far function attribute, MIPS:          MIPS Function Attributes.
68593                                                             (line   63)
68594* far type attribute, MeP:               MeP Type Attributes.
68595                                                             (line    6)
68596* far variable attribute, MeP:           MeP Variable Attributes.
68597                                                             (line   30)
68598* fastcall function attribute, x86-32:   x86 Function Attributes.
68599                                                             (line   15)
68600* fast_interrupt function attribute, M32C: M32C Function Attributes.
68601                                                             (line   14)
68602* fast_interrupt function attribute, MicroBlaze: MicroBlaze Function Attributes.
68603                                                             (line   27)
68604* fast_interrupt function attribute, RX: RX Function Attributes.
68605                                                             (line    9)
68606* fatal signal:                          Bug Criteria.       (line    9)
68607* fdim:                                  Other Builtins.     (line    6)
68608* fdimf:                                 Other Builtins.     (line    6)
68609* fdiml:                                 Other Builtins.     (line    6)
68610* FDL, GNU Free Documentation License:   GNU Free Documentation License.
68611                                                             (line    6)
68612* fentry_name function attribute, x86:   x86 Function Attributes.
68613                                                             (line  701)
68614* fentry_section function attribute, x86: x86 Function Attributes.
68615                                                             (line  707)
68616* ffs:                                   Other Builtins.     (line    6)
68617* file name suffix:                      Overall Options.    (line   14)
68618* file names:                            Link Options.       (line   10)
68619* fix-cortex-a53-835769 function attribute, AArch64: AArch64 Function Attributes.
68620                                                             (line   19)
68621* fixed-point types:                     Fixed-Point.        (line    6)
68622* fixit-delete GCC_COLORS capability:    Diagnostic Message Formatting Options.
68623                                                             (line  124)
68624* fixit-insert GCC_COLORS capability:    Diagnostic Message Formatting Options.
68625                                                             (line  120)
68626* flatten function attribute:            Common Function Attributes.
68627                                                             (line  403)
68628* flexible array members:                Zero Length.        (line    6)
68629* float as function value type:          Incompatibilities.  (line  141)
68630* floating point precision:              Disappointments.    (line   68)
68631* floating-point precision:              Optimize Options.   (line 2289)
68632* floor:                                 Other Builtins.     (line    6)
68633* floorf:                                Other Builtins.     (line    6)
68634* floorl:                                Other Builtins.     (line    6)
68635* fma:                                   Other Builtins.     (line    6)
68636* fmaf:                                  Other Builtins.     (line    6)
68637* fmal:                                  Other Builtins.     (line    6)
68638* fmax:                                  Other Builtins.     (line    6)
68639* fmaxf:                                 Other Builtins.     (line    6)
68640* fmaxl:                                 Other Builtins.     (line    6)
68641* fmin:                                  Other Builtins.     (line    6)
68642* fminf:                                 Other Builtins.     (line    6)
68643* fminl:                                 Other Builtins.     (line    6)
68644* fmod:                                  Other Builtins.     (line    6)
68645* fmodf:                                 Other Builtins.     (line    6)
68646* fmodl:                                 Other Builtins.     (line    6)
68647* force_align_arg_pointer function attribute, x86: x86 Function Attributes.
68648                                                             (line  100)
68649* format function attribute:             Common Function Attributes.
68650                                                             (line  411)
68651* format_arg function attribute:         Common Function Attributes.
68652                                                             (line  476)
68653* Fortran:                               G++ and GCC.        (line    6)
68654* forwarder_section function attribute, Epiphany: Epiphany Function Attributes.
68655                                                             (line   13)
68656* forwarding calls:                      Constructing Calls. (line    6)
68657* fprintf:                               Other Builtins.     (line    6)
68658* fprintf_unlocked:                      Other Builtins.     (line    6)
68659* fputs:                                 Other Builtins.     (line    6)
68660* fputs_unlocked:                        Other Builtins.     (line    6)
68661* FR30 Options:                          FR30 Options.       (line    6)
68662* free:                                  Other Builtins.     (line    6)
68663* freestanding environment:              Standards.          (line   13)
68664* freestanding implementation:           Standards.          (line   13)
68665* frexp:                                 Other Builtins.     (line    6)
68666* frexpf:                                Other Builtins.     (line    6)
68667* frexpl:                                Other Builtins.     (line    6)
68668* FRV Options:                           FRV Options.        (line    6)
68669* fscanf:                                Other Builtins.     (line    6)
68670* fscanf, and constant strings:          Incompatibilities.  (line   17)
68671* FT32 Options:                          FT32 Options.       (line    6)
68672* function addressability on the M32R/D: M32R/D Function Attributes.
68673                                                             (line   15)
68674* function attributes:                   Function Attributes.
68675                                                             (line    6)
68676* function pointers, arithmetic:         Pointer Arith.      (line    6)
68677* function prototype declarations:       Function Prototypes.
68678                                                             (line    6)
68679* function versions:                     Function Multiversioning.
68680                                                             (line    6)
68681* function, size of pointer to:          Pointer Arith.      (line    6)
68682* functions in arbitrary sections:       Common Function Attributes.
68683                                                             (line 1136)
68684* functions that are dynamically resolved: Common Function Attributes.
68685                                                             (line  577)
68686* functions that are passed arguments in registers on x86-32: x86 Function Attributes.
68687                                                             (line   76)
68688* functions that behave like malloc:     Common Function Attributes.
68689                                                             (line  706)
68690* functions that have no side effects:   Common Function Attributes.
68691                                                             (line  236)
68692* functions that have no side effects <1>: Common Function Attributes.
68693                                                             (line 1070)
68694* functions that never return:           Common Function Attributes.
68695                                                             (line  982)
68696* functions that pop the argument stack on x86-32: x86 Function Attributes.
68697                                                             (line    9)
68698* functions that pop the argument stack on x86-32 <1>: x86 Function Attributes.
68699                                                             (line   15)
68700* functions that pop the argument stack on x86-32 <2>: x86 Function Attributes.
68701                                                             (line   23)
68702* functions that pop the argument stack on x86-32 <3>: x86 Function Attributes.
68703                                                             (line  108)
68704* functions that return more than once:  Common Function Attributes.
68705                                                             (line 1127)
68706* functions with non-null pointer arguments: Common Function Attributes.
68707                                                             (line  911)
68708* functions with printf, scanf, strftime or strfmon style arguments: Common Function Attributes.
68709                                                             (line  411)
68710* function_return function attribute, x86: x86 Function Attributes.
68711                                                             (line  628)
68712* function_vector function attribute, H8/300: H8/300 Function Attributes.
68713                                                             (line    9)
68714* function_vector function attribute, M16C/M32C: M32C Function Attributes.
68715                                                             (line   20)
68716* function_vector function attribute, SH: SH Function Attributes.
68717                                                             (line    9)
68718* G in constraint:                       Simple Constraints. (line   96)
68719* g in constraint:                       Simple Constraints. (line  118)
68720* g++:                                   Invoking G++.       (line   14)
68721* G++:                                   G++ and GCC.        (line   29)
68722* gamma:                                 Other Builtins.     (line    6)
68723* gammaf:                                Other Builtins.     (line    6)
68724* gammaf_r:                              Other Builtins.     (line    6)
68725* gammal:                                Other Builtins.     (line    6)
68726* gammal_r:                              Other Builtins.     (line    6)
68727* gamma_r:                               Other Builtins.     (line    6)
68728* GCC:                                   G++ and GCC.        (line    6)
68729* GCC command options:                   Invoking GCC.       (line    6)
68730* GCC_COLORS environment variable:       Diagnostic Message Formatting Options.
68731                                                             (line   55)
68732* GCC_COMPARE_DEBUG:                     Environment Variables.
68733                                                             (line   52)
68734* GCC_EXEC_PREFIX:                       Environment Variables.
68735                                                             (line   57)
68736* GCC_EXTRA_DIAGNOSTIC_OUTPUT:           Environment Variables.
68737                                                             (line  125)
68738* gcc_struct type attribute, PowerPC:    PowerPC Type Attributes.
68739                                                             (line    9)
68740* gcc_struct type attribute, x86:        x86 Type Attributes.
68741                                                             (line   11)
68742* gcc_struct variable attribute, PowerPC: PowerPC Variable Attributes.
68743                                                             (line    9)
68744* gcc_struct variable attribute, x86:    x86 Variable Attributes.
68745                                                             (line   11)
68746* GCC_URLS environment variable:         Diagnostic Message Formatting Options.
68747                                                             (line  144)
68748* gcov:                                  Instrumentation Options.
68749                                                             (line   55)
68750* general-regs-only function attribute, AArch64: AArch64 Function Attributes.
68751                                                             (line   12)
68752* general-regs-only function attribute, ARM: ARM Function Attributes.
68753                                                             (line    9)
68754* gettext:                               Other Builtins.     (line    6)
68755* global offset table:                   Code Gen Options.   (line  356)
68756* global register after longjmp:         Global Register Variables.
68757                                                             (line   92)
68758* global register variables:             Global Register Variables.
68759                                                             (line    6)
68760* GNAT:                                  G++ and GCC.        (line   29)
68761* GNU C Compiler:                        G++ and GCC.        (line    6)
68762* GNU Compiler Collection:               G++ and GCC.        (line    6)
68763* gnu_inline function attribute:         Common Function Attributes.
68764                                                             (line  531)
68765* Go:                                    G++ and GCC.        (line    6)
68766* goto with computed label:              Labels as Values.   (line    6)
68767* gprof:                                 Instrumentation Options.
68768                                                             (line   18)
68769* grouping options:                      Invoking GCC.       (line   31)
68770* H in constraint:                       Simple Constraints. (line   96)
68771* half-precision floating point:         Half-Precision.     (line    6)
68772* hardware models and configurations, specifying: Submodel Options.
68773                                                             (line    6)
68774* hex floats:                            Hex Floats.         (line    6)
68775* highlight, color:                      Diagnostic Message Formatting Options.
68776                                                             (line   55)
68777* hk fixed-suffix:                       Fixed-Point.        (line    6)
68778* HK fixed-suffix:                       Fixed-Point.        (line    6)
68779* hosted environment:                    Standards.          (line   13)
68780* hosted environment <1>:                C Dialect Options.  (line  278)
68781* hosted environment <2>:                C Dialect Options.  (line  327)
68782* hosted implementation:                 Standards.          (line   13)
68783* hot function attribute:                Common Function Attributes.
68784                                                             (line  567)
68785* hot label attribute:                   Label Attributes.   (line   39)
68786* hotpatch function attribute, S/390:    S/390 Function Attributes.
68787                                                             (line    9)
68788* HPPA Options:                          HPPA Options.       (line    6)
68789* hr fixed-suffix:                       Fixed-Point.        (line    6)
68790* HR fixed-suffix:                       Fixed-Point.        (line    6)
68791* hypot:                                 Other Builtins.     (line    6)
68792* hypotf:                                Other Builtins.     (line    6)
68793* hypotl:                                Other Builtins.     (line    6)
68794* i in constraint:                       Simple Constraints. (line   68)
68795* I in constraint:                       Simple Constraints. (line   79)
68796* IA-64 Options:                         IA-64 Options.      (line    6)
68797* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
68798                                                             (line    6)
68799* identifier names, dollar signs in:     Dollar Signs.       (line    6)
68800* identifiers, names in assembler code:  Asm Labels.         (line    6)
68801* ifunc function attribute:              Common Function Attributes.
68802                                                             (line  577)
68803* ilogb:                                 Other Builtins.     (line    6)
68804* ilogbf:                                Other Builtins.     (line    6)
68805* ilogbl:                                Other Builtins.     (line    6)
68806* imaxabs:                               Other Builtins.     (line    6)
68807* implementation-defined behavior, C language: C Implementation.
68808                                                             (line    6)
68809* implementation-defined behavior, C++ language: C++ Implementation.
68810                                                             (line    6)
68811* implied #pragma implementation:        C++ Interface.      (line   43)
68812* incompatibilities of GCC:              Incompatibilities.  (line    6)
68813* increment operators:                   Bug Criteria.       (line   17)
68814* index:                                 Other Builtins.     (line    6)
68815* indirect calls, ARC:                   ARC Function Attributes.
68816                                                             (line   27)
68817* indirect calls, ARM:                   ARM Function Attributes.
68818                                                             (line   38)
68819* indirect calls, Blackfin:              Blackfin Function Attributes.
68820                                                             (line   38)
68821* indirect calls, Epiphany:              Epiphany Function Attributes.
68822                                                             (line   57)
68823* indirect calls, MIPS:                  MIPS Function Attributes.
68824                                                             (line   63)
68825* indirect calls, PowerPC:               PowerPC Function Attributes.
68826                                                             (line   10)
68827* indirect functions:                    Common Function Attributes.
68828                                                             (line  577)
68829* indirect_branch function attribute, x86: x86 Function Attributes.
68830                                                             (line  619)
68831* indirect_return function attribute, x86: x86 Function Attributes.
68832                                                             (line  695)
68833* initializations in expressions:        Compound Literals.  (line    6)
68834* initializers with labeled elements:    Designated Inits.   (line    6)
68835* initializers, non-constant:            Initializers.       (line    6)
68836* init_priority variable attribute:      C++ Attributes.     (line   50)
68837* inline assembly language:              Using Assembly Language with C.
68838                                                             (line    6)
68839* inline automatic for C++ member fns:   Inline.             (line   68)
68840* inline functions:                      Inline.             (line    6)
68841* inline functions, omission of:         Inline.             (line   51)
68842* inlining and C++ pragmas:              C++ Interface.      (line   57)
68843* installation trouble:                  Trouble.            (line    6)
68844* instrumentation options:               Instrumentation Options.
68845                                                             (line    6)
68846* integrating function code:             Inline.             (line    6)
68847* interface and implementation headers, C++: C++ Interface.  (line    6)
68848* intermediate C version, nonexistent:   G++ and GCC.        (line   34)
68849* interrupt function attribute, ARC:     ARC Function Attributes.
68850                                                             (line    9)
68851* interrupt function attribute, ARM:     ARM Function Attributes.
68852                                                             (line   16)
68853* interrupt function attribute, AVR:     AVR Function Attributes.
68854                                                             (line    9)
68855* interrupt function attribute, C-SKY:   C-SKY Function Attributes.
68856                                                             (line   10)
68857* interrupt function attribute, CR16:    CR16 Function Attributes.
68858                                                             (line    9)
68859* interrupt function attribute, Epiphany: Epiphany Function Attributes.
68860                                                             (line   20)
68861* interrupt function attribute, M32C:    M32C Function Attributes.
68862                                                             (line   53)
68863* interrupt function attribute, M32R/D:  M32R/D Function Attributes.
68864                                                             (line    9)
68865* interrupt function attribute, m68k:    m68k Function Attributes.
68866                                                             (line   10)
68867* interrupt function attribute, MeP:     MeP Function Attributes.
68868                                                             (line   14)
68869* interrupt function attribute, MIPS:    MIPS Function Attributes.
68870                                                             (line    9)
68871* interrupt function attribute, MSP430:  MSP430 Function Attributes.
68872                                                             (line   19)
68873* interrupt function attribute, NDS32:   NDS32 Function Attributes.
68874                                                             (line   14)
68875* interrupt function attribute, RISC-V:  RISC-V Function Attributes.
68876                                                             (line   19)
68877* interrupt function attribute, RL78:    RL78 Function Attributes.
68878                                                             (line   10)
68879* interrupt function attribute, RX:      RX Function Attributes.
68880                                                             (line   15)
68881* interrupt function attribute, V850:    V850 Function Attributes.
68882                                                             (line   10)
68883* interrupt function attribute, Visium:  Visium Function Attributes.
68884                                                             (line    9)
68885* interrupt function attribute, x86:     x86 Function Attributes.
68886                                                             (line  124)
68887* interrupt function attribute, Xstormy16: Xstormy16 Function Attributes.
68888                                                             (line    9)
68889* interrupt_handler function attribute, Blackfin: Blackfin Function Attributes.
68890                                                             (line   15)
68891* interrupt_handler function attribute, H8/300: H8/300 Function Attributes.
68892                                                             (line   17)
68893* interrupt_handler function attribute, m68k: m68k Function Attributes.
68894                                                             (line   10)
68895* interrupt_handler function attribute, MicroBlaze: MicroBlaze Function Attributes.
68896                                                             (line   27)
68897* interrupt_handler function attribute, SH: SH Function Attributes.
68898                                                             (line   28)
68899* interrupt_handler function attribute, V850: V850 Function Attributes.
68900                                                             (line   10)
68901* interrupt_thread function attribute, fido: m68k Function Attributes.
68902                                                             (line   16)
68903* introduction:                          Top.                (line    6)
68904* invalid assembly code:                 Bug Criteria.       (line   12)
68905* invalid input:                         Bug Criteria.       (line   42)
68906* invoking g++:                          Invoking G++.       (line   22)
68907* io variable attribute, AVR:            AVR Variable Attributes.
68908                                                             (line   73)
68909* io variable attribute, MeP:            MeP Variable Attributes.
68910                                                             (line   36)
68911* io_low variable attribute, AVR:        AVR Variable Attributes.
68912                                                             (line   91)
68913* isalnum:                               Other Builtins.     (line    6)
68914* isalpha:                               Other Builtins.     (line    6)
68915* isascii:                               Other Builtins.     (line    6)
68916* isblank:                               Other Builtins.     (line    6)
68917* iscntrl:                               Other Builtins.     (line    6)
68918* isdigit:                               Other Builtins.     (line    6)
68919* isgraph:                               Other Builtins.     (line    6)
68920* islower:                               Other Builtins.     (line    6)
68921* ISO 9899:                              Standards.          (line   13)
68922* ISO C:                                 Standards.          (line   13)
68923* ISO C standard:                        Standards.          (line   13)
68924* ISO C11:                               Standards.          (line   13)
68925* ISO C17:                               Standards.          (line   13)
68926* ISO C1X:                               Standards.          (line   13)
68927* ISO C2X:                               Standards.          (line   13)
68928* ISO C90:                               Standards.          (line   13)
68929* ISO C94:                               Standards.          (line   13)
68930* ISO C95:                               Standards.          (line   13)
68931* ISO C99:                               Standards.          (line   13)
68932* ISO C9X:                               Standards.          (line   13)
68933* ISO support:                           C Dialect Options.  (line   10)
68934* ISO/IEC 9899:                          Standards.          (line   13)
68935* isprint:                               Other Builtins.     (line    6)
68936* ispunct:                               Other Builtins.     (line    6)
68937* isr function attribute, ARM:           ARM Function Attributes.
68938                                                             (line   33)
68939* isr function attribute, C-SKY:         C-SKY Function Attributes.
68940                                                             (line   10)
68941* isspace:                               Other Builtins.     (line    6)
68942* isupper:                               Other Builtins.     (line    6)
68943* iswalnum:                              Other Builtins.     (line    6)
68944* iswalpha:                              Other Builtins.     (line    6)
68945* iswblank:                              Other Builtins.     (line    6)
68946* iswcntrl:                              Other Builtins.     (line    6)
68947* iswdigit:                              Other Builtins.     (line    6)
68948* iswgraph:                              Other Builtins.     (line    6)
68949* iswlower:                              Other Builtins.     (line    6)
68950* iswprint:                              Other Builtins.     (line    6)
68951* iswpunct:                              Other Builtins.     (line    6)
68952* iswspace:                              Other Builtins.     (line    6)
68953* iswupper:                              Other Builtins.     (line    6)
68954* iswxdigit:                             Other Builtins.     (line    6)
68955* isxdigit:                              Other Builtins.     (line    6)
68956* j0:                                    Other Builtins.     (line    6)
68957* j0f:                                   Other Builtins.     (line    6)
68958* j0l:                                   Other Builtins.     (line    6)
68959* j1:                                    Other Builtins.     (line    6)
68960* j1f:                                   Other Builtins.     (line    6)
68961* j1l:                                   Other Builtins.     (line    6)
68962* jli_always function attribute, ARC:    ARC Function Attributes.
68963                                                             (line   44)
68964* jli_fixed function attribute, ARC:     ARC Function Attributes.
68965                                                             (line   50)
68966* jn:                                    Other Builtins.     (line    6)
68967* jnf:                                   Other Builtins.     (line    6)
68968* jnl:                                   Other Builtins.     (line    6)
68969* k fixed-suffix:                        Fixed-Point.        (line    6)
68970* K fixed-suffix:                        Fixed-Point.        (line    6)
68971* keep_interrupts_masked function attribute, MIPS: MIPS Function Attributes.
68972                                                             (line   34)
68973* kernel attribute, Nvidia PTX:          Nvidia PTX Function Attributes.
68974                                                             (line    9)
68975* kernel helper, function attribute, BPF: BPF Function Attributes.
68976                                                             (line    9)
68977* keywords, alternate:                   Alternate Keywords. (line    6)
68978* known causes of trouble:               Trouble.            (line    6)
68979* kspisusp function attribute, Blackfin: Blackfin Function Attributes.
68980                                                             (line   21)
68981* l1_data variable attribute, Blackfin:  Blackfin Variable Attributes.
68982                                                             (line   11)
68983* l1_data_A variable attribute, Blackfin: Blackfin Variable Attributes.
68984                                                             (line   11)
68985* l1_data_B variable attribute, Blackfin: Blackfin Variable Attributes.
68986                                                             (line   11)
68987* l1_text function attribute, Blackfin:  Blackfin Function Attributes.
68988                                                             (line   26)
68989* l2 function attribute, Blackfin:       Blackfin Function Attributes.
68990                                                             (line   32)
68991* l2 variable attribute, Blackfin:       Blackfin Variable Attributes.
68992                                                             (line   19)
68993* Label Attributes:                      Label Attributes.   (line    6)
68994* labeled elements in initializers:      Designated Inits.   (line    6)
68995* labels as values:                      Labels as Values.   (line    6)
68996* labs:                                  Other Builtins.     (line    6)
68997* LANG:                                  Environment Variables.
68998                                                             (line   21)
68999* LANG <1>:                              Environment Variables.
69000                                                             (line  106)
69001* language dialect options:              C Dialect Options.  (line    6)
69002* LC_ALL:                                Environment Variables.
69003                                                             (line   21)
69004* LC_CTYPE:                              Environment Variables.
69005                                                             (line   21)
69006* LC_MESSAGES:                           Environment Variables.
69007                                                             (line   21)
69008* ldexp:                                 Other Builtins.     (line    6)
69009* ldexpf:                                Other Builtins.     (line    6)
69010* ldexpl:                                Other Builtins.     (line    6)
69011* leaf function attribute:               Common Function Attributes.
69012                                                             (line  667)
69013* length-zero arrays:                    Zero Length.        (line    6)
69014* lgamma:                                Other Builtins.     (line    6)
69015* lgammaf:                               Other Builtins.     (line    6)
69016* lgammaf_r:                             Other Builtins.     (line    6)
69017* lgammal:                               Other Builtins.     (line    6)
69018* lgammal_r:                             Other Builtins.     (line    6)
69019* lgamma_r:                              Other Builtins.     (line    6)
69020* Libraries:                             Link Options.       (line   85)
69021* LIBRARY_PATH:                          Environment Variables.
69022                                                             (line   97)
69023* link options:                          Link Options.       (line    6)
69024* linker script:                         Link Options.       (line  314)
69025* lk fixed-suffix:                       Fixed-Point.        (line    6)
69026* LK fixed-suffix:                       Fixed-Point.        (line    6)
69027* LL integer suffix:                     Long Long.          (line    6)
69028* llabs:                                 Other Builtins.     (line    6)
69029* llk fixed-suffix:                      Fixed-Point.        (line    6)
69030* LLK fixed-suffix:                      Fixed-Point.        (line    6)
69031* llr fixed-suffix:                      Fixed-Point.        (line    6)
69032* LLR fixed-suffix:                      Fixed-Point.        (line    6)
69033* llrint:                                Other Builtins.     (line    6)
69034* llrintf:                               Other Builtins.     (line    6)
69035* llrintl:                               Other Builtins.     (line    6)
69036* llround:                               Other Builtins.     (line    6)
69037* llroundf:                              Other Builtins.     (line    6)
69038* llroundl:                              Other Builtins.     (line    6)
69039* LM32 options:                          LM32 Options.       (line    6)
69040* load address instruction:              Simple Constraints. (line  152)
69041* local labels:                          Local Labels.       (line    6)
69042* local variables in macros:             Typeof.             (line   46)
69043* local variables, specifying registers: Local Register Variables.
69044                                                             (line    6)
69045* locale:                                Environment Variables.
69046                                                             (line   21)
69047* locale definition:                     Environment Variables.
69048                                                             (line  106)
69049* locus GCC_COLORS capability:           Diagnostic Message Formatting Options.
69050                                                             (line  113)
69051* log:                                   Other Builtins.     (line    6)
69052* log10:                                 Other Builtins.     (line    6)
69053* log10f:                                Other Builtins.     (line    6)
69054* log10l:                                Other Builtins.     (line    6)
69055* log1p:                                 Other Builtins.     (line    6)
69056* log1pf:                                Other Builtins.     (line    6)
69057* log1pl:                                Other Builtins.     (line    6)
69058* log2:                                  Other Builtins.     (line    6)
69059* log2f:                                 Other Builtins.     (line    6)
69060* log2l:                                 Other Builtins.     (line    6)
69061* logb:                                  Other Builtins.     (line    6)
69062* logbf:                                 Other Builtins.     (line    6)
69063* logbl:                                 Other Builtins.     (line    6)
69064* logf:                                  Other Builtins.     (line    6)
69065* logl:                                  Other Builtins.     (line    6)
69066* long:                                  BPF Built-in Functions.
69067                                                             (line    8)
69068* long <1>:                              BPF Built-in Functions.
69069                                                             (line   13)
69070* long <2>:                              BPF Built-in Functions.
69071                                                             (line   18)
69072* long long data types:                  Long Long.          (line    6)
69073* longcall function attribute, Blackfin: Blackfin Function Attributes.
69074                                                             (line   38)
69075* longcall function attribute, PowerPC:  PowerPC Function Attributes.
69076                                                             (line   10)
69077* longjmp:                               Global Register Variables.
69078                                                             (line   92)
69079* longjmp incompatibilities:             Incompatibilities.  (line   39)
69080* longjmp warnings:                      Warning Options.    (line 1375)
69081* long_call function attribute, ARC:     ARC Function Attributes.
69082                                                             (line   27)
69083* long_call function attribute, ARM:     ARM Function Attributes.
69084                                                             (line   38)
69085* long_call function attribute, Epiphany: Epiphany Function Attributes.
69086                                                             (line   57)
69087* long_call function attribute, MIPS:    MIPS Function Attributes.
69088                                                             (line   63)
69089* LoongArch Options:                     LoongArch Options.  (line    6)
69090* lower function attribute, MSP430:      MSP430 Function Attributes.
69091                                                             (line   57)
69092* lower variable attribute, MSP430:      MSP430 Variable Attributes.
69093                                                             (line   12)
69094* lr fixed-suffix:                       Fixed-Point.        (line    6)
69095* LR fixed-suffix:                       Fixed-Point.        (line    6)
69096* lrint:                                 Other Builtins.     (line    6)
69097* lrintf:                                Other Builtins.     (line    6)
69098* lrintl:                                Other Builtins.     (line    6)
69099* lround:                                Other Builtins.     (line    6)
69100* lroundf:                               Other Builtins.     (line    6)
69101* lroundl:                               Other Builtins.     (line    6)
69102* m in constraint:                       Simple Constraints. (line   17)
69103* M32C options:                          M32C Options.       (line    6)
69104* M32R/D options:                        M32R/D Options.     (line    6)
69105* M680x0 options:                        M680x0 Options.     (line    6)
69106* machine specific constraints:          Machine Constraints.
69107                                                             (line    6)
69108* machine-dependent options:             Submodel Options.   (line    6)
69109* macro with variable arguments:         Variadic Macros.    (line    6)
69110* macros, inline alternative:            Inline.             (line    6)
69111* macros, local labels:                  Local Labels.       (line    6)
69112* macros, local variables in:            Typeof.             (line   46)
69113* macros, statements in expressions:     Statement Exprs.    (line    6)
69114* macros, types of arguments:            Typeof.             (line    6)
69115* make:                                  Preprocessor Options.
69116                                                             (line   77)
69117* malloc:                                Other Builtins.     (line    6)
69118* malloc function attribute:             Common Function Attributes.
69119                                                             (line  706)
69120* matching constraint:                   Simple Constraints. (line  137)
69121* may_alias type attribute:              Common Type Attributes.
69122                                                             (line  245)
69123* MCore options:                         MCore Options.      (line    6)
69124* medium_call function attribute, ARC:   ARC Function Attributes.
69125                                                             (line   27)
69126* member fns, automatically inline:      Inline.             (line   68)
69127* memchr:                                Other Builtins.     (line    6)
69128* memcmp:                                Other Builtins.     (line    6)
69129* memcpy:                                Other Builtins.     (line    6)
69130* memory references in constraints:      Simple Constraints. (line   17)
69131* mempcpy:                               Other Builtins.     (line    6)
69132* memset:                                Other Builtins.     (line    6)
69133* MeP options:                           MeP Options.        (line    6)
69134* Mercury:                               G++ and GCC.        (line   23)
69135* message formatting:                    Diagnostic Message Formatting Options.
69136                                                             (line    6)
69137* messages, warning:                     Warning Options.    (line    6)
69138* messages, warning and error:           Warnings and Errors.
69139                                                             (line    6)
69140* MicroBlaze Options:                    MicroBlaze Options. (line    6)
69141* micromips function attribute:          MIPS Function Attributes.
69142                                                             (line   91)
69143* middle-operands, omitted:              Conditionals.       (line    6)
69144* MIPS options:                          MIPS Options.       (line    6)
69145* mips16 function attribute, MIPS:       MIPS Function Attributes.
69146                                                             (line   75)
69147* misunderstandings in C++:              C++ Misunderstandings.
69148                                                             (line    6)
69149* mixed declarations and code:           Mixed Labels and Declarations.
69150                                                             (line    6)
69151* mixing assembly language and C:        Using Assembly Language with C.
69152                                                             (line    6)
69153* mktemp, and constant strings:          Incompatibilities.  (line   13)
69154* MMIX Options:                          MMIX Options.       (line    6)
69155* MN10300 options:                       MN10300 Options.    (line    6)
69156* mode type attribute:                   Common Type Attributes.
69157                                                             (line  281)
69158* mode variable attribute:               Common Variable Attributes.
69159                                                             (line  240)
69160* model function attribute, M32R/D:      M32R/D Function Attributes.
69161                                                             (line   15)
69162* model variable attribute, IA-64:       IA-64 Variable Attributes.
69163                                                             (line    9)
69164* model-name variable attribute, M32R/D: M32R/D Variable Attributes.
69165                                                             (line    9)
69166* modf:                                  Other Builtins.     (line    6)
69167* modff:                                 Other Builtins.     (line    6)
69168* modfl:                                 Other Builtins.     (line    6)
69169* modifiers in constraints:              Modifiers.          (line    6)
69170* Moxie Options:                         Moxie Options.      (line    6)
69171* MSP430 Options:                        MSP430 Options.     (line    6)
69172* ms_abi function attribute, x86:        x86 Function Attributes.
69173                                                             (line   34)
69174* ms_hook_prologue function attribute, x86: x86 Function Attributes.
69175                                                             (line   59)
69176* ms_struct type attribute, PowerPC:     PowerPC Type Attributes.
69177                                                             (line    9)
69178* ms_struct type attribute, x86:         x86 Type Attributes.
69179                                                             (line   11)
69180* ms_struct variable attribute, PowerPC: PowerPC Variable Attributes.
69181                                                             (line    9)
69182* ms_struct variable attribute, x86:     x86 Variable Attributes.
69183                                                             (line   11)
69184* multiple alternative constraints:      Multi-Alternative.  (line    6)
69185* multiprecision arithmetic:             Long Long.          (line    6)
69186* n in constraint:                       Simple Constraints. (line   73)
69187* naked function attribute, ARC:         ARC Function Attributes.
69188                                                             (line   59)
69189* naked function attribute, ARM:         ARM Function Attributes.
69190                                                             (line   48)
69191* naked function attribute, AVR:         AVR Function Attributes.
69192                                                             (line   23)
69193* naked function attribute, C-SKY:       C-SKY Function Attributes.
69194                                                             (line   20)
69195* naked function attribute, MCORE:       MCORE Function Attributes.
69196                                                             (line    9)
69197* naked function attribute, MSP430:      MSP430 Function Attributes.
69198                                                             (line   34)
69199* naked function attribute, NDS32:       NDS32 Function Attributes.
69200                                                             (line   35)
69201* naked function attribute, RISC-V:      RISC-V Function Attributes.
69202                                                             (line    9)
69203* naked function attribute, RL78:        RL78 Function Attributes.
69204                                                             (line   20)
69205* naked function attribute, RX:          RX Function Attributes.
69206                                                             (line   39)
69207* naked function attribute, x86:         x86 Function Attributes.
69208                                                             (line   66)
69209* Named Address Spaces:                  Named Address Spaces.
69210                                                             (line    6)
69211* names used in assembler code:          Asm Labels.         (line    6)
69212* naming convention, implementation headers: C++ Interface.  (line   43)
69213* NDS32 Options:                         NDS32 Options.      (line    6)
69214* near function attribute, MeP:          MeP Function Attributes.
69215                                                             (line   20)
69216* near function attribute, MIPS:         MIPS Function Attributes.
69217                                                             (line   63)
69218* near type attribute, MeP:              MeP Type Attributes.
69219                                                             (line    6)
69220* near variable attribute, MeP:          MeP Variable Attributes.
69221                                                             (line   24)
69222* nearbyint:                             Other Builtins.     (line    6)
69223* nearbyintf:                            Other Builtins.     (line    6)
69224* nearbyintl:                            Other Builtins.     (line    6)
69225* nested function attribute, NDS32:      NDS32 Function Attributes.
69226                                                             (line   19)
69227* nested functions:                      Nested Functions.   (line    6)
69228* nested_ready function attribute, NDS32: NDS32 Function Attributes.
69229                                                             (line   23)
69230* nesting function attribute, Blackfin:  Blackfin Function Attributes.
69231                                                             (line   45)
69232* newlines (escaped):                    Escaped Newlines.   (line    6)
69233* nextafter:                             Other Builtins.     (line    6)
69234* nextafterf:                            Other Builtins.     (line    6)
69235* nextafterl:                            Other Builtins.     (line    6)
69236* nexttoward:                            Other Builtins.     (line    6)
69237* nexttowardf:                           Other Builtins.     (line    6)
69238* nexttowardl:                           Other Builtins.     (line    6)
69239* NFC:                                   Warning Options.    (line 3029)
69240* NFKC:                                  Warning Options.    (line 3029)
69241* Nios II options:                       Nios II Options.    (line    6)
69242* nmi function attribute, NDS32:         NDS32 Function Attributes.
69243                                                             (line   50)
69244* NMI handler functions on the Blackfin processor: Blackfin Function Attributes.
69245                                                             (line   50)
69246* nmi_handler function attribute, Blackfin: Blackfin Function Attributes.
69247                                                             (line   50)
69248* nocf_check function attribute:         x86 Function Attributes.
69249                                                             (line  636)
69250* noclone function attribute:            Common Function Attributes.
69251                                                             (line  880)
69252* nocommon variable attribute:           Common Variable Attributes.
69253                                                             (line  176)
69254* nocompression function attribute, MIPS: MIPS Function Attributes.
69255                                                             (line  108)
69256* nodirect_extern_access function attribute: x86 Function Attributes.
69257                                                             (line  712)
69258* noinit variable attribute:             Common Variable Attributes.
69259                                                             (line  438)
69260* noinline function attribute:           Common Function Attributes.
69261                                                             (line  886)
69262* noipa function attribute:              Common Function Attributes.
69263                                                             (line  897)
69264* nomicromips function attribute:        MIPS Function Attributes.
69265                                                             (line   91)
69266* nomips16 function attribute, MIPS:     MIPS Function Attributes.
69267                                                             (line   75)
69268* non-constant initializers:             Initializers.       (line    6)
69269* non-static inline function:            Inline.             (line   82)
69270* nonlocal gotos:                        Nonlocal Gotos.     (line    6)
69271* nonnull function attribute:            Common Function Attributes.
69272                                                             (line  911)
69273* nonstring variable attribute:          Common Variable Attributes.
69274                                                             (line  252)
69275* noplt function attribute:              Common Function Attributes.
69276                                                             (line  958)
69277* noreturn function attribute:           Common Function Attributes.
69278                                                             (line  982)
69279* nosave_low_regs function attribute, SH: SH Function Attributes.
69280                                                             (line   34)
69281* note GCC_COLORS capability:            Diagnostic Message Formatting Options.
69282                                                             (line   98)
69283* nothrow function attribute:            Common Function Attributes.
69284                                                             (line 1016)
69285* notshared type attribute, ARM:         ARM Type Attributes.
69286                                                             (line    6)
69287* not_nested function attribute, NDS32:  NDS32 Function Attributes.
69288                                                             (line   21)
69289* no_caller_saved_registers function attribute, x86: x86 Function Attributes.
69290                                                             (line  113)
69291* no_gccisr function attribute, AVR:     AVR Function Attributes.
69292                                                             (line   33)
69293* no_icf function attribute:             Common Function Attributes.
69294                                                             (line  810)
69295* no_instrument_function function attribute: Common Function Attributes.
69296                                                             (line  814)
69297* no_profile_instrument_function function attribute: Common Function Attributes.
69298                                                             (line  820)
69299* no_reorder function attribute:         Common Function Attributes.
69300                                                             (line  825)
69301* no_sanitize function attribute:        Common Function Attributes.
69302                                                             (line  833)
69303* no_sanitize_address function attribute: Common Function Attributes.
69304                                                             (line  845)
69305* no_sanitize_coverage function attribute: Common Function Attributes.
69306                                                             (line  864)
69307* no_sanitize_thread function attribute: Common Function Attributes.
69308                                                             (line  853)
69309* no_sanitize_undefined function attribute: Common Function Attributes.
69310                                                             (line  858)
69311* no_split_stack function attribute:     Common Function Attributes.
69312                                                             (line  869)
69313* no_stack_limit function attribute:     Common Function Attributes.
69314                                                             (line  875)
69315* no_stack_protector function attribute: Common Function Attributes.
69316                                                             (line 1204)
69317* Nvidia PTX options:                    Nvidia PTX Options. (line    6)
69318* nvptx options:                         Nvidia PTX Options. (line    6)
69319* o in constraint:                       Simple Constraints. (line   23)
69320* OBJC_INCLUDE_PATH:                     Environment Variables.
69321                                                             (line  147)
69322* objc_nullability variable attribute:   Common Variable Attributes.
69323                                                             (line  458)
69324* objc_root_class type attribute:        Common Type Attributes.
69325                                                             (line  475)
69326* Objective-C:                           G++ and GCC.        (line    6)
69327* Objective-C <1>:                       Standards.          (line  197)
69328* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options.
69329                                                             (line    6)
69330* Objective-C++:                         G++ and GCC.        (line    6)
69331* Objective-C++ <1>:                     Standards.          (line  197)
69332* Offloading options:                    C Dialect Options.  (line  373)
69333* Offloading targets:                    C Dialect Options.  (line  360)
69334* offsettable address:                   Simple Constraints. (line   23)
69335* old-style function definitions:        Function Prototypes.
69336                                                             (line    6)
69337* omit-leaf-frame-pointer function attribute, AArch64: AArch64 Function Attributes.
69338                                                             (line   41)
69339* omitted middle-operands:               Conditionals.       (line    6)
69340* open coding:                           Inline.             (line    6)
69341* OpenACC accelerator programming:       C Dialect Options.  (line  388)
69342* OpenACC accelerator programming <1>:   C Dialect Options.  (line  397)
69343* OpenACC accelerator programming <2>:   Warning Options.    (line 3096)
69344* OpenACC offloading options:            C Dialect Options.  (line  373)
69345* OpenACC offloading targets:            C Dialect Options.  (line  360)
69346* OpenMP offloading options:             C Dialect Options.  (line  373)
69347* OpenMP offloading targets:             C Dialect Options.  (line  360)
69348* OpenMP parallel:                       C Dialect Options.  (line  403)
69349* OpenMP SIMD:                           C Dialect Options.  (line  412)
69350* OpenRISC Options:                      OpenRISC Options.   (line    6)
69351* operand constraints, asm:              Constraints.        (line    6)
69352* optimize function attribute:           Common Function Attributes.
69353                                                             (line 1024)
69354* optimize options:                      Optimize Options.   (line    6)
69355* options to control diagnostics formatting: Diagnostic Message Formatting Options.
69356                                                             (line    6)
69357* options to control warnings:           Warning Options.    (line    6)
69358* options, C++:                          C++ Dialect Options.
69359                                                             (line    6)
69360* options, code generation:              Code Gen Options.   (line    6)
69361* options, debugging:                    Debugging Options.  (line    6)
69362* options, dialect:                      C Dialect Options.  (line    6)
69363* options, directory search:             Directory Options.  (line    6)
69364* options, GCC command:                  Invoking GCC.       (line    6)
69365* options, grouping:                     Invoking GCC.       (line   31)
69366* options, linking:                      Link Options.       (line    6)
69367* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
69368                                                             (line    6)
69369* options, optimization:                 Optimize Options.   (line    6)
69370* options, order:                        Invoking GCC.       (line   35)
69371* options, preprocessor:                 Preprocessor Options.
69372                                                             (line    6)
69373* options, profiling:                    Instrumentation Options.
69374                                                             (line    6)
69375* options, program instrumentation:      Instrumentation Options.
69376                                                             (line    6)
69377* options, run-time error checking:      Instrumentation Options.
69378                                                             (line    6)
69379* order of evaluation, side effects:     Non-bugs.           (line  196)
69380* order of options:                      Invoking GCC.       (line   35)
69381* OS_main function attribute, AVR:       AVR Function Attributes.
69382                                                             (line   56)
69383* OS_task function attribute, AVR:       AVR Function Attributes.
69384                                                             (line   56)
69385* other register constraints:            Simple Constraints. (line  161)
69386* outline-atomics function attribute, AArch64: AArch64 Function Attributes.
69387                                                             (line   82)
69388* output file option:                    Overall Options.    (line  192)
69389* overloaded virtual function, warning:  C++ Dialect Options.
69390                                                             (line 1006)
69391* p in constraint:                       Simple Constraints. (line  152)
69392* packed type attribute:                 Common Type Attributes.
69393                                                             (line  293)
69394* packed variable attribute:             Common Variable Attributes.
69395                                                             (line  285)
69396* parameter forward declaration:         Variable Length.    (line   66)
69397* partial_save function attribute, NDS32: NDS32 Function Attributes.
69398                                                             (line   31)
69399* patchable_function_entry function attribute: Common Function Attributes.
69400                                                             (line 1052)
69401* path GCC_COLORS capability:            Diagnostic Message Formatting Options.
69402                                                             (line  101)
69403* pcs function attribute, ARM:           ARM Function Attributes.
69404                                                             (line   58)
69405* PDP-11 Options:                        PDP-11 Options.     (line    6)
69406* persistent variable attribute:         Common Variable Attributes.
69407                                                             (line  447)
69408* PIC:                                   Code Gen Options.   (line  356)
69409* picoChip options:                      picoChip Options.   (line    6)
69410* pmf:                                   Bound member functions.
69411                                                             (line    6)
69412* pointer arguments:                     Common Function Attributes.
69413                                                             (line  265)
69414* pointer arguments in variadic functions: Variadic Pointer Args.
69415                                                             (line    6)
69416* pointer to member function:            Bound member functions.
69417                                                             (line    6)
69418* pointers to arrays:                    Pointers to Arrays. (line    6)
69419* portions of temporary objects, pointers to: Temporaries.   (line    6)
69420* pow:                                   Other Builtins.     (line    6)
69421* pow10:                                 Other Builtins.     (line    6)
69422* pow10f:                                Other Builtins.     (line    6)
69423* pow10l:                                Other Builtins.     (line    6)
69424* PowerPC options:                       PowerPC Options.    (line    6)
69425* powf:                                  Other Builtins.     (line    6)
69426* powl:                                  Other Builtins.     (line    6)
69427* pragma GCC ivdep:                      Loop-Specific Pragmas.
69428                                                             (line    7)
69429* pragma GCC optimize:                   Function Specific Option Pragmas.
69430                                                             (line   21)
69431* pragma GCC pop_options:                Function Specific Option Pragmas.
69432                                                             (line   33)
69433* pragma GCC push_options:               Function Specific Option Pragmas.
69434                                                             (line   33)
69435* pragma GCC reset_options:              Function Specific Option Pragmas.
69436                                                             (line   41)
69437* pragma GCC target:                     Function Specific Option Pragmas.
69438                                                             (line    7)
69439* pragma GCC unroll N:                   Loop-Specific Pragmas.
69440                                                             (line   37)
69441* pragma, address:                       M32C Pragmas.       (line   15)
69442* pragma, align:                         Solaris Pragmas.    (line   11)
69443* pragma, call:                          MeP Pragmas.        (line   48)
69444* pragma, coprocessor available:         MeP Pragmas.        (line   13)
69445* pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
69446* pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
69447* pragma, ctable_entry:                  PRU Pragmas.        (line    7)
69448* pragma, custom io_volatile:            MeP Pragmas.        (line    7)
69449* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
69450* pragma, diagnostic <1>:                Diagnostic Pragmas. (line   72)
69451* pragma, diagnostic <2>:                Diagnostic Pragmas. (line   92)
69452* pragma, diagnostic <3>:                Diagnostic Pragmas. (line  114)
69453* pragma, disinterrupt:                  MeP Pragmas.        (line   38)
69454* pragma, fini:                          Solaris Pragmas.    (line   20)
69455* pragma, init:                          Solaris Pragmas.    (line   26)
69456* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
69457                                                             (line   14)
69458* pragma, long_calls:                    ARM Pragmas.        (line   11)
69459* pragma, long_calls_off:                ARM Pragmas.        (line   17)
69460* pragma, mark:                          Darwin Pragmas.     (line   11)
69461* pragma, memregs:                       M32C Pragmas.       (line    7)
69462* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
69463* pragma, options align:                 Darwin Pragmas.     (line   14)
69464* pragma, pop_macro:                     Push/Pop Macro Pragmas.
69465                                                             (line   15)
69466* pragma, push_macro:                    Push/Pop Macro Pragmas.
69467                                                             (line   11)
69468* pragma, redefine_extname:              Symbol-Renaming Pragmas.
69469                                                             (line   13)
69470* pragma, segment:                       Darwin Pragmas.     (line   21)
69471* pragma, unused:                        Darwin Pragmas.     (line   24)
69472* pragma, visibility:                    Visibility Pragmas. (line    8)
69473* pragma, weak:                          Weak Pragmas.       (line   10)
69474* pragmas:                               Pragmas.            (line    6)
69475* pragmas in C++, effect on inlining:    C++ Interface.      (line   57)
69476* pragmas, interface and implementation: C++ Interface.      (line    6)
69477* pragmas, warning of unknown:           Warning Options.    (line 1390)
69478* precompiled headers:                   Precompiled Headers.
69479                                                             (line    6)
69480* prefer-vector-width function attribute, x86: x86 Function Attributes.
69481                                                             (line  592)
69482* preprocessing numbers:                 Incompatibilities.  (line  173)
69483* preprocessing tokens:                  Incompatibilities.  (line  173)
69484* preprocessor options:                  Preprocessor Options.
69485                                                             (line    6)
69486* preserve_access_index type attribute, BPF: BPF Type Attributes.
69487                                                             (line    6)
69488* printf:                                Other Builtins.     (line    6)
69489* printf_unlocked:                       Other Builtins.     (line    6)
69490* prof:                                  Instrumentation Options.
69491                                                             (line   18)
69492* profiling options:                     Instrumentation Options.
69493                                                             (line    6)
69494* progmem variable attribute, AVR:       AVR Variable Attributes.
69495                                                             (line    7)
69496* program instrumentation options:       Instrumentation Options.
69497                                                             (line    6)
69498* promotion of formal parameters:        Function Prototypes.
69499                                                             (line    6)
69500* PRU Options:                           PRU Options.        (line    6)
69501* pure function attribute:               Common Function Attributes.
69502                                                             (line 1070)
69503* push address instruction:              Simple Constraints. (line  152)
69504* putchar:                               Other Builtins.     (line    6)
69505* puts:                                  Other Builtins.     (line    6)
69506* q floating point suffix:               Floating Types.     (line    6)
69507* Q floating point suffix:               Floating Types.     (line    6)
69508* qsort, and global register variables:  Global Register Variables.
69509                                                             (line   75)
69510* quote GCC_COLORS capability:           Diagnostic Message Formatting Options.
69511                                                             (line  117)
69512* r fixed-suffix:                        Fixed-Point.        (line    6)
69513* R fixed-suffix:                        Fixed-Point.        (line    6)
69514* r in constraint:                       Simple Constraints. (line   64)
69515* RAMPD:                                 AVR Options.        (line  430)
69516* RAMPX:                                 AVR Options.        (line  430)
69517* RAMPY:                                 AVR Options.        (line  430)
69518* RAMPZ:                                 AVR Options.        (line  430)
69519* range1 GCC_COLORS capability:          Diagnostic Message Formatting Options.
69520                                                             (line  107)
69521* range2 GCC_COLORS capability:          Diagnostic Message Formatting Options.
69522                                                             (line  110)
69523* ranges in case statements:             Case Ranges.        (line    6)
69524* read-only strings:                     Incompatibilities.  (line    9)
69525* realloc:                               Other Builtins.     (line    6)
69526* reentrant function attribute, MSP430:  MSP430 Function Attributes.
69527                                                             (line   44)
69528* register variable after longjmp:       Global Register Variables.
69529                                                             (line   92)
69530* registers for local variables:         Local Register Variables.
69531                                                             (line    6)
69532* registers in constraints:              Simple Constraints. (line   64)
69533* registers, global allocation:          Global Register Variables.
69534                                                             (line    6)
69535* registers, global variables in:        Global Register Variables.
69536                                                             (line    6)
69537* regparm function attribute, x86:       x86 Function Attributes.
69538                                                             (line   76)
69539* relocation truncated to fit (ColdFire): M680x0 Options.    (line  323)
69540* relocation truncated to fit (MIPS):    MIPS Options.       (line  237)
69541* remainder:                             Other Builtins.     (line    6)
69542* remainderf:                            Other Builtins.     (line    6)
69543* remainderl:                            Other Builtins.     (line    6)
69544* remquo:                                Other Builtins.     (line    6)
69545* remquof:                               Other Builtins.     (line    6)
69546* remquol:                               Other Builtins.     (line    6)
69547* renesas function attribute, SH:        SH Function Attributes.
69548                                                             (line   40)
69549* reordering, warning:                   C++ Dialect Options.
69550                                                             (line  820)
69551* reporting bugs:                        Bugs.               (line    6)
69552* resbank function attribute, SH:        SH Function Attributes.
69553                                                             (line   44)
69554* reset function attribute, NDS32:       NDS32 Function Attributes.
69555                                                             (line   45)
69556* reset handler functions:               NDS32 Function Attributes.
69557                                                             (line   45)
69558* rest argument (in macro):              Variadic Macros.    (line    6)
69559* restricted pointers:                   Restricted Pointers.
69560                                                             (line    6)
69561* restricted references:                 Restricted Pointers.
69562                                                             (line    6)
69563* restricted this pointer:               Restricted Pointers.
69564                                                             (line    6)
69565* retain function attribute:             Common Function Attributes.
69566                                                             (line 1350)
69567* retain variable attribute:             Common Variable Attributes.
69568                                                             (line  375)
69569* returns_nonnull function attribute:    Common Function Attributes.
69570                                                             (line 1117)
69571* returns_twice function attribute:      Common Function Attributes.
69572                                                             (line 1127)
69573* rindex:                                Other Builtins.     (line    6)
69574* rint:                                  Other Builtins.     (line    6)
69575* rintf:                                 Other Builtins.     (line    6)
69576* rintl:                                 Other Builtins.     (line    6)
69577* RISC-V Options:                        RISC-V Options.     (line    6)
69578* RL78 Options:                          RL78 Options.       (line    6)
69579* round:                                 Other Builtins.     (line    6)
69580* roundf:                                Other Builtins.     (line    6)
69581* roundl:                                Other Builtins.     (line    6)
69582* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
69583                                                             (line    6)
69584* RTTI:                                  Vague Linkage.      (line   42)
69585* run-time error checking options:       Instrumentation Options.
69586                                                             (line    6)
69587* run-time options:                      Code Gen Options.   (line    6)
69588* RX Options:                            RX Options.         (line    6)
69589* s in constraint:                       Simple Constraints. (line  100)
69590* S/390 and zSeries Options:             S/390 and zSeries Options.
69591                                                             (line    6)
69592* saddr variable attribute, RL78:        RL78 Variable Attributes.
69593                                                             (line    6)
69594* save all registers on the Blackfin:    Blackfin Function Attributes.
69595                                                             (line   56)
69596* save all registers on the H8/300, H8/300H, and H8S: H8/300 Function Attributes.
69597                                                             (line   23)
69598* saveall function attribute, Blackfin:  Blackfin Function Attributes.
69599                                                             (line   56)
69600* saveall function attribute, H8/300:    H8/300 Function Attributes.
69601                                                             (line   23)
69602* save_all function attribute, NDS32:    NDS32 Function Attributes.
69603                                                             (line   28)
69604* save_volatiles function attribute, MicroBlaze: MicroBlaze Function Attributes.
69605                                                             (line    9)
69606* scalar_storage_order type attribute:   Common Type Attributes.
69607                                                             (line  328)
69608* scalb:                                 Other Builtins.     (line    6)
69609* scalbf:                                Other Builtins.     (line    6)
69610* scalbl:                                Other Builtins.     (line    6)
69611* scalbln:                               Other Builtins.     (line    6)
69612* scalblnf:                              Other Builtins.     (line    6)
69613* scalblnf <1>:                          Other Builtins.     (line    6)
69614* scalbn:                                Other Builtins.     (line    6)
69615* scalbnf:                               Other Builtins.     (line    6)
69616* scanf, and constant strings:           Incompatibilities.  (line   17)
69617* scanfnl:                               Other Builtins.     (line    6)
69618* scope of a variable length array:      Variable Length.    (line   22)
69619* scope of declaration:                  Disappointments.    (line   21)
69620* scope of external declarations:        Incompatibilities.  (line   80)
69621* Score Options:                         Score Options.      (line    6)
69622* sda variable attribute, V850:          V850 Variable Attributes.
69623                                                             (line    9)
69624* search path:                           Directory Options.  (line    6)
69625* section function attribute:            Common Function Attributes.
69626                                                             (line 1136)
69627* section variable attribute:            Common Variable Attributes.
69628                                                             (line  307)
69629* secure_call function attribute, ARC:   ARC Function Attributes.
69630                                                             (line   54)
69631* selectany variable attribute:          Microsoft Windows Variable Attributes.
69632                                                             (line   16)
69633* sentinel function attribute:           Common Function Attributes.
69634                                                             (line 1153)
69635* setjmp:                                Global Register Variables.
69636                                                             (line   92)
69637* setjmp incompatibilities:              Incompatibilities.  (line   39)
69638* shared attribute, Nvidia PTX:          Nvidia PTX Variable Attributes.
69639                                                             (line    9)
69640* shared strings:                        Incompatibilities.  (line    9)
69641* shared variable attribute:             Microsoft Windows Variable Attributes.
69642                                                             (line   37)
69643* shortcall function attribute, Blackfin: Blackfin Function Attributes.
69644                                                             (line   38)
69645* shortcall function attribute, PowerPC: PowerPC Function Attributes.
69646                                                             (line   10)
69647* short_call function attribute, ARC:    ARC Function Attributes.
69648                                                             (line   27)
69649* short_call function attribute, ARM:    ARM Function Attributes.
69650                                                             (line   38)
69651* short_call function attribute, Epiphany: Epiphany Function Attributes.
69652                                                             (line   57)
69653* short_call function attribute, MIPS:   MIPS Function Attributes.
69654                                                             (line   63)
69655* side effect in ?::                     Conditionals.       (line   20)
69656* side effects, macro argument:          Statement Exprs.    (line   35)
69657* side effects, order of evaluation:     Non-bugs.           (line  196)
69658* sign-return-address function attribute, AArch64: AArch64 Function Attributes.
69659                                                             (line   69)
69660* signal function attribute, AVR:        AVR Function Attributes.
69661                                                             (line   80)
69662* signbit:                               Other Builtins.     (line    6)
69663* signbitd128:                           Other Builtins.     (line    6)
69664* signbitd32:                            Other Builtins.     (line    6)
69665* signbitd64:                            Other Builtins.     (line    6)
69666* signbitf:                              Other Builtins.     (line    6)
69667* signbitl:                              Other Builtins.     (line    6)
69668* signed and unsigned values, comparison warning: Warning Options.
69669                                                             (line 2691)
69670* significand:                           Other Builtins.     (line    6)
69671* significandf:                          Other Builtins.     (line    6)
69672* significandl:                          Other Builtins.     (line    6)
69673* SIMD:                                  C Dialect Options.  (line  412)
69674* simd function attribute:               Common Function Attributes.
69675                                                             (line 1180)
69676* simple constraints:                    Simple Constraints. (line    6)
69677* sin:                                   Other Builtins.     (line    6)
69678* sincos:                                Other Builtins.     (line    6)
69679* sincosf:                               Other Builtins.     (line    6)
69680* sincosl:                               Other Builtins.     (line    6)
69681* sinf:                                  Other Builtins.     (line    6)
69682* sinh:                                  Other Builtins.     (line    6)
69683* sinhf:                                 Other Builtins.     (line    6)
69684* sinhl:                                 Other Builtins.     (line    6)
69685* sinl:                                  Other Builtins.     (line    6)
69686* sizeof:                                Typeof.             (line    6)
69687* smaller data references:               M32R/D Options.     (line   57)
69688* smaller data references <1>:           Nios II Options.    (line    9)
69689* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
69690                                                             (line  714)
69691* snprintf:                              Other Builtins.     (line    6)
69692* Solaris 2 options:                     Solaris 2 Options.  (line    6)
69693* SOURCE_DATE_EPOCH:                     Environment Variables.
69694                                                             (line  194)
69695* SPARC options:                         SPARC Options.      (line    6)
69696* Spec Files:                            Spec Files.         (line    6)
69697* specified registers:                   Explicit Register Variables.
69698                                                             (line    6)
69699* specifying compiler version and target machine: Invoking GCC.
69700                                                             (line   24)
69701* specifying hardware config:            Submodel Options.   (line    6)
69702* specifying machine version:            Invoking GCC.       (line   24)
69703* specifying registers for local variables: Local Register Variables.
69704                                                             (line    6)
69705* speed of compilation:                  Precompiled Headers.
69706                                                             (line    6)
69707* speed of compilation <1>:              C++ Modules.        (line    6)
69708* sprintf:                               Other Builtins.     (line    6)
69709* sp_switch function attribute, SH:      SH Function Attributes.
69710                                                             (line   58)
69711* sqrt:                                  Other Builtins.     (line    6)
69712* sqrtf:                                 Other Builtins.     (line    6)
69713* sqrtl:                                 Other Builtins.     (line    6)
69714* sscanf:                                Other Builtins.     (line    6)
69715* sscanf, and constant strings:          Incompatibilities.  (line   17)
69716* sseregparm function attribute, x86:    x86 Function Attributes.
69717                                                             (line   93)
69718* stack_protect function attribute:      Common Function Attributes.
69719                                                             (line 1199)
69720* Statement Attributes:                  Statement Attributes.
69721                                                             (line    6)
69722* statements inside expressions:         Statement Exprs.    (line    6)
69723* static data in C++, declaring and defining: Static Definitions.
69724                                                             (line    6)
69725* stdcall function attribute, x86-32:    x86 Function Attributes.
69726                                                             (line  108)
69727* stpcpy:                                Other Builtins.     (line    6)
69728* stpncpy:                               Other Builtins.     (line    6)
69729* strcasecmp:                            Other Builtins.     (line    6)
69730* strcat:                                Other Builtins.     (line    6)
69731* strchr:                                Other Builtins.     (line    6)
69732* strcmp:                                Other Builtins.     (line    6)
69733* strcpy:                                Other Builtins.     (line    6)
69734* strcspn:                               Other Builtins.     (line    6)
69735* strdup:                                Other Builtins.     (line    6)
69736* strfmon:                               Other Builtins.     (line    6)
69737* strftime:                              Other Builtins.     (line    6)
69738* strict-align function attribute, AArch64: AArch64 Function Attributes.
69739                                                             (line   33)
69740* string constants:                      Incompatibilities.  (line    9)
69741* strlen:                                Other Builtins.     (line    6)
69742* strncasecmp:                           Other Builtins.     (line    6)
69743* strncat:                               Other Builtins.     (line    6)
69744* strncmp:                               Other Builtins.     (line    6)
69745* strncpy:                               Other Builtins.     (line    6)
69746* strndup:                               Other Builtins.     (line    6)
69747* strnlen:                               Other Builtins.     (line    6)
69748* strpbrk:                               Other Builtins.     (line    6)
69749* strrchr:                               Other Builtins.     (line    6)
69750* strspn:                                Other Builtins.     (line    6)
69751* strstr:                                Other Builtins.     (line    6)
69752* struct:                                Unnamed Fields.     (line    6)
69753* struct __htm_tdb:                      S/390 System z Built-in Functions.
69754                                                             (line   49)
69755* structures:                            Incompatibilities.  (line  146)
69756* structures, constructor expression:    Compound Literals.  (line    6)
69757* submodel options:                      Submodel Options.   (line    6)
69758* subscripting:                          Subscripting.       (line    6)
69759* subscripting and function values:      Subscripting.       (line    6)
69760* suffixes for C++ source:               Invoking G++.       (line    6)
69761* SUNPRO_DEPENDENCIES:                   Environment Variables.
69762                                                             (line  188)
69763* suppressing warnings:                  Warning Options.    (line    6)
69764* surprises in C++:                      C++ Misunderstandings.
69765                                                             (line    6)
69766* symver function attribute:             Common Function Attributes.
69767                                                             (line 1247)
69768* syntax checking:                       Warning Options.    (line   13)
69769* syscall_linkage function attribute, IA-64: IA-64 Function Attributes.
69770                                                             (line    9)
69771* system headers, warnings from:         Warning Options.    (line 2034)
69772* sysv_abi function attribute, x86:      x86 Function Attributes.
69773                                                             (line   34)
69774* tainted_args function attribute:       Common Function Attributes.
69775                                                             (line 1291)
69776* tan:                                   Other Builtins.     (line    6)
69777* tanf:                                  Other Builtins.     (line    6)
69778* tanh:                                  Other Builtins.     (line    6)
69779* tanhf:                                 Other Builtins.     (line    6)
69780* tanhl:                                 Other Builtins.     (line    6)
69781* tanl:                                  Other Builtins.     (line    6)
69782* target function attribute:             Common Function Attributes.
69783                                                             (line 1207)
69784* target function attribute <1>:         ARM Function Attributes.
69785                                                             (line   77)
69786* target function attribute <2>:         Nios II Function Attributes.
69787                                                             (line    9)
69788* target function attribute <3>:         PowerPC Function Attributes.
69789                                                             (line   21)
69790* target function attribute <4>:         S/390 Function Attributes.
69791                                                             (line   22)
69792* target function attribute <5>:         x86 Function Attributes.
69793                                                             (line  180)
69794* target machine, specifying:            Invoking GCC.       (line   24)
69795* target("3dnow") function attribute, x86: x86 Function Attributes.
69796                                                             (line  186)
69797* target("3dnowa") function attribute, x86: x86 Function Attributes.
69798                                                             (line  190)
69799* target("abm") function attribute, x86: x86 Function Attributes.
69800                                                             (line  195)
69801* target("adx") function attribute, x86: x86 Function Attributes.
69802                                                             (line  200)
69803* target("aes") function attribute, x86: x86 Function Attributes.
69804                                                             (line  204)
69805* target("align-stringops") function attribute, x86: x86 Function Attributes.
69806                                                             (line  566)
69807* target("altivec") function attribute, PowerPC: PowerPC Function Attributes.
69808                                                             (line   28)
69809* target("amx-bf16") function attribute, x86: x86 Function Attributes.
69810                                                             (line  518)
69811* target("amx-int8") function attribute, x86: x86 Function Attributes.
69812                                                             (line  514)
69813* target("amx-tile") function attribute, x86: x86 Function Attributes.
69814                                                             (line  510)
69815* target("arch=ARCH") function attribute, x86: x86 Function Attributes.
69816                                                             (line  578)
69817* target("arm") function attribute, ARM: ARM Function Attributes.
69818                                                             (line   87)
69819* target("avoid-indexed-addresses") function attribute, PowerPC: PowerPC Function Attributes.
69820                                                             (line  142)
69821* target("avx") function attribute, x86: x86 Function Attributes.
69822                                                             (line  208)
69823* target("avx2") function attribute, x86: x86 Function Attributes.
69824                                                             (line  212)
69825* target("avx5124fmaps") function attribute, x86: x86 Function Attributes.
69826                                                             (line  216)
69827* target("avx5124vnniw") function attribute, x86: x86 Function Attributes.
69828                                                             (line  221)
69829* target("avx512bitalg") function attribute, x86: x86 Function Attributes.
69830                                                             (line  226)
69831* target("avx512bw") function attribute, x86: x86 Function Attributes.
69832                                                             (line  231)
69833* target("avx512cd") function attribute, x86: x86 Function Attributes.
69834                                                             (line  235)
69835* target("avx512dq") function attribute, x86: x86 Function Attributes.
69836                                                             (line  239)
69837* target("avx512er") function attribute, x86: x86 Function Attributes.
69838                                                             (line  243)
69839* target("avx512f") function attribute, x86: x86 Function Attributes.
69840                                                             (line  247)
69841* target("avx512ifma") function attribute, x86: x86 Function Attributes.
69842                                                             (line  251)
69843* target("avx512pf") function attribute, x86: x86 Function Attributes.
69844                                                             (line  255)
69845* target("avx512vbmi") function attribute, x86: x86 Function Attributes.
69846                                                             (line  259)
69847* target("avx512vbmi2") function attribute, x86: x86 Function Attributes.
69848                                                             (line  263)
69849* target("avx512vl") function attribute, x86: x86 Function Attributes.
69850                                                             (line  267)
69851* target("avx512vnni") function attribute, x86: x86 Function Attributes.
69852                                                             (line  271)
69853* target("avx512vpopcntdq") function attribute, x86: x86 Function Attributes.
69854                                                             (line  275)
69855* target("avxvnni") function attribute, x86: x86 Function Attributes.
69856                                                             (line  538)
69857* target("bmi") function attribute, x86: x86 Function Attributes.
69858                                                             (line  280)
69859* target("bmi2") function attribute, x86: x86 Function Attributes.
69860                                                             (line  284)
69861* target("cld") function attribute, x86: x86 Function Attributes.
69862                                                             (line  542)
69863* target("cldemote") function attribute, x86: x86 Function Attributes.
69864                                                             (line  288)
69865* target("clflushopt") function attribute, x86: x86 Function Attributes.
69866                                                             (line  292)
69867* target("clwb") function attribute, x86: x86 Function Attributes.
69868                                                             (line  296)
69869* target("clzero") function attribute, x86: x86 Function Attributes.
69870                                                             (line  300)
69871* target("cmpb") function attribute, PowerPC: PowerPC Function Attributes.
69872                                                             (line   34)
69873* target("cpu=CPU") function attribute, PowerPC: PowerPC Function Attributes.
69874                                                             (line  157)
69875* target("crc32") function attribute, x86: x86 Function Attributes.
69876                                                             (line  304)
69877* target("custom-fpu-cfg=NAME") function attribute, Nios II: Nios II Function Attributes.
69878                                                             (line   25)
69879* target("custom-INSN=N") function attribute, Nios II: Nios II Function Attributes.
69880                                                             (line   16)
69881* target("cx16") function attribute, x86: x86 Function Attributes.
69882                                                             (line  308)
69883* target("default") function attribute, x86: x86 Function Attributes.
69884                                                             (line  311)
69885* target("dlmzb") function attribute, PowerPC: PowerPC Function Attributes.
69886                                                             (line   40)
69887* target("f16c") function attribute, x86: x86 Function Attributes.
69888                                                             (line  316)
69889* target("fancy-math-387") function attribute, x86: x86 Function Attributes.
69890                                                             (line  546)
69891* target("fma") function attribute, x86: x86 Function Attributes.
69892                                                             (line  320)
69893* target("fma4") function attribute, x86: x86 Function Attributes.
69894                                                             (line  324)
69895* target("fpmath=FPMATH") function attribute, x86: x86 Function Attributes.
69896                                                             (line  586)
69897* target("fprnd") function attribute, PowerPC: PowerPC Function Attributes.
69898                                                             (line   47)
69899* target("fpu=") function attribute, ARM: ARM Function Attributes.
69900                                                             (line   93)
69901* target("friz") function attribute, PowerPC: PowerPC Function Attributes.
69902                                                             (line  133)
69903* target("fsgsbase") function attribute, x86: x86 Function Attributes.
69904                                                             (line  328)
69905* target("fxsr") function attribute, x86: x86 Function Attributes.
69906                                                             (line  332)
69907* target("general-regs-only") function attribute, x86: x86 Function Attributes.
69908                                                             (line  575)
69909* target("gfni") function attribute, x86: x86 Function Attributes.
69910                                                             (line  336)
69911* target("hard-dfp") function attribute, PowerPC: PowerPC Function Attributes.
69912                                                             (line   53)
69913* target("hle") function attribute, x86: x86 Function Attributes.
69914                                                             (line  340)
69915* target("hreset") function attribute, x86: x86 Function Attributes.
69916                                                             (line  526)
69917* target("ieee-fp") function attribute, x86: x86 Function Attributes.
69918                                                             (line  551)
69919* target("inline-all-stringops") function attribute, x86: x86 Function Attributes.
69920                                                             (line  556)
69921* target("inline-stringops-dynamically") function attribute, x86: x86 Function Attributes.
69922                                                             (line  560)
69923* target("isel") function attribute, PowerPC: PowerPC Function Attributes.
69924                                                             (line   59)
69925* target("kl") function attribute, x86:  x86 Function Attributes.
69926                                                             (line  530)
69927* target("longcall") function attribute, PowerPC: PowerPC Function Attributes.
69928                                                             (line  152)
69929* target("lwp") function attribute, x86: x86 Function Attributes.
69930                                                             (line  344)
69931* target("lzcnt") function attribute, x86: x86 Function Attributes.
69932                                                             (line  348)
69933* target("mfcrf") function attribute, PowerPC: PowerPC Function Attributes.
69934                                                             (line   63)
69935* target("mmx") function attribute, x86: x86 Function Attributes.
69936                                                             (line  352)
69937* target("movbe") function attribute, x86: x86 Function Attributes.
69938                                                             (line  356)
69939* target("movdir64b") function attribute, x86: x86 Function Attributes.
69940                                                             (line  360)
69941* target("movdiri") function attribute, x86: x86 Function Attributes.
69942                                                             (line  364)
69943* target("mulhw") function attribute, PowerPC: PowerPC Function Attributes.
69944                                                             (line   70)
69945* target("multiple") function attribute, PowerPC: PowerPC Function Attributes.
69946                                                             (line   77)
69947* target("mwait") function attribute, x86: x86 Function Attributes.
69948                                                             (line  368)
69949* target("mwaitx") function attribute, x86: x86 Function Attributes.
69950                                                             (line  373)
69951* target("no-custom-INSN") function attribute, Nios II: Nios II Function Attributes.
69952                                                             (line   16)
69953* target("paired") function attribute, PowerPC: PowerPC Function Attributes.
69954                                                             (line  147)
69955* target("pclmul") function attribute, x86: x86 Function Attributes.
69956                                                             (line  377)
69957* target("pconfig") function attribute, x86: x86 Function Attributes.
69958                                                             (line  381)
69959* target("pku") function attribute, x86: x86 Function Attributes.
69960                                                             (line  385)
69961* target("popcnt") function attribute, x86: x86 Function Attributes.
69962                                                             (line  389)
69963* target("popcntb") function attribute, PowerPC: PowerPC Function Attributes.
69964                                                             (line   88)
69965* target("popcntd") function attribute, PowerPC: PowerPC Function Attributes.
69966                                                             (line   95)
69967* target("powerpc-gfxopt") function attribute, PowerPC: PowerPC Function Attributes.
69968                                                             (line  101)
69969* target("powerpc-gpopt") function attribute, PowerPC: PowerPC Function Attributes.
69970                                                             (line  107)
69971* target("prefetchwt1") function attribute, x86: x86 Function Attributes.
69972                                                             (line  393)
69973* target("prfchw") function attribute, x86: x86 Function Attributes.
69974                                                             (line  397)
69975* target("ptwrite") function attribute, x86: x86 Function Attributes.
69976                                                             (line  401)
69977* target("rdpid") function attribute, x86: x86 Function Attributes.
69978                                                             (line  405)
69979* target("rdrnd") function attribute, x86: x86 Function Attributes.
69980                                                             (line  409)
69981* target("rdseed") function attribute, x86: x86 Function Attributes.
69982                                                             (line  413)
69983* target("recip") function attribute, x86: x86 Function Attributes.
69984                                                             (line  570)
69985* target("recip-precision") function attribute, PowerPC: PowerPC Function Attributes.
69986                                                             (line  113)
69987* target("rtm") function attribute, x86: x86 Function Attributes.
69988                                                             (line  417)
69989* target("sahf") function attribute, x86: x86 Function Attributes.
69990                                                             (line  421)
69991* target("sgx") function attribute, x86: x86 Function Attributes.
69992                                                             (line  425)
69993* target("sha") function attribute, x86: x86 Function Attributes.
69994                                                             (line  429)
69995* target("shstk") function attribute, x86: x86 Function Attributes.
69996                                                             (line  433)
69997* target("sse") function attribute, x86: x86 Function Attributes.
69998                                                             (line  437)
69999* target("sse2") function attribute, x86: x86 Function Attributes.
70000                                                             (line  441)
70001* target("sse3") function attribute, x86: x86 Function Attributes.
70002                                                             (line  445)
70003* target("sse4") function attribute, x86: x86 Function Attributes.
70004                                                             (line  449)
70005* target("sse4.1") function attribute, x86: x86 Function Attributes.
70006                                                             (line  454)
70007* target("sse4.2") function attribute, x86: x86 Function Attributes.
70008                                                             (line  458)
70009* target("sse4a") function attribute, x86: x86 Function Attributes.
70010                                                             (line  462)
70011* target("ssse3") function attribute, x86: x86 Function Attributes.
70012                                                             (line  466)
70013* target("string") function attribute, PowerPC: PowerPC Function Attributes.
70014                                                             (line  119)
70015* target("tbm") function attribute, x86: x86 Function Attributes.
70016                                                             (line  470)
70017* target("thumb") function attribute, ARM: ARM Function Attributes.
70018                                                             (line   83)
70019* target("tune=TUNE") function attribute, PowerPC: PowerPC Function Attributes.
70020                                                             (line  164)
70021* target("tune=TUNE") function attribute, x86: x86 Function Attributes.
70022                                                             (line  582)
70023* target("uintr") function attribute, x86: x86 Function Attributes.
70024                                                             (line  522)
70025* target("update") function attribute, PowerPC: PowerPC Function Attributes.
70026                                                             (line   82)
70027* target("vaes") function attribute, x86: x86 Function Attributes.
70028                                                             (line  474)
70029* target("vpclmulqdq") function attribute, x86: x86 Function Attributes.
70030                                                             (line  478)
70031* target("vsx") function attribute, PowerPC: PowerPC Function Attributes.
70032                                                             (line  125)
70033* target("waitpkg") function attribute, x86: x86 Function Attributes.
70034                                                             (line  482)
70035* target("wbnoinvd") function attribute, x86: x86 Function Attributes.
70036                                                             (line  486)
70037* target("widekl") function attribute, x86: x86 Function Attributes.
70038                                                             (line  534)
70039* target("xop") function attribute, x86: x86 Function Attributes.
70040                                                             (line  490)
70041* target("xsave") function attribute, x86: x86 Function Attributes.
70042                                                             (line  494)
70043* target("xsavec") function attribute, x86: x86 Function Attributes.
70044                                                             (line  498)
70045* target("xsaveopt") function attribute, x86: x86 Function Attributes.
70046                                                             (line  502)
70047* target("xsaves") function attribute, x86: x86 Function Attributes.
70048                                                             (line  506)
70049* target-dependent options:              Submodel Options.   (line    6)
70050* target_clones function attribute:      Common Function Attributes.
70051                                                             (line 1308)
70052* TC1:                                   Standards.          (line   13)
70053* TC2:                                   Standards.          (line   13)
70054* TC3:                                   Standards.          (line   13)
70055* tda variable attribute, V850:          V850 Variable Attributes.
70056                                                             (line   13)
70057* Technical Corrigenda:                  Standards.          (line   13)
70058* Technical Corrigendum 1:               Standards.          (line   13)
70059* Technical Corrigendum 2:               Standards.          (line   13)
70060* Technical Corrigendum 3:               Standards.          (line   13)
70061* template instantiation:                Template Instantiation.
70062                                                             (line    6)
70063* temporaries, lifetime of:              Temporaries.        (line    6)
70064* tentative definitions:                 Code Gen Options.   (line  234)
70065* TERM_URLS environment variable:        Diagnostic Message Formatting Options.
70066                                                             (line  144)
70067* tgamma:                                Other Builtins.     (line    6)
70068* tgammaf:                               Other Builtins.     (line    6)
70069* tgammal:                               Other Builtins.     (line    6)
70070* thiscall function attribute, x86-32:   x86 Function Attributes.
70071                                                             (line   23)
70072* Thread-Local Storage:                  Thread-Local.       (line    6)
70073* thunks:                                Nested Functions.   (line    6)
70074* TILE-Gx options:                       TILE-Gx Options.    (line    6)
70075* TILEPro options:                       TILEPro Options.    (line    6)
70076* tiny data section on the H8/300H and H8S: H8/300 Variable Attributes.
70077                                                             (line   19)
70078* tiny type attribute, MeP:              MeP Type Attributes.
70079                                                             (line    6)
70080* tiny variable attribute, MeP:          MeP Variable Attributes.
70081                                                             (line   20)
70082* tiny_data variable attribute, H8/300:  H8/300 Variable Attributes.
70083                                                             (line   19)
70084* TLS:                                   Thread-Local.       (line    6)
70085* tls-dialect= function attribute, AArch64: AArch64 Function Attributes.
70086                                                             (line   48)
70087* tls_model variable attribute:          Common Variable Attributes.
70088                                                             (line  352)
70089* TMPDIR:                                Environment Variables.
70090                                                             (line   45)
70091* toascii:                               Other Builtins.     (line    6)
70092* tolower:                               Other Builtins.     (line    6)
70093* toupper:                               Other Builtins.     (line    6)
70094* towlower:                              Other Builtins.     (line    6)
70095* towupper:                              Other Builtins.     (line    6)
70096* traditional C language:                Preprocessor Options.
70097                                                             (line  375)
70098* transparent_union type attribute:      Common Type Attributes.
70099                                                             (line  372)
70100* trapa_handler function attribute, SH:  SH Function Attributes.
70101                                                             (line   73)
70102* trap_exit function attribute, SH:      SH Function Attributes.
70103                                                             (line   68)
70104* trunc:                                 Other Builtins.     (line    6)
70105* truncf:                                Other Builtins.     (line    6)
70106* truncl:                                Other Builtins.     (line    6)
70107* tune= function attribute, AArch64:     AArch64 Function Attributes.
70108                                                             (line   58)
70109* two-stage name lookup:                 Name lookup.        (line    6)
70110* type alignment:                        Alignment.          (line    6)
70111* type attributes:                       Type Attributes.    (line    6)
70112* type-diff GCC_COLORS capability:       Diagnostic Message Formatting Options.
70113                                                             (line  140)
70114* typedef names as function parameters:  Incompatibilities.  (line   97)
70115* typeof:                                Typeof.             (line    6)
70116* type_info:                             Vague Linkage.      (line   42)
70117* uhk fixed-suffix:                      Fixed-Point.        (line    6)
70118* UHK fixed-suffix:                      Fixed-Point.        (line    6)
70119* uhr fixed-suffix:                      Fixed-Point.        (line    6)
70120* UHR fixed-suffix:                      Fixed-Point.        (line    6)
70121* uk fixed-suffix:                       Fixed-Point.        (line    6)
70122* UK fixed-suffix:                       Fixed-Point.        (line    6)
70123* ulk fixed-suffix:                      Fixed-Point.        (line    6)
70124* ULK fixed-suffix:                      Fixed-Point.        (line    6)
70125* ULL integer suffix:                    Long Long.          (line    6)
70126* ullk fixed-suffix:                     Fixed-Point.        (line    6)
70127* ULLK fixed-suffix:                     Fixed-Point.        (line    6)
70128* ullr fixed-suffix:                     Fixed-Point.        (line    6)
70129* ULLR fixed-suffix:                     Fixed-Point.        (line    6)
70130* ulr fixed-suffix:                      Fixed-Point.        (line    6)
70131* ULR fixed-suffix:                      Fixed-Point.        (line    6)
70132* unavailable enumerator attribute:      Enumerator Attributes.
70133                                                             (line   38)
70134* unavailable function attribute:        Common Function Attributes.
70135                                                             (line  362)
70136* unavailable type attribute:            Common Type Attributes.
70137                                                             (line  224)
70138* unavailable variable attribute:        Common Variable Attributes.
70139                                                             (line  226)
70140* uncached type attribute, ARC:          ARC Type Attributes.
70141                                                             (line    6)
70142* undefined behavior:                    Bug Criteria.       (line   17)
70143* undefined function value:              Bug Criteria.       (line   17)
70144* underscores in variables in macros:    Typeof.             (line   46)
70145* uninitialized variable attribute:      Common Variable Attributes.
70146                                                             (line  385)
70147* union:                                 Unnamed Fields.     (line    6)
70148* union, casting to a:                   Cast to Union.      (line    6)
70149* unions:                                Incompatibilities.  (line  146)
70150* unknown pragmas, warning:              Warning Options.    (line 1390)
70151* unresolved references and -nodefaultlibs: Link Options.    (line  157)
70152* unresolved references and -nostdlib:   Link Options.       (line  157)
70153* unused function attribute:             Common Function Attributes.
70154                                                             (line 1335)
70155* unused label attribute:                Label Attributes.   (line   32)
70156* unused type attribute:                 Common Type Attributes.
70157                                                             (line  425)
70158* unused variable attribute:             Common Variable Attributes.
70159                                                             (line  361)
70160* upper function attribute, MSP430:      MSP430 Function Attributes.
70161                                                             (line   57)
70162* upper variable attribute, MSP430:      MSP430 Variable Attributes.
70163                                                             (line    8)
70164* ur fixed-suffix:                       Fixed-Point.        (line    6)
70165* UR fixed-suffix:                       Fixed-Point.        (line    6)
70166* urls:                                  Diagnostic Message Formatting Options.
70167                                                             (line  144)
70168* used function attribute:               Common Function Attributes.
70169                                                             (line 1340)
70170* used variable attribute:               Common Variable Attributes.
70171                                                             (line  366)
70172* User stack pointer in interrupts on the Blackfin: Blackfin Function Attributes.
70173                                                             (line   21)
70174* use_debug_exception_return function attribute, MIPS: MIPS Function Attributes.
70175                                                             (line   39)
70176* use_shadow_register_set function attribute, MIPS: MIPS Function Attributes.
70177                                                             (line   28)
70178* V in constraint:                       Simple Constraints. (line   43)
70179* V850 Options:                          V850 Options.       (line    6)
70180* vague linkage:                         Vague Linkage.      (line    6)
70181* value after longjmp:                   Global Register Variables.
70182                                                             (line   92)
70183* variable addressability on the M32R/D: M32R/D Variable Attributes.
70184                                                             (line    9)
70185* variable alignment:                    Alignment.          (line    6)
70186* variable attributes:                   Variable Attributes.
70187                                                             (line    6)
70188* variable number of arguments:          Variadic Macros.    (line    6)
70189* variable-length array in a structure:  Variable Length.    (line   26)
70190* variable-length array scope:           Variable Length.    (line   22)
70191* variable-length arrays:                Variable Length.    (line    6)
70192* variables in specified registers:      Explicit Register Variables.
70193                                                             (line    6)
70194* variables, local, in macros:           Typeof.             (line   46)
70195* variadic functions, pointer arguments: Variadic Pointer Args.
70196                                                             (line    6)
70197* variadic macros:                       Variadic Macros.    (line    6)
70198* VAX options:                           VAX Options.        (line    6)
70199* vector function attribute, RX:         RX Function Attributes.
70200                                                             (line   49)
70201* vector types, using with x86 intrinsics: Vector Extensions.
70202                                                             (line  212)
70203* vector_size type attribute:            Common Type Attributes.
70204                                                             (line  434)
70205* vector_size variable attribute:        Common Variable Attributes.
70206                                                             (line  401)
70207* vec_blendv:                            PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70208                                                             (line  308)
70209* vec_cfuge:                             PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70210                                                             (line   12)
70211* vec_clrl:                              PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70212                                                             (line   31)
70213* vec_clrr:                              PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70214                                                             (line   40)
70215* vec_cntlzm:                            PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70216                                                             (line   17)
70217* vec_cnttzm:                            PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70218                                                             (line   22)
70219* vec_extracth:                          PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70220                                                             (line  101)
70221* vec_extractl:                          PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70222                                                             (line   72)
70223* vec_genpcvm:                           PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70224                                                             (line  514)
70225* vec_gnb:                               PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70226                                                             (line   46)
70227* vec_inserth:                           PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70228                                                             (line  168)
70229* vec_insertl:                           PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70230                                                             (line  137)
70231* vec_pdep:                              PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70232                                                             (line  105)
70233* vec_permx:                             PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70234                                                             (line  335)
70235* vec_pext:                              PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70236                                                             (line  340)
70237* vec_replace_element:                   PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70238                                                             (line  189)
70239* vec_replace_unaligned:                 PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70240                                                             (line  211)
70241* vec_sldb:                              PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70242                                                             (line  235)
70243* vec_splati:                            PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70244                                                             (line  265)
70245* vec_splatid:                           PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70246                                                             (line  270)
70247* vec_splati_ins:                        PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70248                                                             (line  281)
70249* vec_srdb:                              PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70250                                                             (line  258)
70251* vec_stril:                             PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70252                                                             (line  350)
70253* vec_stril_p:                           PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70254                                                             (line  361)
70255* vec_strir:                             PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70256                                                             (line  371)
70257* vec_strir_p:                           PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70258                                                             (line  382)
70259* vec_ternarylogic:                      PowerPC AltiVec Built-in Functions Available on ISA 3.1.
70260                                                             (line  401)
70261* vec_xst_trunc:                         Basic PowerPC Built-in Functions Available on ISA 3.1.
70262                                                             (line   77)
70263* version_id function attribute, IA-64:  IA-64 Function Attributes.
70264                                                             (line   16)
70265* vfprintf:                              Other Builtins.     (line    6)
70266* vfscanf:                               Other Builtins.     (line    6)
70267* visibility function attribute:         Common Function Attributes.
70268                                                             (line 1361)
70269* visibility type attribute:             Common Type Attributes.
70270                                                             (line  461)
70271* visibility variable attribute:         Common Variable Attributes.
70272                                                             (line  429)
70273* Visium options:                        Visium Options.     (line    6)
70274* VLAs:                                  Variable Length.    (line    6)
70275* vliw function attribute, MeP:          MeP Function Attributes.
70276                                                             (line   30)
70277* void pointers, arithmetic:             Pointer Arith.      (line    6)
70278* void, size of pointer to:              Pointer Arith.      (line    6)
70279* volatile access:                       Volatiles.          (line    6)
70280* volatile access <1>:                   C++ Volatiles.      (line    6)
70281* volatile applied to function:          Function Attributes.
70282                                                             (line    6)
70283* volatile asm:                          Extended Asm.       (line  116)
70284* volatile read:                         Volatiles.          (line    6)
70285* volatile read <1>:                     C++ Volatiles.      (line    6)
70286* volatile write:                        Volatiles.          (line    6)
70287* volatile write <1>:                    C++ Volatiles.      (line    6)
70288* vprintf:                               Other Builtins.     (line    6)
70289* vscanf:                                Other Builtins.     (line    6)
70290* vsnprintf:                             Other Builtins.     (line    6)
70291* vsprintf:                              Other Builtins.     (line    6)
70292* vsscanf:                               Other Builtins.     (line    6)
70293* vsx_xl_sext:                           Basic PowerPC Built-in Functions Available on ISA 3.1.
70294                                                             (line   57)
70295* vsx_xl_zext:                           Basic PowerPC Built-in Functions Available on ISA 3.1.
70296                                                             (line   57)
70297* vtable:                                Vague Linkage.      (line   27)
70298* VxWorks Options:                       VxWorks Options.    (line    6)
70299* w floating point suffix:               Floating Types.     (line    6)
70300* W floating point suffix:               Floating Types.     (line    6)
70301* wakeup function attribute, MSP430:     MSP430 Function Attributes.
70302                                                             (line   49)
70303* warm function attribute, NDS32:        NDS32 Function Attributes.
70304                                                             (line   52)
70305* warning for comparison of signed and unsigned values: Warning Options.
70306                                                             (line 2691)
70307* warning for overloaded virtual function: C++ Dialect Options.
70308                                                             (line 1006)
70309* warning for reordering of member initializers: C++ Dialect Options.
70310                                                             (line  820)
70311* warning for unknown pragmas:           Warning Options.    (line 1390)
70312* warning function attribute:            Common Function Attributes.
70313                                                             (line  373)
70314* warning GCC_COLORS capability:         Diagnostic Message Formatting Options.
70315                                                             (line   95)
70316* warning messages:                      Warning Options.    (line    6)
70317* warnings from system headers:          Warning Options.    (line 2034)
70318* warnings vs errors:                    Warnings and Errors.
70319                                                             (line    6)
70320* warn_if_not_aligned type attribute:    Common Type Attributes.
70321                                                             (line   91)
70322* warn_if_not_aligned variable attribute: Common Variable Attributes.
70323                                                             (line  106)
70324* warn_unused type attribute:            C++ Attributes.     (line   71)
70325* warn_unused_result function attribute: Common Function Attributes.
70326                                                             (line 1461)
70327* weak function attribute:               Common Function Attributes.
70328                                                             (line 1478)
70329* weak variable attribute:               Common Variable Attributes.
70330                                                             (line  434)
70331* weakref function attribute:            Common Function Attributes.
70332                                                             (line 1490)
70333* whitespace:                            Incompatibilities.  (line  112)
70334* Windows Options for x86:               x86 Windows Options.
70335                                                             (line    6)
70336* X in constraint:                       Simple Constraints. (line  122)
70337* X3.159-1989:                           Standards.          (line   13)
70338* x86 named address spaces:              Named Address Spaces.
70339                                                             (line  185)
70340* x86 Options:                           x86 Options.        (line    6)
70341* x86 Windows Options:                   x86 Windows Options.
70342                                                             (line    6)
70343* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
70344* Xtensa Options:                        Xtensa Options.     (line    6)
70345* y0:                                    Other Builtins.     (line    6)
70346* y0f:                                   Other Builtins.     (line    6)
70347* y0l:                                   Other Builtins.     (line    6)
70348* y1:                                    Other Builtins.     (line    6)
70349* y1f:                                   Other Builtins.     (line    6)
70350* y1l:                                   Other Builtins.     (line    6)
70351* yn:                                    Other Builtins.     (line    6)
70352* ynf:                                   Other Builtins.     (line    6)
70353* ynl:                                   Other Builtins.     (line    6)
70354* zda variable attribute, V850:          V850 Variable Attributes.
70355                                                             (line   17)
70356* zero-length arrays:                    Zero Length.        (line    6)
70357* zero-size structures:                  Empty Structures.   (line    6)
70358* zero_call_used_regs function attribute: Common Function Attributes.
70359                                                             (line 1532)
70360* zSeries options:                       zSeries Options.    (line    6)
70361
70362
70363
70364Tag Table:
70365Node: Top2135
70366Node: G++ and GCC4093
70367Node: Standards6139
70368Node: Invoking GCC19766
70369Node: Option Summary24993
70370Node: Overall Options83928
70371Node: Invoking G++111454
70372Node: C Dialect Options112977
70373Node: C++ Dialect Options134016
70374Node: Objective-C and Objective-C++ Dialect Options196575
70375Node: Diagnostic Message Formatting Options208322
70376Node: Warning Options238895
70377Ref: Wtrigraphs343793
70378Node: Static Analyzer Options389156
70379Node: Debugging Options409708
70380Node: Optimize Options430945
70381Ref: Type-punning503405
70382Node: Instrumentation Options623696
70383Node: Preprocessor Options671808
70384Ref: dashMF676655
70385Ref: fdollars-in-identifiers681317
70386Node: Assembler Options694642
70387Node: Link Options695333
70388Ref: Link Options-Footnote-1712293
70389Node: Directory Options712629
70390Node: Code Gen Options721032
70391Node: Developer Options749905
70392Node: Submodel Options791290
70393Node: AArch64 Options793122
70394Ref: aarch64-feature-modifiers808695
70395Node: Adapteva Epiphany Options814256
70396Node: AMD GCN Options820208
70397Node: ARC Options821771
70398Node: ARM Options842540
70399Node: AVR Options884565
70400Node: Blackfin Options911102
70401Node: C6X Options918994
70402Node: CRIS Options920537
70403Node: CR16 Options923723
70404Node: C-SKY Options924635
70405Node: Darwin Options930362
70406Node: DEC Alpha Options937803
70407Node: eBPF Options949419
70408Node: FR30 Options951795
70409Node: FT32 Options952355
70410Node: FRV Options953301
70411Node: GNU/Linux Options960065
70412Node: H8/300 Options961446
70413Node: HPPA Options962898
70414Node: IA-64 Options972430
70415Node: LM32 Options980558
70416Node: LoongArch Options981086
70417Node: M32C Options987364
70418Node: M32R/D Options988642
70419Node: M680x0 Options992187
70420Node: MCore Options1006342
70421Node: MeP Options1007844
70422Node: MicroBlaze Options1011804
70423Node: MIPS Options1014869
70424Node: MMIX Options1051666
70425Node: MN10300 Options1054143
70426Node: Moxie Options1056686
70427Node: MSP430 Options1057173
70428Node: NDS32 Options1064934
70429Node: Nios II Options1067104
70430Node: Nvidia PTX Options1080320
70431Node: OpenRISC Options1083816
70432Node: PDP-11 Options1086570
70433Node: picoChip Options1087819
70434Node: PowerPC Options1089957
70435Node: PRU Options1090177
70436Node: RISC-V Options1092386
70437Node: RL78 Options1100787
70438Node: RS/6000 and PowerPC Options1104562
70439Node: RX Options1146078
70440Node: S/390 and zSeries Options1154680
70441Node: Score Options1165480
70442Node: SH Options1166329
70443Node: Solaris 2 Options1181469
70444Node: SPARC Options1182707
70445Node: System V Options1198359
70446Node: TILE-Gx Options1199187
70447Node: TILEPro Options1200205
70448Node: V850 Options1200709
70449Node: VAX Options1207396
70450Node: Visium Options1208088
70451Node: VMS Options1210396
70452Node: VxWorks Options1211212
70453Node: x86 Options1212364
70454Node: x86 Windows Options1281467
70455Node: Xstormy16 Options1284273
70456Node: Xtensa Options1284567
70457Node: zSeries Options1290703
70458Node: Spec Files1290899
70459Node: Environment Variables1316978
70460Node: Precompiled Headers1326411
70461Node: C++ Modules1332620
70462Ref: C++ Modules-Footnote-11338615
70463Node: C++ Module Mapper1338868
70464Node: C++ Module Preprocessing1344021
70465Node: C++ Compiled Module Interface1345850
70466Ref: C++ Compiled Module Interface-Footnote-11349234
70467Ref: C++ Compiled Module Interface-Footnote-21349323
70468Node: C Implementation1349379
70469Node: Translation implementation1351070
70470Node: Environment implementation1351661
70471Node: Identifiers implementation1352215
70472Node: Characters implementation1353301
70473Node: Integers implementation1356951
70474Node: Floating point implementation1359000
70475Node: Arrays and pointers implementation1362063
70476Ref: Arrays and pointers implementation-Footnote-11363523
70477Node: Hints implementation1363649
70478Node: Structures unions enumerations and bit-fields implementation1365144
70479Node: Qualifiers implementation1367368
70480Node: Declarators implementation1369429
70481Node: Statements implementation1369770
70482Node: Preprocessing directives implementation1370096
70483Node: Library functions implementation1372417
70484Node: Architecture implementation1373066
70485Node: Locale-specific behavior implementation1374711
70486Node: C++ Implementation1375016
70487Node: Conditionally-supported behavior1376300
70488Node: Exception handling1376917
70489Node: C Extensions1377384
70490Node: Statement Exprs1382607
70491Node: Local Labels1387979
70492Node: Labels as Values1390952
70493Ref: Labels as Values-Footnote-11393479
70494Node: Nested Functions1393664
70495Node: Nonlocal Gotos1397618
70496Node: Constructing Calls1399884
70497Node: Typeof1404596
70498Node: Conditionals1408525
70499Node: __int1281409414
70500Node: Long Long1409939
70501Node: Complex1411430
70502Node: Floating Types1416175
70503Node: Half-Precision1419696
70504Node: Decimal Float1423164
70505Node: Hex Floats1425018
70506Node: Fixed-Point1426092
70507Node: Named Address Spaces1429350
70508Ref: AVR Named Address Spaces1430036
70509Node: Zero Length1437330
70510Node: Empty Structures1441511
70511Node: Variable Length1441917
70512Node: Variadic Macros1444635
70513Node: Escaped Newlines1447013
70514Node: Subscripting1447874
70515Node: Pointer Arith1448599
70516Node: Variadic Pointer Args1449176
70517Node: Pointers to Arrays1449901
70518Node: Initializers1450654
70519Node: Compound Literals1451155
70520Node: Designated Inits1454722
70521Node: Case Ranges1458646
70522Node: Cast to Union1459327
70523Node: Mixed Labels and Declarations1461061
70524Node: Function Attributes1461698
70525Node: Common Function Attributes1466209
70526Ref: Common Function Attributes-Footnote-11543150
70527Node: AArch64 Function Attributes1543467
70528Node: AMD GCN Function Attributes1549661
70529Node: ARC Function Attributes1552714
70530Node: ARM Function Attributes1555651
70531Node: AVR Function Attributes1560790
70532Node: Blackfin Function Attributes1565325
70533Node: BPF Function Attributes1567822
70534Node: CR16 Function Attributes1568410
70535Node: C-SKY Function Attributes1568929
70536Node: Epiphany Function Attributes1570228
70537Node: H8/300 Function Attributes1572983
70538Node: IA-64 Function Attributes1574181
70539Node: M32C Function Attributes1575223
70540Node: M32R/D Function Attributes1577561
70541Node: m68k Function Attributes1579035
70542Node: MCORE Function Attributes1579979
70543Node: MeP Function Attributes1580790
70544Node: MicroBlaze Function Attributes1582091
70545Node: Microsoft Windows Function Attributes1583598
70546Node: MIPS Function Attributes1588167
70547Node: MSP430 Function Attributes1593785
70548Node: NDS32 Function Attributes1597864
70549Node: Nios II Function Attributes1600288
70550Node: Nvidia PTX Function Attributes1601585
70551Node: PowerPC Function Attributes1602200
70552Node: RISC-V Function Attributes1608974
70553Node: RL78 Function Attributes1610390
70554Node: RX Function Attributes1611629
70555Node: S/390 Function Attributes1614176
70556Node: SH Function Attributes1616004
70557Node: Symbian OS Function Attributes1619432
70558Node: V850 Function Attributes1619768
70559Node: Visium Function Attributes1620313
70560Node: x86 Function Attributes1620841
70561Node: Xstormy16 Function Attributes1644796
70562Node: Variable Attributes1645303
70563Node: Common Variable Attributes1646836
70564Node: ARC Variable Attributes1668743
70565Node: AVR Variable Attributes1669125
70566Node: Blackfin Variable Attributes1674288
70567Node: H8/300 Variable Attributes1675146
70568Node: IA-64 Variable Attributes1676219
70569Node: M32R/D Variable Attributes1676970
70570Node: MeP Variable Attributes1677753
70571Node: Microsoft Windows Variable Attributes1679846
70572Node: MSP430 Variable Attributes1682299
70573Node: Nvidia PTX Variable Attributes1683513
70574Node: PowerPC Variable Attributes1684130
70575Node: RL78 Variable Attributes1684687
70576Node: V850 Variable Attributes1685106
70577Node: x86 Variable Attributes1685739
70578Node: Xstormy16 Variable Attributes1686795
70579Node: Type Attributes1687365
70580Node: Common Type Attributes1689053
70581Node: ARC Type Attributes1711414
70582Node: ARM Type Attributes1711886
70583Node: BPF Type Attributes1712668
70584Node: MeP Type Attributes1713185
70585Node: PowerPC Type Attributes1713587
70586Node: x86 Type Attributes1714576
70587Node: Label Attributes1715568
70588Node: Enumerator Attributes1717595
70589Node: Statement Attributes1719127
70590Node: Attribute Syntax1720610
70591Node: Function Prototypes1731868
70592Node: C++ Comments1733648
70593Node: Dollar Signs1734167
70594Node: Character Escapes1734632
70595Node: Alignment1734916
70596Node: Inline1736569
70597Node: Volatiles1741386
70598Node: Using Assembly Language with C1744285
70599Node: Basic Asm1745522
70600Node: Extended Asm1751145
70601Ref: Volatile1755259
70602Ref: AssemblerTemplate1759372
70603Ref: OutputOperands1763612
70604Ref: FlagOutputOperands1770575
70605Ref: InputOperands1773522
70606Ref: Clobbers and Scratch Registers1777790
70607Ref: GotoLabels1786431
70608Ref: x86Operandmodifiers1790054
70609Ref: x86floatingpointasmoperands1794870
70610Ref: msp430Operandmodifiers1798199
70611Node: Constraints1799857
70612Node: Simple Constraints1800963
70613Node: Multi-Alternative1808277
70614Node: Modifiers1809952
70615Node: Machine Constraints1812751
70616Node: Asm Labels1870522
70617Node: Explicit Register Variables1872142
70618Ref: Explicit Reg Vars1872356
70619Node: Global Register Variables1872965
70620Ref: Global Reg Vars1873173
70621Node: Local Register Variables1877955
70622Ref: Local Reg Vars1878175
70623Node: Size of an asm1881803
70624Node: Alternate Keywords1883281
70625Node: Incomplete Enums1884786
70626Node: Function Names1885543
70627Node: Return Address1887447
70628Node: Vector Extensions1892034
70629Node: Offsetof1903017
70630Node: __sync Builtins1903850
70631Node: __atomic Builtins1910293
70632Node: Integer Overflow Builtins1923806
70633Node: x86 specific memory model extensions for transactional memory1930289
70634Node: Object Size Checking1931555
70635Node: Other Builtins1938571
70636Node: Target Builtins1991175
70637Node: AArch64 Built-in Functions1992950
70638Node: Alpha Built-in Functions1993646
70639Node: Altera Nios II Built-in Functions1996740
70640Node: ARC Built-in Functions2001179
70641Node: ARC SIMD Built-in Functions2006391
70642Node: ARM iWMMXt Built-in Functions2015389
70643Node: ARM C Language Extensions (ACLE)2022525
70644Node: ARM Floating Point Status and Control Intrinsics2023802
70645Node: ARM ARMv8-M Security Extensions2024289
70646Node: AVR Built-in Functions2025581
70647Node: Blackfin Built-in Functions2029347
70648Node: BPF Built-in Functions2029967
70649Node: FR-V Built-in Functions2031426
70650Node: Argument Types2032289
70651Node: Directly-mapped Integer Functions2034120
70652Node: Directly-mapped Media Functions2035280
70653Node: Raw read/write Functions2043562
70654Node: Other Built-in Functions2044470
70655Node: MIPS DSP Built-in Functions2045656
70656Node: MIPS Paired-Single Support2058411
70657Node: MIPS Loongson Built-in Functions2059910
70658Node: Paired-Single Arithmetic2066432
70659Node: Paired-Single Built-in Functions2067455
70660Node: MIPS-3D Built-in Functions2070122
70661Node: MIPS SIMD Architecture (MSA) Support2075516
70662Node: MIPS SIMD Architecture Built-in Functions2078356
70663Node: Other MIPS Built-in Functions2105210
70664Node: MSP430 Built-in Functions2106219
70665Node: NDS32 Built-in Functions2107620
70666Node: picoChip Built-in Functions2108913
70667Node: Basic PowerPC Built-in Functions2110262
70668Node: Basic PowerPC Built-in Functions Available on all Configurations2111120
70669Node: Basic PowerPC Built-in Functions Available on ISA 2.052119630
70670Node: Basic PowerPC Built-in Functions Available on ISA 2.062124465
70671Node: Basic PowerPC Built-in Functions Available on ISA 2.072126545
70672Node: Basic PowerPC Built-in Functions Available on ISA 3.02127399
70673Node: Basic PowerPC Built-in Functions Available on ISA 3.12134377
70674Node: PowerPC AltiVec/VSX Built-in Functions2137542
70675Node: PowerPC AltiVec Built-in Functions on ISA 2.052145611
70676Node: PowerPC AltiVec Built-in Functions Available on ISA 2.062171011
70677Node: PowerPC AltiVec Built-in Functions Available on ISA 2.072178077
70678Node: PowerPC AltiVec Built-in Functions Available on ISA 3.02187887
70679Node: PowerPC AltiVec Built-in Functions Available on ISA 3.12203610
70680Node: PowerPC Hardware Transactional Memory Built-in Functions2236894
70681Node: PowerPC Atomic Memory Operation Functions2245444
70682Node: PowerPC Matrix-Multiply Assist Built-in Functions2248007
70683Node: PRU Built-in Functions2254132
70684Node: RISC-V Built-in Functions2255320
70685Node: RX Built-in Functions2255731
70686Node: S/390 System z Built-in Functions2259733
70687Node: SH Built-in Functions2264963
70688Node: SPARC VIS Built-in Functions2266691
70689Node: TI C6X Built-in Functions2275222
70690Node: TILE-Gx Built-in Functions2276273
70691Node: TILEPro Built-in Functions2277398
70692Node: x86 Built-in Functions2278506
70693Node: x86 transactional memory intrinsics2343856
70694Node: x86 control-flow protection intrinsics2347123
70695Node: Target Format Checks2348894
70696Node: Solaris Format Checks2349326
70697Node: Darwin Format Checks2349752
70698Node: Pragmas2350715
70699Node: AArch64 Pragmas2351656
70700Node: ARM Pragmas2352113
70701Node: M32C Pragmas2352740
70702Node: MeP Pragmas2353812
70703Node: PRU Pragmas2355864
70704Node: RS/6000 and PowerPC Pragmas2356442
70705Node: S/390 Pragmas2357182
70706Node: Darwin Pragmas2357748
70707Node: Solaris Pragmas2358801
70708Node: Symbol-Renaming Pragmas2359965
70709Node: Structure-Layout Pragmas2361602
70710Node: Weak Pragmas2363882
70711Node: Diagnostic Pragmas2364617
70712Node: Visibility Pragmas2369368
70713Node: Push/Pop Macro Pragmas2370053
70714Node: Function Specific Option Pragmas2371026
70715Node: Loop-Specific Pragmas2372992
70716Node: Unnamed Fields2374592
70717Node: Thread-Local2376789
70718Node: C99 Thread-Local Edits2378895
70719Node: C++98 Thread-Local Edits2380893
70720Node: Binary constants2384338
70721Node: C++ Extensions2385009
70722Node: C++ Volatiles2386639
70723Node: Restricted Pointers2388987
70724Node: Vague Linkage2390578
70725Node: C++ Interface2394201
70726Ref: C++ Interface-Footnote-12397998
70727Node: Template Instantiation2398136
70728Node: Bound member functions2404227
70729Node: C++ Attributes2405759
70730Node: Function Multiversioning2409831
70731Node: Type Traits2411639
70732Node: C++ Concepts2418610
70733Node: Deprecated Features2420116
70734Node: Backwards Compatibility2421941
70735Node: Objective-C2423013
70736Node: GNU Objective-C runtime API2423620
70737Node: Modern GNU Objective-C runtime API2424627
70738Node: Traditional GNU Objective-C runtime API2427063
70739Node: Executing code before main2427790
70740Node: What you can and what you cannot do in +load2430534
70741Node: Type encoding2432904
70742Node: Legacy type encoding2438270
70743Node: @encode2439360
70744Node: Method signatures2439905
70745Node: Garbage Collection2441897
70746Node: Constant string objects2444587
70747Node: compatibility_alias2447096
70748Node: Exceptions2447821
70749Node: Synchronization2450531
70750Node: Fast enumeration2451715
70751Node: Using fast enumeration2452027
70752Node: c99-like fast enumeration syntax2453238
70753Node: Fast enumeration details2453941
70754Node: Fast enumeration protocol2456281
70755Node: Messaging with the GNU Objective-C runtime2459433
70756Node: Dynamically registering methods2460805
70757Node: Forwarding hook2462496
70758Node: Compatibility2465536
70759Node: Gcov2472092
70760Node: Gcov Intro2472627
70761Node: Invoking Gcov2475345
70762Node: Gcov and Optimization2498078
70763Node: Gcov Data Files2501831
70764Node: Cross-profiling2503240
70765Node: Gcov-tool2505094
70766Node: Gcov-tool Intro2505519
70767Node: Invoking Gcov-tool2507489
70768Node: Gcov-dump2510067
70769Node: Gcov-dump Intro2510390
70770Node: Invoking Gcov-dump2510657
70771Node: lto-dump2511314
70772Node: lto-dump Intro2511613
70773Node: Invoking lto-dump2511863
70774Node: Trouble2512959
70775Node: Actual Bugs2514376
70776Node: Interoperation2514823
70777Node: Incompatibilities2521714
70778Node: Fixed Headers2529866
70779Node: Standard Libraries2531524
70780Node: Disappointments2532896
70781Node: C++ Misunderstandings2537255
70782Node: Static Definitions2538066
70783Node: Name lookup2539119
70784Ref: Name lookup-Footnote-12543900
70785Node: Temporaries2544089
70786Node: Copy Assignment2546065
70787Node: Non-bugs2547900
70788Node: Warnings and Errors2558406
70789Node: Bugs2560168
70790Node: Bug Criteria2560635
70791Node: Bug Reporting2562845
70792Node: Service2563063
70793Node: Contributing2563884
70794Node: Funding2564630
70795Node: GNU Project2567120
70796Node: Copying2567768
70797Node: GNU Free Documentation License2605279
70798Node: Contributors2630399
70799Node: Option Index2671373
70800Node: Keyword Index2970472
70801
70802End Tag Table
70803